aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsnermolaev <snermolaev@yandex-team.com>2022-09-07 12:08:12 +0300
committersnermolaev <snermolaev@yandex-team.com>2022-09-07 12:08:12 +0300
commit3cf51f8b9f88a4dc753d34da52f735f68a922826 (patch)
treef34b4d810330ee8a85ffb25b2794f49b8897edef
parent3187d8a424b58ab2c83831abec061ad5ac3f3e64 (diff)
downloadydb-3cf51f8b9f88a4dc753d34da52f735f68a922826.tar.gz
enable vcsPath for yfm docs
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/append.hpp370
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/area.hpp363
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/assign.hpp379
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/buffer.hpp302
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/centroid.hpp681
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/clear.hpp197
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/comparable_distance.hpp25
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/convert.hpp581
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/convex_hull.hpp375
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/correct.hpp360
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/correct_closure.hpp235
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/covered_by.hpp27
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/crosses.hpp267
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/densify.hpp425
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/as_range.hpp105
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/assign_box_corners.hpp107
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/assign_indexed_point.hpp94
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/assign_values.hpp336
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/azimuth.hpp152
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp1051
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp245
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp1599
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffered_ring.hpp282
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp312
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp88
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/parallel_continue.hpp33
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/turn_in_original_visitor.hpp277
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp823
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/calculate_null.hpp38
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/calculate_sum.hpp62
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/centroid/translating_transformer.hpp119
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/check_iterator_range.hpp71
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/closest_feature/geometry_to_range.hpp145
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/closest_feature/point_to_range.hpp250
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/closest_feature/range_to_range.hpp196
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/comparable_distance/implementation.hpp24
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/comparable_distance/interface.hpp363
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp80
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/convert_point_to_point.hpp68
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/counting.hpp107
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/course.hpp40
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/covered_by/implementation.hpp280
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/covered_by/interface.hpp261
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/direction_code.hpp255
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/areal_areal.hpp180
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/box_box.hpp184
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/implementation.hpp37
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/interface.hpp246
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/linear_areal.hpp301
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp191
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp171
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/multipoint_geometry.hpp532
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/multirange_geometry.hpp94
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/point_box.hpp83
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/point_geometry.hpp89
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/point_point.hpp247
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/segment_box.hpp231
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/backward_compatibility.hpp333
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/box_to_box.hpp60
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/default_strategies.hpp137
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/geometry_to_segment_or_box.hpp464
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/implementation.hpp35
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/interface.hpp403
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/is_comparable.hpp45
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/iterator_selector.hpp70
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/linear_or_areal_to_areal.hpp147
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/linear_to_linear.hpp123
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/multipoint_to_geometry.hpp240
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/point_to_geometry.hpp518
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/range_to_geometry_rtree.hpp130
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/segment_to_box.hpp892
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/distance/segment_to_segment.hpp152
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/box.hpp179
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/implementation.hpp107
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/initialize.hpp86
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/interface.hpp224
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/intersects_antimeridian.hpp78
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/linear.hpp114
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/multipoint.hpp378
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/point.hpp135
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/range.hpp187
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/range_of_boxes.hpp334
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/segment.hpp499
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/transform_units.hpp103
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp575
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/equals/implementation.hpp397
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/equals/interface.hpp317
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/equals/point_point.hpp52
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/expand/box.hpp136
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/expand/implementation.hpp27
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/expand/indexed.hpp123
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/expand/interface.hpp199
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/expand/point.hpp292
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/expand/segment.hpp143
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/expand_by_epsilon.hpp113
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/extreme_points.hpp561
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/for_each_range.hpp201
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/get_left_turns.hpp318
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/get_max_size.hpp64
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp168
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/interior_iterator.hpp71
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/box_box.hpp54
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/implementation.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/interface.hpp398
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/multi.hpp421
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/intersects/implementation.hpp89
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/intersects/interface.hpp115
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/always_simple.hpp85
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/areal.hpp157
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp113
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/failure_policy.hpp53
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/implementation.hpp18
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/interface.hpp141
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/linear.hpp364
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/multipoint.hpp91
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/box.hpp115
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp239
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp70
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp78
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp68
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp80
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp151
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp174
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp121
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/implementation.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/interface.hpp272
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp161
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/linear.hpp186
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp402
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/pointlike.hpp92
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/polygon.hpp531
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/ring.hpp237
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/segment.hpp83
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/max_interval_gap.hpp278
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/multi_modify.hpp69
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp52
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/multi_sum.hpp52
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/normalize.hpp315
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/not.hpp66
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp93
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/occupation_info.hpp219
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlaps/implementation.hpp156
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlaps/interface.hpp124
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/add_rings.hpp195
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp53
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp201
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp420
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp215
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp168
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp250
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/cluster_info.hpp46
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/convert_ring.hpp110
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp400
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp383
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp66
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/do_reverse.hpp47
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp550
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp84
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/follow.hpp528
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp557
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp165
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp103
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp123
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp1143
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp667
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp388
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp893
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp759
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp1055
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/handle_colocations.hpp861
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/handle_self_turns.hpp223
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/inconsistent_turns_exception.hpp38
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp96
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp1353
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/is_self_turn.hpp72
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp204
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/linear_linear.hpp344
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/needs_self_turns.hpp83
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp436
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/overlay_type.hpp85
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp393
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp440
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/range_in_geometry.hpp178
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/ring_properties.hpp82
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/segment_identifier.hpp102
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp373
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp364
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/sort_by_side.hpp645
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp74
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal.hpp984
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp53
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp419
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp668
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp114
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp159
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp98
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/partition.hpp852
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp189
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/point_on_border.hpp319
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/recalculate.hpp234
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/areal_areal.hpp878
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/boundary_checker.hpp160
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/de9im.hpp439
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/follow_helpers.hpp404
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/implementation.hpp124
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/interface.hpp421
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/linear_areal.hpp1468
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/linear_linear.hpp793
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp568
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/point_geometry.hpp206
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/point_point.hpp268
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/relate_impl.hpp81
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/result.hpp1296
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/topology_check.hpp344
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relate/turns.hpp307
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relation/implementation.hpp18
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/relation/interface.hpp219
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/ring_identifier.hpp85
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp193
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/sections/section_box_policies.hpp49
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/sections/section_functions.hpp158
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp999
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/signed_size_type.hpp28
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/single_geometry.hpp94
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/sub_range.hpp129
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/sweep.hpp87
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/throw_on_empty_input.hpp69
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/touches/implementation.hpp461
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/touches/interface.hpp321
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/turns/compare_turns.hpp117
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/turns/debug_turn.hpp65
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp78
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/turns/print_turns.hpp105
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp62
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/within/implementation.hpp306
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/within/interface.hpp304
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/within/multi_point.hpp269
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/within/point_in_geometry.hpp391
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/detail/within/within_no_turns.hpp221
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/difference.hpp406
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/disjoint.hpp27
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/dispatch/disjoint.hpp93
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/dispatch/distance.hpp82
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/dispatch/envelope.hpp49
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/dispatch/expand.hpp57
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/dispatch/is_simple.hpp38
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/dispatch/is_valid.hpp44
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/distance.hpp26
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/envelope.hpp25
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/equals.hpp30
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/expand.hpp26
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/for_each.hpp373
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/intersection.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/intersects.hpp28
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/is_convex.hpp224
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/is_empty.hpp207
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/is_simple.hpp16
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/is_valid.hpp16
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/length.hpp318
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/make.hpp200
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/not_implemented.hpp131
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/num_geometries.hpp141
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/num_interior_rings.hpp142
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/num_points.hpp211
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/num_segments.hpp204
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/overlaps.hpp27
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/perimeter.hpp229
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/point_on_surface.hpp365
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/relate.hpp17
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/relation.hpp17
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/remove_spikes.hpp323
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/reverse.hpp186
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/simplify.hpp690
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/sym_difference.hpp582
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/touches.hpp28
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/transform.hpp480
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/union.hpp537
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/unique.hpp184
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/validity_failure_type.hpp90
-rw-r--r--contrib/restricted/boost/boost/geometry/algorithms/within.hpp27
-rw-r--r--contrib/restricted/boost/boost/geometry/arithmetic/arithmetic.hpp335
-rw-r--r--contrib/restricted/boost/boost/geometry/arithmetic/cross_product.hpp128
-rw-r--r--contrib/restricted/boost/boost/geometry/arithmetic/determinant.hpp78
-rw-r--r--contrib/restricted/boost/boost/geometry/arithmetic/dot_product.hpp84
-rw-r--r--contrib/restricted/boost/boost/geometry/arithmetic/normalize.hpp71
-rw-r--r--contrib/restricted/boost/boost/geometry/core/access.hpp399
-rw-r--r--contrib/restricted/boost/boost/geometry/core/assert.hpp43
-rw-r--r--contrib/restricted/boost/boost/geometry/core/closure.hpp202
-rw-r--r--contrib/restricted/boost/boost/geometry/core/coordinate_dimension.hpp127
-rw-r--r--contrib/restricted/boost/boost/geometry/core/coordinate_system.hpp100
-rw-r--r--contrib/restricted/boost/boost/geometry/core/coordinate_type.hpp108
-rw-r--r--contrib/restricted/boost/boost/geometry/core/cs.hpp269
-rw-r--r--contrib/restricted/boost/boost/geometry/core/exception.hpp108
-rw-r--r--contrib/restricted/boost/boost/geometry/core/exterior_ring.hpp145
-rw-r--r--contrib/restricted/boost/boost/geometry/core/geometry_id.hpp103
-rw-r--r--contrib/restricted/boost/boost/geometry/core/interior_rings.hpp150
-rw-r--r--contrib/restricted/boost/boost/geometry/core/interior_type.hpp164
-rw-r--r--contrib/restricted/boost/boost/geometry/core/is_areal.hpp59
-rw-r--r--contrib/restricted/boost/boost/geometry/core/mutable_range.hpp98
-rw-r--r--contrib/restricted/boost/boost/geometry/core/point_order.hpp187
-rw-r--r--contrib/restricted/boost/boost/geometry/core/point_type.hpp162
-rw-r--r--contrib/restricted/boost/boost/geometry/core/radian_access.hpp263
-rw-r--r--contrib/restricted/boost/boost/geometry/core/radius.hpp251
-rw-r--r--contrib/restricted/boost/boost/geometry/core/reverse_dispatch.hpp66
-rw-r--r--contrib/restricted/boost/boost/geometry/core/ring_type.hpp226
-rw-r--r--contrib/restricted/boost/boost/geometry/core/tag.hpp69
-rw-r--r--contrib/restricted/boost/boost/geometry/core/tag_cast.hpp84
-rw-r--r--contrib/restricted/boost/boost/geometry/core/tags.hpp150
-rw-r--r--contrib/restricted/boost/boost/geometry/core/topological_dimension.hpp101
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/andoyer_inverse.hpp282
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/area_formulas.hpp573
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/authalic_radius_sqr.hpp96
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/differential_quantities.hpp303
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/eccentricity_sqr.hpp70
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/elliptic_arc_length.hpp234
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/flattening.hpp70
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/geographic.hpp458
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/gnomonic_intersection.hpp148
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/gnomonic_spheroid.hpp125
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/mean_radius.hpp71
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/result_direct.hpp39
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/result_inverse.hpp39
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/sjoberg_intersection.hpp1265
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/spherical.hpp224
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/thomas_direct.hpp248
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/thomas_inverse.hpp220
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/unit_spheroid.hpp43
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/vertex_latitude.hpp150
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/vertex_longitude.hpp337
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/vincenty_direct.hpp183
-rw-r--r--contrib/restricted/boost/boost/geometry/formulas/vincenty_inverse.hpp226
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_array.hpp120
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_fusion.hpp178
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon.hpp18
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/box.hpp141
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp83
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp204
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/point.hpp102
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/polygon.hpp111
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp182
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp301
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp40
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/filtered.hpp40
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/reversed.hpp40
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/sliced.hpp36
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/strided.hpp36
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/uniqued.hpp40
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/boost_tuple.hpp109
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/c_array.hpp111
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/std_array.hpp115
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/adapted/std_pair_as_segment.hpp98
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/box.hpp191
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/concepts/box_concept.hpp136
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/concepts/check.hpp243
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/concepts/linestring_concept.hpp125
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/concepts/multi_linestring_concept.hpp91
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/concepts/multi_point_concept.hpp90
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/concepts/multi_polygon_concept.hpp91
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/concepts/point_concept.hpp192
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/concepts/polygon_concept.hpp135
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/concepts/ring_concept.hpp99
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/concepts/segment_concept.hpp135
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/geometries.hpp29
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/helper_geometry.hpp173
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/linestring.hpp123
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/multi_linestring.hpp119
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/multi_point.hpp123
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/multi_polygon.hpp117
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/point.hpp303
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/point_xy.hpp134
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/pointing_segment.hpp142
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/polygon.hpp367
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/register/box.hpp179
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/register/linestring.hpp60
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/register/multi_linestring.hpp59
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/register/multi_point.hpp59
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/register/multi_polygon.hpp59
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/register/point.hpp173
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/register/ring.hpp60
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/register/segment.hpp129
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/ring.hpp181
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/segment.hpp224
-rw-r--r--contrib/restricted/boost/boost/geometry/geometries/variant.hpp39
-rw-r--r--contrib/restricted/boost/boost/geometry/geometry.hpp119
-rw-r--r--contrib/restricted/boost/boost/geometry/index/adaptors/query.hpp88
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/bounds.hpp90
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp77
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/comparable_distance_far.hpp66
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/comparable_distance_near.hpp77
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/content.hpp87
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/diff_abs.hpp39
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/intersection_content.hpp46
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/is_valid.hpp91
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/margin.hpp169
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/minmaxdist.hpp119
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/nth_element.hpp62
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/path_intersection.hpp123
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/segment_intersection.hpp146
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/smallest_for_indexable.hpp80
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/sum_for_indexable.hpp76
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/algorithms/union_content.hpp33
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/assert.hpp19
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/bounded_view.hpp215
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/config_begin.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/config_end.hpp12
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/distance_predicates.hpp161
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/exception.hpp87
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/is_bounding_geometry.hpp35
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/is_indexable.hpp47
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/meta.hpp42
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/predicates.hpp831
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/adaptors.hpp54
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/iterators.hpp122
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/kmeans/kmeans.hpp16
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/kmeans/split.hpp87
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/linear/linear.hpp16
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp446
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/node/concept.hpp85
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/node/node.hpp212
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/node/node_elements.hpp110
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/node/pairs.hpp71
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/node/scoped_deallocator.hpp51
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/node/subtree_destroyer.hpp79
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/node/variant_dynamic.hpp296
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/node/variant_static.hpp161
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/node/variant_visitor.hpp68
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/node/weak_dynamic.hpp322
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/node/weak_static.hpp173
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/node/weak_visitor.hpp67
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/options.hpp155
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/pack_create.hpp472
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/quadratic/quadratic.hpp16
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp295
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/query_iterators.hpp387
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/choose_next_node.hpp234
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/insert.hpp591
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp470
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/rstar.hpp18
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp128
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/are_counts_ok.hpp110
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/are_levels_ok.hpp109
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/gl_draw.hpp243
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/print.hpp219
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/statistics.hpp105
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/view.hpp61
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/children_box.hpp55
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/copy.hpp92
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/count.hpp107
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/destroy.hpp71
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/distance_query.hpp588
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/insert.hpp573
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/is_leaf.hpp45
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/iterator.hpp134
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/remove.hpp344
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp214
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/serialization.hpp585
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/tags.hpp25
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/translator.hpp60
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/tuples.hpp204
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/utilities.hpp46
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/varray.hpp2199
-rw-r--r--contrib/restricted/boost/boost/geometry/index/detail/varray_detail.hpp760
-rw-r--r--contrib/restricted/boost/boost/geometry/index/distance_predicates.hpp204
-rw-r--r--contrib/restricted/boost/boost/geometry/index/equal_to.hpp267
-rw-r--r--contrib/restricted/boost/boost/geometry/index/indexable.hpp197
-rw-r--r--contrib/restricted/boost/boost/geometry/index/inserter.hpp83
-rw-r--r--contrib/restricted/boost/boost/geometry/index/parameters.hpp258
-rw-r--r--contrib/restricted/boost/boost/geometry/index/predicates.hpp429
-rw-r--r--contrib/restricted/boost/boost/geometry/index/rtree.hpp2227
-rw-r--r--contrib/restricted/boost/boost/geometry/io/dsv/write.hpp431
-rw-r--r--contrib/restricted/boost/boost/geometry/io/io.hpp58
-rw-r--r--contrib/restricted/boost/boost/geometry/io/svg/svg_mapper.hpp450
-rw-r--r--contrib/restricted/boost/boost/geometry/io/svg/write.hpp418
-rw-r--r--contrib/restricted/boost/boost/geometry/io/svg/write_svg.hpp28
-rw-r--r--contrib/restricted/boost/boost/geometry/io/svg/write_svg_multi.hpp27
-rw-r--r--contrib/restricted/boost/boost/geometry/io/wkt/detail/prefix.hpp66
-rw-r--r--contrib/restricted/boost/boost/geometry/io/wkt/detail/wkt_multi.hpp56
-rw-r--r--contrib/restricted/boost/boost/geometry/io/wkt/read.hpp907
-rw-r--r--contrib/restricted/boost/boost/geometry/io/wkt/stream.hpp38
-rw-r--r--contrib/restricted/boost/boost/geometry/io/wkt/wkt.hpp25
-rw-r--r--contrib/restricted/boost/boost/geometry/io/wkt/write.hpp546
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/base.hpp69
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/closing_iterator.hpp147
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/concatenate_iterator.hpp152
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/detail/point_iterator/inner_range_type.hpp66
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/detail/point_iterator/iterator_type.hpp136
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/detail/point_iterator/value_type.hpp47
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/detail/segment_iterator/iterator_type.hpp153
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp214
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/detail/segment_iterator/value_type.hpp71
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/dispatch/point_iterator.hpp47
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/dispatch/segment_iterator.hpp47
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/ever_circling_iterator.hpp202
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/flatten_iterator.hpp230
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/has_one_element.hpp29
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/point_iterator.hpp308
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/point_reverse_iterator.hpp89
-rw-r--r--contrib/restricted/boost/boost/geometry/iterators/segment_iterator.hpp353
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/append.hpp27
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/area.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/centroid.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/clear.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/convert.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/correct.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/covered_by.hpp27
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/extreme_points.hpp19
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/modify.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp19
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp16
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp16
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp16
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp16
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp24
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp26
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp24
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/disjoint.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/distance.hpp27
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/envelope.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/equals.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/for_each.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/intersection.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/length.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/num_geometries.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp26
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/num_points.hpp27
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/perimeter.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/remove_spikes.hpp19
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/reverse.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/simplify.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/transform.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/unique.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/algorithms/within.hpp25
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/core/closure.hpp19
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/core/geometry_id.hpp20
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/core/interior_rings.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/core/is_areal.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/core/point_order.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/core/point_type.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/core/ring_type.hpp25
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/core/tags.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/core/topological_dimension.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/geometries/concepts/check.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/geometries/multi_geometries.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/geometries/multi_linestring.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/geometries/multi_point.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/geometries/multi_polygon.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/geometries/register/multi_point.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp22
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/io/dsv/write.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/io/wkt/detail/prefix.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/io/wkt/read.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/io/wkt/wkt.hpp20
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/io/wkt/write.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/multi.hpp24
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/multi/views/detail/range_type.hpp21
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/compare.hpp182
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/disjoint_interrupt_policy.hpp67
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/is_valid/default_policy.hpp59
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/is_valid/failing_reason_policy.hpp224
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/is_valid/failure_type_policy.hpp83
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/predicate_based_interrupt_policy.hpp101
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/relate/direction.hpp391
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/relate/intersection_points.hpp193
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/relate/intersection_ratios.hpp127
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/relate/tupled.hpp116
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/robustness/get_rescale_policy.hpp341
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/robustness/no_rescale_policy.hpp66
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/robustness/rescale_policy.hpp88
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/robustness/robust_point_type.hpp30
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/robustness/robust_type.hpp67
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/robustness/segment_ratio.hpp267
-rw-r--r--contrib/restricted/boost/boost/geometry/policies/robustness/segment_ratio_type.hpp28
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/epsg.hpp82
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/esri.hpp82
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/iau2000.hpp82
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projection.hpp591
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/code.hpp56
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/epsg.hpp4409
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/epsg_params.hpp48
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/epsg_traits.hpp4417
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/esri.hpp491
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/esri_params.hpp48
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/esri_traits.hpp499
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/exception.hpp97
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/factory.hpp282
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/iau2000.hpp2424
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/iau2000_params.hpp48
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/iau2000_traits.hpp2432
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/aasincos.hpp114
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/adjlon.hpp70
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/base_dynamic.hpp151
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/base_static.hpp139
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/dms_parser.hpp278
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/factory_entry.hpp51
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/function_overloads.hpp46
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/geocent.hpp487
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_auth.hpp95
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_datum_set.hpp213
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_datums.hpp112
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_ell_set.hpp205
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_ellps.hpp98
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_fwd.hpp101
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_gauss.hpp142
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_init.hpp395
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_inv.hpp82
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_mlfn.hpp121
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_msfn.hpp59
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_param.hpp161
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_phi2.hpp73
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_qsfn.hpp95
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_strerrno.hpp144
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_transform.hpp1009
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_tsfn.hpp58
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_units.hpp79
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_zpoly1.hpp106
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/proj_mdist.hpp144
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/impl/projects.hpp272
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/invalid_point.hpp38
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/par4.hpp501
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/aea.hpp349
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/aeqd.hpp654
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/airy.hpp257
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/aitoff.hpp324
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/august.hpp168
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/bacon.hpp272
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/bipc.hpp297
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/boggs.hpp185
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/bonne.hpp298
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/cass.hpp292
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/cc.hpp171
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/cea.hpp269
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/chamb.hpp288
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/collg.hpp183
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/crast.hpp175
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/denoy.hpp174
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/eck1.hpp167
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/eck2.hpp184
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/eck3.hpp321
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/eck4.hpp195
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/eck5.hpp168
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/eqc.hpp175
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/eqdc.hpp250
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/etmerc.hpp395
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/fahey.hpp168
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/fouc_s.hpp201
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/gall.hpp169
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/geocent.hpp169
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/geos.hpp377
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/gins8.hpp170
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/gn_sinu.hpp426
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/gnom.hpp266
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/goode.hpp187
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/gstmerc.hpp202
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/hammer.hpp201
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/hatano.hpp211
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/healpix.hpp897
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/igh.hpp377
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/imw_p.hpp320
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/isea.hpp1311
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/krovak.hpp360
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/labrd.hpp269
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/laea.hpp447
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/lagrng.hpp195
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/larr.hpp164
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/lask.hpp173
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/latlong.hpp292
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/lcc.hpp282
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/lcca.hpp231
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/loxim.hpp205
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/lsat.hpp341
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/mbt_fps.hpp194
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/mbtfpp.hpp199
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/mbtfpq.hpp208
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/merc.hpp267
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/mill.hpp167
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/mod_ster.hpp522
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/moll.hpp294
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/natearth.hpp228
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/nell.hpp180
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/nell_h.hpp184
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/nocol.hpp190
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/nsper.hpp355
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/nzmg.hpp255
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/ob_tran.hpp575
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/ocea.hpp231
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/oea.hpp214
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/omerc.hpp354
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/ortho.hpp257
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/poly.hpp311
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/putp2.hpp193
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/putp3.hpp227
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/putp4p.hpp231
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/putp5.hpp229
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/putp6.hpp255
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/qsc.hpp539
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/robin.hpp298
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/rouss.hpp241
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/rpoly.hpp187
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/sconics.hpp570
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/somerc.hpp227
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/stere.hpp545
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/sterea.hpp210
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/sts.hpp325
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/tcc.hpp163
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/tcea.hpp176
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/tmerc.hpp495
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/tpeqd.hpp235
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/urm5.hpp185
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/urmfps.hpp235
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/vandg.hpp257
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/vandg2.hpp237
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/vandg4.hpp194
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/wag2.hpp172
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/wag3.hpp180
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/wag7.hpp161
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/wink1.hpp174
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj/wink2.hpp195
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/proj4.hpp123
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/projections/srid_traits.hpp101
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/sphere.hpp117
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/spheroid.hpp121
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/srs.hpp29
-rw-r--r--contrib/restricted/boost/boost/geometry/srs/transformation.hpp627
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp114
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp107
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp390
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp103
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_point.hpp85
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp208
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp134
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp321
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/area.hpp92
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/area_result.hpp116
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/azimuth.hpp44
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/buffer.hpp103
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/area.hpp146
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/area_surveyor.hpp29
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/azimuth.hpp49
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/box_in_box.hpp311
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_end_flat.hpp112
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_end_round.hpp178
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_join_miter.hpp142
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_join_round.hpp187
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp154
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_point_circle.hpp115
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_point_square.hpp109
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_side_straight.hpp136
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/centroid_average.hpp128
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp258
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp174
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/densify.hpp133
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/disjoint_segment_box.hpp319
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp278
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp314
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp288
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp338
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp349
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/envelope_segment.hpp72
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/intersection.hpp751
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_box.hpp295
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp124
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp118
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_poly_winding.hpp296
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp282
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/cartesian/side_of_intersection.hpp353
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/centroid.hpp72
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/comparable_distance_result.hpp196
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/compare.hpp226
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/concepts/area_concept.hpp73
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/concepts/centroid_concept.hpp78
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp80
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/concepts/distance_concept.hpp212
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/concepts/segment_intersect_concept.hpp78
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/concepts/simplify_concept.hpp96
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/concepts/within_concept.hpp291
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/convex_hull.hpp47
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/covered_by.hpp99
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/default_area_result.hpp41
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/default_comparable_distance_result.hpp43
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/default_distance_result.hpp43
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/default_length_result.hpp89
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/default_strategy.hpp34
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/densify.hpp42
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/disjoint.hpp93
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/distance.hpp110
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/distance_result.hpp213
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/envelope.hpp45
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/area.hpp231
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/azimuth.hpp121
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/densify.hpp136
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/disjoint_segment_box.hpp130
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/distance.hpp250
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/distance_andoyer.hpp128
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/distance_cross_track.hpp700
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/distance_cross_track_box_box.hpp207
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/distance_cross_track_point_box.hpp218
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/distance_thomas.hpp121
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/distance_vincenty.hpp127
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/envelope_segment.hpp106
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/intersection.hpp952
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/intersection_elliptic.hpp243
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/mapping_ssf.hpp185
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/parameters.hpp168
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/point_in_poly_winding.hpp80
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/side.hpp145
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/side_andoyer.hpp60
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/side_thomas.hpp60
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/geographic/side_vincenty.hpp60
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/intersection.hpp51
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/intersection_result.hpp78
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/intersection_strategies.hpp101
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/relate.hpp177
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/side.hpp55
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/side_info.hpp177
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/area.hpp195
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/azimuth.hpp105
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/compare.hpp321
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/densify.hpp189
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/disjoint_segment_box.hpp105
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp802
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/distance_cross_track_box_box.hpp440
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp384
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/distance_haversine.hpp354
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/envelope_segment.hpp86
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/get_radius.hpp81
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/intersection.hpp1042
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/point_in_poly_winding.hpp584
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp89
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/spherical/ssf.hpp157
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/strategies.hpp123
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/strategy_transform.hpp527
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/tags.hpp43
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/transform.hpp63
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/transform/inverse_transformer.hpp57
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/transform/map_transformer.hpp172
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/transform/matrix_transformers.hpp399
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/transform/srs_transformer.hpp102
-rw-r--r--contrib/restricted/boost/boost/geometry/strategies/within.hpp98
-rw-r--r--contrib/restricted/boost/boost/geometry/util/add_const_if_c.hpp56
-rw-r--r--contrib/restricted/boost/boost/geometry/util/bare_type.hpp52
-rw-r--r--contrib/restricted/boost/boost/geometry/util/calculation_type.hpp178
-rw-r--r--contrib/restricted/boost/boost/geometry/util/closure_as_bool.hpp46
-rw-r--r--contrib/restricted/boost/boost/geometry/util/combine_if.hpp92
-rw-r--r--contrib/restricted/boost/boost/geometry/util/compress_variant.hpp106
-rw-r--r--contrib/restricted/boost/boost/geometry/util/condition.hpp44
-rw-r--r--contrib/restricted/boost/boost/geometry/util/coordinate_cast.hpp55
-rw-r--r--contrib/restricted/boost/boost/geometry/util/for_each_coordinate.hpp94
-rw-r--r--contrib/restricted/boost/boost/geometry/util/has_infinite_coordinate.hpp55
-rw-r--r--contrib/restricted/boost/boost/geometry/util/has_nan_coordinate.hpp99
-rw-r--r--contrib/restricted/boost/boost/geometry/util/has_non_finite_coordinate.hpp55
-rw-r--r--contrib/restricted/boost/boost/geometry/util/math.hpp779
-rw-r--r--contrib/restricted/boost/boost/geometry/util/normalize_spheroidal_box_coordinates.hpp196
-rw-r--r--contrib/restricted/boost/boost/geometry/util/normalize_spheroidal_coordinates.hpp457
-rw-r--r--contrib/restricted/boost/boost/geometry/util/order_as_direction.hpp46
-rw-r--r--contrib/restricted/boost/boost/geometry/util/parameter_type_of.hpp75
-rw-r--r--contrib/restricted/boost/boost/geometry/util/promote_floating_point.hpp50
-rw-r--r--contrib/restricted/boost/boost/geometry/util/promote_integral.hpp318
-rw-r--r--contrib/restricted/boost/boost/geometry/util/range.hpp423
-rw-r--r--contrib/restricted/boost/boost/geometry/util/rational.hpp179
-rw-r--r--contrib/restricted/boost/boost/geometry/util/select_calculation_type.hpp84
-rw-r--r--contrib/restricted/boost/boost/geometry/util/select_coordinate_type.hpp69
-rw-r--r--contrib/restricted/boost/boost/geometry/util/select_most_precise.hpp182
-rw-r--r--contrib/restricted/boost/boost/geometry/util/select_sequence_element.hpp78
-rw-r--r--contrib/restricted/boost/boost/geometry/util/transform_variant.hpp84
-rw-r--r--contrib/restricted/boost/boost/geometry/views/box_view.hpp118
-rw-r--r--contrib/restricted/boost/boost/geometry/views/closeable_view.hpp109
-rw-r--r--contrib/restricted/boost/boost/geometry/views/detail/boundary_view.hpp16
-rw-r--r--contrib/restricted/boost/boost/geometry/views/detail/boundary_view/implementation.hpp465
-rw-r--r--contrib/restricted/boost/boost/geometry/views/detail/boundary_view/interface.hpp70
-rw-r--r--contrib/restricted/boost/boost/geometry/views/detail/indexed_point_view.hpp123
-rw-r--r--contrib/restricted/boost/boost/geometry/views/detail/normalized_view.hpp117
-rw-r--r--contrib/restricted/boost/boost/geometry/views/detail/points_view.hpp141
-rw-r--r--contrib/restricted/boost/boost/geometry/views/detail/range_type.hpp134
-rw-r--r--contrib/restricted/boost/boost/geometry/views/detail/two_dimensional_view.hpp196
-rw-r--r--contrib/restricted/boost/boost/geometry/views/identity_view.hpp61
-rw-r--r--contrib/restricted/boost/boost/geometry/views/reversible_view.hpp74
-rw-r--r--contrib/restricted/boost/boost/geometry/views/segment_view.hpp100
-rw-r--r--contrib/restricted/boost/geometry/README.md26
-rw-r--r--contrib/restricted/boost/geometry/include/boost/geometry/util/readme.txt (renamed from contrib/restricted/boost/boost/geometry.hpp)8
887 files changed, 29 insertions, 193644 deletions
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/append.hpp b/contrib/restricted/boost/boost/geometry/algorithms/append.hpp
deleted file mode 100644
index 5cfad0c520f..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/append.hpp
+++ /dev/null
@@ -1,370 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_APPEND_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_APPEND_HPP
-
-
-#include <boost/range.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
-#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/geometries/variant.hpp>
-#include <boost/geometry/util/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace append
-{
-
-template <typename Geometry, typename Point>
-struct append_no_action
-{
- static inline void apply(Geometry& , Point const& ,
- int = 0, int = 0)
- {
- }
-};
-
-template <typename Geometry, typename Point>
-struct append_point
-{
- static inline void apply(Geometry& geometry, Point const& point,
- int = 0, int = 0)
- {
- typename geometry::point_type<Geometry>::type copy;
- geometry::detail::conversion::convert_point_to_point(point, copy);
- traits::push_back<Geometry>::apply(geometry, copy);
- }
-};
-
-
-template <typename Geometry, typename Range>
-struct append_range
-{
- typedef typename boost::range_value<Range>::type point_type;
-
- static inline void apply(Geometry& geometry, Range const& range,
- int = 0, int = 0)
- {
- for (typename boost::range_iterator<Range const>::type
- it = boost::begin(range);
- it != boost::end(range);
- ++it)
- {
- append_point<Geometry, point_type>::apply(geometry, *it);
- }
- }
-};
-
-
-template <typename Polygon, typename Point>
-struct point_to_polygon
-{
- typedef typename ring_type<Polygon>::type ring_type;
-
- static inline void apply(Polygon& polygon, Point const& point,
- int ring_index, int = 0)
- {
- if (ring_index == -1)
- {
- append_point<ring_type, Point>::apply(
- exterior_ring(polygon), point);
- }
- else if (ring_index < int(num_interior_rings(polygon)))
- {
- append_point<ring_type, Point>::apply(
- range::at(interior_rings(polygon), ring_index), point);
- }
- }
-};
-
-
-template <typename Polygon, typename Range>
-struct range_to_polygon
-{
- typedef typename ring_type<Polygon>::type ring_type;
-
- static inline void apply(Polygon& polygon, Range const& range,
- int ring_index, int = 0)
- {
- if (ring_index == -1)
- {
- append_range<ring_type, Range>::apply(
- exterior_ring(polygon), range);
- }
- else if (ring_index < int(num_interior_rings(polygon)))
- {
- append_range<ring_type, Range>::apply(
- range::at(interior_rings(polygon), ring_index), range);
- }
- }
-};
-
-
-}} // namespace detail::append
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-namespace splitted_dispatch
-{
-
-template <typename Tag, typename Geometry, typename Point>
-struct append_point
- : detail::append::append_no_action<Geometry, Point>
-{};
-
-template <typename Geometry, typename Point>
-struct append_point<linestring_tag, Geometry, Point>
- : detail::append::append_point<Geometry, Point>
-{};
-
-template <typename Geometry, typename Point>
-struct append_point<ring_tag, Geometry, Point>
- : detail::append::append_point<Geometry, Point>
-{};
-
-
-template <typename Polygon, typename Point>
-struct append_point<polygon_tag, Polygon, Point>
- : detail::append::point_to_polygon<Polygon, Point>
-{};
-
-
-template <typename Tag, typename Geometry, typename Range>
-struct append_range
- : detail::append::append_no_action<Geometry, Range>
-{};
-
-template <typename Geometry, typename Range>
-struct append_range<linestring_tag, Geometry, Range>
- : detail::append::append_range<Geometry, Range>
-{};
-
-template <typename Geometry, typename Range>
-struct append_range<ring_tag, Geometry, Range>
- : detail::append::append_range<Geometry, Range>
-{};
-
-
-template <typename Polygon, typename Range>
-struct append_range<polygon_tag, Polygon, Range>
- : detail::append::range_to_polygon<Polygon, Range>
-{};
-
-} // namespace splitted_dispatch
-
-
-// Default: append a range (or linestring or ring or whatever) to any geometry
-template
-<
- typename Geometry, typename RangeOrPoint,
- typename TagRangeOrPoint = typename tag<RangeOrPoint>::type
->
-struct append
- : splitted_dispatch::append_range<typename tag<Geometry>::type, Geometry, RangeOrPoint>
-{};
-
-// Specialization for point to append a point to any geometry
-template <typename Geometry, typename RangeOrPoint>
-struct append<Geometry, RangeOrPoint, point_tag>
- : splitted_dispatch::append_point<typename tag<Geometry>::type, Geometry, RangeOrPoint>
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace append
-{
-
-template <typename MultiGeometry, typename RangeOrPoint>
-struct append_to_multigeometry
-{
- static inline void apply(MultiGeometry& multigeometry,
- RangeOrPoint const& range_or_point,
- int ring_index, int multi_index)
- {
-
- dispatch::append
- <
- typename boost::range_value<MultiGeometry>::type,
- RangeOrPoint
- >::apply(range::at(multigeometry, multi_index), range_or_point, ring_index);
- }
-};
-
-}} // namespace detail::append
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-namespace splitted_dispatch
-{
-
-template <typename Geometry, typename Point>
-struct append_point<multi_point_tag, Geometry, Point>
- : detail::append::append_point<Geometry, Point>
-{};
-
-template <typename Geometry, typename Range>
-struct append_range<multi_point_tag, Geometry, Range>
- : detail::append::append_range<Geometry, Range>
-{};
-
-template <typename MultiGeometry, typename RangeOrPoint>
-struct append_point<multi_linestring_tag, MultiGeometry, RangeOrPoint>
- : detail::append::append_to_multigeometry<MultiGeometry, RangeOrPoint>
-{};
-
-template <typename MultiGeometry, typename RangeOrPoint>
-struct append_range<multi_linestring_tag, MultiGeometry, RangeOrPoint>
- : detail::append::append_to_multigeometry<MultiGeometry, RangeOrPoint>
-{};
-
-template <typename MultiGeometry, typename RangeOrPoint>
-struct append_point<multi_polygon_tag, MultiGeometry, RangeOrPoint>
- : detail::append::append_to_multigeometry<MultiGeometry, RangeOrPoint>
-{};
-
-template <typename MultiGeometry, typename RangeOrPoint>
-struct append_range<multi_polygon_tag, MultiGeometry, RangeOrPoint>
- : detail::append::append_to_multigeometry<MultiGeometry, RangeOrPoint>
-{};
-
-} // namespace splitted_dispatch
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_variant {
-
-template <typename Geometry>
-struct append
-{
- template <typename RangeOrPoint>
- static inline void apply(Geometry& geometry,
- RangeOrPoint const& range_or_point,
- int ring_index,
- int multi_index)
- {
- concepts::check<Geometry>();
- dispatch::append<Geometry, RangeOrPoint>::apply(geometry,
- range_or_point,
- ring_index,
- multi_index);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct append<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename RangeOrPoint>
- struct visitor: boost::static_visitor<void>
- {
- RangeOrPoint const& m_range_or_point;
- int m_ring_index;
- int m_multi_index;
-
- visitor(RangeOrPoint const& range_or_point,
- int ring_index,
- int multi_index):
- m_range_or_point(range_or_point),
- m_ring_index(ring_index),
- m_multi_index(multi_index)
- {}
-
- template <typename Geometry>
- void operator()(Geometry& geometry) const
- {
- append<Geometry>::apply(geometry,
- m_range_or_point,
- m_ring_index,
- m_multi_index);
- }
- };
-
- template <typename RangeOrPoint>
- static inline void apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& variant_geometry,
- RangeOrPoint const& range_or_point,
- int ring_index,
- int multi_index)
- {
- boost::apply_visitor(
- visitor<RangeOrPoint>(
- range_or_point,
- ring_index,
- multi_index
- ),
- variant_geometry
- );
- }
-};
-
-} // namespace resolve_variant;
-
-
-/*!
-\brief Appends one or more points to a linestring, ring, polygon, multi-geometry
-\ingroup append
-\tparam Geometry \tparam_geometry
-\tparam RangeOrPoint Either a range or a point, fullfilling Boost.Range concept or Boost.Geometry Point Concept
-\param geometry \param_geometry
-\param range_or_point The point or range to add
-\param ring_index The index of the ring in case of a polygon:
- exterior ring (-1, the default) or interior ring index
-\param multi_index The index of the geometry to which the points are appended
-
-\qbk{[include reference/algorithms/append.qbk]}
-}
- */
-template <typename Geometry, typename RangeOrPoint>
-inline void append(Geometry& geometry, RangeOrPoint const& range_or_point,
- int ring_index = -1, int multi_index = 0)
-{
- resolve_variant::append<Geometry>
- ::apply(geometry, range_or_point, ring_index, multi_index);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_APPEND_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/area.hpp b/contrib/restricted/boost/boost/geometry/algorithms/area.hpp
deleted file mode 100644
index c6e237e7cc1..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/area.hpp
+++ /dev/null
@@ -1,363 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_AREA_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_AREA_HPP
-
-#include <boost/concept_check.hpp>
-#include <boost/range/functions.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/detail/calculate_null.hpp>
-#include <boost/geometry/algorithms/detail/calculate_sum.hpp>
-// #include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
-#include <boost/geometry/algorithms/detail/multi_sum.hpp>
-
-#include <boost/geometry/strategies/area.hpp>
-#include <boost/geometry/strategies/area_result.hpp>
-#include <boost/geometry/strategies/default_area_result.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-
-#include <boost/geometry/strategies/concepts/area_concept.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/order_as_direction.hpp>
-#include <boost/geometry/views/closeable_view.hpp>
-#include <boost/geometry/views/reversible_view.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace area
-{
-
-struct box_area
-{
- template <typename Box, typename Strategy>
- static inline typename coordinate_type<Box>::type
- apply(Box const& box, Strategy const&)
- {
- // Currently only works for 2D Cartesian boxes
- assert_dimension<Box, 2>();
-
- return (get<max_corner, 0>(box) - get<min_corner, 0>(box))
- * (get<max_corner, 1>(box) - get<min_corner, 1>(box));
- }
-};
-
-
-template
-<
- iterate_direction Direction,
- closure_selector Closure
->
-struct ring_area
-{
- template <typename Ring, typename Strategy>
- static inline typename area_result<Ring, Strategy>::type
- apply(Ring const& ring, Strategy const& strategy)
- {
- BOOST_CONCEPT_ASSERT( (geometry::concepts::AreaStrategy<Ring, Strategy>) );
- assert_dimension<Ring, 2>();
-
- // Ignore warning (because using static method sometimes) on strategy
- boost::ignore_unused_variable_warning(strategy);
-
- // An open ring has at least three points,
- // A closed ring has at least four points,
- // if not, there is no (zero) area
- if (boost::size(ring)
- < core_detail::closure::minimum_ring_size<Closure>::value)
- {
- return typename area_result<Ring, Strategy>::type();
- }
-
- typedef typename reversible_view<Ring const, Direction>::type rview_type;
- typedef typename closeable_view
- <
- rview_type const, Closure
- >::type view_type;
- typedef typename boost::range_iterator<view_type const>::type iterator_type;
-
- rview_type rview(ring);
- view_type view(rview);
- typename Strategy::template state<Ring> state;
- iterator_type it = boost::begin(view);
- iterator_type end = boost::end(view);
-
- for (iterator_type previous = it++;
- it != end;
- ++previous, ++it)
- {
- strategy.apply(*previous, *it, state);
- }
-
- return strategy.result(state);
- }
-};
-
-
-}} // namespace detail::area
-
-
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type
->
-struct area : detail::calculate_null
-{
- template <typename Strategy>
- static inline typename area_result<Geometry, Strategy>::type
- apply(Geometry const& geometry, Strategy const& strategy)
- {
- return calculate_null::apply
- <
- typename area_result<Geometry, Strategy>::type
- >(geometry, strategy);
- }
-};
-
-
-template <typename Geometry>
-struct area<Geometry, box_tag> : detail::area::box_area
-{};
-
-
-template <typename Ring>
-struct area<Ring, ring_tag>
- : detail::area::ring_area
- <
- order_as_direction<geometry::point_order<Ring>::value>::value,
- geometry::closure<Ring>::value
- >
-{};
-
-
-template <typename Polygon>
-struct area<Polygon, polygon_tag> : detail::calculate_polygon_sum
-{
- template <typename Strategy>
- static inline typename area_result<Polygon, Strategy>::type
- apply(Polygon const& polygon, Strategy const& strategy)
- {
- return calculate_polygon_sum::apply<
- typename area_result<Polygon, Strategy>::type,
- detail::area::ring_area
- <
- order_as_direction<geometry::point_order<Polygon>::value>::value,
- geometry::closure<Polygon>::value
- >
- >(polygon, strategy);
- }
-};
-
-
-template <typename MultiGeometry>
-struct area<MultiGeometry, multi_polygon_tag> : detail::multi_sum
-{
- template <typename Strategy>
- static inline typename area_result<MultiGeometry, Strategy>::type
- apply(MultiGeometry const& multi, Strategy const& strategy)
- {
- return multi_sum::apply
- <
- typename area_result<MultiGeometry, Strategy>::type,
- area<typename boost::range_value<MultiGeometry>::type>
- >(multi, strategy);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy
-{
-
-struct area
-{
- template <typename Geometry, typename Strategy>
- static inline typename area_result<Geometry, Strategy>::type
- apply(Geometry const& geometry, Strategy const& strategy)
- {
- return dispatch::area<Geometry>::apply(geometry, strategy);
- }
-
- template <typename Geometry>
- static inline typename area_result<Geometry>::type
- apply(Geometry const& geometry, default_strategy)
- {
- typedef typename strategy::area::services::default_strategy
- <
- typename cs_tag<Geometry>::type
- >::type strategy_type;
-
- return dispatch::area<Geometry>::apply(geometry, strategy_type());
- }
-};
-
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct area
-{
- template <typename Strategy>
- static inline typename area_result<Geometry, Strategy>::type
- apply(Geometry const& geometry, Strategy const& strategy)
- {
- return resolve_strategy::area::apply(geometry, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct area<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- typedef boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> variant_type;
-
- template <typename Strategy>
- struct visitor
- : boost::static_visitor<typename area_result<variant_type, Strategy>::type>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy): m_strategy(strategy) {}
-
- template <typename Geometry>
- typename area_result<variant_type, Strategy>::type
- operator()(Geometry const& geometry) const
- {
- return area<Geometry>::apply(geometry, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline typename area_result<variant_type, Strategy>::type
- apply(variant_type const& geometry,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_calc{area}
-\ingroup area
-\details \details_calc{area}. \details_default_strategy
-
-The area algorithm calculates the surface area of all geometries having a surface, namely
-box, polygon, ring, multipolygon. The units are the square of the units used for the points
-defining the surface. If subject geometry is defined in meters, then area is calculated
-in square meters.
-
-The area calculation can be done in all three common coordinate systems, Cartesian, Spherical
-and Geographic as well.
-
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_calc{area}
-
-\qbk{[include reference/algorithms/area.qbk]}
-\qbk{[heading Examples]}
-\qbk{[area] [area_output]}
-*/
-template <typename Geometry>
-inline typename area_result<Geometry>::type
-area(Geometry const& geometry)
-{
- concepts::check<Geometry const>();
-
- // detail::throw_on_empty_input(geometry);
-
- return resolve_variant::area<Geometry>::apply(geometry, default_strategy());
-}
-
-/*!
-\brief \brief_calc{area} \brief_strategy
-\ingroup area
-\details \details_calc{area} \brief_strategy. \details_strategy_reasons
-\tparam Geometry \tparam_geometry
-\tparam Strategy \tparam_strategy{Area}
-\param geometry \param_geometry
-\param strategy \param_strategy{area}
-\return \return_calc{area}
-
-\qbk{distinguish,with strategy}
-
-\qbk{
-[include reference/algorithms/area.qbk]
-
-[heading Available Strategies]
-\* [link geometry.reference.strategies.strategy_area_cartesian Cartesian]
-\* [link geometry.reference.strategies.strategy_area_spherical Spherical]
-\* [link geometry.reference.strategies.strategy_area_geographic Geographic]
-
-[heading Example]
-[area_with_strategy]
-[area_with_strategy_output]
-}
- */
-template <typename Geometry, typename Strategy>
-inline typename area_result<Geometry, Strategy>::type
-area(Geometry const& geometry, Strategy const& strategy)
-{
- concepts::check<Geometry const>();
-
- // detail::throw_on_empty_input(geometry);
-
- return resolve_variant::area<Geometry>::apply(geometry, strategy);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_AREA_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/assign.hpp b/contrib/restricted/boost/boost/geometry/algorithms/assign.hpp
deleted file mode 100644
index 589a5c545bd..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/assign.hpp
+++ /dev/null
@@ -1,379 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Samuel Debionne, Grenoble, France.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_ASSIGN_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_ASSIGN_HPP
-
-
-#include <cstddef>
-
-#include <boost/concept/requires.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/numeric/conversion/bounds.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/detail/assign_box_corners.hpp>
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/algorithms/detail/assign_values.hpp>
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/append.hpp>
-#include <boost/geometry/algorithms/clear.hpp>
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/util/for_each_coordinate.hpp>
-
-namespace boost { namespace geometry
-{
-
-/*!
-\brief Assign a range of points to a linestring, ring or polygon
-\note The point-type of the range might be different from the point-type of the geometry
-\ingroup assign
-\tparam Geometry \tparam_geometry
-\tparam Range \tparam_range_point
-\param geometry \param_geometry
-\param range \param_range_point
-
-\qbk{
-[heading Notes]
-[note Assign automatically clears the geometry before assigning (use append if you don't want that)]
-[heading Example]
-[assign_points] [assign_points_output]
-
-[heading See also]
-\* [link geometry.reference.algorithms.append append]
-}
- */
-template <typename Geometry, typename Range>
-inline void assign_points(Geometry& geometry, Range const& range)
-{
- concepts::check<Geometry>();
-
- clear(geometry);
- geometry::append(geometry, range, -1, 0);
-}
-
-
-/*!
-\brief assign to a box inverse infinite
-\details The assign_inverse function initialize a 2D or 3D box with large coordinates, the
-min corner is very large, the max corner is very small. This is a convenient starting point to
-collect the minimum bounding box of a geometry.
-\ingroup assign
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-
-\qbk{
-[heading Example]
-[assign_inverse] [assign_inverse_output]
-
-[heading See also]
-\* [link geometry.reference.algorithms.make.make_inverse make_inverse]
-}
- */
-template <typename Geometry>
-inline void assign_inverse(Geometry& geometry)
-{
- concepts::check<Geometry>();
-
- dispatch::assign_inverse
- <
- typename tag<Geometry>::type,
- Geometry
- >::apply(geometry);
-}
-
-/*!
-\brief assign zero values to a box, point
-\ingroup assign
-\details The assign_zero function initializes a 2D or 3D point or box with coordinates of zero
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-
- */
-template <typename Geometry>
-inline void assign_zero(Geometry& geometry)
-{
- concepts::check<Geometry>();
-
- dispatch::assign_zero
- <
- typename tag<Geometry>::type,
- Geometry
- >::apply(geometry);
-}
-
-/*!
-\brief Assign two coordinates to a geometry (usually a 2D point)
-\ingroup assign
-\tparam Geometry \tparam_geometry
-\tparam Type \tparam_numeric to specify the coordinates
-\param geometry \param_geometry
-\param c1 \param_x
-\param c2 \param_y
-
-\qbk{distinguish, 2 coordinate values}
-\qbk{
-[heading Example]
-[assign_2d_point] [assign_2d_point_output]
-
-[heading See also]
-\* [link geometry.reference.algorithms.make.make_2_2_coordinate_values make]
-}
- */
-template <typename Geometry, typename Type>
-inline void assign_values(Geometry& geometry, Type const& c1, Type const& c2)
-{
- concepts::check<Geometry>();
-
- dispatch::assign
- <
- typename tag<Geometry>::type,
- Geometry,
- geometry::dimension<Geometry>::type::value
- >::apply(geometry, c1, c2);
-}
-
-/*!
-\brief Assign three values to a geometry (usually a 3D point)
-\ingroup assign
-\tparam Geometry \tparam_geometry
-\tparam Type \tparam_numeric to specify the coordinates
-\param geometry \param_geometry
-\param c1 \param_x
-\param c2 \param_y
-\param c3 \param_z
-
-\qbk{distinguish, 3 coordinate values}
-\qbk{
-[heading Example]
-[assign_3d_point] [assign_3d_point_output]
-
-[heading See also]
-\* [link geometry.reference.algorithms.make.make_3_3_coordinate_values make]
-}
- */
-template <typename Geometry, typename Type>
-inline void assign_values(Geometry& geometry,
- Type const& c1, Type const& c2, Type const& c3)
-{
- concepts::check<Geometry>();
-
- dispatch::assign
- <
- typename tag<Geometry>::type,
- Geometry,
- geometry::dimension<Geometry>::type::value
- >::apply(geometry, c1, c2, c3);
-}
-
-/*!
-\brief Assign four values to a geometry (usually a box or segment)
-\ingroup assign
-\tparam Geometry \tparam_geometry
-\tparam Type \tparam_numeric to specify the coordinates
-\param geometry \param_geometry
-\param c1 First coordinate (usually x1)
-\param c2 Second coordinate (usually y1)
-\param c3 Third coordinate (usually x2)
-\param c4 Fourth coordinate (usually y2)
-
-\qbk{distinguish, 4 coordinate values}
- */
-template <typename Geometry, typename Type>
-inline void assign_values(Geometry& geometry,
- Type const& c1, Type const& c2, Type const& c3, Type const& c4)
-{
- concepts::check<Geometry>();
-
- dispatch::assign
- <
- typename tag<Geometry>::type,
- Geometry,
- geometry::dimension<Geometry>::type::value
- >::apply(geometry, c1, c2, c3, c4);
-}
-
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry1, typename Geometry2>
-struct assign
-{
- static inline void
- apply(Geometry1& geometry1, const Geometry2& geometry2)
- {
- concepts::check<Geometry1>();
- concepts::check<Geometry2 const>();
- concepts::check_concepts_and_equal_dimensions<Geometry1, Geometry2 const>();
-
- static bool const same_point_order
- = point_order<Geometry1>::value == point_order<Geometry2>::value;
- BOOST_MPL_ASSERT_MSG
- (
- (same_point_order),
- ASSIGN_IS_NOT_SUPPORTED_FOR_DIFFERENT_POINT_ORDER,
- (types<Geometry1, Geometry2>)
- );
- static bool const same_closure
- = closure<Geometry1>::value == closure<Geometry2>::value;
- BOOST_MPL_ASSERT_MSG
- (
- (same_closure),
- ASSIGN_IS_NOT_SUPPORTED_FOR_DIFFERENT_CLOSURE,
- (types<Geometry1, Geometry2>)
- );
-
- dispatch::convert<Geometry2, Geometry1>::apply(geometry2, geometry1);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct assign<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- struct visitor: static_visitor<void>
- {
- Geometry2 const& m_geometry2;
-
- visitor(Geometry2 const& geometry2)
- : m_geometry2(geometry2)
- {}
-
- template <typename Geometry1>
- result_type operator()(Geometry1& geometry1) const
- {
- return assign
- <
- Geometry1,
- Geometry2
- >::apply
- (geometry1, m_geometry2);
- }
- };
-
- static inline void
- apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry1,
- Geometry2 const& geometry2)
- {
- return boost::apply_visitor(visitor(geometry2), geometry1);
- }
-};
-
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct assign<Geometry1, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- struct visitor: static_visitor<void>
- {
- Geometry1& m_geometry1;
-
- visitor(Geometry1 const& geometry1)
- : m_geometry1(geometry1)
- {}
-
- template <typename Geometry2>
- result_type operator()(Geometry2 const& geometry2) const
- {
- return assign
- <
- Geometry1,
- Geometry2
- >::apply
- (m_geometry1, geometry2);
- }
- };
-
- static inline void
- apply(Geometry1& geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2)
- {
- return boost::apply_visitor(visitor(geometry1), geometry2);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T1), BOOST_VARIANT_ENUM_PARAMS(typename T2)>
-struct assign<variant<BOOST_VARIANT_ENUM_PARAMS(T1)>, variant<BOOST_VARIANT_ENUM_PARAMS(T2)> >
-{
- struct visitor: static_visitor<void>
- {
- template <typename Geometry1, typename Geometry2>
- result_type operator()(
- Geometry1& geometry1,
- Geometry2 const& geometry2) const
- {
- return assign
- <
- Geometry1,
- Geometry2
- >::apply
- (geometry1, geometry2);
- }
- };
-
- static inline void
- apply(variant<BOOST_VARIANT_ENUM_PARAMS(T1)>& geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2)
- {
- return boost::apply_visitor(visitor(), geometry1, geometry2);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief Assigns one geometry to another geometry
-\details The assign algorithm assigns one geometry, e.g. a BOX, to another
-geometry, e.g. a RING. This only works if it is possible and applicable.
-\ingroup assign
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry (target)
-\param geometry2 \param_geometry (source)
-
-\qbk{
-[heading Example]
-[assign] [assign_output]
-
-[heading See also]
-\* [link geometry.reference.algorithms.convert convert]
-}
- */
-template <typename Geometry1, typename Geometry2>
-inline void assign(Geometry1& geometry1, Geometry2 const& geometry2)
-{
- resolve_variant::assign<Geometry1, Geometry2>::apply(geometry1, geometry2);
-}
-
-
-}} // namespace boost::geometry
-
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_ASSIGN_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/buffer.hpp b/contrib/restricted/boost/boost/geometry/algorithms/buffer.hpp
deleted file mode 100644
index fd6f0fbe6a6..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/buffer.hpp
+++ /dev/null
@@ -1,302 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_BUFFER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_BUFFER_HPP
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/range.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/clear.hpp>
-#include <boost/geometry/algorithms/envelope.hpp>
-#include <boost/geometry/algorithms/is_empty.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/geometries/box.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-template <typename BoxIn, typename BoxOut, typename T, std::size_t C, std::size_t D, std::size_t N>
-struct box_loop
-{
- typedef typename coordinate_type<BoxOut>::type coordinate_type;
-
- static inline void apply(BoxIn const& box_in, T const& distance, BoxOut& box_out)
- {
- coordinate_type d = distance;
- set<C, D>(box_out, get<C, D>(box_in) + d);
- box_loop<BoxIn, BoxOut, T, C, D + 1, N>::apply(box_in, distance, box_out);
- }
-};
-
-template <typename BoxIn, typename BoxOut, typename T, std::size_t C, std::size_t N>
-struct box_loop<BoxIn, BoxOut, T, C, N, N>
-{
- static inline void apply(BoxIn const&, T const&, BoxOut&) {}
-};
-
-// Extends a box with the same amount in all directions
-template<typename BoxIn, typename BoxOut, typename T>
-inline void buffer_box(BoxIn const& box_in, T const& distance, BoxOut& box_out)
-{
- assert_dimension_equal<BoxIn, BoxOut>();
-
- static const std::size_t N = dimension<BoxIn>::value;
-
- box_loop<BoxIn, BoxOut, T, min_corner, 0, N>::apply(box_in, -distance, box_out);
- box_loop<BoxIn, BoxOut, T, max_corner, 0, N>::apply(box_in, distance, box_out);
-}
-
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Input,
- typename Output,
- typename TagIn = typename tag<Input>::type,
- typename TagOut = typename tag<Output>::type
->
-struct buffer: not_implemented<TagIn, TagOut>
-{};
-
-
-template <typename BoxIn, typename BoxOut>
-struct buffer<BoxIn, BoxOut, box_tag, box_tag>
-{
- template <typename Distance>
- static inline void apply(BoxIn const& box_in, Distance const& distance,
- Distance const& , BoxOut& box_out)
- {
- detail::buffer::buffer_box(box_in, distance, box_out);
- }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_variant {
-
-template <typename Geometry>
-struct buffer
-{
- template <typename Distance, typename GeometryOut>
- static inline void apply(Geometry const& geometry,
- Distance const& distance,
- Distance const& chord_length,
- GeometryOut& out)
- {
- dispatch::buffer<Geometry, GeometryOut>::apply(geometry, distance, chord_length, out);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct buffer<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Distance, typename GeometryOut>
- struct visitor: boost::static_visitor<void>
- {
- Distance const& m_distance;
- Distance const& m_chord_length;
- GeometryOut& m_out;
-
- visitor(Distance const& distance,
- Distance const& chord_length,
- GeometryOut& out)
- : m_distance(distance),
- m_chord_length(chord_length),
- m_out(out)
- {}
-
- template <typename Geometry>
- void operator()(Geometry const& geometry) const
- {
- buffer<Geometry>::apply(geometry, m_distance, m_chord_length, m_out);
- }
- };
-
- template <typename Distance, typename GeometryOut>
- static inline void apply(
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- Distance const& distance,
- Distance const& chord_length,
- GeometryOut& out
- )
- {
- boost::apply_visitor(visitor<Distance, GeometryOut>(distance, chord_length, out), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_calc{buffer}
-\ingroup buffer
-\details \details_calc{buffer, \det_buffer}.
-\tparam Input \tparam_geometry
-\tparam Output \tparam_geometry
-\tparam Distance \tparam_numeric
-\param geometry_in \param_geometry
-\param geometry_out \param_geometry
-\param distance The distance to be used for the buffer
-\param chord_length (optional) The length of the chord's in the generated arcs around points or bends
-
-\qbk{[include reference/algorithms/buffer.qbk]}
- */
-template <typename Input, typename Output, typename Distance>
-inline void buffer(Input const& geometry_in, Output& geometry_out,
- Distance const& distance, Distance const& chord_length = -1)
-{
- concepts::check<Input const>();
- concepts::check<Output>();
-
- resolve_variant::buffer<Input>::apply(geometry_in, distance, chord_length, geometry_out);
-}
-
-/*!
-\brief \brief_calc{buffer}
-\ingroup buffer
-\details \details_calc{return_buffer, \det_buffer}. \details_return{buffer}.
-\tparam Input \tparam_geometry
-\tparam Output \tparam_geometry
-\tparam Distance \tparam_numeric
-\param geometry \param_geometry
-\param distance The distance to be used for the buffer
-\param chord_length (optional) The length of the chord's in the generated arcs
- around points or bends (RESERVED, NOT YET USED)
-\return \return_calc{buffer}
- */
-template <typename Output, typename Input, typename Distance>
-Output return_buffer(Input const& geometry, Distance const& distance, Distance const& chord_length = -1)
-{
- concepts::check<Input const>();
- concepts::check<Output>();
-
- Output geometry_out;
-
- resolve_variant::buffer<Input>::apply(geometry, distance, chord_length, geometry_out);
-
- return geometry_out;
-}
-
-/*!
-\brief \brief_calc{buffer}
-\ingroup buffer
-\details \details_calc{buffer, \det_buffer}.
-\tparam GeometryIn \tparam_geometry
-\tparam MultiPolygon \tparam_geometry{MultiPolygon}
-\tparam DistanceStrategy A strategy defining distance (or radius)
-\tparam SideStrategy A strategy defining creation along sides
-\tparam JoinStrategy A strategy defining creation around convex corners
-\tparam EndStrategy A strategy defining creation at linestring ends
-\tparam PointStrategy A strategy defining creation around points
-\param geometry_in \param_geometry
-\param geometry_out output multi polygon (or std:: collection of polygons),
- will contain a buffered version of the input geometry
-\param distance_strategy The distance strategy to be used
-\param side_strategy The side strategy to be used
-\param join_strategy The join strategy to be used
-\param end_strategy The end strategy to be used
-\param point_strategy The point strategy to be used
-
-\qbk{distinguish,with strategies}
-\qbk{[include reference/algorithms/buffer_with_strategies.qbk]}
- */
-template
-<
- typename GeometryIn,
- typename MultiPolygon,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename PointStrategy
->
-inline void buffer(GeometryIn const& geometry_in,
- MultiPolygon& geometry_out,
- DistanceStrategy const& distance_strategy,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- PointStrategy const& point_strategy)
-{
- typedef typename boost::range_value<MultiPolygon>::type polygon_type;
- concepts::check<GeometryIn const>();
- concepts::check<polygon_type>();
-
- typedef typename point_type<GeometryIn>::type point_type;
- typedef typename rescale_policy_type<point_type>::type rescale_policy_type;
-
- geometry_out.clear();
-
- if (geometry::is_empty(geometry_in))
- {
- // Then output geometry is kept empty as well
- return;
- }
-
- model::box<point_type> box;
- geometry::envelope(geometry_in, box);
- geometry::buffer(box, box, distance_strategy.max_distance(join_strategy, end_strategy));
-
- typename strategy::intersection::services::default_strategy
- <
- typename cs_tag<GeometryIn>::type
- >::type intersection_strategy;
-
- rescale_policy_type rescale_policy
- = boost::geometry::get_rescale_policy<rescale_policy_type>(box);
-
- detail::buffer::buffer_inserter<polygon_type>(geometry_in, range::back_inserter(geometry_out),
- distance_strategy,
- side_strategy,
- join_strategy,
- end_strategy,
- point_strategy,
- intersection_strategy,
- rescale_policy);
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_BUFFER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/centroid.hpp b/contrib/restricted/boost/boost/geometry/algorithms/centroid.hpp
deleted file mode 100644
index 06e22d5688e..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/centroid.hpp
+++ /dev/null
@@ -1,681 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014, 2015.
-// Modifications copyright (c) 2014-2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_CENTROID_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_CENTROID_HPP
-
-
-#include <cstddef>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range.hpp>
-#include <boost/throw_exception.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/exception.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/strategies/centroid.hpp>
-#include <boost/geometry/strategies/concepts/centroid_concept.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/views/closeable_view.hpp>
-
-#include <boost/geometry/util/for_each_coordinate.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-#include <boost/geometry/algorithms/is_empty.hpp>
-
-#include <boost/geometry/algorithms/detail/centroid/translating_transformer.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#if ! defined(BOOST_GEOMETRY_CENTROID_NO_THROW)
-
-/*!
-\brief Centroid Exception
-\ingroup centroid
-\details The centroid_exception is thrown if the free centroid function is called with
- geometries for which the centroid cannot be calculated. For example: a linestring
- without points, a polygon without points, an empty multi-geometry.
-\qbk{
-[heading See also]
-\* [link geometry.reference.algorithms.centroid the centroid function]
-}
-
- */
-class centroid_exception : public geometry::exception
-{
-public:
-
- /*!
- \brief The default constructor
- */
- inline centroid_exception() {}
-
- /*!
- \brief Returns the explanatory string.
- \return Pointer to a null-terminated string with explanatory information.
- */
- virtual char const* what() const noexcept
- {
- return "Boost.Geometry Centroid calculation exception";
- }
-};
-
-#endif
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace centroid
-{
-
-struct centroid_point
-{
- template<typename Point, typename PointCentroid, typename Strategy>
- static inline void apply(Point const& point, PointCentroid& centroid,
- Strategy const&)
- {
- geometry::convert(point, centroid);
- }
-};
-
-template
-<
- typename Indexed,
- typename Point,
- std::size_t Dimension = 0,
- std::size_t DimensionCount = dimension<Indexed>::type::value
->
-struct centroid_indexed_calculator
-{
- typedef typename select_coordinate_type
- <
- Indexed, Point
- >::type coordinate_type;
- static inline void apply(Indexed const& indexed, Point& centroid)
- {
- coordinate_type const c1 = get<min_corner, Dimension>(indexed);
- coordinate_type const c2 = get<max_corner, Dimension>(indexed);
- coordinate_type m = c1 + c2;
- coordinate_type const two = 2;
- m /= two;
-
- set<Dimension>(centroid, m);
-
- centroid_indexed_calculator
- <
- Indexed, Point, Dimension + 1
- >::apply(indexed, centroid);
- }
-};
-
-
-template<typename Indexed, typename Point, std::size_t DimensionCount>
-struct centroid_indexed_calculator<Indexed, Point, DimensionCount, DimensionCount>
-{
- static inline void apply(Indexed const& , Point& )
- {
- }
-};
-
-
-struct centroid_indexed
-{
- template<typename Indexed, typename Point, typename Strategy>
- static inline void apply(Indexed const& indexed, Point& centroid,
- Strategy const&)
- {
- centroid_indexed_calculator
- <
- Indexed, Point
- >::apply(indexed, centroid);
- }
-};
-
-
-// There is one thing where centroid is different from e.g. within.
-// If the ring has only one point, it might make sense that
-// that point is the centroid.
-template<typename Point, typename Range>
-inline bool range_ok(Range const& range, Point& centroid)
-{
- std::size_t const n = boost::size(range);
- if (n > 1)
- {
- return true;
- }
- else if (n <= 0)
- {
-#if ! defined(BOOST_GEOMETRY_CENTROID_NO_THROW)
- BOOST_THROW_EXCEPTION(centroid_exception());
-#else
- return false;
-#endif
- }
- else // if (n == 1)
- {
- // Take over the first point in a "coordinate neutral way"
- geometry::convert(*boost::begin(range), centroid);
- return false;
- }
- //return true; // unreachable
-}
-
-/*!
- \brief Calculate the centroid of a Ring or a Linestring.
-*/
-template <closure_selector Closure>
-struct centroid_range_state
-{
- template<typename Ring, typename PointTransformer, typename Strategy>
- static inline void apply(Ring const& ring,
- PointTransformer const& transformer,
- Strategy const& strategy,
- typename Strategy::state_type& state)
- {
- boost::ignore_unused(strategy);
-
- typedef typename geometry::point_type<Ring const>::type point_type;
- typedef typename closeable_view<Ring const, Closure>::type view_type;
-
- typedef typename boost::range_iterator<view_type const>::type iterator_type;
-
- view_type view(ring);
- iterator_type it = boost::begin(view);
- iterator_type end = boost::end(view);
-
- if (it != end)
- {
- typename PointTransformer::result_type
- previous_pt = transformer.apply(*it);
-
- for ( ++it ; it != end ; ++it)
- {
- typename PointTransformer::result_type
- pt = transformer.apply(*it);
-
- strategy.apply(static_cast<point_type const&>(previous_pt),
- static_cast<point_type const&>(pt),
- state);
-
- previous_pt = pt;
- }
- }
- }
-};
-
-template <closure_selector Closure>
-struct centroid_range
-{
- template<typename Range, typename Point, typename Strategy>
- static inline bool apply(Range const& range, Point& centroid,
- Strategy const& strategy)
- {
- if (range_ok(range, centroid))
- {
- // prepare translation transformer
- translating_transformer<Range> transformer(*boost::begin(range));
-
- typename Strategy::state_type state;
- centroid_range_state<Closure>::apply(range, transformer,
- strategy, state);
-
- if ( strategy.result(state, centroid) )
- {
- // translate the result back
- transformer.apply_reverse(centroid);
- return true;
- }
- }
-
- return false;
- }
-};
-
-
-/*!
- \brief Centroid of a polygon.
- \note Because outer ring is clockwise, inners are counter clockwise,
- triangle approach is OK and works for polygons with rings.
-*/
-struct centroid_polygon_state
-{
- template<typename Polygon, typename PointTransformer, typename Strategy>
- static inline void apply(Polygon const& poly,
- PointTransformer const& transformer,
- Strategy const& strategy,
- typename Strategy::state_type& state)
- {
- typedef typename ring_type<Polygon>::type ring_type;
- typedef centroid_range_state<geometry::closure<ring_type>::value> per_ring;
-
- per_ring::apply(exterior_ring(poly), transformer, strategy, state);
-
- typename interior_return_type<Polygon const>::type
- rings = interior_rings(poly);
-
- for (typename detail::interior_iterator<Polygon const>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- per_ring::apply(*it, transformer, strategy, state);
- }
- }
-};
-
-struct centroid_polygon
-{
- template<typename Polygon, typename Point, typename Strategy>
- static inline bool apply(Polygon const& poly, Point& centroid,
- Strategy const& strategy)
- {
- if (range_ok(exterior_ring(poly), centroid))
- {
- // prepare translation transformer
- translating_transformer<Polygon>
- transformer(*boost::begin(exterior_ring(poly)));
-
- typename Strategy::state_type state;
- centroid_polygon_state::apply(poly, transformer, strategy, state);
-
- if ( strategy.result(state, centroid) )
- {
- // translate the result back
- transformer.apply_reverse(centroid);
- return true;
- }
- }
-
- return false;
- }
-};
-
-
-/*!
- \brief Building block of a multi-point, to be used as Policy in the
- more generec centroid_multi
-*/
-struct centroid_multi_point_state
-{
- template <typename Point, typename PointTransformer, typename Strategy>
- static inline void apply(Point const& point,
- PointTransformer const& transformer,
- Strategy const& strategy,
- typename Strategy::state_type& state)
- {
- boost::ignore_unused(strategy);
- strategy.apply(static_cast<Point const&>(transformer.apply(point)),
- state);
- }
-};
-
-
-/*!
- \brief Generic implementation which calls a policy to calculate the
- centroid of the total of its single-geometries
- \details The Policy is, in general, the single-version, with state. So
- detail::centroid::centroid_polygon_state is used as a policy for this
- detail::centroid::centroid_multi
-
-*/
-template <typename Policy>
-struct centroid_multi
-{
- template <typename Multi, typename Point, typename Strategy>
- static inline bool apply(Multi const& multi,
- Point& centroid,
- Strategy const& strategy)
- {
-#if ! defined(BOOST_GEOMETRY_CENTROID_NO_THROW)
- // If there is nothing in any of the ranges, it is not possible
- // to calculate the centroid
- if (geometry::is_empty(multi))
- {
- BOOST_THROW_EXCEPTION(centroid_exception());
- }
-#endif
-
- // prepare translation transformer
- translating_transformer<Multi> transformer(multi);
-
- typename Strategy::state_type state;
-
- for (typename boost::range_iterator<Multi const>::type
- it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- Policy::apply(*it, transformer, strategy, state);
- }
-
- if ( strategy.result(state, centroid) )
- {
- // translate the result back
- transformer.apply_reverse(centroid);
- return true;
- }
-
- return false;
- }
-};
-
-
-template <typename Algorithm>
-struct centroid_linear_areal
-{
- template <typename Geometry, typename Point, typename Strategy>
- static inline void apply(Geometry const& geom,
- Point& centroid,
- Strategy const& strategy)
- {
- if ( ! Algorithm::apply(geom, centroid, strategy) )
- {
- geometry::point_on_border(centroid, geom);
- }
- }
-};
-
-
-}} // namespace detail::centroid
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type
->
-struct centroid: not_implemented<Tag>
-{};
-
-template <typename Geometry>
-struct centroid<Geometry, point_tag>
- : detail::centroid::centroid_point
-{};
-
-template <typename Box>
-struct centroid<Box, box_tag>
- : detail::centroid::centroid_indexed
-{};
-
-template <typename Segment>
-struct centroid<Segment, segment_tag>
- : detail::centroid::centroid_indexed
-{};
-
-template <typename Ring>
-struct centroid<Ring, ring_tag>
- : detail::centroid::centroid_linear_areal
- <
- detail::centroid::centroid_range<geometry::closure<Ring>::value>
- >
-{};
-
-template <typename Linestring>
-struct centroid<Linestring, linestring_tag>
- : detail::centroid::centroid_linear_areal
- <
- detail::centroid::centroid_range<closed>
- >
-{};
-
-template <typename Polygon>
-struct centroid<Polygon, polygon_tag>
- : detail::centroid::centroid_linear_areal
- <
- detail::centroid::centroid_polygon
- >
-{};
-
-template <typename MultiLinestring>
-struct centroid<MultiLinestring, multi_linestring_tag>
- : detail::centroid::centroid_linear_areal
- <
- detail::centroid::centroid_multi
- <
- detail::centroid::centroid_range_state<closed>
- >
- >
-{};
-
-template <typename MultiPolygon>
-struct centroid<MultiPolygon, multi_polygon_tag>
- : detail::centroid::centroid_linear_areal
- <
- detail::centroid::centroid_multi
- <
- detail::centroid::centroid_polygon_state
- >
- >
-{};
-
-template <typename MultiPoint>
-struct centroid<MultiPoint, multi_point_tag>
- : detail::centroid::centroid_multi
- <
- detail::centroid::centroid_multi_point_state
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy {
-
-template <typename Geometry>
-struct centroid
-{
- template <typename Point, typename Strategy>
- static inline void apply(Geometry const& geometry, Point& out, Strategy const& strategy)
- {
- dispatch::centroid<Geometry>::apply(geometry, out, strategy);
- }
-
- template <typename Point>
- static inline void apply(Geometry const& geometry, Point& out, default_strategy)
- {
- typedef typename strategy::centroid::services::default_strategy
- <
- typename cs_tag<Geometry>::type,
- typename tag_cast
- <
- typename tag<Geometry>::type,
- pointlike_tag,
- linear_tag,
- areal_tag
- >::type,
- dimension<Geometry>::type::value,
- Point,
- Geometry
- >::type strategy_type;
-
- dispatch::centroid<Geometry>::apply(geometry, out, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant {
-
-template <typename Geometry>
-struct centroid
-{
- template <typename Point, typename Strategy>
- static inline void apply(Geometry const& geometry, Point& out, Strategy const& strategy)
- {
- concepts::check_concepts_and_equal_dimensions<Point, Geometry const>();
- resolve_strategy::centroid<Geometry>::apply(geometry, out, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct centroid<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Point, typename Strategy>
- struct visitor: boost::static_visitor<void>
- {
- Point& m_out;
- Strategy const& m_strategy;
-
- visitor(Point& out, Strategy const& strategy)
- : m_out(out), m_strategy(strategy)
- {}
-
- template <typename Geometry>
- void operator()(Geometry const& geometry) const
- {
- centroid<Geometry>::apply(geometry, m_out, m_strategy);
- }
- };
-
- template <typename Point, typename Strategy>
- static inline void
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- Point& out,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Point, Strategy>(out, strategy), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_calc{centroid} \brief_strategy
-\ingroup centroid
-\details \details_calc{centroid,geometric center (or: center of mass)}. \details_strategy_reasons
-\tparam Geometry \tparam_geometry
-\tparam Point \tparam_point
-\tparam Strategy \tparam_strategy{Centroid}
-\param geometry \param_geometry
-\param c \param_point \param_set{centroid}
-\param strategy \param_strategy{centroid}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/centroid.qbk]}
-\qbk{[include reference/algorithms/centroid_strategies.qbk]}
-}
-
-*/
-template<typename Geometry, typename Point, typename Strategy>
-inline void centroid(Geometry const& geometry, Point& c,
- Strategy const& strategy)
-{
- resolve_variant::centroid<Geometry>::apply(geometry, c, strategy);
-}
-
-
-/*!
-\brief \brief_calc{centroid}
-\ingroup centroid
-\details \details_calc{centroid,geometric center (or: center of mass)}. \details_default_strategy
-\tparam Geometry \tparam_geometry
-\tparam Point \tparam_point
-\param geometry \param_geometry
-\param c The calculated centroid will be assigned to this point reference
-
-\qbk{[include reference/algorithms/centroid.qbk]}
-\qbk{
-[heading Example]
-[centroid]
-[centroid_output]
-}
- */
-template<typename Geometry, typename Point>
-inline void centroid(Geometry const& geometry, Point& c)
-{
- geometry::centroid(geometry, c, default_strategy());
-}
-
-
-/*!
-\brief \brief_calc{centroid}
-\ingroup centroid
-\details \details_calc{centroid,geometric center (or: center of mass)}. \details_return{centroid}.
-\tparam Point \tparam_point
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_calc{centroid}
-
-\qbk{[include reference/algorithms/centroid.qbk]}
- */
-template<typename Point, typename Geometry>
-inline Point return_centroid(Geometry const& geometry)
-{
- Point c;
- geometry::centroid(geometry, c);
- return c;
-}
-
-/*!
-\brief \brief_calc{centroid} \brief_strategy
-\ingroup centroid
-\details \details_calc{centroid,geometric center (or: center of mass)}. \details_return{centroid}. \details_strategy_reasons
-\tparam Point \tparam_point
-\tparam Geometry \tparam_geometry
-\tparam Strategy \tparam_strategy{centroid}
-\param geometry \param_geometry
-\param strategy \param_strategy{centroid}
-\return \return_calc{centroid}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/centroid.qbk]}
-\qbk{[include reference/algorithms/centroid_strategies.qbk]}
- */
-template<typename Point, typename Geometry, typename Strategy>
-inline Point return_centroid(Geometry const& geometry, Strategy const& strategy)
-{
- Point c;
- geometry::centroid(geometry, c, strategy);
- return c;
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_CENTROID_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/clear.hpp b/contrib/restricted/boost/boost/geometry/algorithms/clear.hpp
deleted file mode 100644
index 97f5efa4514..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/clear.hpp
+++ /dev/null
@@ -1,197 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_CLEAR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_CLEAR_HPP
-
-
-#include <boost/type_traits/remove_const.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace clear
-{
-
-template <typename Geometry>
-struct collection_clear
-{
- static inline void apply(Geometry& geometry)
- {
- traits::clear<Geometry>::apply(geometry);
- }
-};
-
-template <typename Polygon>
-struct polygon_clear
-{
- static inline void apply(Polygon& polygon)
- {
- traits::clear
- <
- typename boost::remove_reference
- <
- typename traits::interior_mutable_type<Polygon>::type
- >::type
- >::apply(interior_rings(polygon));
- traits::clear
- <
- typename boost::remove_reference
- <
- typename traits::ring_mutable_type<Polygon>::type
- >::type
- >::apply(exterior_ring(polygon));
- }
-};
-
-template <typename Geometry>
-struct no_action
-{
- static inline void apply(Geometry& )
- {
- }
-};
-
-
-}} // namespace detail::clear
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry,
- typename Tag = typename tag_cast<typename tag<Geometry>::type, multi_tag>::type
->
-struct clear: not_implemented<Tag>
-{};
-
-// Point/box/segment do not have clear. So specialize to do nothing.
-template <typename Geometry>
-struct clear<Geometry, point_tag>
- : detail::clear::no_action<Geometry>
-{};
-
-template <typename Geometry>
-struct clear<Geometry, box_tag>
- : detail::clear::no_action<Geometry>
-{};
-
-template <typename Geometry>
-struct clear<Geometry, segment_tag>
- : detail::clear::no_action<Geometry>
-{};
-
-template <typename Geometry>
-struct clear<Geometry, linestring_tag>
- : detail::clear::collection_clear<Geometry>
-{};
-
-template <typename Geometry>
-struct clear<Geometry, ring_tag>
- : detail::clear::collection_clear<Geometry>
-{};
-
-
-// Polygon can (indirectly) use std for clear
-template <typename Polygon>
-struct clear<Polygon, polygon_tag>
- : detail::clear::polygon_clear<Polygon>
-{};
-
-
-template <typename Geometry>
-struct clear<Geometry, multi_tag>
- : detail::clear::collection_clear<Geometry>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_variant {
-
-template <typename Geometry>
-struct clear
-{
- static inline void apply(Geometry& geometry)
- {
- dispatch::clear<Geometry>::apply(geometry);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct clear<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- struct visitor: static_visitor<void>
- {
- template <typename Geometry>
- inline void operator()(Geometry& geometry) const
- {
- clear<Geometry>::apply(geometry);
- }
- };
-
- static inline void apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry)
- {
- boost::apply_visitor(visitor(), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief Clears a linestring, ring or polygon (exterior+interiors) or multi*
-\details Generic function to clear a geometry. All points will be removed from the collection or collections
- making up the geometry. In most cases this is equivalent to the .clear() method of a std::vector<...>. In
- the case of a polygon, this clear functionality is automatically called for the exterior ring, and for the
- interior ring collection. In the case of a point, boxes and segments, nothing will happen.
-\ingroup clear
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry which will be cleared
-\note points and boxes cannot be cleared, instead they can be set to zero by "assign_zero"
-
-\qbk{[include reference/algorithms/clear.qbk]}
-*/
-template <typename Geometry>
-inline void clear(Geometry& geometry)
-{
- concepts::check<Geometry>();
-
- resolve_variant::clear<Geometry>::apply(geometry);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_CLEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/comparable_distance.hpp b/contrib/restricted/boost/boost/geometry/algorithms/comparable_distance.hpp
deleted file mode 100644
index 6f009da3ed2..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/comparable_distance.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_COMPARABLE_DISTANCE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_COMPARABLE_DISTANCE_HPP
-
-#include <boost/geometry/algorithms/detail/comparable_distance/interface.hpp>
-#include <boost/geometry/algorithms/detail/comparable_distance/implementation.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_COMPARABLE_DISTANCE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/convert.hpp b/contrib/restricted/boost/boost/geometry/algorithms/convert.hpp
deleted file mode 100644
index 6ccaa0dd4bb..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/convert.hpp
+++ /dev/null
@@ -1,581 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_CONVERT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_CONVERT_HPP
-
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/is_array.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/algorithms/clear.hpp>
-#include <boost/geometry/algorithms/for_each.hpp>
-#include <boost/geometry/algorithms/detail/assign_box_corners.hpp>
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
-#include <boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp>
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-
-#include <boost/geometry/views/closeable_view.hpp>
-#include <boost/geometry/views/reversible_view.hpp>
-
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-// Silence warning C4127: conditional expression is constant
-// Silence warning C4512: assignment operator could not be generated
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127 4512)
-#endif
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace conversion
-{
-
-template
-<
- typename Point,
- typename Box,
- std::size_t Index,
- std::size_t Dimension,
- std::size_t DimensionCount
->
-struct point_to_box
-{
- static inline void apply(Point const& point, Box& box)
- {
- typedef typename coordinate_type<Box>::type coordinate_type;
-
- set<Index, Dimension>(box,
- boost::numeric_cast<coordinate_type>(get<Dimension>(point)));
- point_to_box
- <
- Point, Box,
- Index, Dimension + 1, DimensionCount
- >::apply(point, box);
- }
-};
-
-
-template
-<
- typename Point,
- typename Box,
- std::size_t Index,
- std::size_t DimensionCount
->
-struct point_to_box<Point, Box, Index, DimensionCount, DimensionCount>
-{
- static inline void apply(Point const& , Box& )
- {}
-};
-
-template <typename Box, typename Range, bool Close, bool Reverse>
-struct box_to_range
-{
- static inline void apply(Box const& box, Range& range)
- {
- traits::resize<Range>::apply(range, Close ? 5 : 4);
- assign_box_corners_oriented<Reverse>(box, range);
- if (Close)
- {
- range::at(range, 4) = range::at(range, 0);
- }
- }
-};
-
-template <typename Segment, typename Range>
-struct segment_to_range
-{
- static inline void apply(Segment const& segment, Range& range)
- {
- traits::resize<Range>::apply(range, 2);
-
- typename boost::range_iterator<Range>::type it = boost::begin(range);
-
- assign_point_from_index<0>(segment, *it);
- ++it;
- assign_point_from_index<1>(segment, *it);
- }
-};
-
-template
-<
- typename Range1,
- typename Range2,
- bool Reverse = false
->
-struct range_to_range
-{
- typedef typename reversible_view
- <
- Range1 const,
- Reverse ? iterate_reverse : iterate_forward
- >::type rview_type;
- typedef typename closeable_view
- <
- rview_type const,
- geometry::closure<Range1>::value
- >::type view_type;
-
- struct default_policy
- {
- template <typename Point1, typename Point2>
- static inline void apply(Point1 const& point1, Point2 & point2)
- {
- geometry::detail::conversion::convert_point_to_point(point1, point2);
- }
- };
-
- static inline void apply(Range1 const& source, Range2& destination)
- {
- apply(source, destination, default_policy());
- }
-
- template <typename ConvertPointPolicy>
- static inline ConvertPointPolicy apply(Range1 const& source, Range2& destination,
- ConvertPointPolicy convert_point)
- {
- geometry::clear(destination);
-
- rview_type rview(source);
-
- // We consider input always as closed, and skip last
- // point for open output.
- view_type view(rview);
-
- typedef typename boost::range_size<Range1>::type size_type;
- size_type n = boost::size(view);
- if (geometry::closure<Range2>::value == geometry::open)
- {
- n--;
- }
-
- // If size == 0 && geometry::open <=> n = numeric_limits<size_type>::max()
- // but ok, sice below it == end()
-
- size_type i = 0;
- for (typename boost::range_iterator<view_type const>::type it
- = boost::begin(view);
- it != boost::end(view) && i < n;
- ++it, ++i)
- {
- typename boost::range_value<Range2>::type point;
- convert_point.apply(*it, point);
- range::push_back(destination, point);
- }
-
- return convert_point;
- }
-};
-
-template <typename Polygon1, typename Polygon2>
-struct polygon_to_polygon
-{
- typedef range_to_range
- <
- typename geometry::ring_type<Polygon1>::type,
- typename geometry::ring_type<Polygon2>::type,
- geometry::point_order<Polygon1>::value
- != geometry::point_order<Polygon2>::value
- > per_ring;
-
- static inline void apply(Polygon1 const& source, Polygon2& destination)
- {
- // Clearing managed per ring, and in the resizing of interior rings
-
- per_ring::apply(geometry::exterior_ring(source),
- geometry::exterior_ring(destination));
-
- // Container should be resizeable
- traits::resize
- <
- typename boost::remove_reference
- <
- typename traits::interior_mutable_type<Polygon2>::type
- >::type
- >::apply(interior_rings(destination), num_interior_rings(source));
-
- typename interior_return_type<Polygon1 const>::type
- rings_source = interior_rings(source);
- typename interior_return_type<Polygon2>::type
- rings_dest = interior_rings(destination);
-
- typename detail::interior_iterator<Polygon1 const>::type
- it_source = boost::begin(rings_source);
- typename detail::interior_iterator<Polygon2>::type
- it_dest = boost::begin(rings_dest);
-
- for ( ; it_source != boost::end(rings_source); ++it_source, ++it_dest)
- {
- per_ring::apply(*it_source, *it_dest);
- }
- }
-};
-
-template <typename Single, typename Multi, typename Policy>
-struct single_to_multi: private Policy
-{
- static inline void apply(Single const& single, Multi& multi)
- {
- traits::resize<Multi>::apply(multi, 1);
- Policy::apply(single, *boost::begin(multi));
- }
-};
-
-
-
-template <typename Multi1, typename Multi2, typename Policy>
-struct multi_to_multi: private Policy
-{
- static inline void apply(Multi1 const& multi1, Multi2& multi2)
- {
- traits::resize<Multi2>::apply(multi2, boost::size(multi1));
-
- typename boost::range_iterator<Multi1 const>::type it1
- = boost::begin(multi1);
- typename boost::range_iterator<Multi2>::type it2
- = boost::begin(multi2);
-
- for (; it1 != boost::end(multi1); ++it1, ++it2)
- {
- Policy::apply(*it1, *it2);
- }
- }
-};
-
-
-}} // namespace detail::conversion
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry1, typename Geometry2,
- typename Tag1 = typename tag_cast<typename tag<Geometry1>::type, multi_tag>::type,
- typename Tag2 = typename tag_cast<typename tag<Geometry2>::type, multi_tag>::type,
- std::size_t DimensionCount = dimension<Geometry1>::type::value,
- bool UseAssignment = boost::is_same<Geometry1, Geometry2>::value
- && !boost::is_array<Geometry1>::value
->
-struct convert: not_implemented<Tag1, Tag2, boost::mpl::int_<DimensionCount> >
-{};
-
-
-template
-<
- typename Geometry1, typename Geometry2,
- typename Tag,
- std::size_t DimensionCount
->
-struct convert<Geometry1, Geometry2, Tag, Tag, DimensionCount, true>
-{
- // Same geometry type -> copy whole geometry
- static inline void apply(Geometry1 const& source, Geometry2& destination)
- {
- destination = source;
- }
-};
-
-
-template
-<
- typename Geometry1, typename Geometry2,
- std::size_t DimensionCount
->
-struct convert<Geometry1, Geometry2, point_tag, point_tag, DimensionCount, false>
- : detail::conversion::point_to_point<Geometry1, Geometry2, 0, DimensionCount>
-{};
-
-
-template
-<
- typename Box1, typename Box2,
- std::size_t DimensionCount
->
-struct convert<Box1, Box2, box_tag, box_tag, DimensionCount, false>
- : detail::conversion::indexed_to_indexed<Box1, Box2, 0, DimensionCount>
-{};
-
-
-template
-<
- typename Segment1, typename Segment2,
- std::size_t DimensionCount
->
-struct convert<Segment1, Segment2, segment_tag, segment_tag, DimensionCount, false>
- : detail::conversion::indexed_to_indexed<Segment1, Segment2, 0, DimensionCount>
-{};
-
-
-template <typename Segment, typename LineString, std::size_t DimensionCount>
-struct convert<Segment, LineString, segment_tag, linestring_tag, DimensionCount, false>
- : detail::conversion::segment_to_range<Segment, LineString>
-{};
-
-
-template <typename Ring1, typename Ring2, std::size_t DimensionCount>
-struct convert<Ring1, Ring2, ring_tag, ring_tag, DimensionCount, false>
- : detail::conversion::range_to_range
- <
- Ring1,
- Ring2,
- geometry::point_order<Ring1>::value
- != geometry::point_order<Ring2>::value
- >
-{};
-
-template <typename LineString1, typename LineString2, std::size_t DimensionCount>
-struct convert<LineString1, LineString2, linestring_tag, linestring_tag, DimensionCount, false>
- : detail::conversion::range_to_range<LineString1, LineString2>
-{};
-
-template <typename Polygon1, typename Polygon2, std::size_t DimensionCount>
-struct convert<Polygon1, Polygon2, polygon_tag, polygon_tag, DimensionCount, false>
- : detail::conversion::polygon_to_polygon<Polygon1, Polygon2>
-{};
-
-template <typename Box, typename Ring>
-struct convert<Box, Ring, box_tag, ring_tag, 2, false>
- : detail::conversion::box_to_range
- <
- Box,
- Ring,
- geometry::closure<Ring>::value == closed,
- geometry::point_order<Ring>::value == counterclockwise
- >
-{};
-
-
-template <typename Box, typename Polygon>
-struct convert<Box, Polygon, box_tag, polygon_tag, 2, false>
-{
- static inline void apply(Box const& box, Polygon& polygon)
- {
- typedef typename ring_type<Polygon>::type ring_type;
-
- convert
- <
- Box, ring_type,
- box_tag, ring_tag,
- 2, false
- >::apply(box, exterior_ring(polygon));
- }
-};
-
-
-template <typename Point, typename Box, std::size_t DimensionCount>
-struct convert<Point, Box, point_tag, box_tag, DimensionCount, false>
-{
- static inline void apply(Point const& point, Box& box)
- {
- detail::conversion::point_to_box
- <
- Point, Box, min_corner, 0, DimensionCount
- >::apply(point, box);
- detail::conversion::point_to_box
- <
- Point, Box, max_corner, 0, DimensionCount
- >::apply(point, box);
- }
-};
-
-
-template <typename Ring, typename Polygon, std::size_t DimensionCount>
-struct convert<Ring, Polygon, ring_tag, polygon_tag, DimensionCount, false>
-{
- static inline void apply(Ring const& ring, Polygon& polygon)
- {
- typedef typename ring_type<Polygon>::type ring_type;
- convert
- <
- Ring, ring_type,
- ring_tag, ring_tag,
- DimensionCount, false
- >::apply(ring, exterior_ring(polygon));
- }
-};
-
-
-template <typename Polygon, typename Ring, std::size_t DimensionCount>
-struct convert<Polygon, Ring, polygon_tag, ring_tag, DimensionCount, false>
-{
- static inline void apply(Polygon const& polygon, Ring& ring)
- {
- typedef typename ring_type<Polygon>::type ring_type;
-
- convert
- <
- ring_type, Ring,
- ring_tag, ring_tag,
- DimensionCount, false
- >::apply(exterior_ring(polygon), ring);
- }
-};
-
-
-// Dispatch for multi <-> multi, specifying their single-version as policy.
-// Note that, even if the multi-types are mutually different, their single
-// version types might be the same and therefore we call boost::is_same again
-
-template <typename Multi1, typename Multi2, std::size_t DimensionCount>
-struct convert<Multi1, Multi2, multi_tag, multi_tag, DimensionCount, false>
- : detail::conversion::multi_to_multi
- <
- Multi1,
- Multi2,
- convert
- <
- typename boost::range_value<Multi1>::type,
- typename boost::range_value<Multi2>::type,
- typename single_tag_of
- <
- typename tag<Multi1>::type
- >::type,
- typename single_tag_of
- <
- typename tag<Multi2>::type
- >::type,
- DimensionCount
- >
- >
-{};
-
-
-template <typename Single, typename Multi, typename SingleTag, std::size_t DimensionCount>
-struct convert<Single, Multi, SingleTag, multi_tag, DimensionCount, false>
- : detail::conversion::single_to_multi
- <
- Single,
- Multi,
- convert
- <
- Single,
- typename boost::range_value<Multi>::type,
- typename tag<Single>::type,
- typename single_tag_of
- <
- typename tag<Multi>::type
- >::type,
- DimensionCount,
- false
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_variant {
-
-template <typename Geometry1, typename Geometry2>
-struct convert
-{
- static inline void apply(Geometry1 const& geometry1, Geometry2& geometry2)
- {
- concepts::check_concepts_and_equal_dimensions<Geometry1 const, Geometry2>();
- dispatch::convert<Geometry1, Geometry2>::apply(geometry1, geometry2);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct convert<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- struct visitor: static_visitor<void>
- {
- Geometry2& m_geometry2;
-
- visitor(Geometry2& geometry2)
- : m_geometry2(geometry2)
- {}
-
- template <typename Geometry1>
- inline void operator()(Geometry1 const& geometry1) const
- {
- convert<Geometry1, Geometry2>::apply(geometry1, m_geometry2);
- }
- };
-
- static inline void apply(
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2& geometry2
- )
- {
- boost::apply_visitor(visitor(geometry2), geometry1);
- }
-};
-
-}
-
-
-/*!
-\brief Converts one geometry to another geometry
-\details The convert algorithm converts one geometry, e.g. a BOX, to another
-geometry, e.g. a RING. This only works if it is possible and applicable.
-If the point-order is different, or the closure is different between two
-geometry types, it will be converted correctly by explicitly reversing the
-points or closing or opening the polygon rings.
-\ingroup convert
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry (source)
-\param geometry2 \param_geometry (target)
-
-\qbk{[include reference/algorithms/convert.qbk]}
- */
-template <typename Geometry1, typename Geometry2>
-inline void convert(Geometry1 const& geometry1, Geometry2& geometry2)
-{
- resolve_variant::convert<Geometry1, Geometry2>::apply(geometry1, geometry2);
-}
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_CONVERT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/convex_hull.hpp b/contrib/restricted/boost/boost/geometry/algorithms/convex_hull.hpp
deleted file mode 100644
index 26bb8509e34..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/convex_hull.hpp
+++ /dev/null
@@ -1,375 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014, 2015.
-// Modifications copyright (c) 2014-2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_CONVEX_HULL_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_CONVEX_HULL_HPP
-
-#include <boost/array.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/strategies/convex_hull.hpp>
-#include <boost/geometry/strategies/concepts/convex_hull_concept.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-
-#include <boost/geometry/views/detail/range_type.hpp>
-
-#include <boost/geometry/algorithms/is_empty.hpp>
-#include <boost/geometry/algorithms/detail/as_range.hpp>
-#include <boost/geometry/algorithms/detail/assign_box_corners.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace convex_hull
-{
-
-template <order_selector Order, closure_selector Closure>
-struct hull_insert
-{
-
- // Member template function (to avoid inconvenient declaration
- // of output-iterator-type, from hull_to_geometry)
- template <typename Geometry, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(Geometry const& geometry,
- OutputIterator out, Strategy const& strategy)
- {
- typename Strategy::state_type state;
-
- strategy.apply(geometry, state);
- strategy.result(state, out, Order == clockwise, Closure != open);
- return out;
- }
-};
-
-struct hull_to_geometry
-{
- template <typename Geometry, typename OutputGeometry, typename Strategy>
- static inline void apply(Geometry const& geometry, OutputGeometry& out,
- Strategy const& strategy)
- {
- hull_insert
- <
- geometry::point_order<OutputGeometry>::value,
- geometry::closure<OutputGeometry>::value
- >::apply(geometry,
- range::back_inserter(
- // Handle linestring, ring and polygon the same:
- detail::as_range
- <
- typename range_type<OutputGeometry>::type
- >(out)), strategy);
- }
-};
-
-}} // namespace detail::convex_hull
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type
->
-struct convex_hull
- : detail::convex_hull::hull_to_geometry
-{};
-
-template <typename Box>
-struct convex_hull<Box, box_tag>
-{
- template <typename OutputGeometry, typename Strategy>
- static inline void apply(Box const& box, OutputGeometry& out,
- Strategy const& )
- {
- static bool const Close
- = geometry::closure<OutputGeometry>::value == closed;
- static bool const Reverse
- = geometry::point_order<OutputGeometry>::value == counterclockwise;
-
- // A hull for boxes is trivial. Any strategy is (currently) skipped.
- boost::array<typename point_type<Box>::type, 4> range;
- geometry::detail::assign_box_corners_oriented<Reverse>(box, range);
- geometry::append(out, range);
- if (BOOST_GEOMETRY_CONDITION(Close))
- {
- geometry::append(out, *boost::begin(range));
- }
- }
-};
-
-
-
-template <order_selector Order, closure_selector Closure>
-struct convex_hull_insert
- : detail::convex_hull::hull_insert<Order, Closure>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy {
-
-struct convex_hull
-{
- template <typename Geometry, typename OutputGeometry, typename Strategy>
- static inline void apply(Geometry const& geometry,
- OutputGeometry& out,
- Strategy const& strategy)
- {
- BOOST_CONCEPT_ASSERT( (geometry::concepts::ConvexHullStrategy<Strategy>) );
- dispatch::convex_hull<Geometry>::apply(geometry, out, strategy);
- }
-
- template <typename Geometry, typename OutputGeometry>
- static inline void apply(Geometry const& geometry,
- OutputGeometry& out,
- default_strategy)
- {
- typedef typename strategy_convex_hull<
- Geometry,
- typename point_type<Geometry>::type
- >::type strategy_type;
-
- apply(geometry, out, strategy_type());
- }
-};
-
-struct convex_hull_insert
-{
- template <typename Geometry, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(Geometry const& geometry,
- OutputIterator& out,
- Strategy const& strategy)
- {
- BOOST_CONCEPT_ASSERT( (geometry::concepts::ConvexHullStrategy<Strategy>) );
-
- return dispatch::convex_hull_insert<
- geometry::point_order<Geometry>::value,
- geometry::closure<Geometry>::value
- >::apply(geometry, out, strategy);
- }
-
- template <typename Geometry, typename OutputIterator>
- static inline OutputIterator apply(Geometry const& geometry,
- OutputIterator& out,
- default_strategy)
- {
- typedef typename strategy_convex_hull<
- Geometry,
- typename point_type<Geometry>::type
- >::type strategy_type;
-
- return apply(geometry, out, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant {
-
-template <typename Geometry>
-struct convex_hull
-{
- template <typename OutputGeometry, typename Strategy>
- static inline void apply(Geometry const& geometry, OutputGeometry& out, Strategy const& strategy)
- {
- concepts::check_concepts_and_equal_dimensions<
- const Geometry,
- OutputGeometry
- >();
-
- resolve_strategy::convex_hull::apply(geometry, out, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct convex_hull<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename OutputGeometry, typename Strategy>
- struct visitor: boost::static_visitor<void>
- {
- OutputGeometry& m_out;
- Strategy const& m_strategy;
-
- visitor(OutputGeometry& out, Strategy const& strategy)
- : m_out(out), m_strategy(strategy)
- {}
-
- template <typename Geometry>
- void operator()(Geometry const& geometry) const
- {
- convex_hull<Geometry>::apply(geometry, m_out, m_strategy);
- }
- };
-
- template <typename OutputGeometry, typename Strategy>
- static inline void
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- OutputGeometry& out,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<OutputGeometry, Strategy>(out, strategy), geometry);
- }
-};
-
-template <typename Geometry>
-struct convex_hull_insert
-{
- template <typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(Geometry const& geometry, OutputIterator& out, Strategy const& strategy)
- {
- // Concept: output point type = point type of input geometry
- concepts::check<Geometry const>();
- concepts::check<typename point_type<Geometry>::type>();
-
- return resolve_strategy::convex_hull_insert::apply(geometry, out, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct convex_hull_insert<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename OutputIterator, typename Strategy>
- struct visitor: boost::static_visitor<OutputIterator>
- {
- OutputIterator& m_out;
- Strategy const& m_strategy;
-
- visitor(OutputIterator& out, Strategy const& strategy)
- : m_out(out), m_strategy(strategy)
- {}
-
- template <typename Geometry>
- OutputIterator operator()(Geometry const& geometry) const
- {
- return convex_hull_insert<Geometry>::apply(geometry, m_out, m_strategy);
- }
- };
-
- template <typename OutputIterator, typename Strategy>
- static inline OutputIterator
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- OutputIterator& out,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<OutputIterator, Strategy>(out, strategy), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-template<typename Geometry, typename OutputGeometry, typename Strategy>
-inline void convex_hull(Geometry const& geometry,
- OutputGeometry& out, Strategy const& strategy)
-{
- if (geometry::is_empty(geometry))
- {
- // Leave output empty
- return;
- }
-
- resolve_variant::convex_hull<Geometry>::apply(geometry, out, strategy);
-}
-
-
-/*!
-\brief \brief_calc{convex hull}
-\ingroup convex_hull
-\details \details_calc{convex_hull,convex hull}.
-\tparam Geometry the input geometry type
-\tparam OutputGeometry the output geometry type
-\param geometry \param_geometry, input geometry
-\param hull \param_geometry \param_set{convex hull}
-
-\qbk{[include reference/algorithms/convex_hull.qbk]}
- */
-template<typename Geometry, typename OutputGeometry>
-inline void convex_hull(Geometry const& geometry,
- OutputGeometry& hull)
-{
- geometry::convex_hull(geometry, hull, default_strategy());
-}
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace convex_hull
-{
-
-
-template<typename Geometry, typename OutputIterator, typename Strategy>
-inline OutputIterator convex_hull_insert(Geometry const& geometry,
- OutputIterator out, Strategy const& strategy)
-{
- return resolve_variant::convex_hull_insert<Geometry>
- ::apply(geometry, out, strategy);
-}
-
-
-/*!
-\brief Calculate the convex hull of a geometry, output-iterator version
-\ingroup convex_hull
-\tparam Geometry the input geometry type
-\tparam OutputIterator: an output-iterator
-\param geometry the geometry to calculate convex hull from
-\param out an output iterator outputing points of the convex hull
-\note This overloaded version outputs to an output iterator.
-In this case, nothing is known about its point-type or
- about its clockwise order. Therefore, the input point-type
- and order are copied
-
- */
-template<typename Geometry, typename OutputIterator>
-inline OutputIterator convex_hull_insert(Geometry const& geometry,
- OutputIterator out)
-{
- return convex_hull_insert(geometry, out, default_strategy());
-}
-
-
-}} // namespace detail::convex_hull
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_CONVEX_HULL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/correct.hpp b/contrib/restricted/boost/boost/geometry/algorithms/correct.hpp
deleted file mode 100644
index 21b9977ce54..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/correct.hpp
+++ /dev/null
@@ -1,360 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_CORRECT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_CORRECT_HPP
-
-
-#include <algorithm>
-#include <cstddef>
-#include <functional>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/correct_closure.hpp>
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/area.hpp>
-#include <boost/geometry/algorithms/detail/multi_modify.hpp>
-#include <boost/geometry/util/order_as_direction.hpp>
-
-namespace boost { namespace geometry
-{
-
-// Silence warning C4127: conditional expression is constant
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
-#endif
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace correct
-{
-
-template <typename Geometry>
-struct correct_nop
-{
- template <typename Strategy>
- static inline void apply(Geometry& , Strategy const& )
- {}
-};
-
-
-template <typename Box, std::size_t Dimension, std::size_t DimensionCount>
-struct correct_box_loop
-{
- typedef typename coordinate_type<Box>::type coordinate_type;
-
- static inline void apply(Box& box)
- {
- if (get<min_corner, Dimension>(box) > get<max_corner, Dimension>(box))
- {
- // Swap the coordinates
- coordinate_type max_value = get<min_corner, Dimension>(box);
- coordinate_type min_value = get<max_corner, Dimension>(box);
- set<min_corner, Dimension>(box, min_value);
- set<max_corner, Dimension>(box, max_value);
- }
-
- correct_box_loop
- <
- Box, Dimension + 1, DimensionCount
- >::apply(box);
- }
-};
-
-
-
-template <typename Box, std::size_t DimensionCount>
-struct correct_box_loop<Box, DimensionCount, DimensionCount>
-{
- static inline void apply(Box& )
- {}
-
-};
-
-
-// Correct a box: make min/max correct
-template <typename Box>
-struct correct_box
-{
- template <typename Strategy>
- static inline void apply(Box& box, Strategy const& )
- {
- // Currently only for Cartesian coordinates
- // (or spherical without crossing dateline)
- // Future version: adapt using strategies
- correct_box_loop
- <
- Box, 0, dimension<Box>::type::value
- >::apply(box);
- }
-};
-
-
-// Close a ring, if not closed
-template <typename Ring, template <typename> class Predicate>
-struct correct_ring
-{
- typedef typename point_type<Ring>::type point_type;
- typedef typename coordinate_type<Ring>::type coordinate_type;
-
- typedef detail::area::ring_area
- <
- order_as_direction<geometry::point_order<Ring>::value>::value,
- geometry::closure<Ring>::value
- > ring_area_type;
-
-
- template <typename Strategy>
- static inline void apply(Ring& r, Strategy const& strategy)
- {
- // Correct closure if necessary
- detail::correct_closure::close_or_open_ring<Ring>::apply(r);
-
- // Check area
- typedef typename area_result<Ring, Strategy>::type area_result_type;
- Predicate<area_result_type> predicate;
- area_result_type const zero = 0;
- if (predicate(ring_area_type::apply(r, strategy), zero))
- {
- std::reverse(boost::begin(r), boost::end(r));
- }
- }
-};
-
-// Correct a polygon: normalizes all rings, sets outer ring clockwise, sets all
-// inner rings counter clockwise (or vice versa depending on orientation)
-template <typename Polygon>
-struct correct_polygon
-{
- typedef typename ring_type<Polygon>::type ring_type;
-
- template <typename Strategy>
- static inline void apply(Polygon& poly, Strategy const& strategy)
- {
- correct_ring
- <
- ring_type,
- std::less
- >::apply(exterior_ring(poly), strategy);
-
- typename interior_return_type<Polygon>::type
- rings = interior_rings(poly);
- for (typename detail::interior_iterator<Polygon>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- correct_ring
- <
- ring_type,
- std::greater
- >::apply(*it, strategy);
- }
- }
-};
-
-
-}} // namespace detail::correct
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct correct: not_implemented<Tag>
-{};
-
-template <typename Point>
-struct correct<Point, point_tag>
- : detail::correct::correct_nop<Point>
-{};
-
-template <typename LineString>
-struct correct<LineString, linestring_tag>
- : detail::correct::correct_nop<LineString>
-{};
-
-template <typename Segment>
-struct correct<Segment, segment_tag>
- : detail::correct::correct_nop<Segment>
-{};
-
-
-template <typename Box>
-struct correct<Box, box_tag>
- : detail::correct::correct_box<Box>
-{};
-
-template <typename Ring>
-struct correct<Ring, ring_tag>
- : detail::correct::correct_ring
- <
- Ring,
- std::less
- >
-{};
-
-template <typename Polygon>
-struct correct<Polygon, polygon_tag>
- : detail::correct::correct_polygon<Polygon>
-{};
-
-
-template <typename MultiPoint>
-struct correct<MultiPoint, multi_point_tag>
- : detail::correct::correct_nop<MultiPoint>
-{};
-
-
-template <typename MultiLineString>
-struct correct<MultiLineString, multi_linestring_tag>
- : detail::correct::correct_nop<MultiLineString>
-{};
-
-
-template <typename Geometry>
-struct correct<Geometry, multi_polygon_tag>
- : detail::multi_modify
- <
- Geometry,
- detail::correct::correct_polygon
- <
- typename boost::range_value<Geometry>::type
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_variant {
-
-template <typename Geometry>
-struct correct
-{
- template <typename Strategy>
- static inline void apply(Geometry& geometry, Strategy const& strategy)
- {
- concepts::check<Geometry const>();
- dispatch::correct<Geometry>::apply(geometry, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct correct<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<void>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy): m_strategy(strategy) {}
-
- template <typename Geometry>
- void operator()(Geometry& geometry) const
- {
- correct<Geometry>::apply(geometry, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline void
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry, Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Strategy>(strategy), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief Corrects a geometry
-\details Corrects a geometry: all rings which are wrongly oriented with respect
- to their expected orientation are reversed. To all rings which do not have a
- closing point and are typed as they should have one, the first point is
- appended. Also boxes can be corrected.
-\ingroup correct
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry which will be corrected if necessary
-
-\qbk{[include reference/algorithms/correct.qbk]}
-*/
-template <typename Geometry>
-inline void correct(Geometry& geometry)
-{
- typedef typename point_type<Geometry>::type point_type;
-
- typedef typename strategy::area::services::default_strategy
- <
- typename cs_tag<point_type>::type
- >::type strategy_type;
-
- resolve_variant::correct<Geometry>::apply(geometry, strategy_type());
-}
-
-/*!
-\brief Corrects a geometry
-\details Corrects a geometry: all rings which are wrongly oriented with respect
- to their expected orientation are reversed. To all rings which do not have a
- closing point and are typed as they should have one, the first point is
- appended. Also boxes can be corrected.
-\ingroup correct
-\tparam Geometry \tparam_geometry
-\tparam Strategy \tparam_strategy{Area}
-\param geometry \param_geometry which will be corrected if necessary
-\param strategy \param_strategy{area}
-
-\qbk{distinguish,with strategy}
-
-\qbk{[include reference/algorithms/correct.qbk]}
-*/
-template <typename Geometry, typename Strategy>
-inline void correct(Geometry& geometry, Strategy const& strategy)
-{
- resolve_variant::correct<Geometry>::apply(geometry, strategy);
-}
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_CORRECT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/correct_closure.hpp b/contrib/restricted/boost/boost/geometry/algorithms/correct_closure.hpp
deleted file mode 100644
index 323107f23a2..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/correct_closure.hpp
+++ /dev/null
@@ -1,235 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_CORRECT_CLOSURE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_CORRECT_CLOSURE_HPP
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/disjoint.hpp>
-#include <boost/geometry/algorithms/detail/multi_modify.hpp>
-
-namespace boost { namespace geometry
-{
-
-// Silence warning C4127: conditional expression is constant
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
-#endif
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace correct_closure
-{
-
-template <typename Geometry>
-struct nop
-{
- static inline void apply(Geometry& )
- {}
-};
-
-
-// Close a ring, if not closed, or open it
-template <typename Ring>
-struct close_or_open_ring
-{
- static inline void apply(Ring& r)
- {
- if (boost::size(r) <= 2)
- {
- return;
- }
-
- bool const disjoint = geometry::disjoint(*boost::begin(r),
- *(boost::end(r) - 1));
- closure_selector const s = geometry::closure<Ring>::value;
-
- if (disjoint && s == closed)
- {
- // Close it by adding first point
- geometry::append(r, *boost::begin(r));
- }
- else if (! disjoint && s != closed)
- {
- // Open it by removing last point
- geometry::traits::resize<Ring>::apply(r, boost::size(r) - 1);
- }
- }
-};
-
-// Close/open exterior ring and all its interior rings
-template <typename Polygon>
-struct close_or_open_polygon
-{
- typedef typename ring_type<Polygon>::type ring_type;
-
- static inline void apply(Polygon& poly)
- {
- close_or_open_ring<ring_type>::apply(exterior_ring(poly));
-
- typename interior_return_type<Polygon>::type
- rings = interior_rings(poly);
-
- for (typename detail::interior_iterator<Polygon>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- close_or_open_ring<ring_type>::apply(*it);
- }
- }
-};
-
-}} // namespace detail::correct_closure
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct correct_closure: not_implemented<Tag>
-{};
-
-template <typename Point>
-struct correct_closure<Point, point_tag>
- : detail::correct_closure::nop<Point>
-{};
-
-template <typename LineString>
-struct correct_closure<LineString, linestring_tag>
- : detail::correct_closure::nop<LineString>
-{};
-
-template <typename Segment>
-struct correct_closure<Segment, segment_tag>
- : detail::correct_closure::nop<Segment>
-{};
-
-
-template <typename Box>
-struct correct_closure<Box, box_tag>
- : detail::correct_closure::nop<Box>
-{};
-
-template <typename Ring>
-struct correct_closure<Ring, ring_tag>
- : detail::correct_closure::close_or_open_ring<Ring>
-{};
-
-template <typename Polygon>
-struct correct_closure<Polygon, polygon_tag>
- : detail::correct_closure::close_or_open_polygon<Polygon>
-{};
-
-
-template <typename MultiPoint>
-struct correct_closure<MultiPoint, multi_point_tag>
- : detail::correct_closure::nop<MultiPoint>
-{};
-
-
-template <typename MultiLineString>
-struct correct_closure<MultiLineString, multi_linestring_tag>
- : detail::correct_closure::nop<MultiLineString>
-{};
-
-
-template <typename Geometry>
-struct correct_closure<Geometry, multi_polygon_tag>
- : detail::multi_modify
- <
- Geometry,
- detail::correct_closure::close_or_open_polygon
- <
- typename boost::range_value<Geometry>::type
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct correct_closure
-{
- static inline void apply(Geometry& geometry)
- {
- concepts::check<Geometry const>();
- dispatch::correct_closure<Geometry>::apply(geometry);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct correct_closure<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- struct visitor: boost::static_visitor<void>
- {
- template <typename Geometry>
- void operator()(Geometry& geometry) const
- {
- correct_closure<Geometry>::apply(geometry);
- }
- };
-
- static inline void
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry)
- {
- visitor vis;
- boost::apply_visitor(vis, geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief Closes or opens a geometry, according to its type
-\details Corrects a geometry w.r.t. closure points to all rings which do not
- have a closing point and are typed as they should have one, the first point
- is appended.
-\ingroup correct_closure
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry which will be corrected if necessary
-*/
-template <typename Geometry>
-inline void correct_closure(Geometry& geometry)
-{
- resolve_variant::correct_closure<Geometry>::apply(geometry);
-}
-
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_CORRECT_CLOSURE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/covered_by.hpp b/contrib/restricted/boost/boost/geometry/algorithms/covered_by.hpp
deleted file mode 100644
index d68429673a6..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/covered_by.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013, 2014, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_COVERED_BY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_COVERED_BY_HPP
-
-
-#include <boost/geometry/algorithms/detail/covered_by/interface.hpp>
-#include <boost/geometry/algorithms/detail/covered_by/implementation.hpp>
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_COVERED_BY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/crosses.hpp b/contrib/restricted/boost/boost/geometry/algorithms/crosses.hpp
deleted file mode 100644
index c9e3651ab2f..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/crosses.hpp
+++ /dev/null
@@ -1,267 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Samuel Debionne, Grenoble, France.
-
-// This file was modified by Oracle on 2014, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_CROSSES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_CROSSES_HPP
-
-#include <cstddef>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/relate.hpp>
-#include <boost/geometry/algorithms/detail/relate/relate_impl.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename tag<Geometry1>::type,
- typename Tag2 = typename tag<Geometry2>::type
->
-struct crosses
- : detail::relate::relate_impl
- <
- detail::de9im::static_mask_crosses_type,
- Geometry1,
- Geometry2
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy
-{
-
-struct crosses
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- return dispatch::crosses<Geometry1, Geometry2>::apply(geometry1, geometry2, strategy);
- }
-
- template <typename Geometry1, typename Geometry2>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- default_strategy)
- {
- typedef typename strategy::relate::services::default_strategy
- <
- Geometry1,
- Geometry2
- >::type strategy_type;
-
- return apply(geometry1, geometry2, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant
-{
- template <typename Geometry1, typename Geometry2>
- struct crosses
- {
- template <typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return resolve_strategy::crosses::apply(geometry1, geometry2, strategy);
- }
- };
-
-
- template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
- struct crosses<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
- {
- template <typename Strategy>
- struct visitor: static_visitor<bool>
- {
- Geometry2 const& m_geometry2;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2, Strategy const& strategy)
- : m_geometry2(geometry2)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1>
- result_type operator()(Geometry1 const& geometry1) const
- {
- return crosses
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, m_geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry2, strategy), geometry1);
- }
- };
-
-
- template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
- struct crosses<Geometry1, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
- {
- template <typename Strategy>
- struct visitor: static_visitor<bool>
- {
- Geometry1 const& m_geometry1;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1, Strategy const& strategy)
- : m_geometry1(geometry1)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry2>
- result_type operator()(Geometry2 const& geometry2) const
- {
- return crosses
- <
- Geometry1,
- Geometry2
- >::apply(m_geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry1, strategy), geometry2);
- }
- };
-
-
- template <BOOST_VARIANT_ENUM_PARAMS(typename T1), BOOST_VARIANT_ENUM_PARAMS(typename T2)>
- struct crosses<variant<BOOST_VARIANT_ENUM_PARAMS(T1)>, variant<BOOST_VARIANT_ENUM_PARAMS(T2)> >
- {
- template <typename Strategy>
- struct visitor: static_visitor<bool>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Geometry1, typename Geometry2>
- result_type operator()(Geometry1 const& geometry1,
- Geometry2 const& geometry2) const
- {
- return crosses
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool apply(variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), geometry1, geometry2);
- }
- };
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_check2{crosses}
-\ingroup crosses
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Strategy \tparam_strategy{Crosses}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param strategy \param_strategy{crosses}
-\return \return_check2{crosses}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/crosses.qbk]}
-*/
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline bool crosses(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- return resolve_variant::crosses
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, strategy);
-}
-
-/*!
-\brief \brief_check2{crosses}
-\ingroup crosses
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return \return_check2{crosses}
-
-\qbk{[include reference/algorithms/crosses.qbk]}
-*/
-template <typename Geometry1, typename Geometry2>
-inline bool crosses(Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- return resolve_variant::crosses
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, default_strategy());
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_CROSSES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/densify.hpp b/contrib/restricted/boost/boost/geometry/algorithms/densify.hpp
deleted file mode 100644
index ed948b3464c..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/densify.hpp
+++ /dev/null
@@ -1,425 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017-2018, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DENSIFY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DENSIFY_HPP
-
-
-#include <boost/geometry/algorithms/clear.hpp>
-#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/exception.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/densify.hpp>
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/range/size.hpp>
-#include <boost/range/value_type.hpp>
-
-#include <boost/throw_exception.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace densify
-{
-
-template <typename Range>
-struct push_back_policy
-{
- typedef typename boost::range_value<Range>::type point_type;
-
- inline explicit push_back_policy(Range & rng)
- : m_rng(rng)
- {}
-
- inline void apply(point_type const& p)
- {
- range::push_back(m_rng, p);
- }
-
-private:
- Range & m_rng;
-};
-
-template <typename Range, typename Point>
-inline void convert_and_push_back(Range & range, Point const& p)
-{
- typename boost::range_value<Range>::type p2;
- geometry::detail::conversion::convert_point_to_point(p, p2);
- range::push_back(range, p2);
-}
-
-template <bool AppendLastPoint = true>
-struct densify_range
-{
- template <typename FwdRng, typename MutRng, typename T, typename Strategy>
- static inline void apply(FwdRng const& rng, MutRng & rng_out,
- T const& len, Strategy const& strategy)
- {
- typedef typename boost::range_iterator<FwdRng const>::type iterator_t;
- typedef typename boost::range_value<FwdRng>::type point_t;
-
- iterator_t it = boost::begin(rng);
- iterator_t end = boost::end(rng);
-
- if (it == end) // empty(rng)
- {
- return;
- }
-
- push_back_policy<MutRng> policy(rng_out);
-
- iterator_t prev = it;
- for ( ++it ; it != end ; prev = it++)
- {
- point_t const& p0 = *prev;
- point_t const& p1 = *it;
-
- convert_and_push_back(rng_out, p0);
-
- strategy.apply(p0, p1, policy, len);
- }
-
- if (BOOST_GEOMETRY_CONDITION(AppendLastPoint))
- {
- convert_and_push_back(rng_out, *prev); // back(rng)
- }
- }
-};
-
-template <bool IsClosed1, bool IsClosed2> // false, X
-struct densify_ring
-{
- template <typename Geometry, typename GeometryOut, typename T, typename Strategy>
- static inline void apply(Geometry const& ring, GeometryOut & ring_out,
- T const& len, Strategy const& strategy)
- {
- geometry::detail::densify::densify_range<true>
- ::apply(ring, ring_out, len, strategy);
-
- if (boost::size(ring) <= 1)
- return;
-
- typedef typename point_type<Geometry>::type point_t;
- point_t const& p0 = range::back(ring);
- point_t const& p1 = range::front(ring);
-
- push_back_policy<GeometryOut> policy(ring_out);
-
- strategy.apply(p0, p1, policy, len);
-
- if (BOOST_GEOMETRY_CONDITION(IsClosed2))
- {
- convert_and_push_back(ring_out, p1);
- }
- }
-};
-
-template <>
-struct densify_ring<true, true>
- : densify_range<true>
-{};
-
-template <>
-struct densify_ring<true, false>
- : densify_range<false>
-{};
-
-
-}} // namespace detail::densify
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry,
- typename GeometryOut,
- typename Tag1 = typename tag<Geometry>::type,
- typename Tag2 = typename tag<GeometryOut>::type
->
-struct densify
- : not_implemented<Tag1, Tag2>
-{};
-
-template <typename Geometry, typename GeometryOut>
-struct densify<Geometry, GeometryOut, linestring_tag, linestring_tag>
- : geometry::detail::densify::densify_range<>
-{};
-
-template <typename Geometry, typename GeometryOut>
-struct densify<Geometry, GeometryOut, multi_linestring_tag, multi_linestring_tag>
-{
- template <typename T, typename Strategy>
- static void apply(Geometry const& mls, GeometryOut & mls_out,
- T const& len, Strategy const& strategy)
- {
- std::size_t count = boost::size(mls);
- range::resize(mls_out, count);
-
- for (std::size_t i = 0 ; i < count ; ++i)
- {
- geometry::detail::densify::densify_range<>
- ::apply(range::at(mls, i), range::at(mls_out, i),
- len, strategy);
- }
- }
-};
-
-template <typename Geometry, typename GeometryOut>
-struct densify<Geometry, GeometryOut, ring_tag, ring_tag>
- : geometry::detail::densify::densify_ring
- <
- geometry::closure<Geometry>::value != geometry::open,
- geometry::closure<GeometryOut>::value != geometry::open
- >
-{};
-
-template <typename Geometry, typename GeometryOut>
-struct densify<Geometry, GeometryOut, polygon_tag, polygon_tag>
-{
- template <typename T, typename Strategy>
- static void apply(Geometry const& poly, GeometryOut & poly_out,
- T const& len, Strategy const& strategy)
- {
- apply_ring(exterior_ring(poly), exterior_ring(poly_out),
- len, strategy);
-
- std::size_t count = boost::size(interior_rings(poly));
- range::resize(interior_rings(poly_out), count);
-
- for (std::size_t i = 0 ; i < count ; ++i)
- {
- apply_ring(range::at(interior_rings(poly), i),
- range::at(interior_rings(poly_out), i),
- len, strategy);
- }
- }
-
- template <typename Ring, typename RingOut, typename T, typename Strategy>
- static void apply_ring(Ring const& ring, RingOut & ring_out,
- T const& len, Strategy const& strategy)
- {
- densify<Ring, RingOut, ring_tag, ring_tag>
- ::apply(ring, ring_out, len, strategy);
- }
-};
-
-template <typename Geometry, typename GeometryOut>
-struct densify<Geometry, GeometryOut, multi_polygon_tag, multi_polygon_tag>
-{
- template <typename T, typename Strategy>
- static void apply(Geometry const& mpoly, GeometryOut & mpoly_out,
- T const& len, Strategy const& strategy)
- {
- std::size_t count = boost::size(mpoly);
- range::resize(mpoly_out, count);
-
- for (std::size_t i = 0 ; i < count ; ++i)
- {
- apply_poly(range::at(mpoly, i),
- range::at(mpoly_out, i),
- len, strategy);
- }
- }
-
- template <typename Poly, typename PolyOut, typename T, typename Strategy>
- static void apply_poly(Poly const& poly, PolyOut & poly_out,
- T const& len, Strategy const& strategy)
- {
- densify<Poly, PolyOut, polygon_tag, polygon_tag>::
- apply(poly, poly_out, len, strategy);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy
-{
-
-struct densify
-{
- template <typename Geometry, typename Distance, typename Strategy>
- static inline void apply(Geometry const& geometry,
- Geometry& out,
- Distance const& max_distance,
- Strategy const& strategy)
- {
- dispatch::densify<Geometry, Geometry>
- ::apply(geometry, out, max_distance, strategy);
- }
-
- template <typename Geometry, typename Distance>
- static inline void apply(Geometry const& geometry,
- Geometry& out,
- Distance const& max_distance,
- default_strategy)
- {
- typedef typename strategy::densify::services::default_strategy
- <
- typename cs_tag<Geometry>::type
- >::type strategy_type;
-
- /*BOOST_CONCEPT_ASSERT(
- (concepts::DensifyStrategy<strategy_type>)
- );*/
-
- apply(geometry, out, max_distance, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant {
-
-template <typename Geometry>
-struct densify
-{
- template <typename Distance, typename Strategy>
- static inline void apply(Geometry const& geometry,
- Geometry& out,
- Distance const& max_distance,
- Strategy const& strategy)
- {
- resolve_strategy::densify::apply(geometry, out, max_distance, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct densify<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Distance, typename Strategy>
- struct visitor: boost::static_visitor<void>
- {
- Distance const& m_max_distance;
- Strategy const& m_strategy;
-
- visitor(Distance const& max_distance, Strategy const& strategy)
- : m_max_distance(max_distance)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry>
- void operator()(Geometry const& geometry, Geometry& out) const
- {
- densify<Geometry>::apply(geometry, out, m_max_distance, m_strategy);
- }
- };
-
- template <typename Distance, typename Strategy>
- static inline void
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& out,
- Distance const& max_distance,
- Strategy const& strategy)
- {
- boost::apply_visitor(
- visitor<Distance, Strategy>(max_distance, strategy),
- geometry,
- out
- );
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief Densify a geometry using a specified strategy
-\ingroup densify
-\tparam Geometry \tparam_geometry
-\tparam Distance A numerical distance measure
-\tparam Strategy A type fulfilling a DensifyStrategy concept
-\param geometry Input geometry, to be densified
-\param out Output geometry, densified version of the input geometry
-\param max_distance Distance threshold (in units depending on strategy)
-\param strategy Densify strategy to be used for densification
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/densify.qbk]}
-
-\qbk{
-[heading Available Strategies]
-\* [link geometry.reference.strategies.strategy_densify_cartesian Cartesian]
-\* [link geometry.reference.strategies.strategy_densify_spherical Spherical]
-\* [link geometry.reference.strategies.strategy_densify_geographic Geographic]
-
-[heading Example]
-[densify_strategy]
-[densify_strategy_output]
-}
-*/
-template <typename Geometry, typename Distance, typename Strategy>
-inline void densify(Geometry const& geometry,
- Geometry& out,
- Distance const& max_distance,
- Strategy const& strategy)
-{
- concepts::check<Geometry>();
-
- if (max_distance <= Distance(0))
- {
- BOOST_THROW_EXCEPTION(geometry::invalid_input_exception());
- }
-
- geometry::clear(out);
-
- resolve_variant::densify
- <
- Geometry
- >::apply(geometry, out, max_distance, strategy);
-}
-
-
-/*!
-\brief Densify a geometry
-\ingroup densify
-\tparam Geometry \tparam_geometry
-\tparam Distance A numerical distance measure
-\param geometry Input geometry, to be densified
-\param out Output geometry, densified version of the input geometry
-\param max_distance Distance threshold (in units depending on coordinate system)
-
-\qbk{[include reference/algorithms/densify.qbk]}
-
-\qbk{
-[heading Example]
-[densify]
-[densify_output]
-}
-*/
-template <typename Geometry, typename Distance>
-inline void densify(Geometry const& geometry,
- Geometry& out,
- Distance const& max_distance)
-{
- densify(geometry, out, max_distance, default_strategy());
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DENSIFY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/as_range.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/as_range.hpp
deleted file mode 100644
index fef5156eeff..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/as_range.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_AS_RANGE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_AS_RANGE_HPP
-
-
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/add_const_if_c.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename GeometryTag, typename Geometry, typename Range, bool IsConst>
-struct as_range
-{
- static inline typename add_const_if_c<IsConst, Range>::type& get(
- typename add_const_if_c<IsConst, Geometry>::type& input)
- {
- return input;
- }
-};
-
-
-template <typename Geometry, typename Range, bool IsConst>
-struct as_range<polygon_tag, Geometry, Range, IsConst>
-{
- static inline typename add_const_if_c<IsConst, Range>::type& get(
- typename add_const_if_c<IsConst, Geometry>::type& input)
- {
- return exterior_ring(input);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-// Will probably be replaced by the more generic "view_as", therefore in detail
-namespace detail
-{
-
-/*!
-\brief Function getting either the range (ring, linestring) itself
-or the outer ring (polygon)
-\details Utility to handle polygon's outer ring as a range
-\ingroup utility
-*/
-template <typename Range, typename Geometry>
-inline Range& as_range(Geometry& input)
-{
- return dispatch::as_range
- <
- typename tag<Geometry>::type,
- Geometry,
- Range,
- false
- >::get(input);
-}
-
-
-/*!
-\brief Function getting either the range (ring, linestring) itself
-or the outer ring (polygon), const version
-\details Utility to handle polygon's outer ring as a range
-\ingroup utility
-*/
-template <typename Range, typename Geometry>
-inline Range const& as_range(Geometry const& input)
-{
- return dispatch::as_range
- <
- typename tag<Geometry>::type,
- Geometry,
- Range,
- true
- >::get(input);
-}
-
-}
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_AS_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/assign_box_corners.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/assign_box_corners.hpp
deleted file mode 100644
index bd8b84afcf5..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/assign_box_corners.hpp
+++ /dev/null
@@ -1,107 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_BOX_CORNERS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_BOX_CORNERS_HPP
-
-
-#include <cstddef>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/algorithms/detail/assign_values.hpp>
-#include <boost/geometry/util/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-// Note: this is moved to namespace detail because the names and parameter orders
-// are not yet 100% clear.
-
-/*!
-\brief Assign the four points of a 2D box
-\ingroup assign
-\note The order is crucial. Most logical is LOWER, UPPER and sub-order LEFT, RIGHT
- so this is how it is implemented.
-\tparam Box \tparam_box
-\tparam Point \tparam_point
-\param box \param_box
-\param lower_left point being assigned to lower left coordinates of the box
-\param lower_right point being assigned to lower right coordinates of the box
-\param upper_left point being assigned to upper left coordinates of the box
-\param upper_right point being assigned to upper right coordinates of the box
-
-\qbk{
-[heading Example]
-[assign_box_corners] [assign_box_corners_output]
-}
-*/
-template <typename Box, typename Point>
-inline void assign_box_corners(Box const& box,
- Point& lower_left, Point& lower_right,
- Point& upper_left, Point& upper_right)
-{
- concepts::check<Box const>();
- concepts::check<Point>();
-
- detail::assign::assign_box_2d_corner
- <min_corner, min_corner>(box, lower_left);
- detail::assign::assign_box_2d_corner
- <max_corner, min_corner>(box, lower_right);
- detail::assign::assign_box_2d_corner
- <min_corner, max_corner>(box, upper_left);
- detail::assign::assign_box_2d_corner
- <max_corner, max_corner>(box, upper_right);
-}
-
-// Silence warning C4127: conditional expression is constant
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
-#endif
-
-
-template <bool Reverse, typename Box, typename Range>
-inline void assign_box_corners_oriented(Box const& box, Range& corners)
-{
- if (Reverse)
- {
- // make counterclockwise ll,lr,ur,ul
- assign_box_corners(box,
- range::at(corners, 0), range::at(corners, 1),
- range::at(corners, 3), range::at(corners, 2));
- }
- else
- {
- // make clockwise ll,ul,ur,lr
- assign_box_corners(box,
- range::at(corners, 0), range::at(corners, 3),
- range::at(corners, 1), range::at(corners, 2));
- }
-}
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_BOX_CORNERS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/assign_indexed_point.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/assign_indexed_point.hpp
deleted file mode 100644
index e5d9358c136..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/assign_indexed_point.hpp
+++ /dev/null
@@ -1,94 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_INDEXED_POINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_INDEXED_POINT_HPP
-
-
-#include <cstddef>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/algorithms/detail/assign_values.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-/*!
-\brief Assign a box or segment with the value of a point
-\ingroup assign
-\tparam Index indicates which box-corner, min_corner (0) or max_corner (1)
- or which point of segment (0/1)
-\tparam Point \tparam_point
-\tparam Geometry \tparam_box_or_segment
-\param point \param_point
-\param geometry \param_box_or_segment
-
-\qbk{
-[heading Example]
-[assign_point_to_index] [assign_point_to_index_output]
-}
-*/
-template <std::size_t Index, typename Geometry, typename Point>
-inline void assign_point_to_index(Point const& point, Geometry& geometry)
-{
- concepts::check<Point const>();
- concepts::check<Geometry>();
-
- detail::assign::assign_point_to_index
- <
- Geometry, Point, Index, 0, dimension<Geometry>::type::value
- >::apply(point, geometry);
-}
-
-
-/*!
-\brief Assign a point with a point of a box or segment
-\ingroup assign
-\tparam Index indicates which box-corner, min_corner (0) or max_corner (1)
- or which point of segment (0/1)
-\tparam Geometry \tparam_box_or_segment
-\tparam Point \tparam_point
-\param geometry \param_box_or_segment
-\param point \param_point
-
-\qbk{
-[heading Example]
-[assign_point_from_index] [assign_point_from_index_output]
-}
-*/
-template <std::size_t Index, typename Point, typename Geometry>
-inline void assign_point_from_index(Geometry const& geometry, Point& point)
-{
- concepts::check<Geometry const>();
- concepts::check<Point>();
-
- detail::assign::assign_point_from_index
- <
- Geometry, Point, Index, 0, dimension<Geometry>::type::value
- >::apply(geometry, point);
-}
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ASSIGN_INDEXED_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/assign_values.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/assign_values.hpp
deleted file mode 100644
index ef5691e97c0..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/assign_values.hpp
+++ /dev/null
@@ -1,336 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_ASSIGN_VALUES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_ASSIGN_VALUES_HPP
-
-
-#include <cstddef>
-
-#include <boost/concept/requires.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/numeric/conversion/bounds.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/algorithms/append.hpp>
-#include <boost/geometry/algorithms/clear.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-
-#include <boost/geometry/util/for_each_coordinate.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace assign
-{
-
-
-template <std::size_t Index, std::size_t Dimension, std::size_t DimensionCount>
-struct initialize
-{
- template <typename Box>
- static inline void apply(Box& box, typename coordinate_type<Box>::type const& value)
- {
- geometry::set<Index, Dimension>(box, value);
- initialize<Index, Dimension + 1, DimensionCount>::apply(box, value);
- }
-};
-
-
-template <std::size_t Index, std::size_t DimensionCount>
-struct initialize<Index, DimensionCount, DimensionCount>
-{
- template <typename Box>
- static inline void apply(Box&, typename coordinate_type<Box>::type const&)
- {}
-};
-
-
-struct assign_zero_point
-{
- template <typename Point>
- static inline void apply(Point& point)
- {
- geometry::assign_value(point, 0);
- }
-};
-
-
-struct assign_inverse_box_or_segment
-{
-
- template <typename BoxOrSegment>
- static inline void apply(BoxOrSegment& geometry)
- {
- typedef typename point_type<BoxOrSegment>::type point_type;
- typedef typename coordinate_type<point_type>::type bound_type;
-
- initialize<0, 0, dimension<BoxOrSegment>::type::value>::apply(
- geometry, boost::numeric::bounds<bound_type>::highest()
- );
- initialize<1, 0, dimension<BoxOrSegment>::type::value>::apply(
- geometry, boost::numeric::bounds<bound_type>::lowest()
- );
- }
-};
-
-
-struct assign_zero_box_or_segment
-{
- template <typename BoxOrSegment>
- static inline void apply(BoxOrSegment& geometry)
- {
- typedef typename coordinate_type<BoxOrSegment>::type coordinate_type;
-
- initialize<0, 0, dimension<BoxOrSegment>::type::value>::apply(
- geometry, coordinate_type()
- );
- initialize<1, 0, dimension<BoxOrSegment>::type::value>::apply(
- geometry, coordinate_type()
- );
- }
-};
-
-
-template
-<
- std::size_t Corner1, std::size_t Corner2,
- typename Box, typename Point
->
-inline void assign_box_2d_corner(Box const& box, Point& point)
-{
- // Be sure both are 2-Dimensional
- assert_dimension<Box, 2>();
- assert_dimension<Point, 2>();
-
- // Copy coordinates
- typedef typename coordinate_type<Point>::type coordinate_type;
-
- geometry::set<0>(point, boost::numeric_cast<coordinate_type>(get<Corner1, 0>(box)));
- geometry::set<1>(point, boost::numeric_cast<coordinate_type>(get<Corner2, 1>(box)));
-}
-
-
-
-template
-<
- typename Geometry, typename Point,
- std::size_t Index,
- std::size_t Dimension, std::size_t DimensionCount
->
-struct assign_point_to_index
-{
-
- static inline void apply(Point const& point, Geometry& geometry)
- {
- geometry::set<Index, Dimension>(geometry, boost::numeric_cast
- <
- typename coordinate_type<Geometry>::type
- >(geometry::get<Dimension>(point)));
-
- assign_point_to_index
- <
- Geometry, Point, Index, Dimension + 1, DimensionCount
- >::apply(point, geometry);
- }
-};
-
-template
-<
- typename Geometry, typename Point,
- std::size_t Index,
- std::size_t DimensionCount
->
-struct assign_point_to_index
- <
- Geometry, Point,
- Index,
- DimensionCount, DimensionCount
- >
-{
- static inline void apply(Point const& , Geometry& )
- {
- }
-};
-
-
-template
-<
- typename Geometry, typename Point,
- std::size_t Index,
- std::size_t Dimension, std::size_t DimensionCount
->
-struct assign_point_from_index
-{
-
- static inline void apply(Geometry const& geometry, Point& point)
- {
- geometry::set<Dimension>( point, boost::numeric_cast
- <
- typename coordinate_type<Point>::type
- >(geometry::get<Index, Dimension>(geometry)));
-
- assign_point_from_index
- <
- Geometry, Point, Index, Dimension + 1, DimensionCount
- >::apply(geometry, point);
- }
-};
-
-template
-<
- typename Geometry, typename Point,
- std::size_t Index,
- std::size_t DimensionCount
->
-struct assign_point_from_index
- <
- Geometry, Point,
- Index,
- DimensionCount, DimensionCount
- >
-{
- static inline void apply(Geometry const&, Point&)
- {
- }
-};
-
-
-template <typename Geometry>
-struct assign_2d_box_or_segment
-{
- typedef typename coordinate_type<Geometry>::type coordinate_type;
-
- // Here we assign 4 coordinates to a box of segment
- // -> Most logical is: x1,y1,x2,y2
- // In case the user reverses x1/x2 or y1/y2, for a box, we could reverse them (THAT IS NOT IMPLEMENTED)
-
- template <typename Type>
- static inline void apply(Geometry& geometry,
- Type const& x1, Type const& y1, Type const& x2, Type const& y2)
- {
- geometry::set<0, 0>(geometry, boost::numeric_cast<coordinate_type>(x1));
- geometry::set<0, 1>(geometry, boost::numeric_cast<coordinate_type>(y1));
- geometry::set<1, 0>(geometry, boost::numeric_cast<coordinate_type>(x2));
- geometry::set<1, 1>(geometry, boost::numeric_cast<coordinate_type>(y2));
- }
-};
-
-
-}} // namespace detail::assign
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename GeometryTag, typename Geometry, std::size_t DimensionCount>
-struct assign
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-template <typename Point>
-struct assign<point_tag, Point, 2>
-{
- typedef typename coordinate_type<Point>::type coordinate_type;
-
- template <typename T>
- static inline void apply(Point& point, T const& c1, T const& c2)
- {
- set<0>(point, boost::numeric_cast<coordinate_type>(c1));
- set<1>(point, boost::numeric_cast<coordinate_type>(c2));
- }
-};
-
-template <typename Point>
-struct assign<point_tag, Point, 3>
-{
- typedef typename coordinate_type<Point>::type coordinate_type;
-
- template <typename T>
- static inline void apply(Point& point, T const& c1, T const& c2, T const& c3)
- {
- set<0>(point, boost::numeric_cast<coordinate_type>(c1));
- set<1>(point, boost::numeric_cast<coordinate_type>(c2));
- set<2>(point, boost::numeric_cast<coordinate_type>(c3));
- }
-};
-
-template <typename Box>
-struct assign<box_tag, Box, 2>
- : detail::assign::assign_2d_box_or_segment<Box>
-{};
-
-template <typename Segment>
-struct assign<segment_tag, Segment, 2>
- : detail::assign::assign_2d_box_or_segment<Segment>
-{};
-
-
-
-template <typename GeometryTag, typename Geometry>
-struct assign_zero {};
-
-
-template <typename Point>
-struct assign_zero<point_tag, Point>
- : detail::assign::assign_zero_point
-{};
-
-template <typename Box>
-struct assign_zero<box_tag, Box>
- : detail::assign::assign_zero_box_or_segment
-{};
-
-template <typename Segment>
-struct assign_zero<segment_tag, Segment>
- : detail::assign::assign_zero_box_or_segment
-{};
-
-
-template <typename GeometryTag, typename Geometry>
-struct assign_inverse {};
-
-template <typename Box>
-struct assign_inverse<box_tag, Box>
- : detail::assign::assign_inverse_box_or_segment
-{};
-
-template <typename Segment>
-struct assign_inverse<segment_tag, Segment>
- : detail::assign::assign_inverse_box_or_segment
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_ASSIGN_VALUES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/azimuth.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/azimuth.hpp
deleted file mode 100644
index 21007778bbd..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/azimuth.hpp
+++ /dev/null
@@ -1,152 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014, 2016, 2017.
-// Modifications copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_AZIMUTH_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_AZIMUTH_HPP
-
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/formulas/spherical.hpp>
-#include <boost/geometry/formulas/vincenty_inverse.hpp>
-
-#include <boost/geometry/srs/spheroid.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-// An azimuth is an angle between a vector/segment from origin to a point of
-// interest and a reference vector. Typically north-based azimuth is used.
-// North direction is used as a reference, angle is measured clockwise
-// (North - 0deg, East - 90deg). For consistency in 2d cartesian CS
-// the reference vector is Y axis, angle is measured clockwise.
-// http://en.wikipedia.org/wiki/Azimuth
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace detail_dispatch
-{
-
-template <typename ReturnType, typename Tag>
-struct azimuth
- : not_implemented<Tag>
-{};
-
-template <typename ReturnType>
-struct azimuth<ReturnType, geographic_tag>
-{
- template <typename P1, typename P2, typename Spheroid>
- static inline ReturnType apply(P1 const& p1, P2 const& p2, Spheroid const& spheroid)
- {
- return geometry::formula::vincenty_inverse<ReturnType, false, true>().apply
- ( get_as_radian<0>(p1), get_as_radian<1>(p1),
- get_as_radian<0>(p2), get_as_radian<1>(p2),
- spheroid ).azimuth;
- }
-
- template <typename P1, typename P2>
- static inline ReturnType apply(P1 const& p1, P2 const& p2)
- {
- return apply(p1, p2, srs::spheroid<ReturnType>());
- }
-};
-
-template <typename ReturnType>
-struct azimuth<ReturnType, spherical_equatorial_tag>
-{
- template <typename P1, typename P2, typename Sphere>
- static inline ReturnType apply(P1 const& p1, P2 const& p2, Sphere const& /*unused*/)
- {
- return geometry::formula::spherical_azimuth<ReturnType, false>
- ( get_as_radian<0>(p1), get_as_radian<1>(p1),
- get_as_radian<0>(p2), get_as_radian<1>(p2)).azimuth;
- }
-
- template <typename P1, typename P2>
- static inline ReturnType apply(P1 const& p1, P2 const& p2)
- {
- return apply(p1, p2, 0); // dummy model
- }
-};
-
-template <typename ReturnType>
-struct azimuth<ReturnType, spherical_polar_tag>
- : azimuth<ReturnType, spherical_equatorial_tag>
-{};
-
-template <typename ReturnType>
-struct azimuth<ReturnType, cartesian_tag>
-{
- template <typename P1, typename P2, typename Plane>
- static inline ReturnType apply(P1 const& p1, P2 const& p2, Plane const& /*unused*/)
- {
- ReturnType x = get<0>(p2) - get<0>(p1);
- ReturnType y = get<1>(p2) - get<1>(p1);
-
- // NOTE: azimuth 0 is at Y axis, increasing right
- // as in spherical/geographic where 0 is at North axis
- return atan2(x, y);
- }
-
- template <typename P1, typename P2>
- static inline ReturnType apply(P1 const& p1, P2 const& p2)
- {
- return apply(p1, p2, 0); // dummy model
- }
-};
-
-} // detail_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-/// Calculate azimuth between two points.
-/// The result is in radians.
-template <typename ReturnType, typename Point1, typename Point2>
-inline ReturnType azimuth(Point1 const& p1, Point2 const& p2)
-{
- return detail_dispatch::azimuth
- <
- ReturnType,
- typename geometry::cs_tag<Point1>::type
- >::apply(p1, p2);
-}
-
-/// Calculate azimuth between two points.
-/// The result is in radians.
-template <typename ReturnType, typename Point1, typename Point2, typename Model>
-inline ReturnType azimuth(Point1 const& p1, Point2 const& p2, Model const& model)
-{
- return detail_dispatch::azimuth
- <
- ReturnType,
- typename geometry::cs_tag<Point1>::type
- >::apply(p1, p2, model);
-}
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_AZIMUTH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp
deleted file mode 100644
index a969b21cfbf..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp
+++ /dev/null
@@ -1,1051 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFER_INSERTER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFER_INSERTER_HPP
-
-#include <cstddef>
-#include <iterator>
-
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/strategies/buffer.hpp>
-#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp>
-#include <boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp>
-#include <boost/geometry/algorithms/detail/buffer/parallel_continue.hpp>
-
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
-#include <boost/geometry/algorithms/simplify.hpp>
-
-#include <boost/geometry/views/detail/normalized_view.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-template <typename Range, typename DistanceStrategy>
-inline void simplify_input(Range const& range,
- DistanceStrategy const& distance,
- Range& simplified)
-{
- // We have to simplify the ring before to avoid very small-scaled
- // features in the original (convex/concave/convex) being enlarged
- // in a very large scale and causing issues (IP's within pieces).
- // This might be reconsidered later. Simplifying with a very small
- // distance (1%% of the buffer) will never be visible in the result,
- // if it is using round joins. For miter joins they are even more
- // sensitive to small scale input features, however the result will
- // look better.
- // It also gets rid of duplicate points
-
- typedef typename geometry::point_type<Range>::type point_type;
- typedef typename strategy::distance::services::default_strategy
- <
- point_tag, segment_tag, point_type
- >::type ds_strategy_type;
- typedef strategy::simplify::douglas_peucker
- <
- point_type, ds_strategy_type
- > strategy_type;
-
- geometry::detail::simplify::simplify_range<2>::apply(range,
- simplified, distance.simplify_distance(),
- strategy_type());
-
-}
-
-
-template <typename RingOutput>
-struct buffer_range
-{
- typedef typename point_type<RingOutput>::type output_point_type;
- typedef typename coordinate_type<RingOutput>::type coordinate_type;
-
- template
- <
- typename Collection,
- typename Point,
- typename DistanceStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename RobustPolicy,
- typename Strategy
- >
- static inline
- void add_join(Collection& collection,
- Point const& penultimate_input,
- Point const& previous_input,
- output_point_type const& prev_perp1,
- output_point_type const& prev_perp2,
- Point const& input,
- output_point_type const& perp1,
- output_point_type const& perp2,
- geometry::strategy::buffer::buffer_side_selector side,
- DistanceStrategy const& distance,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- RobustPolicy const& ,
- Strategy const& strategy) // side strategy
- {
- output_point_type intersection_point;
- geometry::assign_zero(intersection_point);
-
- geometry::strategy::buffer::join_selector join
- = get_join_type(penultimate_input, previous_input, input, strategy);
- if (join == geometry::strategy::buffer::join_convex)
- {
- // Calculate the intersection-point formed by the two sides.
- // It might be that the two sides are not convex, but continue
- // or spikey, we then change the join-type
- join = line_line_intersection::apply(
- perp1, perp2, prev_perp1, prev_perp2,
- intersection_point);
-
- }
-
- switch(join)
- {
- case geometry::strategy::buffer::join_continue :
- // No join, we get two consecutive sides
- break;
- case geometry::strategy::buffer::join_concave :
- {
- std::vector<output_point_type> range_out;
- range_out.push_back(prev_perp2);
- range_out.push_back(previous_input);
- collection.add_piece(geometry::strategy::buffer::buffered_concave, previous_input, range_out);
-
- range_out.clear();
- range_out.push_back(previous_input);
- range_out.push_back(perp1);
- collection.add_piece(geometry::strategy::buffer::buffered_concave, previous_input, range_out);
- }
- break;
- case geometry::strategy::buffer::join_spike :
- {
- // For linestrings, only add spike at one side to avoid
- // duplicates
- std::vector<output_point_type> range_out;
- end_strategy.apply(penultimate_input, prev_perp2, previous_input, perp1, side, distance, range_out);
- collection.add_endcap(end_strategy, range_out, previous_input);
- collection.set_current_ring_concave();
- }
- break;
- case geometry::strategy::buffer::join_convex :
- {
- // The corner is convex, we create a join
- // TODO (future) - avoid a separate vector, add the piece directly
- std::vector<output_point_type> range_out;
- if (join_strategy.apply(intersection_point,
- previous_input, prev_perp2, perp1,
- distance.apply(previous_input, input, side),
- range_out))
- {
- collection.add_piece(geometry::strategy::buffer::buffered_join,
- previous_input, range_out);
- }
- }
- break;
- }
- }
-
- template <typename Strategy>
- static inline geometry::strategy::buffer::join_selector get_join_type(
- output_point_type const& p0,
- output_point_type const& p1,
- output_point_type const& p2,
- Strategy const& strategy) // side strategy
- {
- int const side = strategy.apply(p0, p1, p2);
- return side == -1 ? geometry::strategy::buffer::join_convex
- : side == 1 ? geometry::strategy::buffer::join_concave
- : parallel_continue
- (
- get<0>(p2) - get<0>(p1),
- get<1>(p2) - get<1>(p1),
- get<0>(p1) - get<0>(p0),
- get<1>(p1) - get<1>(p0)
- ) ? geometry::strategy::buffer::join_continue
- : geometry::strategy::buffer::join_spike;
- }
-
- template
- <
- typename Collection,
- typename Iterator,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename RobustPolicy,
- typename Strategy
- >
- static inline geometry::strategy::buffer::result_code iterate(Collection& collection,
- Iterator begin, Iterator end,
- geometry::strategy::buffer::buffer_side_selector side,
- DistanceStrategy const& distance_strategy,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- RobustPolicy const& robust_policy,
- Strategy const& strategy, // side strategy
- bool linear,
- output_point_type& first_p1,
- output_point_type& first_p2,
- output_point_type& last_p1,
- output_point_type& last_p2)
- {
- boost::ignore_unused(side_strategy);
-
- typedef typename std::iterator_traits
- <
- Iterator
- >::value_type point_type;
-
- point_type second_point, penultimate_point, ultimate_point; // last two points from begin/end
-
- /*
- * last.p1 last.p2 these are the "previous (last) perpendicular points"
- * --------------
- * | |
- * *------------*____ <- *prev
- * pup | | p1 "current perpendicular point 1"
- * | |
- * | | this forms a "side", a side is a piece
- * | |
- * *____| p2
- *
- * ^
- * *it
- *
- * pup: penultimate_point
- */
-
- bool const mark_flat
- = linear
- && end_strategy.get_piece_type() == geometry::strategy::buffer::buffered_flat_end;
-
- geometry::strategy::buffer::result_code result = geometry::strategy::buffer::result_no_output;
- bool first = true;
-
- Iterator it = begin;
-
- std::vector<output_point_type> generated_side;
- generated_side.reserve(2);
-
- for (Iterator prev = it++; it != end; ++it)
- {
- generated_side.clear();
- geometry::strategy::buffer::result_code error_code
- = side_strategy.apply(*prev, *it, side,
- distance_strategy, generated_side);
-
- if (error_code == geometry::strategy::buffer::result_no_output)
- {
- // Because input is simplified, this is improbable,
- // but it can happen for degenerate geometries
- // Further handling of this side is skipped
- continue;
- }
- else if (error_code == geometry::strategy::buffer::result_error_numerical)
- {
- return error_code;
- }
-
- BOOST_GEOMETRY_ASSERT(! generated_side.empty());
-
- result = geometry::strategy::buffer::result_normal;
-
- if (! first)
- {
- add_join(collection,
- penultimate_point,
- *prev, last_p1, last_p2,
- *it, generated_side.front(), generated_side.back(),
- side,
- distance_strategy, join_strategy, end_strategy,
- robust_policy, strategy);
- }
-
- collection.add_side_piece(*prev, *it, generated_side, first);
-
- if (first && mark_flat)
- {
- collection.mark_flat_start();
- }
-
- penultimate_point = *prev;
- ultimate_point = *it;
- last_p1 = generated_side.front();
- last_p2 = generated_side.back();
- prev = it;
- if (first)
- {
- first = false;
- second_point = *it;
- first_p1 = generated_side.front();
- first_p2 = generated_side.back();
- }
- }
-
- if (mark_flat)
- {
- collection.mark_flat_end();
- }
-
- return result;
- }
-};
-
-template
-<
- typename Multi,
- typename PolygonOutput,
- typename Policy
->
-struct buffer_multi
-{
- template
- <
- typename Collection,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename PointStrategy,
- typename RobustPolicy,
- typename Strategy
- >
- static inline void apply(Multi const& multi,
- Collection& collection,
- DistanceStrategy const& distance_strategy,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- PointStrategy const& point_strategy,
- RobustPolicy const& robust_policy,
- Strategy const& strategy) // side strategy
- {
- for (typename boost::range_iterator<Multi const>::type
- it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- Policy::apply(*it, collection,
- distance_strategy, side_strategy,
- join_strategy, end_strategy, point_strategy,
- robust_policy, strategy);
- }
- }
-};
-
-struct visit_pieces_default_policy
-{
- template <typename Collection>
- static inline void apply(Collection const&, int)
- {}
-};
-
-template
-<
- typename OutputPointType,
- typename Point,
- typename Collection,
- typename DistanceStrategy,
- typename PointStrategy
->
-inline void buffer_point(Point const& point, Collection& collection,
- DistanceStrategy const& distance_strategy,
- PointStrategy const& point_strategy)
-{
- collection.start_new_ring(false);
- std::vector<OutputPointType> range_out;
- point_strategy.apply(point, distance_strategy, range_out);
- collection.add_piece(geometry::strategy::buffer::buffered_point, range_out, false);
- collection.set_piece_center(point);
- collection.finish_ring(geometry::strategy::buffer::result_normal);
-}
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Tag,
- typename RingInput,
- typename RingOutput
->
-struct buffer_inserter
-{};
-
-
-
-template
-<
- typename Point,
- typename RingOutput
->
-struct buffer_inserter<point_tag, Point, RingOutput>
-{
- template
- <
- typename Collection,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename PointStrategy,
- typename RobustPolicy,
- typename Strategy
- >
- static inline void apply(Point const& point, Collection& collection,
- DistanceStrategy const& distance_strategy,
- SideStrategy const& ,
- JoinStrategy const& ,
- EndStrategy const& ,
- PointStrategy const& point_strategy,
- RobustPolicy const& ,
- Strategy const& ) // side strategy
- {
- detail::buffer::buffer_point
- <
- typename point_type<RingOutput>::type
- >(point, collection, distance_strategy, point_strategy);
- }
-};
-
-// Not a specialization, but called from specializations of ring and of polygon.
-// Calling code starts/finishes ring before/after apply
-template
-<
- typename RingInput,
- typename RingOutput
->
-struct buffer_inserter_ring
-{
- typedef typename point_type<RingOutput>::type output_point_type;
-
- template
- <
- typename Collection,
- typename Iterator,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename RobustPolicy,
- typename Strategy
- >
- static inline geometry::strategy::buffer::result_code iterate(Collection& collection,
- Iterator begin, Iterator end,
- geometry::strategy::buffer::buffer_side_selector side,
- DistanceStrategy const& distance_strategy,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- RobustPolicy const& robust_policy,
- Strategy const& strategy) // side strategy
- {
- output_point_type first_p1, first_p2, last_p1, last_p2;
-
- typedef detail::buffer::buffer_range<RingOutput> buffer_range;
-
- geometry::strategy::buffer::result_code result
- = buffer_range::iterate(collection, begin, end,
- side,
- distance_strategy, side_strategy, join_strategy, end_strategy,
- robust_policy, strategy,
- false, first_p1, first_p2, last_p1, last_p2);
-
- // Generate closing join
- if (result == geometry::strategy::buffer::result_normal)
- {
- buffer_range::add_join(collection,
- *(end - 2),
- *(end - 1), last_p1, last_p2,
- *(begin + 1), first_p1, first_p2,
- side,
- distance_strategy, join_strategy, end_strategy,
- robust_policy, strategy);
- }
-
- // Buffer is closed automatically by last closing corner
- return result;
- }
-
- template
- <
- typename Collection,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename PointStrategy,
- typename RobustPolicy,
- typename Strategy
- >
- static inline geometry::strategy::buffer::result_code apply(RingInput const& ring,
- Collection& collection,
- DistanceStrategy const& distance,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- PointStrategy const& point_strategy,
- RobustPolicy const& robust_policy,
- Strategy const& strategy) // side strategy
- {
- RingInput simplified;
- detail::buffer::simplify_input(ring, distance, simplified);
-
- geometry::strategy::buffer::result_code code = geometry::strategy::buffer::result_no_output;
-
- std::size_t n = boost::size(simplified);
- std::size_t const min_points = core_detail::closure::minimum_ring_size
- <
- geometry::closure<RingInput>::value
- >::value;
-
- if (n >= min_points)
- {
- detail::normalized_view<RingInput const> view(simplified);
- if (distance.negative())
- {
- // Walk backwards (rings will be reversed afterwards)
- code = iterate(collection, boost::rbegin(view), boost::rend(view),
- geometry::strategy::buffer::buffer_side_right,
- distance, side_strategy, join_strategy, end_strategy,
- robust_policy, strategy);
- }
- else
- {
- code = iterate(collection, boost::begin(view), boost::end(view),
- geometry::strategy::buffer::buffer_side_left,
- distance, side_strategy, join_strategy, end_strategy,
- robust_policy, strategy);
- }
- }
-
- if (code == geometry::strategy::buffer::result_no_output && n >= 1)
- {
- // Use point_strategy to buffer degenerated ring
- detail::buffer::buffer_point<output_point_type>
- (
- geometry::range::front(simplified),
- collection, distance, point_strategy
- );
- }
- return code;
- }
-};
-
-
-template
-<
- typename RingInput,
- typename RingOutput
->
-struct buffer_inserter<ring_tag, RingInput, RingOutput>
-{
- template
- <
- typename Collection,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename PointStrategy,
- typename RobustPolicy,
- typename Strategy
- >
- static inline geometry::strategy::buffer::result_code apply(RingInput const& ring,
- Collection& collection,
- DistanceStrategy const& distance,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- PointStrategy const& point_strategy,
- RobustPolicy const& robust_policy,
- Strategy const& strategy) // side strategy
- {
- collection.start_new_ring(distance.negative());
- geometry::strategy::buffer::result_code const code
- = buffer_inserter_ring<RingInput, RingOutput>::apply(ring,
- collection, distance,
- side_strategy, join_strategy, end_strategy, point_strategy,
- robust_policy, strategy);
- collection.finish_ring(code);
- return code;
- }
-};
-
-template
-<
- typename Linestring,
- typename Polygon
->
-struct buffer_inserter<linestring_tag, Linestring, Polygon>
-{
- typedef typename ring_type<Polygon>::type output_ring_type;
- typedef typename point_type<output_ring_type>::type output_point_type;
- typedef typename point_type<Linestring>::type input_point_type;
-
- template
- <
- typename Collection,
- typename Iterator,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename RobustPolicy,
- typename Strategy
- >
- static inline geometry::strategy::buffer::result_code iterate(Collection& collection,
- Iterator begin, Iterator end,
- geometry::strategy::buffer::buffer_side_selector side,
- DistanceStrategy const& distance_strategy,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- RobustPolicy const& robust_policy,
- Strategy const& strategy, // side strategy
- output_point_type& first_p1)
- {
- input_point_type const& ultimate_point = *(end - 1);
- input_point_type const& penultimate_point = *(end - 2);
-
- // For the end-cap, we need to have the last perpendicular point on the
- // other side of the linestring. If it is the second pass (right),
- // we have it already from the first phase (left).
- // But for the first pass, we have to generate it
- output_point_type reverse_p1;
- if (side == geometry::strategy::buffer::buffer_side_right)
- {
- reverse_p1 = first_p1;
- }
- else
- {
- std::vector<output_point_type> generated_side;
- geometry::strategy::buffer::result_code code
- = side_strategy.apply(ultimate_point, penultimate_point,
- geometry::strategy::buffer::buffer_side_right,
- distance_strategy, generated_side);
- if (code != geometry::strategy::buffer::result_normal)
- {
- // No output or numerical error
- return code;
- }
- reverse_p1 = generated_side.front();
- }
-
- output_point_type first_p2, last_p1, last_p2;
-
- geometry::strategy::buffer::result_code result
- = detail::buffer::buffer_range<output_ring_type>::iterate(collection,
- begin, end, side,
- distance_strategy, side_strategy, join_strategy, end_strategy,
- robust_policy, strategy,
- true, first_p1, first_p2, last_p1, last_p2);
-
- if (result == geometry::strategy::buffer::result_normal)
- {
- std::vector<output_point_type> range_out;
- end_strategy.apply(penultimate_point, last_p2, ultimate_point, reverse_p1,
- side, distance_strategy, range_out);
- collection.add_endcap(end_strategy, range_out, ultimate_point);
- }
- return result;
- }
-
- template
- <
- typename Collection,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename PointStrategy,
- typename RobustPolicy,
- typename Strategy
- >
- static inline geometry::strategy::buffer::result_code apply(Linestring const& linestring,
- Collection& collection,
- DistanceStrategy const& distance,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- PointStrategy const& point_strategy,
- RobustPolicy const& robust_policy,
- Strategy const& strategy) // side strategy
- {
- Linestring simplified;
- detail::buffer::simplify_input(linestring, distance, simplified);
-
- geometry::strategy::buffer::result_code code = geometry::strategy::buffer::result_no_output;
- std::size_t n = boost::size(simplified);
- if (n > 1)
- {
- collection.start_new_ring(false);
- output_point_type first_p1;
- code = iterate(collection,
- boost::begin(simplified), boost::end(simplified),
- geometry::strategy::buffer::buffer_side_left,
- distance, side_strategy, join_strategy, end_strategy,
- robust_policy, strategy,
- first_p1);
-
- if (code == geometry::strategy::buffer::result_normal)
- {
- code = iterate(collection,
- boost::rbegin(simplified), boost::rend(simplified),
- geometry::strategy::buffer::buffer_side_right,
- distance, side_strategy, join_strategy, end_strategy,
- robust_policy, strategy,
- first_p1);
- }
- collection.finish_ring(code);
- }
- if (code == geometry::strategy::buffer::result_no_output && n >= 1)
- {
- // Use point_strategy to buffer degenerated linestring
- detail::buffer::buffer_point<output_point_type>
- (
- geometry::range::front(simplified),
- collection, distance, point_strategy
- );
- }
- return code;
- }
-};
-
-
-template
-<
- typename PolygonInput,
- typename PolygonOutput
->
-struct buffer_inserter<polygon_tag, PolygonInput, PolygonOutput>
-{
-private:
- typedef typename ring_type<PolygonInput>::type input_ring_type;
- typedef typename ring_type<PolygonOutput>::type output_ring_type;
-
- typedef buffer_inserter_ring<input_ring_type, output_ring_type> policy;
-
-
- template
- <
- typename Iterator,
- typename Collection,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename PointStrategy,
- typename RobustPolicy,
- typename Strategy
- >
- static inline
- void iterate(Iterator begin, Iterator end,
- Collection& collection,
- DistanceStrategy const& distance,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- PointStrategy const& point_strategy,
- RobustPolicy const& robust_policy,
- Strategy const& strategy, // side strategy
- bool is_interior)
- {
- for (Iterator it = begin; it != end; ++it)
- {
- // For exterior rings, it deflates if distance is negative.
- // For interior rings, it is vice versa
- bool const deflate = is_interior
- ? ! distance.negative()
- : distance.negative();
-
- collection.start_new_ring(deflate);
- geometry::strategy::buffer::result_code const code
- = policy::apply(*it, collection, distance, side_strategy,
- join_strategy, end_strategy, point_strategy,
- robust_policy, strategy);
-
- collection.finish_ring(code, is_interior);
- }
- }
-
- template
- <
- typename InteriorRings,
- typename Collection,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename PointStrategy,
- typename RobustPolicy,
- typename Strategy
- >
- static inline
- void apply_interior_rings(InteriorRings const& interior_rings,
- Collection& collection,
- DistanceStrategy const& distance,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- PointStrategy const& point_strategy,
- RobustPolicy const& robust_policy,
- Strategy const& strategy) // side strategy
- {
- iterate(boost::begin(interior_rings), boost::end(interior_rings),
- collection, distance, side_strategy,
- join_strategy, end_strategy, point_strategy,
- robust_policy, strategy, true);
- }
-
-public:
- template
- <
- typename Collection,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename PointStrategy,
- typename RobustPolicy,
- typename Strategy
- >
- static inline void apply(PolygonInput const& polygon,
- Collection& collection,
- DistanceStrategy const& distance,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- PointStrategy const& point_strategy,
- RobustPolicy const& robust_policy,
- Strategy const& strategy) // side strategy
- {
- {
- collection.start_new_ring(distance.negative());
-
- geometry::strategy::buffer::result_code const code
- = policy::apply(exterior_ring(polygon), collection,
- distance, side_strategy,
- join_strategy, end_strategy, point_strategy,
- robust_policy, strategy);
-
- collection.finish_ring(code, false,
- geometry::num_interior_rings(polygon) > 0u);
- }
-
- apply_interior_rings(interior_rings(polygon),
- collection, distance, side_strategy,
- join_strategy, end_strategy, point_strategy,
- robust_policy, strategy);
- }
-};
-
-
-template
-<
- typename Multi,
- typename PolygonOutput
->
-struct buffer_inserter<multi_tag, Multi, PolygonOutput>
- : public detail::buffer::buffer_multi
- <
- Multi,
- PolygonOutput,
- dispatch::buffer_inserter
- <
- typename single_tag_of
- <
- typename tag<Multi>::type
- >::type,
- typename boost::range_value<Multi const>::type,
- typename geometry::ring_type<PolygonOutput>::type
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-template
-<
- typename GeometryOutput,
- typename GeometryInput,
- typename OutputIterator,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename PointStrategy,
- typename IntersectionStrategy,
- typename RobustPolicy,
- typename VisitPiecesPolicy
->
-inline void buffer_inserter(GeometryInput const& geometry_input, OutputIterator out,
- DistanceStrategy const& distance_strategy,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- PointStrategy const& point_strategy,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- VisitPiecesPolicy& visit_pieces_policy
- )
-{
- boost::ignore_unused(visit_pieces_policy);
-
- typedef detail::buffer::buffered_piece_collection
- <
- typename geometry::ring_type<GeometryOutput>::type,
- IntersectionStrategy,
- RobustPolicy
- > collection_type;
- collection_type collection(intersection_strategy, robust_policy);
- collection_type const& const_collection = collection;
-
- bool const areal = boost::is_same
- <
- typename tag_cast<typename tag<GeometryInput>::type, areal_tag>::type,
- areal_tag
- >::type::value;
-
- dispatch::buffer_inserter
- <
- typename tag_cast
- <
- typename tag<GeometryInput>::type,
- multi_tag
- >::type,
- GeometryInput,
- GeometryOutput
- >::apply(geometry_input, collection,
- distance_strategy, side_strategy, join_strategy,
- end_strategy, point_strategy,
- robust_policy, intersection_strategy.get_side_strategy());
-
- collection.get_turns();
- collection.classify_turns();
- if (BOOST_GEOMETRY_CONDITION(areal))
- {
- collection.check_remaining_points(distance_strategy);
- }
-
- // Visit the piece collection. This does nothing (by default), but
- // optionally a debugging tool can be attached (e.g. console or svg),
- // or the piece collection can be unit-tested
- // phase 0: turns (before discarded)
- visit_pieces_policy.apply(const_collection, 0);
-
- collection.discard_rings();
- collection.block_turns();
- collection.enrich();
-
- // phase 1: turns (after enrichment/clustering)
- visit_pieces_policy.apply(const_collection, 1);
-
- collection.traverse();
-
- // Reverse all offsetted rings / traversed rings if:
- // - they were generated on the negative side (deflate) of polygons
- // - the output is counter clockwise
- // and avoid reversing twice
- bool reverse = distance_strategy.negative() && areal;
- if (BOOST_GEOMETRY_CONDITION(
- geometry::point_order<GeometryOutput>::value == counterclockwise))
- {
- reverse = ! reverse;
- }
- if (reverse)
- {
- collection.reverse();
- }
-
- if (BOOST_GEOMETRY_CONDITION(distance_strategy.negative() && areal))
- {
- collection.discard_nonintersecting_deflated_rings();
- }
-
- collection.template assign<GeometryOutput>(out);
-
- // Visit collection again
- // phase 2: rings (after traversing)
- visit_pieces_policy.apply(const_collection, 2);
-}
-
-template
-<
- typename GeometryOutput,
- typename GeometryInput,
- typename OutputIterator,
- typename DistanceStrategy,
- typename SideStrategy,
- typename JoinStrategy,
- typename EndStrategy,
- typename PointStrategy,
- typename IntersectionStrategy,
- typename RobustPolicy
->
-inline void buffer_inserter(GeometryInput const& geometry_input, OutputIterator out,
- DistanceStrategy const& distance_strategy,
- SideStrategy const& side_strategy,
- JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy,
- PointStrategy const& point_strategy,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy)
-{
- detail::buffer::visit_pieces_default_policy visitor;
- buffer_inserter<GeometryOutput>(geometry_input, out,
- distance_strategy, side_strategy, join_strategy,
- end_strategy, point_strategy,
- intersection_strategy, robust_policy, visitor);
-}
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace detail::buffer
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFER_INSERTER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp
deleted file mode 100644
index 0374b53a996..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp
+++ /dev/null
@@ -1,245 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFER_POLICIES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFER_POLICIES_HPP
-
-#if ! defined(BOOST_GEOMETRY_NO_ROBUSTNESS)
-# define BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION
-#endif
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-
-#include <boost/geometry/strategies/buffer.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-
-enum intersection_location_type
-{
- location_ok, inside_buffer, location_discard
-};
-
-class backtrack_for_buffer
-{
-public :
- typedef detail::overlay::backtrack_state state_type;
-
- template
- <
- typename Operation,
- typename Rings,
- typename Turns,
- typename Geometry,
- typename Strategy,
- typename RobustPolicy,
- typename Visitor
- >
- static inline void apply(std::size_t size_at_start,
- Rings& rings, typename boost::range_value<Rings>::type& ring,
- Turns& turns,
- typename boost::range_value<Turns>::type const& /*turn*/,
- Operation& operation,
- detail::overlay::traverse_error_type /*traverse_error*/,
- Geometry const& ,
- Geometry const& ,
- Strategy const& ,
- RobustPolicy const& ,
- state_type& state,
- Visitor& /*visitor*/
- )
- {
-#if defined(BOOST_GEOMETRY_COUNT_BACKTRACK_WARNINGS)
-extern int g_backtrack_warning_count;
-g_backtrack_warning_count++;
-#endif
-//std::cout << "!";
-//std::cout << "WARNING " << traverse_error_string(traverse_error) << std::endl;
-
- state.m_good = false;
-
- // Make bad output clean
- rings.resize(size_at_start);
- ring.clear();
-
- // Reject this as a starting point
- operation.visited.set_rejected();
-
- // And clear all visit info
- clear_visit_info(turns);
- }
-};
-
-struct buffer_overlay_visitor
-{
-public :
- void print(char const* /*header*/)
- {
- }
-
- template <typename Turns>
- void print(char const* /*header*/, Turns const& /*turns*/, int /*turn_index*/)
- {
- }
-
- template <typename Turns>
- void print(char const* /*header*/, Turns const& /*turns*/, int /*turn_index*/, int /*op_index*/)
- {
- }
-
- template <typename Turns>
- void visit_turns(int , Turns const& ) {}
-
- template <typename Clusters, typename Turns>
- void visit_clusters(Clusters const& , Turns const& ) {}
-
- template <typename Turns, typename Turn, typename Operation>
- void visit_traverse(Turns const& /*turns*/, Turn const& /*turn*/, Operation const& /*op*/, const char* /*header*/)
- {
- }
-
- template <typename Turns, typename Turn, typename Operation>
- void visit_traverse_reject(Turns const& , Turn const& , Operation const& ,
- detail::overlay::traverse_error_type )
- {}
-
- template <typename Rings>
- void visit_generated_rings(Rings const& )
- {}
-};
-
-
-// Should follow traversal-turn-concept (enrichment, visit structure)
-// and adds index in piece vector to find it back
-template <typename Point, typename SegmentRatio>
-struct buffer_turn_operation
- : public detail::overlay::traversal_turn_operation<Point, SegmentRatio>
-{
- signed_size_type piece_index;
- signed_size_type index_in_robust_ring;
-
- inline buffer_turn_operation()
- : piece_index(-1)
- , index_in_robust_ring(-1)
- {}
-};
-
-// Version for buffer including type of location, is_opposite, and helper variables
-template <typename Point, typename RobustPoint, typename SegmentRatio>
-struct buffer_turn_info
- : public detail::overlay::turn_info
- <
- Point,
- SegmentRatio,
- buffer_turn_operation<Point, SegmentRatio>
- >
-{
- typedef Point point_type;
- typedef RobustPoint robust_point_type;
-
- std::size_t turn_index; // TODO: this might go if partition can operate on non-const input
-
- RobustPoint robust_point;
-#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
- // Will (most probably) be removed later
- RobustPoint mapped_robust_point; // alas... we still need to adapt our points, offsetting them 1 integer to be co-located with neighbours
-#endif
-
-
- inline RobustPoint const& get_robust_point() const
- {
-#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
- return mapped_robust_point;
-#endif
- return robust_point;
- }
-
- intersection_location_type location;
-
-#if defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- robust_point_type rob_pi, rob_pj, rob_qi, rob_qj;
-#endif
-
- std::size_t count_within;
-
- bool within_original;
- std::size_t count_on_original_boundary;
- signed_size_type count_in_original; // increased by +1 for in ext.ring, -1 for int.ring
-
- std::size_t count_on_offsetted;
- std::size_t count_on_helper;
-#if ! defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- std::size_t count_within_near_offsetted;
-#endif
-
- bool remove_on_multi;
-
- // Obsolete:
- std::size_t count_on_occupied;
- std::size_t count_on_multi;
-
- inline buffer_turn_info()
- : turn_index(0)
- , location(location_ok)
- , count_within(0)
- , within_original(false)
- , count_on_original_boundary(0)
- , count_in_original(0)
- , count_on_offsetted(0)
- , count_on_helper(0)
-#if ! defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- , count_within_near_offsetted(0)
-#endif
- , remove_on_multi(false)
- , count_on_occupied(0)
- , count_on_multi(0)
- {}
-};
-
-struct buffer_operation_less
-{
- template <typename Turn>
- inline bool operator()(Turn const& left, Turn const& right) const
- {
- segment_identifier const& sl = left.seg_id;
- segment_identifier const& sr = right.seg_id;
-
- // Sort them descending
- return sl == sr
- ? left.fraction < right.fraction
- : sl < sr;
- }
-};
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFER_POLICIES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp
deleted file mode 100644
index ba824243cca..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp
+++ /dev/null
@@ -1,1599 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2016-2017.
-// Modifications copyright (c) 2016-2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFERED_PIECE_COLLECTION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFERED_PIECE_COLLECTION_HPP
-
-#include <algorithm>
-#include <cstddef>
-#include <set>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/algorithms/comparable_distance.hpp>
-#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/algorithms/envelope.hpp>
-#include <boost/geometry/algorithms/is_convex.hpp>
-
-#include <boost/geometry/strategies/buffer.hpp>
-
-#include <boost/geometry/geometries/ring.hpp>
-
-#include <boost/geometry/algorithms/detail/buffer/buffered_ring.hpp>
-#include <boost/geometry/algorithms/detail/buffer/buffer_policies.hpp>
-#include <boost/geometry/algorithms/detail/overlay/cluster_info.hpp>
-#include <boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp>
-#include <boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp>
-#include <boost/geometry/algorithms/detail/buffer/turn_in_original_visitor.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint/point_box.hpp>
-#include <boost/geometry/algorithms/detail/overlay/add_rings.hpp>
-#include <boost/geometry/algorithms/detail/overlay/assign_parents.hpp>
-#include <boost/geometry/algorithms/detail/overlay/enrichment_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp>
-#include <boost/geometry/algorithms/detail/overlay/ring_properties.hpp>
-#include <boost/geometry/algorithms/detail/overlay/select_rings.hpp>
-#include <boost/geometry/algorithms/detail/overlay/traversal_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/traverse.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/detail/occupation_info.hpp>
-#include <boost/geometry/algorithms/detail/partition.hpp>
-#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
-#include <boost/geometry/algorithms/detail/sections/section_box_policies.hpp>
-
-#include <boost/geometry/util/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-enum segment_relation_code
-{
- segment_relation_on_left,
- segment_relation_on_right,
- segment_relation_within,
- segment_relation_disjoint
-};
-
-/*
- * Terminology
- *
- * Suppose we make a buffer (using blocked corners) of this rectangle:
- *
- * +-------+
- * | |
- * | rect |
- * | |
- * +-------+
- *
- * For the sides we get these four buffered side-pieces (marked with s)
- * and four buffered corner pieces (marked with c)
- *
- * c---+---s---+---c
- * | | piece | | <- see below for details of the middle top-side-piece
- * +---+-------+---+
- * | | | |
- * s | rect | s <- two side pieces left/right of rect
- * | | | |
- * +---+-------+---+
- * | | piece | | <- one side-piece below, and two corner pieces
- * c---+---s---+---c
- *
- * The outer part of the picture above, using all pieces,
- * form together the offsetted ring (marked with o below)
- * The 8 pieces are part of the piece collection and use for inside-checks
- * The inner parts form (using 1 or 2 points per piece, often co-located)
- * form together the robust_polygons (marked with r below)
- * The remaining piece-segments are helper-segments (marked with h)
- *
- * ooooooooooooooooo
- * o h h o
- * ohhhrrrrrrrrrhhho
- * o r r o
- * o r r o
- * o r r o
- * ohhhrrrrrrrrrhhho
- * o h h o
- * ooooooooooooooooo
- *
- */
-
-
-template <typename Ring, typename IntersectionStrategy, typename RobustPolicy>
-struct buffered_piece_collection
-{
- typedef buffered_piece_collection
- <
- Ring, IntersectionStrategy, RobustPolicy
- > this_type;
-
- typedef typename geometry::point_type<Ring>::type point_type;
- typedef typename geometry::coordinate_type<Ring>::type coordinate_type;
- typedef typename geometry::robust_point_type
- <
- point_type,
- RobustPolicy
- >::type robust_point_type;
-
- // Robust ring/polygon type, always clockwise
- typedef geometry::model::ring<robust_point_type> robust_ring_type;
- typedef geometry::model::box<robust_point_type> robust_box_type;
-
- typedef typename default_comparable_distance_result
- <
- robust_point_type
- >::type robust_comparable_radius_type;
-
- typedef typename IntersectionStrategy::side_strategy_type side_strategy_type;
-
- typedef typename IntersectionStrategy::template area_strategy
- <
- point_type
- >::type area_strategy_type;
-
- typedef typename IntersectionStrategy::template area_strategy
- <
- robust_point_type
- >::type robust_area_strategy_type;
-
- typedef typename area_strategy_type::template result_type
- <
- point_type
- >::type area_result_type;
- typedef typename robust_area_strategy_type::template result_type
- <
- robust_point_type
- >::type robust_area_result_type;
-
- typedef typename geometry::rescale_policy_type
- <
- typename geometry::point_type<Ring>::type
- >::type rescale_policy_type;
-
- typedef typename geometry::segment_ratio_type
- <
- point_type,
- RobustPolicy
- >::type segment_ratio_type;
-
- typedef buffer_turn_info
- <
- point_type,
- robust_point_type,
- segment_ratio_type
- > buffer_turn_info_type;
-
- typedef buffer_turn_operation
- <
- point_type,
- segment_ratio_type
- > buffer_turn_operation_type;
-
- typedef std::vector<buffer_turn_info_type> turn_vector_type;
-
- struct robust_turn
- {
- std::size_t turn_index;
- int operation_index;
- robust_point_type point;
- segment_identifier seg_id;
- segment_ratio_type fraction;
- };
-
- struct piece
- {
- typedef robust_ring_type piece_robust_ring_type;
- typedef geometry::section<robust_box_type, 1> section_type;
-
- strategy::buffer::piece_type type;
- signed_size_type index;
-
- signed_size_type left_index; // points to previous piece of same ring
- signed_size_type right_index; // points to next piece of same ring
-
- // The next two members (1, 2) form together a complete clockwise ring
- // for each piece (with one dupped point)
- // The complete clockwise ring is also included as a robust ring (3)
-
- // 1: half, part of offsetted_rings
- segment_identifier first_seg_id;
- signed_size_type last_segment_index; // no segment-identifier - it is the same as first_seg_id
- signed_size_type offsetted_count; // part in robust_ring which is part of offsetted ring
-
-#if defined(BOOST_GEOMETRY_BUFFER_USE_HELPER_POINTS)
- // 2: half, not part of offsetted rings - part of robust ring
- std::vector<point_type> helper_points; // 4 points for side, 3 points for join - 0 points for flat-end
-#endif
- bool is_flat_start;
- bool is_flat_end;
-
- bool is_deflated;
- bool is_convex;
- bool is_monotonic_increasing[2]; // 0=x, 1=y
- bool is_monotonic_decreasing[2]; // 0=x, 1=y
-
- // Monotonic sections of pieces around points
- std::vector<section_type> sections;
-
- // Robust representations
- // 3: complete ring
- robust_ring_type robust_ring;
-
- robust_box_type robust_envelope;
- robust_box_type robust_offsetted_envelope;
-
- std::vector<robust_turn> robust_turns; // Used only in insert_rescaled_piece_turns - we might use a map instead
-
- robust_point_type robust_center;
- robust_comparable_radius_type robust_min_comparable_radius;
- robust_comparable_radius_type robust_max_comparable_radius;
-
- piece()
- : type(strategy::buffer::piece_type_unknown)
- , index(-1)
- , left_index(-1)
- , right_index(-1)
- , last_segment_index(-1)
- , offsetted_count(-1)
- , is_flat_start(false)
- , is_flat_end(false)
- , is_deflated(false)
- , is_convex(false)
- , robust_min_comparable_radius(0)
- , robust_max_comparable_radius(0)
- {
- is_monotonic_increasing[0] = false;
- is_monotonic_increasing[1] = false;
- is_monotonic_decreasing[0] = false;
- is_monotonic_decreasing[1] = false;
- }
- };
-
- struct robust_original
- {
- typedef robust_ring_type original_robust_ring_type;
- typedef geometry::sections<robust_box_type, 1> sections_type;
-
- inline robust_original()
- : m_is_interior(false)
- , m_has_interiors(true)
- {}
-
- inline robust_original(robust_ring_type const& ring,
- bool is_interior, bool has_interiors)
- : m_ring(ring)
- , m_is_interior(is_interior)
- , m_has_interiors(has_interiors)
- {
- geometry::envelope(m_ring, m_box);
-
- // create monotonic sections in x-dimension
- // The dimension is critical because the direction is later used
- // in the optimization for within checks using winding strategy
- // and this strategy is scanning in x direction.
- typedef boost::mpl::vector_c<std::size_t, 0> dimensions;
- geometry::sectionalize<false, dimensions>(m_ring,
- detail::no_rescale_policy(), m_sections);
- }
-
- robust_ring_type m_ring;
- robust_box_type m_box;
- sections_type m_sections;
-
- bool m_is_interior;
- bool m_has_interiors;
- };
-
- typedef std::vector<piece> piece_vector_type;
-
- piece_vector_type m_pieces;
- turn_vector_type m_turns;
- signed_size_type m_first_piece_index;
- bool m_deflate;
- bool m_has_deflated;
-
- buffered_ring_collection<buffered_ring<Ring> > offsetted_rings; // indexed by multi_index
- std::vector<robust_original> robust_originals; // robust representation of the original(s)
- robust_ring_type current_robust_ring;
- buffered_ring_collection<Ring> traversed_rings;
- segment_identifier current_segment_id;
-
- // Specificly for offsetted rings around points
- // but also for large joins with many points
- typedef geometry::sections<robust_box_type, 2> sections_type;
- sections_type monotonic_sections;
-
- // Define the clusters, mapping cluster_id -> turns
- typedef std::map
- <
- signed_size_type,
- detail::overlay::cluster_info
- > cluster_type;
-
- cluster_type m_clusters;
-
- IntersectionStrategy m_intersection_strategy;
- side_strategy_type m_side_strategy;
- area_strategy_type m_area_strategy;
- robust_area_strategy_type m_robust_area_strategy;
- RobustPolicy const& m_robust_policy;
-
- struct redundant_turn
- {
- inline bool operator()(buffer_turn_info_type const& turn) const
- {
- return turn.remove_on_multi;
- }
- };
-
- buffered_piece_collection(IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy)
- : m_first_piece_index(-1)
- , m_deflate(false)
- , m_has_deflated(false)
- , m_intersection_strategy(intersection_strategy)
- , m_side_strategy(intersection_strategy.get_side_strategy())
- , m_area_strategy(intersection_strategy.template get_area_strategy<point_type>())
- , m_robust_area_strategy(intersection_strategy.template get_area_strategy<robust_point_type>())
- , m_robust_policy(robust_policy)
- {}
-
-
-#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
- // Will (most probably) be removed later
- template <typename OccupationMap>
- inline void adapt_mapped_robust_point(OccupationMap const& map,
- buffer_turn_info_type& turn, int distance) const
- {
- for (int x = -distance; x <= distance; x++)
- {
- for (int y = -distance; y <= distance; y++)
- {
- robust_point_type rp = turn.robust_point;
- geometry::set<0>(rp, geometry::get<0>(rp) + x);
- geometry::set<1>(rp, geometry::get<1>(rp) + y);
- if (map.find(rp) != map.end())
- {
- turn.mapped_robust_point = rp;
- return;
- }
- }
- }
- }
-#endif
-
- inline void get_occupation(
-#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
- int distance = 0
-#endif
- )
- {
- typedef occupation_info<angle_info<robust_point_type, coordinate_type> >
- buffer_occupation_info;
-
- typedef std::map
- <
- robust_point_type,
- buffer_occupation_info,
- geometry::less<robust_point_type>
- > occupation_map_type;
-
- occupation_map_type occupation_map;
-
- // 1: Add all intersection points to occupation map
- typedef typename boost::range_iterator<turn_vector_type>::type
- iterator_type;
-
- for (iterator_type it = boost::begin(m_turns);
- it != boost::end(m_turns);
- ++it)
- {
- if (it->location == location_ok)
- {
-#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
- if (distance > 0 && ! occupation_map.empty())
- {
- adapt_mapped_robust_point(occupation_map, *it, distance);
- }
-#endif
- occupation_map[it->get_robust_point()].count++;
- }
- }
-
- // Remove all points with one or more u/u points from the map
- // (Alternatively, we could NOT do this here and change all u/u
- // behaviour in overlay. Currently nothing is done: each polygon is
- // just followed there. We could also always switch polygons there. For
- // buffer behaviour, where 3 pieces might meet of which 2 (or more) form
- // a u/u turn, this last option would have been better, probably).
- for (iterator_type it = boost::begin(m_turns);
- it != boost::end(m_turns);
- ++it)
- {
- if (it->both(detail::overlay::operation_union))
- {
- typename occupation_map_type::iterator mit =
- occupation_map.find(it->get_robust_point());
-
- if (mit != occupation_map.end())
- {
- occupation_map.erase(mit);
- }
- }
- }
-
- // 2: Remove all points from map which has only one
- typename occupation_map_type::iterator it = occupation_map.begin();
- while (it != occupation_map.end())
- {
- if (it->second.count <= 1)
- {
- typename occupation_map_type::iterator to_erase = it;
- ++it;
- occupation_map.erase(to_erase);
- }
- else
- {
- ++it;
- }
- }
-
- if (occupation_map.empty())
- {
- return;
- }
-
- // 3: Add vectors (incoming->intersection-point,
- // intersection-point -> outgoing)
- // for all (co-located) points still present in the map
-
- for (iterator_type it = boost::begin(m_turns);
- it != boost::end(m_turns);
- ++it)
- {
- typename occupation_map_type::iterator mit =
- occupation_map.find(it->get_robust_point());
-
- if (mit != occupation_map.end())
- {
- buffer_occupation_info& info = mit->second;
- for (int i = 0; i < 2; i++)
- {
- add_incoming_and_outgoing_angles(it->get_robust_point(), *it,
- m_pieces,
- i, it->operations[i].seg_id,
- info);
- }
-
- it->count_on_multi++;
- }
- }
-
-#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
- // X: Check rounding issues
- if (distance == 0)
- {
- for (typename occupation_map_type::const_iterator it = occupation_map.begin();
- it != occupation_map.end(); ++it)
- {
- if (it->second.has_rounding_issues(it->first))
- {
- if(distance == 0)
- {
- get_occupation(distance + 1);
- return;
- }
- }
- }
- }
-#endif
-
- // Get left turns from all clusters
- for (typename occupation_map_type::iterator it = occupation_map.begin();
- it != occupation_map.end(); ++it)
- {
- it->second.get_left_turns(it->first, m_turns, m_side_strategy);
- }
- }
-
- inline void classify_turns()
- {
- for (typename boost::range_iterator<turn_vector_type>::type it =
- boost::begin(m_turns); it != boost::end(m_turns); ++it)
- {
- if (it->count_within > 0)
- {
- it->location = inside_buffer;
- }
- if (it->count_on_original_boundary > 0)
- {
- it->location = inside_buffer;
- }
-#if ! defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- if (it->count_within_near_offsetted > 0)
- {
- // Within can have in rare cases a rounding issue. We don't discard this
- // point, so it can be used to continue started rings in traversal. But
- // will never start a new ring from this type of points.
- it->operations[0].enriched.startable = false;
- it->operations[1].enriched.startable = false;
- }
-#endif
- }
- }
-
- struct deflate_properties
- {
- bool has_inflated;
- std::size_t count;
-
- inline deflate_properties()
- : has_inflated(false)
- , count(0u)
- {}
- };
-
- inline void discard_turns_for_deflate()
- {
- // Deflate cases should have at least 3 points PER deflated original
- // to form a correct triangle
-
- // But if there are intersections between a deflated ring and another
- // ring, it is all accepted
-
- // In deflate most turns are i/u by nature, but u/u is also possible
-
- std::map<signed_size_type, deflate_properties> properties;
-
- for (typename boost::range_iterator<turn_vector_type const>::type it =
- boost::begin(m_turns); it != boost::end(m_turns); ++it)
- {
- const buffer_turn_info_type& turn = *it;
- if (turn.location == location_ok)
- {
- const buffer_turn_operation_type& op0 = turn.operations[0];
- const buffer_turn_operation_type& op1 = turn.operations[1];
-
- if (! m_pieces[op0.seg_id.piece_index].is_deflated
- || ! m_pieces[op1.seg_id.piece_index].is_deflated)
- {
- properties[op0.seg_id.multi_index].has_inflated = true;
- properties[op1.seg_id.multi_index].has_inflated = true;
- continue;
- }
-
- // It is deflated, update counts
- for (int i = 0; i < 2; i++)
- {
- const buffer_turn_operation_type& op = turn.operations[i];
- if (op.operation == detail::overlay::operation_union
- || op.operation == detail::overlay::operation_continue)
- {
- properties[op.seg_id.multi_index].count++;
- }
- }
- }
- }
-
- for (typename boost::range_iterator<turn_vector_type>::type it =
- boost::begin(m_turns); it != boost::end(m_turns); ++it)
- {
- buffer_turn_info_type& turn = *it;
-
- if (turn.location == location_ok)
- {
- const buffer_turn_operation_type& op0 = turn.operations[0];
- const buffer_turn_operation_type& op1 = turn.operations[1];
- signed_size_type const multi0 = op0.seg_id.multi_index;
- signed_size_type const multi1 = op1.seg_id.multi_index;
-
- if (multi0 == multi1)
- {
- const deflate_properties& prop = properties[multi0];
-
- // NOTE: Keep brackets around prop.count
- // avoid gcc-bug "parse error in template argument list"
- // GCC versions 5.4 and 5.5 (and probably more)
- if (! prop.has_inflated && (prop.count) < 3)
- {
- // Property is not inflated
- // Not enough points, this might be caused by <float> where
- // detection turn-in-original failed because of numeric errors
- turn.location = location_discard;
- }
- }
- else
- {
- // Two different (possibly deflated) rings
- }
- }
- }
- }
-
- template <typename DistanceStrategy>
- inline void check_remaining_points(DistanceStrategy const& distance_strategy)
- {
- // Check if a turn is inside any of the originals
-
- turn_in_original_visitor<turn_vector_type> visitor(m_turns);
- geometry::partition
- <
- robust_box_type,
- include_turn_policy,
- detail::partition::include_all_policy
- >::apply(m_turns, robust_originals, visitor,
- turn_get_box(), turn_in_original_ovelaps_box(),
- original_get_box(), original_ovelaps_box());
-
- bool const deflate = distance_strategy.negative();
-
- for (typename boost::range_iterator<turn_vector_type>::type it =
- boost::begin(m_turns); it != boost::end(m_turns); ++it)
- {
- buffer_turn_info_type& turn = *it;
- if (turn.location == location_ok)
- {
- if (deflate && turn.count_in_original <= 0)
- {
- // For deflate/negative buffers: it is not in original, discard
- turn.location = location_discard;
- }
- else if (! deflate && turn.count_in_original > 0)
- {
- // For inflate: it is in original, discard
- turn.location = location_discard;
- }
- }
- }
-
- if (m_has_deflated)
- {
- // Either strategy was negative, or there were interior rings
- discard_turns_for_deflate();
- }
- }
-
- inline bool assert_indices_in_robust_rings() const
- {
- geometry::equal_to<robust_point_type> comparator;
- for (typename boost::range_iterator<turn_vector_type const>::type it =
- boost::begin(m_turns); it != boost::end(m_turns); ++it)
- {
- for (int i = 0; i < 2; i++)
- {
- robust_point_type const &p1
- = m_pieces[it->operations[i].piece_index].robust_ring
- [it->operations[i].index_in_robust_ring];
- robust_point_type const &p2 = it->robust_point;
- if (! comparator(p1, p2))
- {
- return false;
- }
- }
- }
- return true;
- }
-
- inline void insert_rescaled_piece_turns()
- {
- // Add rescaled turn points to corresponding pieces
- // (after this, each turn occurs twice)
- std::size_t index = 0;
- for (typename boost::range_iterator<turn_vector_type>::type it =
- boost::begin(m_turns); it != boost::end(m_turns); ++it, ++index)
- {
- geometry::recalculate(it->robust_point, it->point, m_robust_policy);
-#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
- it->mapped_robust_point = it->robust_point;
-#endif
-
- robust_turn turn;
- it->turn_index = index;
- turn.turn_index = index;
- turn.point = it->robust_point;
- for (int i = 0; i < 2; i++)
- {
- turn.operation_index = i;
- turn.seg_id = it->operations[i].seg_id;
- turn.fraction = it->operations[i].fraction;
-
- piece& pc = m_pieces[it->operations[i].piece_index];
- pc.robust_turns.push_back(turn);
-
- // Take into account for the box (intersection points should fall inside,
- // but in theory they can be one off because of rounding
- geometry::expand(pc.robust_envelope, it->robust_point);
- geometry::expand(pc.robust_offsetted_envelope, it->robust_point);
- }
- }
-
-#if ! defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- // Insert all rescaled turn-points into these rings, to form a
- // reliable integer-based ring. All turns can be compared (inside) to this
- // rings to see if they are inside.
-
- for (typename boost::range_iterator<piece_vector_type>::type
- it = boost::begin(m_pieces); it != boost::end(m_pieces); ++it)
- {
- piece& pc = *it;
- signed_size_type piece_segment_index = pc.first_seg_id.segment_index;
- if (! pc.robust_turns.empty())
- {
- if (pc.robust_turns.size() > 1u)
- {
- std::sort(pc.robust_turns.begin(), pc.robust_turns.end(), buffer_operation_less());
- }
- // Walk through them, in reverse to insert at right index
- signed_size_type index_offset = static_cast<signed_size_type>(pc.robust_turns.size()) - 1;
- for (typename boost::range_reverse_iterator<const std::vector<robust_turn> >::type
- rit = boost::const_rbegin(pc.robust_turns);
- rit != boost::const_rend(pc.robust_turns);
- ++rit, --index_offset)
- {
- signed_size_type const index_in_vector = 1 + rit->seg_id.segment_index - piece_segment_index;
- BOOST_GEOMETRY_ASSERT
- (
- index_in_vector > 0
- && index_in_vector < pc.offsetted_count
- );
-
- pc.robust_ring.insert(boost::begin(pc.robust_ring) + index_in_vector, rit->point);
- pc.offsetted_count++;
-
- m_turns[rit->turn_index].operations[rit->operation_index].index_in_robust_ring = index_in_vector + index_offset;
- }
- }
- }
-
- BOOST_GEOMETRY_ASSERT(assert_indices_in_robust_rings());
-#endif
- }
-
- template <std::size_t Dimension>
- static inline void determine_monotonicity(piece& pc,
- robust_point_type const& current,
- robust_point_type const& next)
- {
- if (geometry::get<Dimension>(current) >= geometry::get<Dimension>(next))
- {
- pc.is_monotonic_increasing[Dimension] = false;
- }
- if (geometry::get<Dimension>(current) <= geometry::get<Dimension>(next))
- {
- pc.is_monotonic_decreasing[Dimension] = false;
- }
- }
-
- static inline void determine_properties(piece& pc)
- {
- pc.is_monotonic_increasing[0] = true;
- pc.is_monotonic_increasing[1] = true;
- pc.is_monotonic_decreasing[0] = true;
- pc.is_monotonic_decreasing[1] = true;
-
- pc.is_convex = geometry::is_convex(pc.robust_ring);
-
- if (pc.offsetted_count < 2)
- {
- return;
- }
-
- typename robust_ring_type::const_iterator current = pc.robust_ring.begin();
- typename robust_ring_type::const_iterator next = current + 1;
-
- for (signed_size_type i = 1; i < pc.offsetted_count; i++)
- {
- determine_monotonicity<0>(pc, *current, *next);
- determine_monotonicity<1>(pc, *current, *next);
- current = next;
- ++next;
- }
- }
-
- void determine_properties()
- {
- for (typename piece_vector_type::iterator it = boost::begin(m_pieces);
- it != boost::end(m_pieces);
- ++it)
- {
- determine_properties(*it);
- }
- }
-
- inline void reverse_negative_robust_rings()
- {
- for (typename piece_vector_type::iterator it = boost::begin(m_pieces);
- it != boost::end(m_pieces);
- ++it)
- {
- piece& pc = *it;
- if (geometry::area(pc.robust_ring, m_robust_area_strategy) < 0)
- {
- // Rings can be ccw:
- // - in a concave piece
- // - in a line-buffer with a negative buffer-distance
- std::reverse(pc.robust_ring.begin(), pc.robust_ring.end());
- }
- }
- }
-
- inline void prepare_buffered_point_piece(piece& pc)
- {
- // create monotonic sections in y-dimension
- typedef boost::mpl::vector_c<std::size_t, 1> dimensions;
- geometry::sectionalize<false, dimensions>(pc.robust_ring,
- detail::no_rescale_policy(), pc.sections);
-
- // Determine min/max radius
- typedef geometry::model::referring_segment<robust_point_type const>
- robust_segment_type;
-
- typename robust_ring_type::const_iterator current = pc.robust_ring.begin();
- typename robust_ring_type::const_iterator next = current + 1;
-
- for (signed_size_type i = 1; i < pc.offsetted_count; i++)
- {
- robust_segment_type s(*current, *next);
- robust_comparable_radius_type const d
- = geometry::comparable_distance(pc.robust_center, s);
-
- if (i == 1 || d < pc.robust_min_comparable_radius)
- {
- pc.robust_min_comparable_radius = d;
- }
- if (i == 1 || d > pc.robust_max_comparable_radius)
- {
- pc.robust_max_comparable_radius = d;
- }
-
- current = next;
- ++next;
- }
- }
-
- inline void prepare_buffered_point_pieces()
- {
- for (typename piece_vector_type::iterator it = boost::begin(m_pieces);
- it != boost::end(m_pieces);
- ++it)
- {
- if (it->type == geometry::strategy::buffer::buffered_point)
- {
- prepare_buffered_point_piece(*it);
- }
- }
- }
-
- inline void get_turns()
- {
- for(typename boost::range_iterator<sections_type>::type it
- = boost::begin(monotonic_sections);
- it != boost::end(monotonic_sections);
- ++it)
- {
- enlarge_box(it->bounding_box, 1);
- }
-
- {
- // Calculate the turns
- piece_turn_visitor
- <
- piece_vector_type,
- buffered_ring_collection<buffered_ring<Ring> >,
- turn_vector_type,
- IntersectionStrategy,
- RobustPolicy
- > visitor(m_pieces, offsetted_rings, m_turns,
- m_intersection_strategy, m_robust_policy);
-
- geometry::partition
- <
- robust_box_type
- >::apply(monotonic_sections, visitor,
- detail::section::get_section_box(),
- detail::section::overlaps_section_box());
- }
-
- insert_rescaled_piece_turns();
-
- reverse_negative_robust_rings();
-
- determine_properties();
-
- prepare_buffered_point_pieces();
-
- {
- // Check if it is inside any of the pieces
- turn_in_piece_visitor
- <
- turn_vector_type, piece_vector_type
- > visitor(m_turns, m_pieces);
-
- geometry::partition
- <
- robust_box_type
- >::apply(m_turns, m_pieces, visitor,
- turn_get_box(), turn_ovelaps_box(),
- piece_get_box(), piece_ovelaps_box());
-
- }
- }
-
- inline void start_new_ring(bool deflate)
- {
- signed_size_type const n = static_cast<signed_size_type>(offsetted_rings.size());
- current_segment_id.source_index = 0;
- current_segment_id.multi_index = n;
- current_segment_id.ring_index = -1;
- current_segment_id.segment_index = 0;
-
- offsetted_rings.resize(n + 1);
- current_robust_ring.clear();
-
- m_first_piece_index = static_cast<signed_size_type>(boost::size(m_pieces));
- m_deflate = deflate;
- if (deflate)
- {
- // Pieces contain either deflated exterior rings, or inflated
- // interior rings which are effectively deflated too
- m_has_deflated = true;
- }
- }
-
- inline void abort_ring()
- {
- // Remove all created pieces for this ring, sections, last offsetted
- while (! m_pieces.empty()
- && m_pieces.back().first_seg_id.multi_index
- == current_segment_id.multi_index)
- {
- m_pieces.erase(m_pieces.end() - 1);
- }
-
- while (! monotonic_sections.empty()
- && monotonic_sections.back().ring_id.multi_index
- == current_segment_id.multi_index)
- {
- monotonic_sections.erase(monotonic_sections.end() - 1);
- }
-
- offsetted_rings.erase(offsetted_rings.end() - 1);
- current_robust_ring.clear();
-
- m_first_piece_index = -1;
- }
-
- inline void update_closing_point()
- {
- BOOST_GEOMETRY_ASSERT(! offsetted_rings.empty());
- buffered_ring<Ring>& added = offsetted_rings.back();
- if (! boost::empty(added))
- {
- range::back(added) = range::front(added);
- }
- }
-
- inline void update_last_point(point_type const& p,
- buffered_ring<Ring>& ring)
- {
- // For the first point of a new piece, and there were already
- // points in the offsetted ring, for some piece types the first point
- // is a duplicate of the last point of the previous piece.
-
- // TODO: disable that, that point should not be added
-
- // For now, it is made equal because due to numerical instability,
- // it can be a tiny bit off, possibly causing a self-intersection
-
- BOOST_GEOMETRY_ASSERT(boost::size(m_pieces) > 0);
- if (! ring.empty()
- && current_segment_id.segment_index
- == m_pieces.back().first_seg_id.segment_index)
- {
- ring.back() = p;
- }
- }
-
- inline void set_piece_center(point_type const& center)
- {
- BOOST_GEOMETRY_ASSERT(! m_pieces.empty());
- geometry::recalculate(m_pieces.back().robust_center, center,
- m_robust_policy);
- }
-
- inline void finish_ring(strategy::buffer::result_code code,
- bool is_interior = false, bool has_interiors = false)
- {
- if (code == strategy::buffer::result_error_numerical)
- {
- abort_ring();
- return;
- }
-
- if (m_first_piece_index == -1)
- {
- return;
- }
-
- if (m_first_piece_index < static_cast<signed_size_type>(boost::size(m_pieces)))
- {
- // If piece was added
- // Reassign left-of-first and right-of-last
- geometry::range::at(m_pieces, m_first_piece_index).left_index
- = static_cast<signed_size_type>(boost::size(m_pieces)) - 1;
- geometry::range::back(m_pieces).right_index = m_first_piece_index;
- }
- m_first_piece_index = -1;
-
- update_closing_point();
-
- if (! current_robust_ring.empty())
- {
- BOOST_GEOMETRY_ASSERT
- (
- geometry::equals(current_robust_ring.front(),
- current_robust_ring.back())
- );
-
- robust_originals.push_back(
- robust_original(current_robust_ring,
- is_interior, has_interiors));
- }
- }
-
- inline void set_current_ring_concave()
- {
- BOOST_GEOMETRY_ASSERT(boost::size(offsetted_rings) > 0);
- offsetted_rings.back().has_concave = true;
- }
-
- inline signed_size_type add_point(point_type const& p)
- {
- BOOST_GEOMETRY_ASSERT(boost::size(offsetted_rings) > 0);
-
- buffered_ring<Ring>& current_ring = offsetted_rings.back();
- update_last_point(p, current_ring);
-
- current_segment_id.segment_index++;
- current_ring.push_back(p);
- return static_cast<signed_size_type>(current_ring.size());
- }
-
- //-------------------------------------------------------------------------
-
- inline piece& create_piece(strategy::buffer::piece_type type,
- bool decrease_segment_index_by_one)
- {
- if (type == strategy::buffer::buffered_concave)
- {
- offsetted_rings.back().has_concave = true;
- }
-
- piece pc;
- pc.type = type;
- pc.index = static_cast<signed_size_type>(boost::size(m_pieces));
- pc.is_deflated = m_deflate;
-
- current_segment_id.piece_index = pc.index;
-
- pc.first_seg_id = current_segment_id;
-
- // Assign left/right (for first/last piece per ring they will be re-assigned later)
- pc.left_index = pc.index - 1;
- pc.right_index = pc.index + 1;
-
- std::size_t const n = boost::size(offsetted_rings.back());
- pc.first_seg_id.segment_index = decrease_segment_index_by_one ? n - 1 : n;
- pc.last_segment_index = pc.first_seg_id.segment_index;
-
- m_pieces.push_back(pc);
- return m_pieces.back();
- }
-
- inline void init_rescale_piece(piece& pc, std::size_t helper_points_size)
- {
- if (pc.first_seg_id.segment_index < 0)
- {
- // This indicates an error situation: an earlier piece was empty
- // It currently does not happen
- // std::cout << "EMPTY " << pc.type << " " << pc.index << " " << pc.first_seg_id.multi_index << std::endl;
- pc.offsetted_count = 0;
- return;
- }
-
- BOOST_GEOMETRY_ASSERT(pc.first_seg_id.multi_index >= 0);
- BOOST_GEOMETRY_ASSERT(pc.last_segment_index >= 0);
-
- pc.offsetted_count = pc.last_segment_index - pc.first_seg_id.segment_index;
- BOOST_GEOMETRY_ASSERT(pc.offsetted_count >= 0);
-
- pc.robust_ring.reserve(pc.offsetted_count + helper_points_size);
-
- // Add rescaled offsetted segments
- {
- buffered_ring<Ring> const& ring = offsetted_rings[pc.first_seg_id.multi_index];
-
- typedef typename boost::range_iterator<const buffered_ring<Ring> >::type it_type;
- for (it_type it = boost::begin(ring) + pc.first_seg_id.segment_index;
- it != boost::begin(ring) + pc.last_segment_index;
- ++it)
- {
- robust_point_type point;
- geometry::recalculate(point, *it, m_robust_policy);
- pc.robust_ring.push_back(point);
- }
- }
- }
-
- inline robust_point_type add_helper_point(piece& pc, const point_type& point)
- {
-#if defined(BOOST_GEOMETRY_BUFFER_USE_HELPER_POINTS)
- pc.helper_points.push_back(point);
-#endif
-
- robust_point_type rob_point;
- geometry::recalculate(rob_point, point, m_robust_policy);
- pc.robust_ring.push_back(rob_point);
- return rob_point;
- }
-
- // TODO: this is shared with sectionalize, move to somewhere else (assign?)
- template <typename Box, typename Value>
- inline void enlarge_box(Box& box, Value value)
- {
- geometry::set<0, 0>(box, geometry::get<0, 0>(box) - value);
- geometry::set<0, 1>(box, geometry::get<0, 1>(box) - value);
- geometry::set<1, 0>(box, geometry::get<1, 0>(box) + value);
- geometry::set<1, 1>(box, geometry::get<1, 1>(box) + value);
- }
-
- inline void calculate_robust_envelope(piece& pc)
- {
- if (pc.offsetted_count == 0)
- {
- return;
- }
-
- geometry::envelope(pc.robust_ring, pc.robust_envelope);
-
- geometry::assign_inverse(pc.robust_offsetted_envelope);
- for (signed_size_type i = 0; i < pc.offsetted_count; i++)
- {
- geometry::expand(pc.robust_offsetted_envelope, pc.robust_ring[i]);
- }
-
- // Take roundings into account, enlarge boxes with 1 integer
- enlarge_box(pc.robust_envelope, 1);
- enlarge_box(pc.robust_offsetted_envelope, 1);
- }
-
- inline void sectionalize(piece& pc)
- {
-
- buffered_ring<Ring> const& ring = offsetted_rings.back();
-
- typedef geometry::detail::sectionalize::sectionalize_part
- <
- point_type,
- boost::mpl::vector_c<std::size_t, 0, 1> // x,y dimension
- > sectionalizer;
-
- // Create a ring-identifier. The source-index is the piece index
- // The multi_index is as in this collection (the ring), but not used here
- // The ring_index is not used
- ring_identifier ring_id(pc.index, pc.first_seg_id.multi_index, -1);
-
- sectionalizer::apply(monotonic_sections,
- boost::begin(ring) + pc.first_seg_id.segment_index,
- boost::begin(ring) + pc.last_segment_index,
- m_robust_policy,
- ring_id, 10);
- }
-
- inline void finish_piece(piece& pc)
- {
- init_rescale_piece(pc, 0u);
- calculate_robust_envelope(pc);
- sectionalize(pc);
- }
-
- inline void finish_piece(piece& pc,
- const point_type& point1,
- const point_type& point2,
- const point_type& point3)
- {
- init_rescale_piece(pc, 3u);
- if (pc.offsetted_count == 0)
- {
- return;
- }
-
- add_helper_point(pc, point1);
- robust_point_type mid_point = add_helper_point(pc, point2);
- add_helper_point(pc, point3);
- calculate_robust_envelope(pc);
- sectionalize(pc);
-
- current_robust_ring.push_back(mid_point);
- }
-
- inline void finish_piece(piece& pc,
- const point_type& point1,
- const point_type& point2,
- const point_type& point3,
- const point_type& point4)
- {
- init_rescale_piece(pc, 4u);
- add_helper_point(pc, point1);
- robust_point_type mid_point2 = add_helper_point(pc, point2);
- robust_point_type mid_point1 = add_helper_point(pc, point3);
- add_helper_point(pc, point4);
- sectionalize(pc);
- calculate_robust_envelope(pc);
-
- // Add mid-points in other order to current helper_ring
- current_robust_ring.push_back(mid_point1);
- current_robust_ring.push_back(mid_point2);
- }
-
- inline void add_piece(strategy::buffer::piece_type type, point_type const& p,
- point_type const& b1, point_type const& b2)
- {
- piece& pc = create_piece(type, false);
- add_point(b1);
- pc.last_segment_index = add_point(b2);
- finish_piece(pc, b2, p, b1);
- }
-
- template <typename Range>
- inline void add_range_to_piece(piece& pc, Range const& range, bool add_front)
- {
- BOOST_GEOMETRY_ASSERT(boost::size(range) != 0u);
-
- typename Range::const_iterator it = boost::begin(range);
-
- // If it follows a non-join (so basically the same piece-type) point b1 should be added.
- // There should be two intersections later and it should be discarded.
- // But for now we need it to calculate intersections
- if (add_front)
- {
- add_point(*it);
- }
-
- for (++it; it != boost::end(range); ++it)
- {
- pc.last_segment_index = add_point(*it);
- }
- }
-
-
- template <typename Range>
- inline void add_piece(strategy::buffer::piece_type type, Range const& range,
- bool decrease_segment_index_by_one)
- {
- piece& pc = create_piece(type, decrease_segment_index_by_one);
-
- if (boost::size(range) > 0u)
- {
- add_range_to_piece(pc, range, offsetted_rings.back().empty());
- }
- finish_piece(pc);
- }
-
- template <typename Range>
- inline void add_side_piece(point_type const& p1, point_type const& p2,
- Range const& range, bool first)
- {
- BOOST_GEOMETRY_ASSERT(boost::size(range) >= 2u);
-
- piece& pc = create_piece(strategy::buffer::buffered_segment, ! first);
- add_range_to_piece(pc, range, first);
- finish_piece(pc, range.back(), p2, p1, range.front());
- }
-
- template <typename Range>
- inline void add_piece(strategy::buffer::piece_type type,
- point_type const& p, Range const& range)
- {
- piece& pc = create_piece(type, true);
-
- if (boost::size(range) > 0u)
- {
- add_range_to_piece(pc, range, offsetted_rings.back().empty());
- finish_piece(pc, range.back(), p, range.front());
- }
- else
- {
- finish_piece(pc);
- }
- }
-
- template <typename EndcapStrategy, typename Range>
- inline void add_endcap(EndcapStrategy const& strategy, Range const& range,
- point_type const& end_point)
- {
- boost::ignore_unused(strategy);
-
- if (range.empty())
- {
- return;
- }
- strategy::buffer::piece_type pt = strategy.get_piece_type();
- if (pt == strategy::buffer::buffered_flat_end)
- {
- // It is flat, should just be added, without helper segments
- add_piece(pt, range, true);
- }
- else
- {
- // Normal case, it has an "inside", helper segments should be added
- add_piece(pt, end_point, range);
- }
- }
-
- inline void mark_flat_start()
- {
- if (! m_pieces.empty())
- {
- piece& back = m_pieces.back();
- back.is_flat_start = true;
- }
- }
-
- inline void mark_flat_end()
- {
- if (! m_pieces.empty())
- {
- piece& back = m_pieces.back();
- back.is_flat_end = true;
- }
- }
-
- //-------------------------------------------------------------------------
-
- inline void enrich()
- {
- enrich_intersection_points<false, false, overlay_buffer>(m_turns,
- m_clusters, offsetted_rings, offsetted_rings,
- m_robust_policy, m_side_strategy);
- }
-
- // Discards all rings which do have not-OK intersection points only.
- // Those can never be traversed and should not be part of the output.
- inline void discard_rings()
- {
- for (typename boost::range_iterator<turn_vector_type const>::type it =
- boost::begin(m_turns); it != boost::end(m_turns); ++it)
- {
- if (it->location != location_ok)
- {
- offsetted_rings[it->operations[0].seg_id.multi_index].has_discarded_intersections = true;
- offsetted_rings[it->operations[1].seg_id.multi_index].has_discarded_intersections = true;
- }
- else
- {
- offsetted_rings[it->operations[0].seg_id.multi_index].has_accepted_intersections = true;
- offsetted_rings[it->operations[1].seg_id.multi_index].has_accepted_intersections = true;
- }
- }
- }
-
- inline bool point_coveredby_original(point_type const& point)
- {
- robust_point_type any_point;
- geometry::recalculate(any_point, point, m_robust_policy);
-
- signed_size_type count_in_original = 0;
-
- // Check of the robust point of this outputted ring is in
- // any of the robust original rings
- // This can go quadratic if the input has many rings, and there
- // are many untouched deflated rings around
- for (typename std::vector<robust_original>::const_iterator it
- = robust_originals.begin();
- it != robust_originals.end();
- ++it)
- {
- robust_original const& original = *it;
- if (detail::disjoint::disjoint_point_box(any_point,
- original.m_box))
- {
- continue;
- }
-
- int const geometry_code
- = detail::within::point_in_geometry(any_point,
- original.m_ring);
-
- if (geometry_code == -1)
- {
- // Outside, continue
- continue;
- }
-
- // Apply for possibly nested interior rings
- if (original.m_is_interior)
- {
- count_in_original--;
- }
- else if (original.m_has_interiors)
- {
- count_in_original++;
- }
- else
- {
- // Exterior ring without interior rings
- return true;
- }
- }
- return count_in_original > 0;
- }
-
- // For a deflate, all rings around inner rings which are untouched
- // (no intersections/turns) and which are OUTSIDE the original should
- // be discarded
- inline void discard_nonintersecting_deflated_rings()
- {
- for(typename buffered_ring_collection<buffered_ring<Ring> >::iterator it
- = boost::begin(offsetted_rings);
- it != boost::end(offsetted_rings);
- ++it)
- {
- buffered_ring<Ring>& ring = *it;
- if (! ring.has_intersections()
- && boost::size(ring) > 0u
- && geometry::area(ring, m_area_strategy) < 0)
- {
- if (! point_coveredby_original(geometry::range::front(ring)))
- {
- ring.is_untouched_outside_original = true;
- }
- }
- }
- }
-
- inline void block_turns()
- {
- // To fix left-turn issues like #rt_u13
- // But currently it causes more other issues than it fixes
-// m_turns.erase
-// (
-// std::remove_if(boost::begin(m_turns), boost::end(m_turns),
-// redundant_turn()),
-// boost::end(m_turns)
-// );
-
- for (typename boost::range_iterator<turn_vector_type>::type it =
- boost::begin(m_turns); it != boost::end(m_turns); ++it)
- {
- buffer_turn_info_type& turn = *it;
- if (turn.location != location_ok)
- {
- // Discard this turn (don't set it to blocked to avoid colocated
- // clusters being discarded afterwards
- turn.discarded = true;
- }
- }
- }
-
- inline void traverse()
- {
- typedef detail::overlay::traverse
- <
- false, false,
- buffered_ring_collection<buffered_ring<Ring> >,
- buffered_ring_collection<buffered_ring<Ring > >,
- overlay_buffer,
- backtrack_for_buffer
- > traverser;
- std::map<ring_identifier, overlay::ring_turn_info> turn_info_per_ring;
-
- traversed_rings.clear();
- buffer_overlay_visitor visitor;
- traverser::apply(offsetted_rings, offsetted_rings,
- m_intersection_strategy, m_robust_policy,
- m_turns, traversed_rings,
- turn_info_per_ring,
- m_clusters, visitor);
- }
-
- inline void reverse()
- {
- for(typename buffered_ring_collection<buffered_ring<Ring> >::iterator it = boost::begin(offsetted_rings);
- it != boost::end(offsetted_rings);
- ++it)
- {
- if (! it->has_intersections())
- {
- std::reverse(it->begin(), it->end());
- }
- }
- for (typename boost::range_iterator<buffered_ring_collection<Ring> >::type
- it = boost::begin(traversed_rings);
- it != boost::end(traversed_rings);
- ++it)
- {
- std::reverse(it->begin(), it->end());
- }
-
- }
-
- template <typename GeometryOutput, typename OutputIterator>
- inline OutputIterator assign(OutputIterator out) const
- {
- typedef detail::overlay::ring_properties<point_type, area_result_type> properties;
-
- std::map<ring_identifier, properties> selected;
-
- // Select all rings which do not have any self-intersection
- // Inner rings, for deflate, which do not have intersections, and
- // which are outside originals, are skipped
- // (other ones should be traversed)
- signed_size_type index = 0;
- for(typename buffered_ring_collection<buffered_ring<Ring> >::const_iterator it = boost::begin(offsetted_rings);
- it != boost::end(offsetted_rings);
- ++it, ++index)
- {
- if (! it->has_intersections()
- && ! it->is_untouched_outside_original)
- {
- properties p = properties(*it, m_area_strategy);
- if (p.valid)
- {
- ring_identifier id(0, index, -1);
- selected[id] = p;
- }
- }
- }
-
- // Select all created rings
- index = 0;
- for (typename boost::range_iterator<buffered_ring_collection<Ring> const>::type
- it = boost::begin(traversed_rings);
- it != boost::end(traversed_rings);
- ++it, ++index)
- {
- properties p = properties(*it, m_area_strategy);
- if (p.valid)
- {
- ring_identifier id(2, index, -1);
- selected[id] = p;
- }
- }
-
- detail::overlay::assign_parents<overlay_buffer>(offsetted_rings, traversed_rings,
- selected, m_intersection_strategy);
- return detail::overlay::add_rings<GeometryOutput>(selected, offsetted_rings, traversed_rings, out,
- m_area_strategy);
- }
-
-};
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFERED_PIECE_COLLECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffered_ring.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffered_ring.hpp
deleted file mode 100644
index 4fd24b14518..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/buffered_ring.hpp
+++ /dev/null
@@ -1,282 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2015 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFERED_RING
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFERED_RING
-
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/strategies/buffer.hpp>
-
-#include <boost/geometry/algorithms/within.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
-#include <boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp>
-#include <boost/geometry/algorithms/detail/overlay/enrichment_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_ring.hpp>
-#include <boost/geometry/algorithms/detail/overlay/traversal_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-struct buffered_ring_collection_tag : polygonal_tag, multi_tag
-{};
-
-
-template <typename Ring>
-struct buffered_ring : public Ring
-{
- bool has_concave;
- bool has_accepted_intersections;
- bool has_discarded_intersections;
- bool is_untouched_outside_original;
-
- inline buffered_ring()
- : has_concave(false)
- , has_accepted_intersections(false)
- , has_discarded_intersections(false)
- , is_untouched_outside_original(false)
- {}
-
- inline bool discarded() const
- {
- return has_discarded_intersections && ! has_accepted_intersections;
- }
- inline bool has_intersections() const
- {
- return has_discarded_intersections || has_accepted_intersections;
- }
-};
-
-// This is a collection now special for overlay (needs vector of rings)
-template <typename Ring>
-struct buffered_ring_collection : public std::vector<Ring>
-{
-};
-
-}} // namespace detail::buffer
-
-
-// Turn off concept checking (for now)
-namespace dispatch
-{
-template <typename Geometry, bool IsConst>
-struct check<Geometry, detail::buffer::buffered_ring_collection_tag, IsConst>
-{
-};
-
-}
-
-
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-// Register the types
-namespace traits
-{
-
-
-template <typename Ring>
-struct tag<geometry::detail::buffer::buffered_ring<Ring> >
-{
- typedef ring_tag type;
-};
-
-
-template <typename Ring>
-struct point_order<geometry::detail::buffer::buffered_ring<Ring> >
-{
- static const order_selector value = geometry::point_order<Ring>::value;
-};
-
-
-template <typename Ring>
-struct closure<geometry::detail::buffer::buffered_ring<Ring> >
-{
- static const closure_selector value = geometry::closure<Ring>::value;
-};
-
-
-template <typename Ring>
-struct point_type<geometry::detail::buffer::buffered_ring_collection<Ring> >
-{
- typedef typename geometry::point_type<Ring>::type type;
-};
-
-template <typename Ring>
-struct tag<geometry::detail::buffer::buffered_ring_collection<Ring> >
-{
- typedef geometry::detail::buffer::buffered_ring_collection_tag type;
-};
-
-
-} // namespace traits
-
-
-
-
-namespace core_dispatch
-{
-
-template <typename Ring>
-struct ring_type
-<
- detail::buffer::buffered_ring_collection_tag,
- detail::buffer::buffered_ring_collection<Ring>
->
-{
- typedef Ring type;
-};
-
-
-// There is a specific tag, so this specialization cannot be placed in traits
-template <typename Ring>
-struct point_order<detail::buffer::buffered_ring_collection_tag,
- geometry::detail::buffer::buffered_ring_collection
- <
- geometry::detail::buffer::buffered_ring<Ring>
- > >
-{
- static const order_selector value
- = core_dispatch::point_order<ring_tag, Ring>::value;
-};
-
-
-}
-
-
-template <>
-struct single_tag_of<detail::buffer::buffered_ring_collection_tag>
-{
- typedef ring_tag type;
-};
-
-
-namespace dispatch
-{
-
-template
-<
- typename MultiRing,
- bool Reverse,
- typename SegmentIdentifier,
- typename PointOut
->
-struct copy_segment_point
- <
- detail::buffer::buffered_ring_collection_tag,
- MultiRing,
- Reverse,
- SegmentIdentifier,
- PointOut
- >
- : detail::copy_segments::copy_segment_point_multi
- <
- MultiRing,
- SegmentIdentifier,
- PointOut,
- detail::copy_segments::copy_segment_point_range
- <
- typename boost::range_value<MultiRing>::type,
- Reverse,
- SegmentIdentifier,
- PointOut
- >
- >
-{};
-
-
-template<bool Reverse>
-struct copy_segments
- <
- detail::buffer::buffered_ring_collection_tag,
- Reverse
- >
- : detail::copy_segments::copy_segments_multi
- <
- detail::copy_segments::copy_segments_ring<Reverse>
- >
-{};
-
-template <typename Point, typename MultiGeometry>
-struct within
-<
- Point,
- MultiGeometry,
- point_tag,
- detail::buffer::buffered_ring_collection_tag
->
-{
- template <typename Strategy>
- static inline bool apply(Point const& point,
- MultiGeometry const& multi, Strategy const& strategy)
- {
- return detail::within::point_in_geometry(point, multi, strategy) == 1;
- }
-};
-
-
-template <typename Geometry>
-struct is_empty<Geometry, detail::buffer::buffered_ring_collection_tag>
- : detail::is_empty::multi_is_empty<detail::is_empty::range_is_empty>
-{};
-
-
-template <typename Geometry>
-struct envelope<Geometry, detail::buffer::buffered_ring_collection_tag>
- : detail::envelope::envelope_multi_range
- <
- detail::envelope::envelope_range
- >
-{};
-
-
-} // namespace dispatch
-
-namespace detail { namespace overlay
-{
-
-template<>
-struct get_ring<detail::buffer::buffered_ring_collection_tag>
-{
- template<typename MultiGeometry>
- static inline typename ring_type<MultiGeometry>::type const& apply(
- ring_identifier const& id,
- MultiGeometry const& multi_ring)
- {
- BOOST_GEOMETRY_ASSERT
- (
- id.multi_index >= 0
- && id.multi_index < int(boost::size(multi_ring))
- );
- return get_ring<ring_tag>::apply(id, multi_ring[id.multi_index]);
- }
-};
-
-}}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_BUFFERED_RING
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp
deleted file mode 100644
index 5c012e7151f..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp
+++ /dev/null
@@ -1,312 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_GET_PIECE_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_GET_PIECE_TURNS_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/equals.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
-#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
-#include <boost/geometry/algorithms/detail/sections/section_functions.hpp>
-#include <boost/geometry/algorithms/detail/buffer/buffer_policies.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-
-#if defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
-struct buffer_assign_turn
-{
- static bool const include_no_turn = false;
- static bool const include_degenerate = false;
- static bool const include_opposite = false;
-
- template
- <
- typename Info,
- typename Point1,
- typename Point2,
- typename IntersectionInfo
- >
- static inline void apply(Info& info,
- Point1 const& /*p1*/,
- Point2 const& /*p2*/,
- IntersectionInfo const& iinfo)
- {
- info.rob_pi = iinfo.rpi();
- info.rob_pj = iinfo.rpj();
- info.rob_qi = iinfo.rqi();
- info.rob_qj = iinfo.rqj();
- }
-
-};
-#endif
-
-template
-<
- typename Pieces,
- typename Rings,
- typename Turns,
- typename IntersectionStrategy,
- typename RobustPolicy
->
-class piece_turn_visitor
-{
- Pieces const& m_pieces;
- Rings const& m_rings;
- Turns& m_turns;
- IntersectionStrategy const& m_intersection_strategy;
- RobustPolicy const& m_robust_policy;
-
- template <typename Piece>
- inline bool is_adjacent(Piece const& piece1, Piece const& piece2) const
- {
- if (piece1.first_seg_id.multi_index != piece2.first_seg_id.multi_index)
- {
- return false;
- }
-
- return piece1.index == piece2.left_index
- || piece1.index == piece2.right_index;
- }
-
- template <typename Piece>
- inline bool is_on_same_convex_ring(Piece const& piece1, Piece const& piece2) const
- {
- if (piece1.first_seg_id.multi_index != piece2.first_seg_id.multi_index)
- {
- return false;
- }
-
- return ! m_rings[piece1.first_seg_id.multi_index].has_concave;
- }
-
- template <typename Range, typename Iterator>
- inline void move_to_next_point(Range const& range, Iterator& next) const
- {
- ++next;
- if (next == boost::end(range))
- {
- next = boost::begin(range) + 1;
- }
- }
-
- template <typename Range, typename Iterator>
- inline Iterator next_point(Range const& range, Iterator it) const
- {
- Iterator result = it;
- move_to_next_point(range, result);
- // TODO: we could use either piece-boundaries, or comparison with
- // robust points, to check if the point equals the last one
- while(geometry::equals(*it, *result))
- {
- move_to_next_point(range, result);
- }
- return result;
- }
-
- template <std::size_t Dimension, typename Iterator, typename Box>
- inline void move_begin_iterator(Iterator& it_begin, Iterator it_beyond,
- signed_size_type& index, int dir,
- Box const& this_bounding_box,
- Box const& other_bounding_box)
- {
- for(; it_begin != it_beyond
- && it_begin + 1 != it_beyond
- && detail::section::preceding<Dimension>(dir, *(it_begin + 1),
- this_bounding_box,
- other_bounding_box,
- m_robust_policy);
- ++it_begin, index++)
- {}
- }
-
- template <std::size_t Dimension, typename Iterator, typename Box>
- inline void move_end_iterator(Iterator it_begin, Iterator& it_beyond,
- int dir, Box const& this_bounding_box,
- Box const& other_bounding_box)
- {
- while (it_beyond != it_begin
- && it_beyond - 1 != it_begin
- && it_beyond - 2 != it_begin)
- {
- if (detail::section::exceeding<Dimension>(dir, *(it_beyond - 2),
- this_bounding_box, other_bounding_box, m_robust_policy))
- {
- --it_beyond;
- }
- else
- {
- return;
- }
- }
- }
-
- template <typename Piece, typename Section>
- inline void calculate_turns(Piece const& piece1, Piece const& piece2,
- Section const& section1, Section const& section2)
- {
- typedef typename boost::range_value<Rings const>::type ring_type;
- typedef typename boost::range_value<Turns const>::type turn_type;
- typedef typename boost::range_iterator<ring_type const>::type iterator;
-
- signed_size_type const piece1_first_index = piece1.first_seg_id.segment_index;
- signed_size_type const piece2_first_index = piece2.first_seg_id.segment_index;
- if (piece1_first_index < 0 || piece2_first_index < 0)
- {
- return;
- }
-
- // Get indices of part of offsetted_rings for this monotonic section:
- signed_size_type const sec1_first_index = piece1_first_index + section1.begin_index;
- signed_size_type const sec2_first_index = piece2_first_index + section2.begin_index;
-
- // index of last point in section, beyond-end is one further
- signed_size_type const sec1_last_index = piece1_first_index + section1.end_index;
- signed_size_type const sec2_last_index = piece2_first_index + section2.end_index;
-
- // get geometry and iterators over these sections
- ring_type const& ring1 = m_rings[piece1.first_seg_id.multi_index];
- iterator it1_first = boost::begin(ring1) + sec1_first_index;
- iterator it1_beyond = boost::begin(ring1) + sec1_last_index + 1;
-
- ring_type const& ring2 = m_rings[piece2.first_seg_id.multi_index];
- iterator it2_first = boost::begin(ring2) + sec2_first_index;
- iterator it2_beyond = boost::begin(ring2) + sec2_last_index + 1;
-
- // Set begin/end of monotonic ranges, in both x/y directions
- signed_size_type index1 = sec1_first_index;
- move_begin_iterator<0>(it1_first, it1_beyond, index1,
- section1.directions[0], section1.bounding_box, section2.bounding_box);
- move_end_iterator<0>(it1_first, it1_beyond,
- section1.directions[0], section1.bounding_box, section2.bounding_box);
- move_begin_iterator<1>(it1_first, it1_beyond, index1,
- section1.directions[1], section1.bounding_box, section2.bounding_box);
- move_end_iterator<1>(it1_first, it1_beyond,
- section1.directions[1], section1.bounding_box, section2.bounding_box);
-
- signed_size_type index2 = sec2_first_index;
- move_begin_iterator<0>(it2_first, it2_beyond, index2,
- section2.directions[0], section2.bounding_box, section1.bounding_box);
- move_end_iterator<0>(it2_first, it2_beyond,
- section2.directions[0], section2.bounding_box, section1.bounding_box);
- move_begin_iterator<1>(it2_first, it2_beyond, index2,
- section2.directions[1], section2.bounding_box, section1.bounding_box);
- move_end_iterator<1>(it2_first, it2_beyond,
- section2.directions[1], section2.bounding_box, section1.bounding_box);
-
- turn_type the_model;
- the_model.operations[0].piece_index = piece1.index;
- the_model.operations[0].seg_id = piece1.first_seg_id;
- the_model.operations[0].seg_id.segment_index = index1; // override
-
- iterator it1 = it1_first;
- for (iterator prev1 = it1++;
- it1 != it1_beyond;
- prev1 = it1++, the_model.operations[0].seg_id.segment_index++)
- {
- the_model.operations[1].piece_index = piece2.index;
- the_model.operations[1].seg_id = piece2.first_seg_id;
- the_model.operations[1].seg_id.segment_index = index2; // override
-
- iterator next1 = next_point(ring1, it1);
-
- iterator it2 = it2_first;
- for (iterator prev2 = it2++;
- it2 != it2_beyond;
- prev2 = it2++, the_model.operations[1].seg_id.segment_index++)
- {
- iterator next2 = next_point(ring2, it2);
-
- // TODO: internally get_turn_info calculates robust points.
- // But they are already calculated.
- // We should be able to use them.
- // this means passing them to this visitor,
- // and iterating in sync with them...
- typedef detail::overlay::get_turn_info
- <
-#if defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- buffer_assign_turn
-#else
- detail::overlay::assign_null_policy
-#endif
- > turn_policy;
-
- turn_policy::apply(*prev1, *it1, *next1,
- *prev2, *it2, *next2,
- false, false, false, false,
- the_model,
- m_intersection_strategy,
- m_robust_policy,
- std::back_inserter(m_turns));
- }
- }
- }
-
-public:
-
- piece_turn_visitor(Pieces const& pieces,
- Rings const& ring_collection,
- Turns& turns,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy)
- : m_pieces(pieces)
- , m_rings(ring_collection)
- , m_turns(turns)
- , m_intersection_strategy(intersection_strategy)
- , m_robust_policy(robust_policy)
- {}
-
- template <typename Section>
- inline bool apply(Section const& section1, Section const& section2,
- bool first = true)
- {
- boost::ignore_unused_variable_warning(first);
-
- typedef typename boost::range_value<Pieces const>::type piece_type;
- piece_type const& piece1 = m_pieces[section1.ring_id.source_index];
- piece_type const& piece2 = m_pieces[section2.ring_id.source_index];
-
- if ( piece1.index == piece2.index
- || is_adjacent(piece1, piece2)
- || is_on_same_convex_ring(piece1, piece2)
- || detail::disjoint::disjoint_box_box(section1.bounding_box,
- section2.bounding_box) )
- {
- return true;
- }
-
- calculate_turns(piece1, piece2, section1, section2);
-
- return true;
- }
-};
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_GET_PIECE_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp
deleted file mode 100644
index 618afe5fbae..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_LINE_LINE_INTERSECTION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_LINE_LINE_INTERSECTION_HPP
-
-
-#include <boost/geometry/arithmetic/determinant.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/strategies/buffer.hpp>
-#include <boost/geometry/algorithms/detail/buffer/parallel_continue.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-
-// TODO: once change this to proper strategy
-// It is different from current segment intersection because these are not segments but lines
-// If we have the Line concept, we can create a strategy
-// Assumes a convex corner
-struct line_line_intersection
-{
-
- template <typename Point>
- static inline strategy::buffer::join_selector apply(Point const& pi, Point const& pj,
- Point const& qi, Point const& qj, Point& ip)
- {
- // See http://mathworld.wolfram.com/Line-LineIntersection.html
- typedef typename coordinate_type<Point>::type coordinate_type;
-
- coordinate_type const denominator
- = determinant<coordinate_type>(get<0>(pi) - get<0>(pj),
- get<1>(pi) - get<1>(pj),
- get<0>(qi) - get<0>(qj),
- get<1>(qi) - get<1>(qj));
-
- // Even if the corner was checked before (so it is convex now), that
- // was done on the original geometry. This function runs on the buffered
- // geometries, where sides are generated and might be slightly off. In
- // Floating Point, that slightly might just exceed the limit and we have
- // to check it again.
-
- // For round joins, it will not be used at all.
- // For miter joints, there is a miter limit
- // If segments are parallel/collinear we must be distinguish two cases:
- // they continue each other, or they form a spike
- if (math::equals(denominator, coordinate_type()))
- {
- return parallel_continue(get<0>(qj) - get<0>(qi),
- get<1>(qj) - get<1>(qi),
- get<0>(pj) - get<0>(pi),
- get<1>(pj) - get<1>(pi))
- ? strategy::buffer::join_continue
- : strategy::buffer::join_spike
- ;
- }
-
- coordinate_type d1 = determinant<coordinate_type>(get<0>(pi), get<1>(pi), get<0>(pj), get<1>(pj));
- coordinate_type d2 = determinant<coordinate_type>(get<0>(qi), get<1>(qi), get<0>(qj), get<1>(qj));
-
- double const multiplier = 1.0 / denominator;
-
- set<0>(ip, determinant<coordinate_type>(d1, get<0>(pi) - get<0>(pj), d2, get<0>(qi) - get<0>(qj)) * multiplier);
- set<1>(ip, determinant<coordinate_type>(d1, get<1>(pi) - get<1>(pj), d2, get<1>(qi) - get<1>(qj)) * multiplier);
-
- return strategy::buffer::join_convex;
- }
-};
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_LINE_LINE_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/parallel_continue.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/parallel_continue.hpp
deleted file mode 100644
index 119d64de74d..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/parallel_continue.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_PARALLEL_CONTINUE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_PARALLEL_CONTINUE_HPP
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-template <typename T>
-inline bool parallel_continue(T dx1, T dy1, T dx2, T dy2)
-{
- T const dot = dx1 * dx2 + dy1 * dy2;
- return dot > 0;
-}
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_PARALLEL_CONTINUE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/turn_in_original_visitor.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/turn_in_original_visitor.hpp
deleted file mode 100644
index e7cc97539f9..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/turn_in_original_visitor.hpp
+++ /dev/null
@@ -1,277 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2016.
-// Modifications copyright (c) 2016 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TURN_IN_ORIGINAL_VISITOR
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TURN_IN_ORIGINAL_VISITOR
-
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/algorithms/expand.hpp>
-#include <boost/geometry/strategies/agnostic/point_in_poly_winding.hpp>
-#include <boost/geometry/strategies/buffer.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-struct original_get_box
-{
- template <typename Box, typename Original>
- static inline void apply(Box& total, Original const& original)
- {
- geometry::expand(total, original.m_box);
- }
-};
-
-struct original_ovelaps_box
-{
- template <typename Box, typename Original>
- static inline bool apply(Box const& box, Original const& original)
- {
- return ! detail::disjoint::disjoint_box_box(box, original.m_box);
- }
-};
-
-struct include_turn_policy
-{
- template <typename Turn>
- static inline bool apply(Turn const& turn)
- {
- return turn.location == location_ok;
- }
-};
-
-struct turn_in_original_ovelaps_box
-{
- template <typename Box, typename Turn>
- static inline bool apply(Box const& box, Turn const& turn)
- {
- if (turn.location != location_ok || turn.within_original)
- {
- // Skip all points already processed
- return false;
- }
-
- return ! geometry::detail::disjoint::disjoint_point_box(
- turn.robust_point, box);
- }
-};
-
-//! Check if specified is in range of specified iterators
-//! Return value of strategy (true if we can bail out)
-template
-<
- typename Strategy,
- typename State,
- typename Point,
- typename Iterator
->
-inline bool point_in_range(Strategy& strategy, State& state,
- Point const& point, Iterator begin, Iterator end)
-{
- boost::ignore_unused(strategy);
-
- Iterator it = begin;
- for (Iterator previous = it++; it != end; ++previous, ++it)
- {
- if (! strategy.apply(point, *previous, *it, state))
- {
- // We're probably on the boundary
- return false;
- }
- }
- return true;
-}
-
-template
-<
- typename Strategy,
- typename State,
- typename Point,
- typename CoordinateType,
- typename Iterator
->
-inline bool point_in_section(Strategy& strategy, State& state,
- Point const& point, CoordinateType const& point_x,
- Iterator begin, Iterator end,
- int direction)
-{
- if (direction == 0)
- {
- // Not a monotonic section, or no change in X-direction
- return point_in_range(strategy, state, point, begin, end);
- }
-
- // We're in a monotonic section in x-direction
- Iterator it = begin;
-
- for (Iterator previous = it++; it != end; ++previous, ++it)
- {
- // Depending on sections.direction we can quit for this section
- CoordinateType const previous_x = geometry::get<0>(*previous);
-
- if (direction == 1 && point_x < previous_x)
- {
- // Section goes upwards, x increases, point is is below section
- return true;
- }
- else if (direction == -1 && point_x > previous_x)
- {
- // Section goes downwards, x decreases, point is above section
- return true;
- }
-
- if (! strategy.apply(point, *previous, *it, state))
- {
- // We're probably on the boundary
- return false;
- }
- }
- return true;
-}
-
-
-template <typename Point, typename Original>
-inline int point_in_original(Point const& point, Original const& original)
-{
- // The winding strategy is scanning in x direction
- // therefore it's critical to pass direction calculated
- // for x dimension below.
- typedef strategy::within::winding<Point> strategy_type;
-
- typename strategy_type::state_type state;
- strategy_type strategy;
-
- if (boost::size(original.m_sections) == 0
- || boost::size(original.m_ring) - boost::size(original.m_sections) < 16)
- {
- // There are no sections, or it does not profit to walk over sections
- // instead of over points. Boundary of 16 is arbitrary but can influence
- // performance
- point_in_range(strategy, state, point,
- original.m_ring.begin(), original.m_ring.end());
- return strategy.result(state);
- }
-
- typedef typename Original::sections_type sections_type;
- typedef typename boost::range_iterator<sections_type const>::type iterator_type;
- typedef typename boost::range_value<sections_type const>::type section_type;
- typedef typename geometry::coordinate_type<Point>::type coordinate_type;
-
- coordinate_type const point_x = geometry::get<0>(point);
-
- // Walk through all monotonic sections of this original
- for (iterator_type it = boost::begin(original.m_sections);
- it != boost::end(original.m_sections);
- ++it)
- {
- section_type const& section = *it;
-
- if (! section.duplicate
- && section.begin_index < section.end_index
- && point_x >= geometry::get<min_corner, 0>(section.bounding_box)
- && point_x <= geometry::get<max_corner, 0>(section.bounding_box))
- {
- // x-coordinate of point overlaps with section
- if (! point_in_section(strategy, state, point, point_x,
- boost::begin(original.m_ring) + section.begin_index,
- boost::begin(original.m_ring) + section.end_index + 1,
- section.directions[0]))
- {
- // We're probably on the boundary
- break;
- }
- }
- }
-
- return strategy.result(state);
-}
-
-
-template <typename Turns>
-class turn_in_original_visitor
-{
-public:
- turn_in_original_visitor(Turns& turns)
- : m_mutable_turns(turns)
- {}
-
- template <typename Turn, typename Original>
- inline bool apply(Turn const& turn, Original const& original, bool first = true)
- {
- boost::ignore_unused_variable_warning(first);
-
- if (turn.location != location_ok || turn.within_original)
- {
- // Skip all points already processed
- return true;
- }
-
- if (geometry::disjoint(turn.robust_point, original.m_box))
- {
- // Skip all disjoint
- return true;
- }
-
- int const code = point_in_original(turn.robust_point, original);
-
- if (code == -1)
- {
- return true;
- }
-
- Turn& mutable_turn = m_mutable_turns[turn.turn_index];
-
- if (code == 0)
- {
- // On border of original: always discard
- mutable_turn.location = location_discard;
- }
-
- // Point is inside an original ring
- if (original.m_is_interior)
- {
- mutable_turn.count_in_original--;
- }
- else if (original.m_has_interiors)
- {
- mutable_turn.count_in_original++;
- }
- else
- {
- // It is an exterior ring and there are no interior rings.
- // Then we are completely ready with this turn
- mutable_turn.within_original = true;
- mutable_turn.count_in_original = 1;
- }
-
- return true;
- }
-
-private :
- Turns& m_mutable_turns;
-};
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TURN_IN_ORIGINAL_VISITOR
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp
deleted file mode 100644
index eb6fc02c8c4..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp
+++ /dev/null
@@ -1,823 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2016.
-// Modifications copyright (c) 2016 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TURN_IN_PIECE_VISITOR
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TURN_IN_PIECE_VISITOR
-
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-
-#include <boost/geometry/arithmetic/dot_product.hpp>
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/comparable_distance.hpp>
-#include <boost/geometry/algorithms/equals.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_box.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
-#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
-#include <boost/geometry/policies/compare.hpp>
-#include <boost/geometry/strategies/buffer.hpp>
-#include <boost/geometry/algorithms/detail/buffer/buffer_policies.hpp>
-
-#if defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
-#include <boost/geometry/strategies/cartesian/side_of_intersection.hpp>
-#else
-#include <boost/geometry/strategies/agnostic/point_in_poly_winding.hpp>
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace buffer
-{
-
-struct piece_get_box
-{
- template <typename Box, typename Piece>
- static inline void apply(Box& total, Piece const& piece)
- {
- geometry::expand(total, piece.robust_envelope);
- }
-};
-
-struct piece_ovelaps_box
-{
- template <typename Box, typename Piece>
- static inline bool apply(Box const& box, Piece const& piece)
- {
- if (piece.type == strategy::buffer::buffered_flat_end
- || piece.type == strategy::buffer::buffered_concave)
- {
- // Turns cannot be inside a flat end (though they can be on border)
- // Neither we need to check if they are inside concave helper pieces
-
- // Skip all pieces not used as soon as possible
- return false;
- }
-
- return ! geometry::detail::disjoint::disjoint_box_box(box, piece.robust_envelope);
- }
-};
-
-struct turn_get_box
-{
- template <typename Box, typename Turn>
- static inline void apply(Box& total, Turn const& turn)
- {
- geometry::expand(total, turn.robust_point);
- }
-};
-
-struct turn_ovelaps_box
-{
- template <typename Box, typename Turn>
- static inline bool apply(Box const& box, Turn const& turn)
- {
- return ! geometry::detail::disjoint::disjoint_point_box(turn.robust_point, box);
- }
-};
-
-
-enum analyse_result
-{
- analyse_unknown,
- analyse_continue,
- analyse_disjoint,
- analyse_within,
- analyse_on_original_boundary,
- analyse_on_offsetted
-#if ! defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- , analyse_near_offsetted
-#endif
-};
-
-template <typename Point>
-inline bool in_box(Point const& previous,
- Point const& current, Point const& point)
-{
- // Get its box (TODO: this can be prepared-on-demand later)
- typedef geometry::model::box<Point> box_type;
- box_type box;
- geometry::assign_inverse(box);
- geometry::expand(box, previous);
- geometry::expand(box, current);
-
- return geometry::covered_by(point, box);
-}
-
-template <typename Point, typename Turn>
-inline analyse_result check_segment(Point const& previous,
- Point const& current, Turn const& turn,
- bool from_monotonic)
-{
-
-#if defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- typedef geometry::model::referring_segment<Point const> segment_type;
- segment_type const p(turn.rob_pi, turn.rob_pj);
- segment_type const q(turn.rob_qi, turn.rob_qj);
- segment_type const r(previous, current);
- int const side = strategy::side::side_of_intersection::apply(p, q, r,
- turn.robust_point);
-
- if (side == 0)
- {
- return analyse_on_offsetted;
- }
- if (side == -1 && from_monotonic)
- {
- return analyse_within;
- }
- if (side == 1 && from_monotonic)
- {
- return analyse_disjoint;
- }
- return analyse_continue;
-
-#else
-
- typedef typename strategy::side::services::default_strategy
- <
- typename cs_tag<Point>::type
- >::type side_strategy;
- typedef typename geometry::coordinate_type<Point>::type coordinate_type;
-
- coordinate_type const twice_area
- = side_strategy::template side_value
- <
- coordinate_type,
- coordinate_type
- >(previous, current, turn.robust_point);
-
- if (twice_area == 0)
- {
- // Collinear, only on segment if it is covered by its bbox
- if (in_box(previous, current, turn.robust_point))
- {
- return analyse_on_offsetted;
- }
- }
- else if (twice_area < 0)
- {
- // It is in the triangle right-of the segment where the
- // segment is the hypothenusa. Check if it is close
- // (within rounding-area)
- if (twice_area * twice_area < geometry::comparable_distance(previous, current)
- && in_box(previous, current, turn.robust_point))
- {
- return analyse_near_offsetted;
- }
- else if (from_monotonic)
- {
- return analyse_within;
- }
- }
- else if (twice_area > 0 && from_monotonic)
- {
- // Left of segment
- return analyse_disjoint;
- }
-
- // Not monotonic, on left or right side: continue analysing
- return analyse_continue;
-#endif
-}
-
-
-class analyse_turn_wrt_point_piece
-{
-public :
- template <typename Turn, typename Piece>
- static inline analyse_result apply(Turn const& turn, Piece const& piece)
- {
- typedef typename Piece::section_type section_type;
- typedef typename Turn::robust_point_type point_type;
- typedef typename geometry::coordinate_type<point_type>::type coordinate_type;
-
-#if defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- typedef geometry::model::referring_segment<point_type const> segment_type;
- segment_type const p(turn.rob_pi, turn.rob_pj);
- segment_type const q(turn.rob_qi, turn.rob_qj);
-#else
- typedef strategy::within::winding<point_type> strategy_type;
-
- typename strategy_type::state_type state;
- strategy_type strategy;
- boost::ignore_unused(strategy);
-#endif
-
- BOOST_GEOMETRY_ASSERT(! piece.sections.empty());
-
- coordinate_type const point_x = geometry::get<0>(turn.robust_point);
-
- for (std::size_t s = 0; s < piece.sections.size(); s++)
- {
- section_type const& section = piece.sections[s];
- // If point within horizontal range of monotonic section:
- if (! section.duplicate
- && section.begin_index < section.end_index
- && point_x >= geometry::get<min_corner, 0>(section.bounding_box) - 1
- && point_x <= geometry::get<max_corner, 0>(section.bounding_box) + 1)
- {
- for (signed_size_type i = section.begin_index + 1; i <= section.end_index; i++)
- {
- point_type const& previous = piece.robust_ring[i - 1];
- point_type const& current = piece.robust_ring[i];
-
-#if defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
-
- // First check if it is in range - if it is not, the
- // expensive side_of_intersection does not need to be
- // applied
- coordinate_type x1 = geometry::get<0>(previous);
- coordinate_type x2 = geometry::get<0>(current);
-
- if (x1 > x2)
- {
- std::swap(x1, x2);
- }
-
- if (point_x >= x1 - 1 && point_x <= x2 + 1)
- {
- segment_type const r(previous, current);
- int const side = strategy::side::side_of_intersection::apply(p, q, r,
- turn.robust_point);
-
- // Sections are monotonic in x-dimension
- if (side == 1)
- {
- // Left on segment
- return analyse_disjoint;
- }
- else if (side == 0)
- {
- // Collinear - TODO: check if really on segment
- return analyse_on_offsetted;
- }
- }
-#else
- analyse_result code = check_segment(previous, current, turn, false);
- if (code != analyse_continue)
- {
- return code;
- }
-
- // Get the state (to determine it is within), we don't have
- // to cover the on-segment case (covered above)
- strategy.apply(turn.robust_point, previous, current, state);
-#endif
- }
- }
- }
-
-#if defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- // It is nowhere outside, and not on segment, so it is within
- return analyse_within;
-#else
- int const code = strategy.result(state);
- if (code == 1)
- {
- return analyse_within;
- }
- else if (code == -1)
- {
- return analyse_disjoint;
- }
-
- // Should normally not occur - on-segment is covered
- return analyse_unknown;
-#endif
- }
-
-};
-
-class analyse_turn_wrt_piece
-{
- template <typename Point, typename Turn>
- static inline analyse_result check_helper_segment(Point const& s1,
- Point const& s2, Turn const& turn,
-#if defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- bool , // is on original, to be reused
-#else
- bool is_original,
-#endif
- Point const& offsetted)
- {
- boost::ignore_unused(offsetted);
-#if defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- typedef geometry::model::referring_segment<Point const> segment_type;
- segment_type const p(turn.rob_pi, turn.rob_pj);
- segment_type const q(turn.rob_qi, turn.rob_qj);
- segment_type const r(s1, s2);
- int const side = strategy::side::side_of_intersection::apply(p, q, r,
- turn.robust_point);
-
- if (side == 1)
- {
- // left of segment
- return analyse_disjoint;
- }
- else if (side == 0)
- {
- // If is collinear, either on segment or before/after
- typedef geometry::model::box<Point> box_type;
-
- box_type box;
- geometry::assign_inverse(box);
- geometry::expand(box, s1);
- geometry::expand(box, s2);
-
- if (geometry::covered_by(turn.robust_point, box))
- {
- // Points on helper-segments (and not on its corners)
- // are considered as within
- return analyse_within;
- }
-
- // It is collinear but not on the segment. Because these
- // segments are convex, it is outside
- // Unless the offsetted ring is collinear or concave w.r.t.
- // helper-segment but that scenario is not yet supported
- return analyse_disjoint;
- }
-
- // right of segment
- return analyse_continue;
-#else
- typedef typename strategy::side::services::default_strategy
- <
- typename cs_tag<Point>::type
- >::type side_strategy;
-
- switch(side_strategy::apply(s1, s2, turn.robust_point))
- {
- case 1 :
- return analyse_disjoint; // left of segment
- case 0 :
- {
- // If is collinear, either on segment or before/after
- typedef geometry::model::box<Point> box_type;
-
- box_type box;
- geometry::assign_inverse(box);
- geometry::expand(box, s1);
- geometry::expand(box, s2);
-
- if (geometry::covered_by(turn.robust_point, box))
- {
- // It is on the segment
- if (! is_original
- && geometry::comparable_distance(turn.robust_point, offsetted) <= 1)
- {
- // It is close to the offsetted-boundary, take
- // any rounding-issues into account
- return analyse_near_offsetted;
- }
-
- // Points on helper-segments are considered as within
- // Points on original boundary are processed differently
- return is_original
- ? analyse_on_original_boundary
- : analyse_within;
- }
-
- // It is collinear but not on the segment. Because these
- // segments are convex, it is outside
- // Unless the offsetted ring is collinear or concave w.r.t.
- // helper-segment but that scenario is not yet supported
- return analyse_disjoint;
- }
- break;
- }
-
- // right of segment
- return analyse_continue;
-#endif
- }
-
- template <typename Turn, typename Piece>
- static inline analyse_result check_helper_segments(Turn const& turn, Piece const& piece)
- {
- typedef typename Turn::robust_point_type point_type;
- geometry::equal_to<point_type> comparator;
-
- point_type points[4];
-
- signed_size_type helper_count = static_cast<signed_size_type>(piece.robust_ring.size())
- - piece.offsetted_count;
- if (helper_count == 4)
- {
- for (int i = 0; i < 4; i++)
- {
- points[i] = piece.robust_ring[piece.offsetted_count + i];
- }
-
- // 3--offsetted outline--0
- // | |
- // left | | right
- // | |
- // 2===>==original===>===1
-
- }
- else if (helper_count == 3)
- {
- // Triangular piece, assign points but assign second twice
- for (int i = 0; i < 4; i++)
- {
- int index = i < 2 ? i : i - 1;
- points[i] = piece.robust_ring[piece.offsetted_count + index];
- }
- }
- else
- {
- // Some pieces (e.g. around points) do not have helper segments.
- // Others should have 3 (join) or 4 (side)
- return analyse_continue;
- }
-
- // First check point-equality
- point_type const& point = turn.robust_point;
- if (comparator(point, points[0]) || comparator(point, points[3]))
- {
- return analyse_on_offsetted;
- }
- if (comparator(point, points[1]))
- {
- // On original, right corner
- return piece.is_flat_end ? analyse_continue : analyse_on_original_boundary;
- }
- if (comparator(point, points[2]))
- {
- // On original, left corner
- return piece.is_flat_start ? analyse_continue : analyse_on_original_boundary;
- }
-
- // Right side of the piece
- analyse_result result
- = check_helper_segment(points[0], points[1], turn,
- false, points[0]);
- if (result != analyse_continue)
- {
- return result;
- }
-
- // Left side of the piece
- result = check_helper_segment(points[2], points[3], turn,
- false, points[3]);
- if (result != analyse_continue)
- {
- return result;
- }
-
- if (! comparator(points[1], points[2]))
- {
- // Side of the piece at side of original geometry
- result = check_helper_segment(points[1], points[2], turn,
- true, point);
- if (result != analyse_continue)
- {
- return result;
- }
- }
-
- // We are within the \/ or |_| shaped piece, where the top is the
- // offsetted ring.
- if (! geometry::covered_by(point, piece.robust_offsetted_envelope))
- {
- // Not in offsetted-area. This makes a cheap check possible
- typedef typename strategy::side::services::default_strategy
- <
- typename cs_tag<point_type>::type
- >::type side_strategy;
-
- switch(side_strategy::apply(points[3], points[0], point))
- {
- case 1 : return analyse_disjoint;
- case -1 : return analyse_within;
- case 0 : return analyse_disjoint;
- }
- }
-
- return analyse_continue;
- }
-
- template <typename Turn, typename Piece, typename Compare>
- static inline analyse_result check_monotonic(Turn const& turn, Piece const& piece, Compare const& compare)
- {
- typedef typename Piece::piece_robust_ring_type ring_type;
- typedef typename ring_type::const_iterator it_type;
- it_type end = piece.robust_ring.begin() + piece.offsetted_count;
- it_type it = std::lower_bound(piece.robust_ring.begin(),
- end,
- turn.robust_point,
- compare);
-
- if (it != end
- && it != piece.robust_ring.begin())
- {
- // iterator points to point larger than point
- // w.r.t. specified direction, and prev points to a point smaller
- // We now know if it is inside/outside
- it_type prev = it - 1;
- return check_segment(*prev, *it, turn, true);
- }
- return analyse_continue;
- }
-
-public :
- template <typename Turn, typename Piece>
- static inline analyse_result apply(Turn const& turn, Piece const& piece)
- {
- typedef typename Turn::robust_point_type point_type;
- analyse_result code = check_helper_segments(turn, piece);
- if (code != analyse_continue)
- {
- return code;
- }
-
- geometry::equal_to<point_type> comparator;
-
- if (piece.offsetted_count > 8)
- {
- // If the offset contains some points and is monotonic, we try
- // to avoid walking all points linearly.
- // We try it only once.
- if (piece.is_monotonic_increasing[0])
- {
- code = check_monotonic(turn, piece, geometry::less<point_type, 0>());
- if (code != analyse_continue) return code;
- }
- else if (piece.is_monotonic_increasing[1])
- {
- code = check_monotonic(turn, piece, geometry::less<point_type, 1>());
- if (code != analyse_continue) return code;
- }
- else if (piece.is_monotonic_decreasing[0])
- {
- code = check_monotonic(turn, piece, geometry::greater<point_type, 0>());
- if (code != analyse_continue) return code;
- }
- else if (piece.is_monotonic_decreasing[1])
- {
- code = check_monotonic(turn, piece, geometry::greater<point_type, 1>());
- if (code != analyse_continue) return code;
- }
- }
-
- // It is small or not monotonic, walk linearly through offset
- // TODO: this will be combined with winding strategy
-
- for (signed_size_type i = 1; i < piece.offsetted_count; i++)
- {
- point_type const& previous = piece.robust_ring[i - 1];
- point_type const& current = piece.robust_ring[i];
-
- // The robust ring can contain duplicates
- // (on which any side or side-value would return 0)
- if (! comparator(previous, current))
- {
- code = check_segment(previous, current, turn, false);
- if (code != analyse_continue)
- {
- return code;
- }
- }
- }
-
- return analyse_unknown;
- }
-
-};
-
-
-template <typename Turns, typename Pieces>
-class turn_in_piece_visitor
-{
- Turns& m_turns; // because partition is currently operating on const input only
- Pieces const& m_pieces; // to check for piece-type
-
- template <typename Operation, typename Piece>
- inline bool skip(Operation const& op, Piece const& piece) const
- {
- if (op.piece_index == piece.index)
- {
- return true;
- }
- Piece const& pc = m_pieces[op.piece_index];
- if (pc.left_index == piece.index || pc.right_index == piece.index)
- {
- if (pc.type == strategy::buffer::buffered_flat_end)
- {
- // If it is a flat end, don't compare against its neighbor:
- // it will always be located on one of the helper segments
- return true;
- }
- if (pc.type == strategy::buffer::buffered_concave)
- {
- // If it is concave, the same applies: the IP will be
- // located on one of the helper segments
- return true;
- }
- }
-
- return false;
- }
-
-#if defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- // NOTE: this function returns a side value in {-1, 0, 1}
- template <typename Turn, typename Piece>
- static inline int turn_in_convex_piece(Turn const& turn,
- Piece const& piece)
- {
- typedef typename Turn::robust_point_type point_type;
- typedef typename Piece::piece_robust_ring_type ring_type;
- typedef geometry::model::referring_segment<point_type const> segment;
-
- segment const p(turn.rob_pi, turn.rob_pj);
- segment const q(turn.rob_qi, turn.rob_qj);
-
- typedef typename boost::range_iterator<ring_type const>::type iterator_type;
- iterator_type it = boost::begin(piece.robust_ring);
- iterator_type end = boost::end(piece.robust_ring);
-
- // A robust ring is always closed, and always clockwise
- for (iterator_type previous = it++; it != end; ++previous, ++it)
- {
- geometry::equal_to<point_type> comparator;
- if (comparator(*previous, *it))
- {
- // Points are the same
- continue;
- }
-
- segment r(*previous, *it);
-
- int const side = strategy::side::side_of_intersection::apply(p, q, r,
- turn.robust_point);
-
- if (side == 1)
- {
- // IP is left of segment, so it is outside
- return -1; // outside
- }
- else if (side == 0)
- {
- // IP is collinear with segment. TODO: we should analyze this further
- // For now we use the fallback point
- if (in_box(*previous, *it, turn.robust_point))
- {
- return 0;
- }
- else
- {
- return -1; // outside
- }
- }
- }
- return 1; // inside
- }
-#endif
-
-
-public:
-
- inline turn_in_piece_visitor(Turns& turns, Pieces const& pieces)
- : m_turns(turns)
- , m_pieces(pieces)
- {}
-
- template <typename Turn, typename Piece>
- inline bool apply(Turn const& turn, Piece const& piece, bool first = true)
- {
- boost::ignore_unused_variable_warning(first);
-
- if (turn.count_within > 0)
- {
- // Already inside - no need to check again
- return true;
- }
-
- if (piece.type == strategy::buffer::buffered_flat_end
- || piece.type == strategy::buffer::buffered_concave)
- {
- // Turns cannot be located within flat-end or concave pieces
- return true;
- }
-
- if (! geometry::covered_by(turn.robust_point, piece.robust_envelope))
- {
- // Easy check: if the turn is not in the envelope, we can safely return
- return true;
- }
-
- if (skip(turn.operations[0], piece) || skip(turn.operations[1], piece))
- {
- return true;
- }
-
- // TODO: mutable_piece to make some on-demand preparations in analyse
- Turn& mutable_turn = m_turns[turn.turn_index];
-
- if (piece.type == geometry::strategy::buffer::buffered_point)
- {
- // Optimization for buffer around points: if distance from center
- // is not between min/max radius, the result is clear
- typedef typename default_comparable_distance_result
- <
- typename Turn::robust_point_type
- >::type distance_type;
-
- distance_type const cd
- = geometry::comparable_distance(piece.robust_center,
- turn.robust_point);
-
- if (cd < piece.robust_min_comparable_radius)
- {
- mutable_turn.count_within++;
- return true;
- }
- if (cd > piece.robust_max_comparable_radius)
- {
- return true;
- }
- }
-
- analyse_result analyse_code =
- piece.type == geometry::strategy::buffer::buffered_point
- ? analyse_turn_wrt_point_piece::apply(turn, piece)
- : analyse_turn_wrt_piece::apply(turn, piece);
-
- switch(analyse_code)
- {
- case analyse_disjoint :
- return true;
- case analyse_on_offsetted :
- mutable_turn.count_on_offsetted++; // value is not used anymore
- return true;
- case analyse_on_original_boundary :
- mutable_turn.count_on_original_boundary++;
- return true;
- case analyse_within :
- mutable_turn.count_within++;
- return true;
-#if ! defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- case analyse_near_offsetted :
- mutable_turn.count_within_near_offsetted++;
- return true;
-#endif
- default :
- break;
- }
-
-#if defined(BOOST_GEOMETRY_BUFFER_USE_SIDE_OF_INTERSECTION)
- // We don't know (yet)
- int geometry_code = 0;
- if (piece.is_convex)
- {
- geometry_code = turn_in_convex_piece(turn, piece);
- }
- else
- {
-
- // TODO: this point_in_geometry is a performance-bottleneck here and
- // will be replaced completely by extending analyse_piece functionality
- geometry_code = detail::within::point_in_geometry(turn.robust_point, piece.robust_ring);
- }
-#else
- int geometry_code = detail::within::point_in_geometry(turn.robust_point, piece.robust_ring);
-#endif
-
- if (geometry_code == 1)
- {
- mutable_turn.count_within++;
- }
-
- return true;
- }
-};
-
-
-}} // namespace detail::buffer
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_BUFFER_TURN_IN_PIECE_VISITOR
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/calculate_null.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/calculate_null.hpp
deleted file mode 100644
index 3ebca835069..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/calculate_null.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_NULL_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_NULL_HPP
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-struct calculate_null
-{
- template<typename ReturnType, typename Geometry, typename Strategy>
- static inline ReturnType apply(Geometry const& , Strategy const&)
- {
- return ReturnType();
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_NULL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/calculate_sum.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/calculate_sum.hpp
deleted file mode 100644
index 732a2f57533..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/calculate_sum.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2016.
-// Modifications copyright (c) 2016 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_SUM_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_SUM_HPP
-
-#include <boost/range.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-class calculate_polygon_sum
-{
- template <typename ReturnType, typename Policy, typename Rings, typename Strategy>
- static inline ReturnType sum_interior_rings(Rings const& rings, Strategy const& strategy)
- {
- ReturnType sum = ReturnType(0);
- for (typename boost::range_iterator<Rings const>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- sum += Policy::apply(*it, strategy);
- }
- return sum;
- }
-
-public :
- template <typename ReturnType, typename Policy, typename Polygon, typename Strategy>
- static inline ReturnType apply(Polygon const& poly, Strategy const& strategy)
- {
- return Policy::apply(exterior_ring(poly), strategy)
- + sum_interior_rings<ReturnType, Policy>(interior_rings(poly), strategy)
- ;
- }
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CALCULATE_SUM_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/centroid/translating_transformer.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/centroid/translating_transformer.hpp
deleted file mode 100644
index 56a7e3ec914..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/centroid/translating_transformer.hpp
+++ /dev/null
@@ -1,119 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_CENTROID_TRANSLATING_TRANSFORMER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CENTROID_TRANSLATING_TRANSFORMER_HPP
-
-
-#include <cstddef>
-
-#include <boost/core/addressof.hpp>
-#include <boost/core/ref.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-
-#include <boost/geometry/iterators/point_iterator.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace centroid
-{
-
-
-// NOTE: There is no need to translate in other coordinate systems than
-// cartesian. But if it was needed then one should translate using
-// CS-specific technique, e.g. in spherical/geographic a translation
-// vector should contain coordinates being multiplies of 2PI or 360 deg.
-template <typename Geometry,
- typename CastedTag = typename tag_cast
- <
- typename tag<Geometry>::type,
- areal_tag
- >::type,
- typename CSTag = typename cs_tag<Geometry>::type>
-struct translating_transformer
-{
- typedef typename geometry::point_type<Geometry>::type point_type;
- typedef boost::reference_wrapper<point_type const> result_type;
-
- explicit translating_transformer(Geometry const&) {}
- explicit translating_transformer(point_type const&) {}
-
- result_type apply(point_type const& pt) const
- {
- return result_type(pt);
- }
-
- template <typename ResPt>
- void apply_reverse(ResPt &) const {}
-};
-
-// Specialization for Areal Geometries in cartesian CS
-template <typename Geometry>
-struct translating_transformer<Geometry, areal_tag, cartesian_tag>
-{
- typedef typename geometry::point_type<Geometry>::type point_type;
- typedef point_type result_type;
-
- explicit translating_transformer(Geometry const& geom)
- : m_origin(NULL)
- {
- geometry::point_iterator<Geometry const>
- pt_it = geometry::points_begin(geom);
- if ( pt_it != geometry::points_end(geom) )
- {
- m_origin = boost::addressof(*pt_it);
- }
- }
-
- explicit translating_transformer(point_type const& origin)
- : m_origin(boost::addressof(origin))
- {}
-
- result_type apply(point_type const& pt) const
- {
- point_type res = pt;
- if ( m_origin )
- geometry::subtract_point(res, *m_origin);
- return res;
- }
-
- template <typename ResPt>
- void apply_reverse(ResPt & res_pt) const
- {
- if ( m_origin )
- geometry::add_point(res_pt, *m_origin);
- }
-
- const point_type * m_origin;
-};
-
-
-}} // namespace detail::centroid
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CENTROID_TRANSLATING_TRANSFORMER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/check_iterator_range.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/check_iterator_range.hpp
deleted file mode 100644
index 9bd1d7ae27e..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/check_iterator_range.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_CHECK_ITERATOR_RANGE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CHECK_ITERATOR_RANGE_HPP
-
-#include <boost/core/ignore_unused.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-// Check whether (each element of) an iterator range satisfies a given
-// predicate.
-// The predicate must be implemented as having a static apply unary
-// method that returns a bool.
-// By default an empty range is accepted
-template <typename Predicate, bool AllowEmptyRange = true>
-struct check_iterator_range
-{
- template <typename InputIterator>
- static inline bool apply(InputIterator first, InputIterator beyond)
- {
- for (InputIterator it = first; it != beyond; ++it)
- {
- if (! Predicate::apply(*it))
- {
- return false;
- }
- }
- return AllowEmptyRange || first != beyond;
- }
-
-
- // version where we can pass a predicate object
- template <typename InputIterator>
- static inline bool apply(InputIterator first,
- InputIterator beyond,
- Predicate const& predicate)
- {
- // in case predicate's apply method is static, MSVC will
- // complain that predicate is not used
- boost::ignore_unused(predicate);
-
- for (InputIterator it = first; it != beyond; ++it)
- {
- if (! predicate.apply(*it))
- {
- return false;
- }
- }
- return AllowEmptyRange || first != beyond;
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CHECK_ITERATOR_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/closest_feature/geometry_to_range.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/closest_feature/geometry_to_range.hpp
deleted file mode 100644
index 4ac5ac69769..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/closest_feature/geometry_to_range.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_CLOSEST_FEATURE_GEOMETRY_TO_RANGE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CLOSEST_FEATURE_GEOMETRY_TO_RANGE_HPP
-
-#include <iterator>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/algorithms/dispatch/distance.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace closest_feature
-{
-
-
-
-// returns the range iterator the realizes the closest
-// distance between the geometry and the element of the range
-class geometry_to_range
-{
-private:
- template
- <
- typename Geometry,
- typename RangeIterator,
- typename Strategy,
- typename Distance
- >
- static inline void apply(Geometry const& geometry,
- RangeIterator first,
- RangeIterator last,
- Strategy const& strategy,
- RangeIterator& it_min,
- Distance& dist_min)
- {
- BOOST_GEOMETRY_ASSERT( first != last );
-
- Distance const zero = Distance(0);
-
- // start with first distance
- it_min = first;
- dist_min = dispatch::distance
- <
- Geometry,
- typename std::iterator_traits<RangeIterator>::value_type,
- Strategy
- >::apply(geometry, *it_min, strategy);
-
- // check if other elements in the range are closer
- for (RangeIterator it = ++first; it != last; ++it)
- {
- Distance dist = dispatch::distance
- <
- Geometry,
- typename std::iterator_traits<RangeIterator>::value_type,
- Strategy
- >::apply(geometry, *it, strategy);
-
- if (geometry::math::equals(dist, zero))
- {
- dist_min = dist;
- it_min = it;
- return;
- }
- else if (dist < dist_min)
- {
- dist_min = dist;
- it_min = it;
- }
- }
- }
-
-public:
- template
- <
- typename Geometry,
- typename RangeIterator,
- typename Strategy,
- typename Distance
- >
- static inline RangeIterator apply(Geometry const& geometry,
- RangeIterator first,
- RangeIterator last,
- Strategy const& strategy,
- Distance& dist_min)
- {
- RangeIterator it_min;
- apply(geometry, first, last, strategy, it_min, dist_min);
-
- return it_min;
- }
-
-
- template
- <
- typename Geometry,
- typename RangeIterator,
- typename Strategy
- >
- static inline RangeIterator apply(Geometry const& geometry,
- RangeIterator first,
- RangeIterator last,
- Strategy const& strategy)
- {
- typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<Geometry>::type,
- typename point_type
- <
- typename std::iterator_traits
- <
- RangeIterator
- >::value_type
- >::type
- >::type dist_min;
-
- return apply(geometry, first, last, strategy, dist_min);
- }
-};
-
-
-
-}} // namespace detail::closest_feature
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CLOSEST_FEATURE_GEOMETRY_TO_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/closest_feature/point_to_range.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/closest_feature/point_to_range.hpp
deleted file mode 100644
index df678901386..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/closest_feature/point_to_range.hpp
+++ /dev/null
@@ -1,250 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_CLOSEST_FEATURE_POINT_TO_RANGE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CLOSEST_FEATURE_POINT_TO_RANGE_HPP
-
-#include <utility>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace closest_feature
-{
-
-
-// returns the segment (pair of iterators) that realizes the closest
-// distance of the point to the range
-template
-<
- typename Point,
- typename Range,
- closure_selector Closure,
- typename Strategy
->
-class point_to_point_range
-{
-protected:
- typedef typename boost::range_iterator<Range const>::type iterator_type;
-
- template <typename Distance>
- static inline void apply(Point const& point,
- iterator_type first,
- iterator_type last,
- Strategy const& strategy,
- iterator_type& it_min1,
- iterator_type& it_min2,
- Distance& dist_min)
- {
- BOOST_GEOMETRY_ASSERT( first != last );
-
- Distance const zero = Distance(0);
-
- iterator_type it = first;
- iterator_type prev = it++;
- if (it == last)
- {
- it_min1 = it_min2 = first;
- dist_min = strategy.apply(point, *first, *first);
- return;
- }
-
- // start with first segment distance
- dist_min = strategy.apply(point, *prev, *it);
- iterator_type prev_min_dist = prev;
-
- // check if other segments are closer
- for (++prev, ++it; it != last; ++prev, ++it)
- {
- Distance dist = strategy.apply(point, *prev, *it);
- if (geometry::math::equals(dist, zero))
- {
- dist_min = zero;
- it_min1 = prev;
- it_min2 = it;
- return;
- }
- else if (dist < dist_min)
- {
- dist_min = dist;
- prev_min_dist = prev;
- }
- }
-
- it_min1 = it_min2 = prev_min_dist;
- ++it_min2;
- }
-
-public:
- typedef typename std::pair<iterator_type, iterator_type> return_type;
-
- template <typename Distance>
- static inline return_type apply(Point const& point,
- iterator_type first,
- iterator_type last,
- Strategy const& strategy,
- Distance& dist_min)
- {
- iterator_type it_min1, it_min2;
- apply(point, first, last, strategy, it_min1, it_min2, dist_min);
-
- return std::make_pair(it_min1, it_min2);
- }
-
- static inline return_type apply(Point const& point,
- iterator_type first,
- iterator_type last,
- Strategy const& strategy)
- {
- typename strategy::distance::services::return_type
- <
- Strategy,
- Point,
- typename boost::range_value<Range>::type
- >::type dist_min;
-
- return apply(point, first, last, strategy, dist_min);
- }
-
- template <typename Distance>
- static inline return_type apply(Point const& point,
- Range const& range,
- Strategy const& strategy,
- Distance& dist_min)
- {
- return apply(point,
- boost::begin(range),
- boost::end(range),
- strategy,
- dist_min);
- }
-
- static inline return_type apply(Point const& point,
- Range const& range,
- Strategy const& strategy)
- {
- return apply(point, boost::begin(range), boost::end(range), strategy);
- }
-};
-
-
-
-// specialization for open ranges
-template <typename Point, typename Range, typename Strategy>
-class point_to_point_range<Point, Range, open, Strategy>
- : point_to_point_range<Point, Range, closed, Strategy>
-{
-private:
- typedef point_to_point_range<Point, Range, closed, Strategy> base_type;
- typedef typename base_type::iterator_type iterator_type;
-
- template <typename Distance>
- static inline void apply(Point const& point,
- iterator_type first,
- iterator_type last,
- Strategy const& strategy,
- iterator_type& it_min1,
- iterator_type& it_min2,
- Distance& dist_min)
- {
- BOOST_GEOMETRY_ASSERT( first != last );
-
- base_type::apply(point, first, last, strategy,
- it_min1, it_min2, dist_min);
-
- iterator_type it_back = --last;
- Distance const zero = Distance(0);
- Distance dist = strategy.apply(point, *it_back, *first);
-
- if (geometry::math::equals(dist, zero))
- {
- dist_min = zero;
- it_min1 = it_back;
- it_min2 = first;
- }
- else if (dist < dist_min)
- {
- dist_min = dist;
- it_min1 = it_back;
- it_min2 = first;
- }
- }
-
-public:
- typedef typename std::pair<iterator_type, iterator_type> return_type;
-
- template <typename Distance>
- static inline return_type apply(Point const& point,
- iterator_type first,
- iterator_type last,
- Strategy const& strategy,
- Distance& dist_min)
- {
- iterator_type it_min1, it_min2;
-
- apply(point, first, last, strategy, it_min1, it_min2, dist_min);
-
- return std::make_pair(it_min1, it_min2);
- }
-
- static inline return_type apply(Point const& point,
- iterator_type first,
- iterator_type last,
- Strategy const& strategy)
- {
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- Point,
- typename boost::range_value<Range>::type
- >::type distance_return_type;
-
- distance_return_type dist_min;
-
- return apply(point, first, last, strategy, dist_min);
- }
-
- template <typename Distance>
- static inline return_type apply(Point const& point,
- Range const& range,
- Strategy const& strategy,
- Distance& dist_min)
- {
- return apply(point,
- boost::begin(range),
- boost::end(range),
- strategy,
- dist_min);
- }
-
- static inline return_type apply(Point const& point,
- Range const& range,
- Strategy const& strategy)
- {
- return apply(point, boost::begin(range), boost::end(range), strategy);
- }
-};
-
-
-}} // namespace detail::closest_feature
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CLOSEST_FEATURE_POINT_TO_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/closest_feature/range_to_range.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/closest_feature/range_to_range.hpp
deleted file mode 100644
index 26b8684828f..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/closest_feature/range_to_range.hpp
+++ /dev/null
@@ -1,196 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_CLOSEST_FEATURE_RANGE_TO_RANGE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CLOSEST_FEATURE_RANGE_TO_RANGE_HPP
-
-#include <cstddef>
-
-#include <iterator>
-#include <utility>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/algorithms/dispatch/distance.hpp>
-#include <boost/geometry/index/rtree.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace closest_feature
-{
-
-
-// returns a pair of a objects where the first is an object of the
-// r-tree range and the second an object of the query range that
-// realizes the closest feature of the two ranges
-class range_to_range_rtree
-{
-private:
- template
- <
- typename RTreeRangeIterator,
- typename QueryRangeIterator,
- typename Strategy,
- typename RTreeValueType,
- typename Distance
- >
- static inline void apply(RTreeRangeIterator rtree_first,
- RTreeRangeIterator rtree_last,
- QueryRangeIterator queries_first,
- QueryRangeIterator queries_last,
- Strategy const& strategy,
- RTreeValueType& rtree_min,
- QueryRangeIterator& qit_min,
- Distance& dist_min)
- {
- typedef index::rtree<RTreeValueType, index::linear<8> > rtree_type;
-
- BOOST_GEOMETRY_ASSERT( rtree_first != rtree_last );
- BOOST_GEOMETRY_ASSERT( queries_first != queries_last );
-
- Distance const zero = Distance(0);
- dist_min = zero;
-
- // create -- packing algorithm
- rtree_type rt(rtree_first, rtree_last);
-
- RTreeValueType t_v;
- bool first = true;
-
- for (QueryRangeIterator qit = queries_first;
- qit != queries_last; ++qit, first = false)
- {
- std::size_t n = rt.query(index::nearest(*qit, 1), &t_v);
-
- BOOST_GEOMETRY_ASSERT( n > 0 );
- // n above is unused outside BOOST_GEOMETRY_ASSERT,
- // hence the call to boost::ignore_unused below
- //
- // however, t_v (initialized by the call to rt.query(...))
- // is used below, which is why we cannot put the call to
- // rt.query(...) inside BOOST_GEOMETRY_ASSERT
- boost::ignore_unused(n);
-
- Distance dist = dispatch::distance
- <
- RTreeValueType,
- typename std::iterator_traits
- <
- QueryRangeIterator
- >::value_type,
- Strategy
- >::apply(t_v, *qit, strategy);
-
- if (first || dist < dist_min)
- {
- dist_min = dist;
- rtree_min = t_v;
- qit_min = qit;
- if ( math::equals(dist_min, zero) )
- {
- return;
- }
- }
- }
- }
-
-public:
- template <typename RTreeRangeIterator, typename QueryRangeIterator>
- struct return_type
- {
- typedef std::pair
- <
- typename std::iterator_traits<RTreeRangeIterator>::value_type,
- QueryRangeIterator
- > type;
- };
-
-
- template
- <
- typename RTreeRangeIterator,
- typename QueryRangeIterator,
- typename Strategy,
- typename Distance
- >
- static inline typename return_type
- <
- RTreeRangeIterator, QueryRangeIterator
- >::type apply(RTreeRangeIterator rtree_first,
- RTreeRangeIterator rtree_last,
- QueryRangeIterator queries_first,
- QueryRangeIterator queries_last,
- Strategy const& strategy,
- Distance& dist_min)
- {
- typedef typename std::iterator_traits
- <
- RTreeRangeIterator
- >::value_type rtree_value_type;
-
- rtree_value_type rtree_min;
- QueryRangeIterator qit_min;
-
- apply(rtree_first, rtree_last, queries_first, queries_last,
- strategy, rtree_min, qit_min, dist_min);
-
- return std::make_pair(rtree_min, qit_min);
- }
-
-
- template
- <
- typename RTreeRangeIterator,
- typename QueryRangeIterator,
- typename Strategy
- >
- static inline typename return_type
- <
- RTreeRangeIterator, QueryRangeIterator
- >::type apply(RTreeRangeIterator rtree_first,
- RTreeRangeIterator rtree_last,
- QueryRangeIterator queries_first,
- QueryRangeIterator queries_last,
- Strategy const& strategy)
- {
- typedef typename std::iterator_traits
- <
- RTreeRangeIterator
- >::value_type rtree_value_type;
-
- typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<rtree_value_type>::type,
- typename point_type
- <
- typename std::iterator_traits
- <
- QueryRangeIterator
- >::value_type
- >::type
- >::type dist_min;
-
- return apply(rtree_first, rtree_last, queries_first, queries_last,
- strategy, dist_min);
- }
-};
-
-
-}} // namespace detail::closest_feature
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CLOSEST_FEATURE_RANGE_TO_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/comparable_distance/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/comparable_distance/implementation.hpp
deleted file mode 100644
index b6eb7a27f1e..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/comparable_distance/implementation.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_COMPARABLE_DISTANCE_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_COMPARABLE_DISTANCE_IMPLEMENTATION_HPP
-
-#include <boost/geometry/algorithms/detail/distance/implementation.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_COMPARABLE_DISTANCE_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/comparable_distance/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/comparable_distance/interface.hpp
deleted file mode 100644
index 3e48a05ba93..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/comparable_distance/interface.hpp
+++ /dev/null
@@ -1,363 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_COMPARABLE_DISTANCE_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_COMPARABLE_DISTANCE_INTERFACE_HPP
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/strategies/comparable_distance_result.hpp>
-#include <boost/geometry/strategies/default_comparable_distance_result.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-
-#include <boost/geometry/algorithms/detail/distance/interface.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace resolve_strategy
-{
-
-struct comparable_distance
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline
- typename comparable_distance_result<Geometry1, Geometry2, Strategy>::type
- apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- typedef typename strategy::distance::services::comparable_type
- <
- Strategy
- >::type comparable_strategy_type;
-
- return dispatch::distance
- <
- Geometry1, Geometry2, comparable_strategy_type
- >::apply(geometry1,
- geometry2,
- strategy::distance::services::get_comparable
- <
- Strategy
- >::apply(strategy));
- }
-
- template <typename Geometry1, typename Geometry2>
- static inline typename comparable_distance_result
- <
- Geometry1, Geometry2, default_strategy
- >::type
- apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- default_strategy)
- {
- typedef typename strategy::distance::services::comparable_type
- <
- typename detail::distance::default_strategy
- <
- Geometry1, Geometry2
- >::type
- >::type comparable_strategy_type;
-
- return dispatch::distance
- <
- Geometry1, Geometry2, comparable_strategy_type
- >::apply(geometry1, geometry2, comparable_strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant
-{
-
-
-template <typename Geometry1, typename Geometry2>
-struct comparable_distance
-{
- template <typename Strategy>
- static inline
- typename comparable_distance_result<Geometry1, Geometry2, Strategy>::type
- apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return resolve_strategy::comparable_distance::apply(geometry1,
- geometry2,
- strategy);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct comparable_distance
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Geometry2
- >
-{
- template <typename Strategy>
- struct visitor: static_visitor
- <
- typename comparable_distance_result
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Geometry2,
- Strategy
- >::type
- >
- {
- Geometry2 const& m_geometry2;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2,
- Strategy const& strategy)
- : m_geometry2(geometry2),
- m_strategy(strategy)
- {}
-
- template <typename Geometry1>
- typename comparable_distance_result
- <
- Geometry1, Geometry2, Strategy
- >::type
- operator()(Geometry1 const& geometry1) const
- {
- return comparable_distance
- <
- Geometry1,
- Geometry2
- >::template apply
- <
- Strategy
- >(geometry1, m_geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline typename comparable_distance_result
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Geometry2,
- Strategy
- >::type
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry2, strategy), geometry1);
- }
-};
-
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct comparable_distance
- <
- Geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>
- >
-{
- template <typename Strategy>
- struct visitor: static_visitor
- <
- typename comparable_distance_result
- <
- Geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Strategy
- >::type
- >
- {
- Geometry1 const& m_geometry1;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1,
- Strategy const& strategy)
- : m_geometry1(geometry1),
- m_strategy(strategy)
- {}
-
- template <typename Geometry2>
- typename comparable_distance_result
- <
- Geometry1, Geometry2, Strategy
- >::type
- operator()(Geometry2 const& geometry2) const
- {
- return comparable_distance
- <
- Geometry1,
- Geometry2
- >::template apply
- <
- Strategy
- >(m_geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline typename comparable_distance_result
- <
- Geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Strategy
- >::type
- apply(Geometry1 const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry1, strategy), geometry2);
- }
-};
-
-
-template
-<
- BOOST_VARIANT_ENUM_PARAMS(typename T1),
- BOOST_VARIANT_ENUM_PARAMS(typename T2)
->
-struct comparable_distance
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
- >
-{
- template <typename Strategy>
- struct visitor: static_visitor
- <
- typename comparable_distance_result
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>,
- Strategy
- >::type
- >
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Geometry1, typename Geometry2>
- typename comparable_distance_result
- <
- Geometry1, Geometry2, Strategy
- >::type
- operator()(Geometry1 const& geometry1, Geometry2 const& geometry2) const
- {
- return comparable_distance
- <
- Geometry1,
- Geometry2
- >::template apply
- <
- Strategy
- >(geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline typename comparable_distance_result
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>,
- Strategy
- >::type
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), geometry1, geometry2);
- }
-};
-
-} // namespace resolve_variant
-
-
-
-/*!
-\brief \brief_calc2{comparable distance measurement} \brief_strategy
-\ingroup distance
-\details The free function comparable_distance does not necessarily calculate the distance,
- but it calculates a distance measure such that two distances are comparable to each other.
- For example: for the Cartesian coordinate system, Pythagoras is used but the square root
- is not taken, which makes it faster and the results of two point pairs can still be
- compared to each other.
-\tparam Geometry1 first geometry type
-\tparam Geometry2 second geometry type
-\tparam Strategy \tparam_strategy{Distance}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param strategy \param_strategy{distance}
-\return \return_calc{comparable distance}
-
-\qbk{distinguish,with strategy}
- */
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline typename comparable_distance_result<Geometry1, Geometry2, Strategy>::type
-comparable_distance(Geometry1 const& geometry1, Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- return resolve_variant::comparable_distance
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, strategy);
-}
-
-
-
-/*!
-\brief \brief_calc2{comparable distance measurement}
-\ingroup distance
-\details The free function comparable_distance does not necessarily calculate the distance,
- but it calculates a distance measure such that two distances are comparable to each other.
- For example: for the Cartesian coordinate system, Pythagoras is used but the square root
- is not taken, which makes it faster and the results of two point pairs can still be
- compared to each other.
-\tparam Geometry1 first geometry type
-\tparam Geometry2 second geometry type
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return \return_calc{comparable distance}
-
-\qbk{[include reference/algorithms/comparable_distance.qbk]}
- */
-template <typename Geometry1, typename Geometry2>
-inline typename default_comparable_distance_result<Geometry1, Geometry2>::type
-comparable_distance(Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- return geometry::comparable_distance(geometry1, geometry2, default_strategy());
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_COMPARABLE_DISTANCE_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp
deleted file mode 100644
index fccdf4bb1db..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_INDEXED_TO_INDEXED_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_INDEXED_TO_INDEXED_HPP
-
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace conversion
-{
-
-
-template
-<
- typename Source,
- typename Destination,
- std::size_t Dimension,
- std::size_t DimensionCount
->
-struct indexed_to_indexed
-{
- static inline void apply(Source const& source, Destination& destination)
- {
- typedef typename coordinate_type<Destination>::type coordinate_type;
-
- geometry::set<min_corner, Dimension>(destination,
- boost::numeric_cast<coordinate_type>(
- geometry::get<min_corner, Dimension>(source)));
- geometry::set<max_corner, Dimension>(destination,
- boost::numeric_cast<coordinate_type>(
- geometry::get<max_corner, Dimension>(source)));
-
- indexed_to_indexed
- <
- Source, Destination,
- Dimension + 1, DimensionCount
- >::apply(source, destination);
- }
-};
-
-template
-<
- typename Source,
- typename Destination,
- std::size_t DimensionCount
->
-struct indexed_to_indexed<Source, Destination, DimensionCount, DimensionCount>
-{
- static inline void apply(Source const& , Destination& )
- {}
-};
-
-
-}} // namespace detail::conversion
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_INDEXED_TO_INDEXED_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/convert_point_to_point.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/convert_point_to_point.hpp
deleted file mode 100644
index c7d37b6ca43..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/convert_point_to_point.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_POINT_TO_POINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_POINT_TO_POINT_HPP
-
-// Note: extracted from "convert.hpp" to avoid circular references convert/append
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace conversion
-{
-
-
-template <typename Source, typename Destination, std::size_t Dimension, std::size_t DimensionCount>
-struct point_to_point
-{
- static inline void apply(Source const& source, Destination& destination)
- {
- typedef typename coordinate_type<Destination>::type coordinate_type;
-
- set<Dimension>(destination, boost::numeric_cast<coordinate_type>(get<Dimension>(source)));
- point_to_point<Source, Destination, Dimension + 1, DimensionCount>::apply(source, destination);
- }
-};
-
-template <typename Source, typename Destination, std::size_t DimensionCount>
-struct point_to_point<Source, Destination, DimensionCount, DimensionCount>
-{
- static inline void apply(Source const& , Destination& )
- {}
-};
-
-
-template <typename Source, typename Destination>
-inline void convert_point_to_point(Source const& source, Destination& destination)
-{
- point_to_point<Source, Destination, 0, dimension<Destination>::value>::apply(source, destination);
-}
-
-
-
-}} // namespace detail::conversion
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_POINT_TO_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/counting.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/counting.hpp
deleted file mode 100644
index dc5bb26c10b..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/counting.hpp
+++ /dev/null
@@ -1,107 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_COUNTING_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_COUNTING_HPP
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace counting
-{
-
-
-template <std::size_t D>
-struct other_count
-{
- template <typename Geometry>
- static inline std::size_t apply(Geometry const&)
- {
- return D;
- }
-
- template <typename Geometry>
- static inline std::size_t apply(Geometry const&, bool)
- {
- return D;
- }
-};
-
-
-template <typename RangeCount>
-struct polygon_count
-{
- template <typename Polygon>
- static inline std::size_t apply(Polygon const& poly)
- {
- std::size_t n = RangeCount::apply(exterior_ring(poly));
-
- typename interior_return_type<Polygon const>::type
- rings = interior_rings(poly);
- for (typename detail::interior_iterator<Polygon const>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- n += RangeCount::apply(*it);
- }
-
- return n;
- }
-};
-
-
-template <typename SingleCount>
-struct multi_count
-{
- template <typename MultiGeometry>
- static inline std::size_t apply(MultiGeometry const& geometry)
- {
- std::size_t n = 0;
- for (typename boost::range_iterator<MultiGeometry const>::type
- it = boost::begin(geometry);
- it != boost::end(geometry);
- ++it)
- {
- n += SingleCount::apply(*it);
- }
- return n;
- }
-};
-
-
-}} // namespace detail::counting
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_COUNTING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/course.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/course.hpp
deleted file mode 100644
index 37424941bdd..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/course.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_COURSE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_COURSE_HPP
-
-#include <boost/geometry/algorithms/detail/azimuth.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-/// Calculate course (bearing) between two points.
-///
-/// NOTE: left for convenience and temporary backward compatibility
-template <typename ReturnType, typename Point1, typename Point2>
-inline ReturnType course(Point1 const& p1, Point2 const& p2)
-{
- return azimuth<ReturnType>(p1, p2);
-}
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_COURSE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/covered_by/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/covered_by/implementation.hpp
deleted file mode 100644
index 3df8b7783dc..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/covered_by/implementation.hpp
+++ /dev/null
@@ -1,280 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013, 2014, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_COVERED_BY_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_COVERED_BY_IMPLEMENTATION_HPP
-
-
-#include <cstddef>
-
-#include <boost/geometry/algorithms/detail/covered_by/interface.hpp>
-#include <boost/geometry/algorithms/detail/within/implementation.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace covered_by {
-
-struct use_point_in_geometry
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- return detail::within::point_in_geometry(geometry1, geometry2, strategy) >= 0;
- }
-};
-
-struct use_relate
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- typedef typename detail::de9im::static_mask_covered_by_type
- <
- Geometry1, Geometry2
- >::type covered_by_mask;
- return geometry::relate(geometry1, geometry2, covered_by_mask(), strategy);
- }
-};
-
-}} // namespace detail::covered_by
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Point, typename Box>
-struct covered_by<Point, Box, point_tag, box_tag>
-{
- template <typename Strategy>
- static inline bool apply(Point const& point, Box const& box, Strategy const& strategy)
- {
- ::boost::ignore_unused_variable_warning(strategy);
- return strategy.apply(point, box);
- }
-};
-
-template <typename Box1, typename Box2>
-struct covered_by<Box1, Box2, box_tag, box_tag>
-{
- template <typename Strategy>
- static inline bool apply(Box1 const& box1, Box2 const& box2, Strategy const& strategy)
- {
- assert_dimension_equal<Box1, Box2>();
- ::boost::ignore_unused_variable_warning(strategy);
- return strategy.apply(box1, box2);
- }
-};
-
-
-// P/P
-
-template <typename Point1, typename Point2>
-struct covered_by<Point1, Point2, point_tag, point_tag>
- : public detail::covered_by::use_point_in_geometry
-{};
-
-template <typename Point, typename MultiPoint>
-struct covered_by<Point, MultiPoint, point_tag, multi_point_tag>
- : public detail::covered_by::use_point_in_geometry
-{};
-
-template <typename MultiPoint, typename Point>
-struct covered_by<MultiPoint, Point, multi_point_tag, point_tag>
- : public detail::within::multi_point_point
-{};
-
-template <typename MultiPoint1, typename MultiPoint2>
-struct covered_by<MultiPoint1, MultiPoint2, multi_point_tag, multi_point_tag>
- : public detail::within::multi_point_multi_point
-{};
-
-// P/L
-
-template <typename Point, typename Segment>
-struct covered_by<Point, Segment, point_tag, segment_tag>
- : public detail::covered_by::use_point_in_geometry
-{};
-
-template <typename Point, typename Linestring>
-struct covered_by<Point, Linestring, point_tag, linestring_tag>
- : public detail::covered_by::use_point_in_geometry
-{};
-
-template <typename Point, typename MultiLinestring>
-struct covered_by<Point, MultiLinestring, point_tag, multi_linestring_tag>
- : public detail::covered_by::use_point_in_geometry
-{};
-
-template <typename MultiPoint, typename Segment>
-struct covered_by<MultiPoint, Segment, multi_point_tag, segment_tag>
- : public detail::within::multi_point_single_geometry<false>
-{};
-
-template <typename MultiPoint, typename Linestring>
-struct covered_by<MultiPoint, Linestring, multi_point_tag, linestring_tag>
- : public detail::within::multi_point_single_geometry<false>
-{};
-
-template <typename MultiPoint, typename MultiLinestring>
-struct covered_by<MultiPoint, MultiLinestring, multi_point_tag, multi_linestring_tag>
- : public detail::within::multi_point_multi_geometry<false>
-{};
-
-// P/A
-
-template <typename Point, typename Ring>
-struct covered_by<Point, Ring, point_tag, ring_tag>
- : public detail::covered_by::use_point_in_geometry
-{};
-
-template <typename Point, typename Polygon>
-struct covered_by<Point, Polygon, point_tag, polygon_tag>
- : public detail::covered_by::use_point_in_geometry
-{};
-
-template <typename Point, typename MultiPolygon>
-struct covered_by<Point, MultiPolygon, point_tag, multi_polygon_tag>
- : public detail::covered_by::use_point_in_geometry
-{};
-
-template <typename MultiPoint, typename Ring>
-struct covered_by<MultiPoint, Ring, multi_point_tag, ring_tag>
- : public detail::within::multi_point_single_geometry<false>
-{};
-
-template <typename MultiPoint, typename Polygon>
-struct covered_by<MultiPoint, Polygon, multi_point_tag, polygon_tag>
- : public detail::within::multi_point_single_geometry<false>
-{};
-
-template <typename MultiPoint, typename MultiPolygon>
-struct covered_by<MultiPoint, MultiPolygon, multi_point_tag, multi_polygon_tag>
- : public detail::within::multi_point_multi_geometry<false>
-{};
-
-// L/L
-
-template <typename Linestring1, typename Linestring2>
-struct covered_by<Linestring1, Linestring2, linestring_tag, linestring_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename Linestring, typename MultiLinestring>
-struct covered_by<Linestring, MultiLinestring, linestring_tag, multi_linestring_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename MultiLinestring, typename Linestring>
-struct covered_by<MultiLinestring, Linestring, multi_linestring_tag, linestring_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename MultiLinestring1, typename MultiLinestring2>
-struct covered_by<MultiLinestring1, MultiLinestring2, multi_linestring_tag, multi_linestring_tag>
- : public detail::covered_by::use_relate
-{};
-
-// L/A
-
-template <typename Linestring, typename Ring>
-struct covered_by<Linestring, Ring, linestring_tag, ring_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename MultiLinestring, typename Ring>
-struct covered_by<MultiLinestring, Ring, multi_linestring_tag, ring_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename Linestring, typename Polygon>
-struct covered_by<Linestring, Polygon, linestring_tag, polygon_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename MultiLinestring, typename Polygon>
-struct covered_by<MultiLinestring, Polygon, multi_linestring_tag, polygon_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename Linestring, typename MultiPolygon>
-struct covered_by<Linestring, MultiPolygon, linestring_tag, multi_polygon_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename MultiLinestring, typename MultiPolygon>
-struct covered_by<MultiLinestring, MultiPolygon, multi_linestring_tag, multi_polygon_tag>
- : public detail::covered_by::use_relate
-{};
-
-// A/A
-
-template <typename Ring1, typename Ring2>
-struct covered_by<Ring1, Ring2, ring_tag, ring_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename Ring, typename Polygon>
-struct covered_by<Ring, Polygon, ring_tag, polygon_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename Polygon, typename Ring>
-struct covered_by<Polygon, Ring, polygon_tag, ring_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename Polygon1, typename Polygon2>
-struct covered_by<Polygon1, Polygon2, polygon_tag, polygon_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename Ring, typename MultiPolygon>
-struct covered_by<Ring, MultiPolygon, ring_tag, multi_polygon_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename MultiPolygon, typename Ring>
-struct covered_by<MultiPolygon, Ring, multi_polygon_tag, ring_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename Polygon, typename MultiPolygon>
-struct covered_by<Polygon, MultiPolygon, polygon_tag, multi_polygon_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename MultiPolygon, typename Polygon>
-struct covered_by<MultiPolygon, Polygon, multi_polygon_tag, polygon_tag>
- : public detail::covered_by::use_relate
-{};
-
-template <typename MultiPolygon1, typename MultiPolygon2>
-struct covered_by<MultiPolygon1, MultiPolygon2, multi_polygon_tag, multi_polygon_tag>
- : public detail::covered_by::use_relate
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_COVERED_BY_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/covered_by/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/covered_by/interface.hpp
deleted file mode 100644
index 65990782107..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/covered_by/interface.hpp
+++ /dev/null
@@ -1,261 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013, 2014, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_COVERED_BY_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_COVERED_BY_INTERFACE_HPP
-
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/detail/within/interface.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/strategies/cartesian/point_in_box.hpp>
-#include <boost/geometry/strategies/cartesian/box_in_box.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename tag<Geometry1>::type,
- typename Tag2 = typename tag<Geometry2>::type
->
-struct covered_by
- : not_implemented<Tag1, Tag2>
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy {
-
-struct covered_by
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- concepts::within::check
- <
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
- typename tag_cast<typename tag<Geometry2>::type, areal_tag>::type,
- Strategy
- >();
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
- assert_dimension_equal<Geometry1, Geometry2>();
-
- return dispatch::covered_by<Geometry1, Geometry2>::apply(geometry1,
- geometry2,
- strategy);
- }
-
- template <typename Geometry1, typename Geometry2>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- default_strategy)
- {
- typedef typename strategy::covered_by::services::default_strategy
- <
- Geometry1,
- Geometry2
- >::type strategy_type;
-
- return covered_by::apply(geometry1, geometry2, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant {
-
-template <typename Geometry1, typename Geometry2>
-struct covered_by
-{
- template <typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return resolve_strategy::covered_by
- ::apply(geometry1, geometry2, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct covered_by<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Geometry2 const& m_geometry2;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2, Strategy const& strategy)
- : m_geometry2(geometry2), m_strategy(strategy) {}
-
- template <typename Geometry1>
- bool operator()(Geometry1 const& geometry1) const
- {
- return covered_by<Geometry1, Geometry2>
- ::apply(geometry1, m_geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry2, strategy), geometry1);
- }
-};
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct covered_by<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Geometry1 const& m_geometry1;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1, Strategy const& strategy)
- : m_geometry1(geometry1), m_strategy(strategy) {}
-
- template <typename Geometry2>
- bool operator()(Geometry2 const& geometry2) const
- {
- return covered_by<Geometry1, Geometry2>
- ::apply(m_geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool
- apply(Geometry1 const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry1, strategy), geometry2);
- }
-};
-
-template <
- BOOST_VARIANT_ENUM_PARAMS(typename T1),
- BOOST_VARIANT_ENUM_PARAMS(typename T2)
->
-struct covered_by<
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
->
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy): m_strategy(strategy) {}
-
- template <typename Geometry1, typename Geometry2>
- bool operator()(Geometry1 const& geometry1,
- Geometry2 const& geometry2) const
- {
- return covered_by<Geometry1, Geometry2>
- ::apply(geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), geometry1, geometry2);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_check12{is inside or on border}
-\ingroup covered_by
-\details \details_check12{covered_by, is inside or on border}.
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry which might be inside or on the border of the second geometry
-\param geometry2 \param_geometry which might cover the first geometry
-\return true if geometry1 is inside of or on the border of geometry2,
- else false
-\note The default strategy is used for covered_by detection
-
-\qbk{[include reference/algorithms/covered_by.qbk]}
-
- */
-template<typename Geometry1, typename Geometry2>
-inline bool covered_by(Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- return resolve_variant::covered_by<Geometry1, Geometry2>
- ::apply(geometry1, geometry2, default_strategy());
-}
-
-/*!
-\brief \brief_check12{is inside or on border} \brief_strategy
-\ingroup covered_by
-\details \details_check12{covered_by, is inside or on border}, \brief_strategy. \details_strategy_reasons
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry which might be inside or on the border of the second geometry
-\param geometry2 \param_geometry which might cover the first geometry
-\param strategy strategy to be used
-\return true if geometry1 is inside of or on the border of geometry2,
- else false
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/covered_by.qbk]}
-
-*/
-template<typename Geometry1, typename Geometry2, typename Strategy>
-inline bool covered_by(Geometry1 const& geometry1, Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- return resolve_variant::covered_by<Geometry1, Geometry2>
- ::apply(geometry1, geometry2, strategy);
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_COVERED_BY_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/direction_code.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/direction_code.hpp
deleted file mode 100644
index 3a7d3d87896..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/direction_code.hpp
+++ /dev/null
@@ -1,255 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015, 2017.
-// Modifications copyright (c) 2015-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DIRECITON_CODE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DIRECITON_CODE_HPP
-
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-
-#include <boost/mpl/assert.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-// TODO: remove
-template <std::size_t Index, typename Point1, typename Point2>
-inline int sign_of_difference(Point1 const& point1, Point2 const& point2)
-{
- return
- math::equals(geometry::get<Index>(point1), geometry::get<Index>(point2))
- ?
- 0
- :
- (geometry::get<Index>(point1) > geometry::get<Index>(point2) ? 1 : -1);
-}
-
-
-template <typename Point, typename CSTag = typename cs_tag<Point>::type>
-struct direction_code_impl
-{
- BOOST_MPL_ASSERT_MSG((false), NOT_IMPLEMENTED_FOR_THIS_CS, (CSTag));
-};
-
-template <typename Point>
-struct direction_code_impl<Point, cartesian_tag>
-{
- template <typename Point1, typename Point2>
- static inline int apply(Point1 const& segment_a, Point1 const& segment_b,
- Point2 const& p)
- {
- typedef typename geometry::select_coordinate_type
- <
- Point1, Point2
- >::type calc_t;
-
- if ( (math::equals(geometry::get<0>(segment_b), geometry::get<0>(segment_a))
- && math::equals(geometry::get<1>(segment_b), geometry::get<1>(segment_a)))
- || (math::equals(geometry::get<0>(segment_b), geometry::get<0>(p))
- && math::equals(geometry::get<1>(segment_b), geometry::get<1>(p))) )
- {
- return 0;
- }
-
- calc_t x1 = geometry::get<0>(segment_b) - geometry::get<0>(segment_a);
- calc_t y1 = geometry::get<1>(segment_b) - geometry::get<1>(segment_a);
- calc_t x2 = geometry::get<0>(segment_b) - geometry::get<0>(p);
- calc_t y2 = geometry::get<1>(segment_b) - geometry::get<1>(p);
-
- calc_t ax = (std::min)(math::abs(x1), math::abs(x2));
- calc_t ay = (std::min)(math::abs(y1), math::abs(y2));
-
- int s1 = 0, s2 = 0;
- if (ax >= ay)
- {
- s1 = x1 > 0 ? 1 : -1;
- s2 = x2 > 0 ? 1 : -1;
- }
- else
- {
- s1 = y1 > 0 ? 1 : -1;
- s2 = y2 > 0 ? 1 : -1;
- }
-
- return s1 == s2 ? -1 : 1;
- }
-};
-
-template <typename Point>
-struct direction_code_impl<Point, spherical_equatorial_tag>
-{
- template <typename Point1, typename Point2>
- static inline int apply(Point1 const& segment_a, Point1 const& segment_b,
- Point2 const& p)
- {
- typedef typename coordinate_type<Point1>::type coord1_t;
- typedef typename coordinate_type<Point2>::type coord2_t;
- typedef typename coordinate_system<Point1>::type::units units_t;
- typedef typename coordinate_system<Point2>::type::units units2_t;
- BOOST_MPL_ASSERT_MSG((boost::is_same<units_t, units2_t>::value),
- NOT_IMPLEMENTED_FOR_DIFFERENT_UNITS,
- (units_t, units2_t));
-
- typedef typename geometry::select_coordinate_type <Point1, Point2>::type calc_t;
- typedef math::detail::constants_on_spheroid<coord1_t, units_t> constants1;
- typedef math::detail::constants_on_spheroid<coord2_t, units_t> constants2;
- static coord1_t const pi_half1 = constants1::max_latitude();
- static coord2_t const pi_half2 = constants2::max_latitude();
- static calc_t const c0 = 0;
-
- coord1_t const a0 = geometry::get<0>(segment_a);
- coord1_t const a1 = geometry::get<1>(segment_a);
- coord1_t const b0 = geometry::get<0>(segment_b);
- coord1_t const b1 = geometry::get<1>(segment_b);
- coord2_t const p0 = geometry::get<0>(p);
- coord2_t const p1 = geometry::get<1>(p);
-
- if ( (math::equals(b0, a0) && math::equals(b1, a1))
- || (math::equals(b0, p0) && math::equals(b1, p1)) )
- {
- return 0;
- }
-
- bool const is_a_pole = math::equals(pi_half1, math::abs(a1));
- bool const is_b_pole = math::equals(pi_half1, math::abs(b1));
- bool const is_p_pole = math::equals(pi_half2, math::abs(p1));
-
- if ( is_b_pole && ((is_a_pole && math::sign(b1) == math::sign(a1))
- || (is_p_pole && math::sign(b1) == math::sign(p1))) )
- {
- return 0;
- }
-
- // NOTE: as opposed to the implementation for cartesian CS
- // here point b is the origin
-
- calc_t const dlon1 = math::longitude_distance_signed<units_t, calc_t>(b0, a0);
- calc_t const dlon2 = math::longitude_distance_signed<units_t, calc_t>(b0, p0);
-
- bool is_antilon1 = false, is_antilon2 = false;
- calc_t const dlat1 = latitude_distance_signed<units_t, calc_t>(b1, a1, dlon1, is_antilon1);
- calc_t const dlat2 = latitude_distance_signed<units_t, calc_t>(b1, p1, dlon2, is_antilon2);
-
- calc_t mx = is_a_pole || is_b_pole || is_p_pole ?
- c0 :
- (std::min)(is_antilon1 ? c0 : math::abs(dlon1),
- is_antilon2 ? c0 : math::abs(dlon2));
- calc_t my = (std::min)(math::abs(dlat1),
- math::abs(dlat2));
-
- int s1 = 0, s2 = 0;
- if (mx >= my)
- {
- s1 = dlon1 > 0 ? 1 : -1;
- s2 = dlon2 > 0 ? 1 : -1;
- }
- else
- {
- s1 = dlat1 > 0 ? 1 : -1;
- s2 = dlat2 > 0 ? 1 : -1;
- }
-
- return s1 == s2 ? -1 : 1;
- }
-
- template <typename Units, typename T>
- static inline T latitude_distance_signed(T const& lat1, T const& lat2, T const& lon_ds, bool & is_antilon)
- {
- typedef math::detail::constants_on_spheroid<T, Units> constants;
- static T const pi = constants::half_period();
- static T const c0 = 0;
-
- T res = lat2 - lat1;
-
- is_antilon = math::equals(math::abs(lon_ds), pi);
- if (is_antilon)
- {
- res = lat2 + lat1;
- if (res >= c0)
- res = pi - res;
- else
- res = -pi - res;
- }
-
- return res;
- }
-};
-
-template <typename Point>
-struct direction_code_impl<Point, spherical_polar_tag>
-{
- template <typename Point1, typename Point2>
- static inline int apply(Point1 segment_a, Point1 segment_b,
- Point2 p)
- {
- typedef math::detail::constants_on_spheroid
- <
- typename coordinate_type<Point1>::type,
- typename coordinate_system<Point1>::type::units
- > constants1;
- typedef math::detail::constants_on_spheroid
- <
- typename coordinate_type<Point2>::type,
- typename coordinate_system<Point2>::type::units
- > constants2;
-
- geometry::set<1>(segment_a,
- constants1::max_latitude() - geometry::get<1>(segment_a));
- geometry::set<1>(segment_b,
- constants1::max_latitude() - geometry::get<1>(segment_b));
- geometry::set<1>(p,
- constants2::max_latitude() - geometry::get<1>(p));
-
- return direction_code_impl
- <
- Point, spherical_equatorial_tag
- >::apply(segment_a, segment_b, p);
- }
-};
-
-template <typename Point>
-struct direction_code_impl<Point, geographic_tag>
- : direction_code_impl<Point, spherical_equatorial_tag>
-{};
-
-// Gives sense of direction for point p, collinear w.r.t. segment (a,b)
-// Returns -1 if p goes backward w.r.t (a,b), so goes from b in direction of a
-// Returns 1 if p goes forward, so extends (a,b)
-// Returns 0 if p is equal with b, or if (a,b) is degenerate
-// Note that it does not do any collinearity test, that should be done before
-template <typename Point1, typename Point2>
-inline int direction_code(Point1 const& segment_a, Point1 const& segment_b,
- Point2 const& p)
-{
- return direction_code_impl<Point1>::apply(segment_a, segment_b, p);
-}
-
-
-} // namespace detail
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DIRECITON_CODE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/areal_areal.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/areal_areal.hpp
deleted file mode 100644
index 664c9953846..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/areal_areal.hpp
+++ /dev/null
@@ -1,180 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_AREAL_AREAL_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_AREAL_AREAL_HPP
-
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/algorithms/detail/for_each_range.hpp>
-#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint/linear_linear.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct check_each_ring_for_within_call_covered_by
-{
- /*!
- \tparam Strategy point_in_geometry strategy
- */
- template <typename Point, typename Strategy>
- static inline bool apply(Point const& p, Geometry const& g, Strategy const& strategy)
- {
- return geometry::covered_by(p, g, strategy);
- }
-};
-
-template <typename Geometry>
-struct check_each_ring_for_within_call_covered_by<Geometry, box_tag>
-{
- template <typename Point, typename Strategy>
- static inline bool apply(Point const& p, Geometry const& g, Strategy const& )
- {
- return geometry::covered_by(p, g);
- }
-};
-
-
-/*!
-\tparam Strategy point_in_geometry strategy
-*/
-template<typename Geometry, typename Strategy>
-struct check_each_ring_for_within
-{
- bool not_disjoint;
- Geometry const& m_geometry;
- Strategy const& m_strategy;
-
- inline check_each_ring_for_within(Geometry const& g,
- Strategy const& strategy)
- : not_disjoint(false)
- , m_geometry(g)
- , m_strategy(strategy)
- {}
-
- template <typename Range>
- inline void apply(Range const& range)
- {
- typename point_type<Range>::type pt;
- not_disjoint = not_disjoint
- || ( geometry::point_on_border(pt, range)
- && check_each_ring_for_within_call_covered_by
- <
- Geometry
- >::apply(pt, m_geometry, m_strategy) );
- }
-};
-
-
-/*!
-\tparam Strategy point_in_geometry strategy
-*/
-template <typename FirstGeometry, typename SecondGeometry, typename Strategy>
-inline bool rings_containing(FirstGeometry const& geometry1,
- SecondGeometry const& geometry2,
- Strategy const& strategy)
-{
- check_each_ring_for_within
- <
- FirstGeometry, Strategy
- > checker(geometry1, strategy);
- geometry::detail::for_each_range(geometry2, checker);
- return checker.not_disjoint;
-}
-
-
-
-template <typename Geometry1, typename Geometry2>
-struct general_areal
-{
- /*!
- \tparam Strategy relate (segments intersection) strategy
- */
- template <typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- if ( ! disjoint_linear<Geometry1, Geometry2>::apply(geometry1, geometry2, strategy) )
- {
- return false;
- }
-
- // If there is no intersection of segments, they might located
- // inside each other
-
- // We check that using a point on the border (external boundary),
- // and see if that is contained in the other geometry. And vice versa.
-
- if ( rings_containing(geometry1, geometry2,
- strategy.template get_point_in_geometry_strategy<Geometry2, Geometry1>())
- || rings_containing(geometry2, geometry1,
- strategy.template get_point_in_geometry_strategy<Geometry1, Geometry2>()) )
- {
- return false;
- }
-
- return true;
- }
-};
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Areal1, typename Areal2>
-struct disjoint<Areal1, Areal2, 2, areal_tag, areal_tag, false>
- : detail::disjoint::general_areal<Areal1, Areal2>
-{};
-
-
-template <typename Areal, typename Box>
-struct disjoint<Areal, Box, 2, areal_tag, box_tag, false>
- : detail::disjoint::general_areal<Areal, Box>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_AREAL_AREAL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/box_box.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/box_box.hpp
deleted file mode 100644
index 87618939b8c..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/box_box.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_BOX_BOX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_BOX_BOX_HPP
-
-#include <cstddef>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
-
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-template
-<
- typename Box1, typename Box2,
- std::size_t Dimension = 0,
- std::size_t DimensionCount = dimension<Box1>::value,
- typename CSTag = typename tag_cast
- <
- typename cs_tag<Box1>::type,
- spherical_tag
- >::type
->
-struct box_box
-{
- template <typename Strategy>
- static inline bool apply(Box1 const& box1, Box2 const& box2, Strategy const&)
- {
- return apply(box1, box2);
- }
-
- static inline bool apply(Box1 const& box1, Box2 const& box2)
- {
- if (get<max_corner, Dimension>(box1) < get<min_corner, Dimension>(box2))
- {
- return true;
- }
- if (get<min_corner, Dimension>(box1) > get<max_corner, Dimension>(box2))
- {
- return true;
- }
- return box_box
- <
- Box1, Box2,
- Dimension + 1, DimensionCount
- >::apply(box1, box2);
- }
-};
-
-
-template <typename Box1, typename Box2, std::size_t DimensionCount, typename CSTag>
-struct box_box<Box1, Box2, DimensionCount, DimensionCount, CSTag>
-{
- static inline bool apply(Box1 const& , Box2 const& )
- {
- return false;
- }
-};
-
-
-template <typename Box1, typename Box2, std::size_t DimensionCount>
-struct box_box<Box1, Box2, 0, DimensionCount, spherical_tag>
-{
- template <typename Strategy>
- static inline bool apply(Box1 const& box1, Box2 const& box2, Strategy const&)
- {
- return apply(box1, box2);
- }
-
- static inline bool apply(Box1 const& box1, Box2 const& box2)
- {
- typedef typename geometry::select_most_precise
- <
- typename coordinate_type<Box1>::type,
- typename coordinate_type<Box2>::type
- >::type calc_t;
- typedef typename coordinate_system<Box1>::type::units units_t;
- typedef math::detail::constants_on_spheroid<calc_t, units_t> constants;
-
- calc_t const b1_min = get<min_corner, 0>(box1);
- calc_t const b1_max = get<max_corner, 0>(box1);
- calc_t const b2_min = get<min_corner, 0>(box2);
- calc_t const b2_max = get<max_corner, 0>(box2);
-
- // min <= max <=> diff >= 0
- calc_t const diff1 = b1_max - b1_min;
- calc_t const diff2 = b2_max - b2_min;
-
- // check the intersection if neither box cover the whole globe
- if (diff1 < constants::period() && diff2 < constants::period())
- {
- // calculate positive longitude translation with b1_min as origin
- calc_t const diff_min = math::longitude_distance_unsigned<units_t>(b1_min, b2_min);
- calc_t const b2_min_transl = b1_min + diff_min; // always right of b1_min
- calc_t b2_max_transl = b2_min_transl - constants::period() + diff2;
-
- // if the translation is too close then use the original point
- // note that math::abs(b2_max_transl - b2_max) takes values very
- // close to k*2*constants::period() for k=0,1,2,...
- if (math::abs(b2_max_transl - b2_max) < constants::period() / 2)
- {
- b2_max_transl = b2_max;
- }
-
- if (b2_min_transl > b1_max // b2_min right of b1_max
- && b2_max_transl < b1_min) // b2_max left of b1_min
- {
- return true;
- }
- }
-
- return box_box
- <
- Box1, Box2,
- 1, DimensionCount
- >::apply(box1, box2);
- }
-};
-
-
-/*!
- \brief Internal utility function to detect if boxes are disjoint
- \note Is used from other algorithms, declared separately
- to avoid circular references
- */
-template <typename Box1, typename Box2>
-inline bool disjoint_box_box(Box1 const& box1, Box2 const& box2)
-{
- return box_box<Box1, Box2>::apply(box1, box2);
-}
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Box1, typename Box2, std::size_t DimensionCount>
-struct disjoint<Box1, Box2, DimensionCount, box_tag, box_tag, false>
- : detail::disjoint::box_box<Box1, Box2, 0, DimensionCount>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_BOX_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/implementation.hpp
deleted file mode 100644
index 3a3d9865d1d..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/implementation.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_IMPLEMENTATION_HPP
-
-
-#include <boost/geometry/algorithms/detail/disjoint/areal_areal.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/linear_areal.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/linear_linear.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_geometry.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/multipoint_geometry.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_point.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_box.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/segment_box.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp>
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/interface.hpp
deleted file mode 100644
index 64898e35fe3..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/interface.hpp
+++ /dev/null
@@ -1,246 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_INTERFACE_HPP
-
-#include <cstddef>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/detail/relate/interface.hpp>
-#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/strategies/disjoint.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace resolve_strategy
-{
-
-struct disjoint
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return dispatch::disjoint
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, strategy);
- }
-
- template <typename Geometry1, typename Geometry2>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- default_strategy)
- {
- typedef typename strategy::disjoint::services::default_strategy
- <
- Geometry1, Geometry2
- >::type strategy_type;
-
- return dispatch::disjoint
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant {
-
-template <typename Geometry1, typename Geometry2>
-struct disjoint
-{
- template <typename Strategy>
- static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- concepts::check_concepts_and_equal_dimensions
- <
- Geometry1 const,
- Geometry2 const
- >();
-
- return resolve_strategy::disjoint::apply(geometry1, geometry2, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct disjoint<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Geometry2 const& m_geometry2;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2, Strategy const& strategy)
- : m_geometry2(geometry2)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1>
- bool operator()(Geometry1 const& geometry1) const
- {
- return disjoint<Geometry1, Geometry2>::apply(geometry1, m_geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry2, strategy), geometry1);
- }
-};
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct disjoint<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Geometry1 const& m_geometry1;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1, Strategy const& strategy)
- : m_geometry1(geometry1)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry2>
- bool operator()(Geometry2 const& geometry2) const
- {
- return disjoint<Geometry1, Geometry2>::apply(m_geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry1, strategy), geometry2);
- }
-};
-
-template
-<
- BOOST_VARIANT_ENUM_PARAMS(typename T1),
- BOOST_VARIANT_ENUM_PARAMS(typename T2)
->
-struct disjoint
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
- >
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Geometry1, typename Geometry2>
- bool operator()(Geometry1 const& geometry1,
- Geometry2 const& geometry2) const
- {
- return disjoint<Geometry1, Geometry2>::apply(geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), geometry1, geometry2);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_check2{are disjoint}
-\ingroup disjoint
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Strategy \tparam_strategy{Disjoint}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param strategy \param_strategy{disjoint}
-\return \return_check2{are disjoint}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/disjoint.qbk]}
-*/
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline bool disjoint(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- return resolve_variant::disjoint
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, strategy);
-}
-
-
-/*!
-\brief \brief_check2{are disjoint}
-\ingroup disjoint
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return \return_check2{are disjoint}
-
-\qbk{[include reference/algorithms/disjoint.qbk]}
-*/
-template <typename Geometry1, typename Geometry2>
-inline bool disjoint(Geometry1 const& geometry1,
- Geometry2 const& geometry2)
-{
- return resolve_variant::disjoint
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, default_strategy());
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/linear_areal.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/linear_areal.hpp
deleted file mode 100644
index e6077d3e7f1..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/linear_areal.hpp
+++ /dev/null
@@ -1,301 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_AREAL_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_AREAL_HPP
-
-#include <iterator>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint/multirange_geometry.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_box.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/segment_box.hpp>
-
-#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-template <typename Geometry1, typename Geometry2,
- typename Tag1 = typename tag<Geometry1>::type,
- typename Tag1OrMulti = typename tag_cast<Tag1, multi_tag>::type>
-struct disjoint_no_intersections_policy
-{
- /*!
- \tparam Strategy point_in_geometry strategy
- */
- template <typename Strategy>
- static inline bool apply(Geometry1 const& g1, Geometry2 const& g2, Strategy const& strategy)
- {
- typedef typename point_type<Geometry1>::type point1_type;
- point1_type p;
- geometry::point_on_border(p, g1);
-
- return !geometry::covered_by(p, g2, strategy);
- }
-};
-
-template <typename Geometry1, typename Geometry2, typename Tag1>
-struct disjoint_no_intersections_policy<Geometry1, Geometry2, Tag1, multi_tag>
-{
- /*!
- \tparam Strategy point_in_geometry strategy
- */
- template <typename Strategy>
- static inline bool apply(Geometry1 const& g1, Geometry2 const& g2, Strategy const& strategy)
- {
- // TODO: use partition or rtree on g2
- typedef typename boost::range_iterator<Geometry1 const>::type iterator;
- for ( iterator it = boost::begin(g1) ; it != boost::end(g1) ; ++it )
- {
- typedef typename boost::range_value<Geometry1 const>::type value_type;
- if ( ! disjoint_no_intersections_policy<value_type const, Geometry2>
- ::apply(*it, g2, strategy) )
- {
- return false;
- }
- }
- return true;
- }
-};
-
-
-template<typename Geometry1, typename Geometry2,
- typename NoIntersectionsPolicy
- = disjoint_no_intersections_policy<Geometry1, Geometry2> >
-struct disjoint_linear_areal
-{
- /*!
- \tparam Strategy relate (segments intersection) strategy
- */
- template <typename Strategy>
- static inline bool apply(Geometry1 const& g1, Geometry2 const& g2, Strategy const& strategy)
- {
- // if there are intersections - return false
- if ( !disjoint_linear<Geometry1, Geometry2>::apply(g1, g2, strategy) )
- {
- return false;
- }
-
- return NoIntersectionsPolicy
- ::apply(g1, g2,
- strategy.template get_point_in_geometry_strategy<Geometry1, Geometry2>());
- }
-};
-
-
-
-
-template
-<
- typename Segment,
- typename Areal,
- typename Tag = typename tag<Areal>::type
->
-struct disjoint_segment_areal
- : not_implemented<Segment, Areal>
-{};
-
-
-template <typename Segment, typename Polygon>
-class disjoint_segment_areal<Segment, Polygon, polygon_tag>
-{
-private:
- template <typename InteriorRings, typename Strategy>
- static inline
- bool check_interior_rings(InteriorRings const& interior_rings,
- Segment const& segment,
- Strategy const& strategy)
- {
- typedef typename boost::range_value<InteriorRings>::type ring_type;
-
- typedef unary_disjoint_geometry_to_query_geometry
- <
- Segment,
- Strategy,
- disjoint_range_segment_or_box
- <
- ring_type, closure<ring_type>::value, Segment
- >
- > unary_predicate_type;
-
- return check_iterator_range
- <
- unary_predicate_type
- >::apply(boost::begin(interior_rings),
- boost::end(interior_rings),
- unary_predicate_type(segment, strategy));
- }
-
-
-public:
- template <typename IntersectionStrategy>
- static inline bool apply(Segment const& segment,
- Polygon const& polygon,
- IntersectionStrategy const& strategy)
- {
- typedef typename geometry::ring_type<Polygon>::type ring;
-
- if ( !disjoint_range_segment_or_box
- <
- ring, closure<Polygon>::value, Segment
- >::apply(geometry::exterior_ring(polygon), segment, strategy) )
- {
- return false;
- }
-
- if ( !check_interior_rings(geometry::interior_rings(polygon), segment, strategy) )
- {
- return false;
- }
-
- typename point_type<Segment>::type p;
- detail::assign_point_from_index<0>(segment, p);
-
- return !geometry::covered_by(p, polygon,
- strategy.template get_point_in_geometry_strategy<Segment, Polygon>());
- }
-};
-
-
-template <typename Segment, typename MultiPolygon>
-struct disjoint_segment_areal<Segment, MultiPolygon, multi_polygon_tag>
-{
- template <typename IntersectionStrategy>
- static inline bool apply(Segment const& segment, MultiPolygon const& multipolygon,
- IntersectionStrategy const& strategy)
- {
- return multirange_constant_size_geometry
- <
- MultiPolygon, Segment
- >::apply(multipolygon, segment, strategy);
- }
-};
-
-
-template <typename Segment, typename Ring>
-struct disjoint_segment_areal<Segment, Ring, ring_tag>
-{
- template <typename IntersectionStrategy>
- static inline bool apply(Segment const& segment,
- Ring const& ring,
- IntersectionStrategy const& strategy)
- {
- if ( !disjoint_range_segment_or_box
- <
- Ring, closure<Ring>::value, Segment
- >::apply(ring, segment, strategy) )
- {
- return false;
- }
-
- typename point_type<Segment>::type p;
- detail::assign_point_from_index<0>(segment, p);
-
- return !geometry::covered_by(p, ring,
- strategy.template get_point_in_geometry_strategy<Segment, Ring>());
- }
-};
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Linear, typename Areal>
-struct disjoint<Linear, Areal, 2, linear_tag, areal_tag, false>
- : public detail::disjoint::disjoint_linear_areal<Linear, Areal>
-{};
-
-
-template <typename Areal, typename Linear>
-struct disjoint<Areal, Linear, 2, areal_tag, linear_tag, false>
-{
- template <typename Strategy>
- static inline bool apply(Areal const& areal, Linear const& linear,
- Strategy const& strategy)
- {
- return detail::disjoint::disjoint_linear_areal
- <
- Linear, Areal
- >::apply(linear, areal, strategy);
- }
-};
-
-
-template <typename Areal, typename Segment>
-struct disjoint<Areal, Segment, 2, areal_tag, segment_tag, false>
-{
- template <typename Strategy>
- static inline bool apply(Areal const& g1, Segment const& g2,
- Strategy const& strategy)
- {
- return detail::disjoint::disjoint_segment_areal
- <
- Segment, Areal
- >::apply(g2, g1, strategy);
- }
-};
-
-
-template <typename Segment, typename Areal>
-struct disjoint<Segment, Areal, 2, segment_tag, areal_tag, false>
- : detail::disjoint::disjoint_segment_areal<Segment, Areal>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_AREAL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp
deleted file mode 100644
index 989b8df2472..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp
+++ /dev/null
@@ -1,191 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_LINEAR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_LINEAR_HPP
-
-#include <cstddef>
-#include <deque>
-
-#include <boost/range.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
-#include <boost/geometry/algorithms/detail/overlay/do_reverse.hpp>
-
-#include <boost/geometry/policies/disjoint_interrupt_policy.hpp>
-#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
-#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
-
-#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-template <typename Segment1, typename Segment2>
-struct disjoint_segment
-{
- template <typename Strategy>
- static inline bool apply(Segment1 const& segment1, Segment2 const& segment2,
- Strategy const& strategy)
- {
- typedef typename point_type<Segment1>::type point_type;
-
- // We don't need to rescale to detect disjointness
- typedef no_rescale_policy rescale_policy_type;
- rescale_policy_type robust_policy;
-
- typedef segment_intersection_points
- <
- point_type,
- typename segment_ratio_type
- <
- point_type,
- rescale_policy_type
- >::type
- > intersection_return_type;
-
- typedef policies::relate::segments_intersection_points
- <
- intersection_return_type
- > intersection_policy;
-
- intersection_return_type is = strategy.apply(segment1, segment2,
- intersection_policy(),
- robust_policy);
-
- return is.count == 0;
- }
-};
-
-
-struct assign_disjoint_policy
-{
- // We want to include all points:
- static bool const include_no_turn = true;
- static bool const include_degenerate = true;
- static bool const include_opposite = true;
-
- // We don't assign extra info:
- template
- <
- typename Info,
- typename Point1,
- typename Point2,
- typename IntersectionInfo
- >
- static inline void apply(Info& , Point1 const& , Point2 const&,
- IntersectionInfo const&)
- {}
-};
-
-
-template <typename Geometry1, typename Geometry2>
-struct disjoint_linear
-{
- template <typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- typedef typename geometry::point_type<Geometry1>::type point_type;
- typedef detail::no_rescale_policy rescale_policy_type;
- typedef typename geometry::segment_ratio_type
- <
- point_type, rescale_policy_type
- >::type segment_ratio_type;
- typedef overlay::turn_info
- <
- point_type,
- segment_ratio_type,
- typename detail::get_turns::turn_operation_type
- <
- Geometry1, Geometry2, segment_ratio_type
- >::type
- > turn_info_type;
-
- std::deque<turn_info_type> turns;
-
- // Specify two policies:
- // 1) Stop at any intersection
- // 2) In assignment, include also degenerate points (which are normally skipped)
- disjoint_interrupt_policy interrupt_policy;
- dispatch::get_turns
- <
- typename geometry::tag<Geometry1>::type,
- typename geometry::tag<Geometry2>::type,
- Geometry1,
- Geometry2,
- overlay::do_reverse<geometry::point_order<Geometry1>::value>::value, // should be false
- overlay::do_reverse<geometry::point_order<Geometry2>::value>::value, // should be false
- detail::get_turns::get_turn_info_type
- <
- Geometry1, Geometry2, assign_disjoint_policy
- >
- >::apply(0, geometry1, 1, geometry2,
- strategy, rescale_policy_type(), turns, interrupt_policy);
-
- return !interrupt_policy.has_intersections;
- }
-};
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Linear1, typename Linear2>
-struct disjoint<Linear1, Linear2, 2, linear_tag, linear_tag, false>
- : detail::disjoint::disjoint_linear<Linear1, Linear2>
-{};
-
-
-template <typename Segment1, typename Segment2>
-struct disjoint<Segment1, Segment2, 2, segment_tag, segment_tag, false>
- : detail::disjoint::disjoint_segment<Segment1, Segment2>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_LINEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp
deleted file mode 100644
index b4c71c8f305..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp
+++ /dev/null
@@ -1,171 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2014.
-// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_SEGMENT_OR_BOX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_SEGMENT_OR_BOX_HPP
-
-#include <boost/range.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-
-#include <boost/geometry/geometries/segment.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/views/closeable_view.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint/multirange_geometry.hpp>
-#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-
-template
-<
- typename Range,
- closure_selector Closure,
- typename SegmentOrBox
->
-struct disjoint_range_segment_or_box
-{
- template <typename Strategy>
- static inline bool apply(Range const& range,
- SegmentOrBox const& segment_or_box,
- Strategy const& strategy)
- {
- typedef typename closeable_view<Range const, Closure>::type view_type;
-
- typedef typename ::boost::range_value<view_type>::type point_type;
- typedef typename ::boost::range_iterator
- <
- view_type const
- >::type const_iterator;
-
- typedef typename ::boost::range_size<view_type>::type size_type;
-
- typedef typename geometry::model::referring_segment
- <
- point_type const
- > range_segment;
-
- view_type view(range);
-
- const size_type count = ::boost::size(view);
-
- if ( count == 0 )
- {
- return false;
- }
- else if ( count == 1 )
- {
- return dispatch::disjoint
- <
- point_type, SegmentOrBox
- >::apply(geometry::range::front<view_type const>(view),
- segment_or_box,
- strategy.template get_point_in_geometry_strategy<Range, SegmentOrBox>());
- }
- else
- {
- const_iterator it0 = ::boost::begin(view);
- const_iterator it1 = ::boost::begin(view) + 1;
- const_iterator last = ::boost::end(view);
-
- for ( ; it1 != last ; ++it0, ++it1 )
- {
- range_segment rng_segment(*it0, *it1);
- if ( !dispatch::disjoint
- <
- range_segment, SegmentOrBox
- >::apply(rng_segment, segment_or_box, strategy) )
- {
- return false;
- }
- }
- return true;
- }
- }
-};
-
-
-
-
-template
-<
- typename Linear,
- typename SegmentOrBox,
- typename Tag = typename tag<Linear>::type
->
-struct disjoint_linear_segment_or_box
- : not_implemented<Linear, SegmentOrBox>
-{};
-
-
-template <typename Linestring, typename SegmentOrBox>
-struct disjoint_linear_segment_or_box<Linestring, SegmentOrBox, linestring_tag>
- : disjoint_range_segment_or_box<Linestring, closed, SegmentOrBox>
-{};
-
-
-template <typename MultiLinestring, typename SegmentOrBox>
-struct disjoint_linear_segment_or_box
- <
- MultiLinestring, SegmentOrBox, multi_linestring_tag
- > : multirange_constant_size_geometry<MultiLinestring, SegmentOrBox>
-{};
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Linear, typename Segment>
-struct disjoint<Linear, Segment, 2, linear_tag, segment_tag, false>
- : detail::disjoint::disjoint_linear_segment_or_box<Linear, Segment>
-{};
-
-
-template <typename Linear, typename Box, std::size_t DimensionCount>
-struct disjoint<Linear, Box, DimensionCount, linear_tag, box_tag, false>
- : detail::disjoint::disjoint_linear_segment_or_box<Linear, Box>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_LINEAR_SEGMENT_OR_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/multipoint_geometry.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/multipoint_geometry.hpp
deleted file mode 100644
index d7aa9089e3c..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/multipoint_geometry.hpp
+++ /dev/null
@@ -1,532 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_MULTIPOINT_GEOMETRY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_MULTIPOINT_GEOMETRY_HPP
-
-#include <algorithm>
-#include <vector>
-
-#include <boost/range.hpp>
-#include <boost/mpl/assert.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/box.hpp>
-
-#include <boost/geometry/iterators/segment_iterator.hpp>
-
-#include <boost/geometry/algorithms/envelope.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-#include <boost/geometry/algorithms/detail/partition.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/multirange_geometry.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_box.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_point.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_geometry.hpp>
-
-#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
-
-#include <boost/geometry/policies/compare.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-
-template <typename MultiPoint1, typename MultiPoint2>
-class multipoint_multipoint
-{
-private:
- template <typename Iterator>
- class unary_disjoint_predicate
- : geometry::less<>
- {
- private:
- typedef geometry::less<> base_type;
-
- public:
- unary_disjoint_predicate(Iterator first, Iterator last)
- : base_type(), m_first(first), m_last(last)
- {}
-
- template <typename Point>
- inline bool apply(Point const& point) const
- {
- return !std::binary_search(m_first,
- m_last,
- point,
- static_cast<base_type const&>(*this));
- }
-
- private:
- Iterator m_first, m_last;
- };
-
-public:
- static inline bool apply(MultiPoint1 const& multipoint1,
- MultiPoint2 const& multipoint2)
- {
- BOOST_GEOMETRY_ASSERT( boost::size(multipoint1) <= boost::size(multipoint2) );
-
- typedef typename boost::range_value<MultiPoint1>::type point1_type;
-
- std::vector<point1_type> points1(boost::begin(multipoint1),
- boost::end(multipoint1));
-
- std::sort(points1.begin(), points1.end(), geometry::less<>());
-
- typedef unary_disjoint_predicate
- <
- typename std::vector<point1_type>::const_iterator
- > predicate_type;
-
- return check_iterator_range
- <
- predicate_type
- >::apply(boost::begin(multipoint2),
- boost::end(multipoint2),
- predicate_type(points1.begin(), points1.end()));
- }
-};
-
-
-template <typename MultiPoint, typename Linear>
-class multipoint_linear
-{
-private:
- struct expand_box_point
- {
- template <typename Box, typename Point>
- static inline void apply(Box& total, Point const& point)
- {
- geometry::expand(total, point);
- }
- };
-
- template <typename EnvelopeStrategy>
- struct expand_box_segment
- {
- explicit expand_box_segment(EnvelopeStrategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Box, typename Segment>
- inline void apply(Box& total, Segment const& segment) const
- {
- geometry::expand(total,
- geometry::return_envelope<Box>(segment, m_strategy));
- }
-
- EnvelopeStrategy const& m_strategy;
- };
-
- struct overlaps_box_point
- {
- template <typename Box, typename Point>
- static inline bool apply(Box const& box, Point const& point)
- {
- // The default strategy is enough in this case
- return ! detail::disjoint::disjoint_point_box(point, box);
- }
- };
-
- template <typename DisjointStrategy>
- struct overlaps_box_segment
- {
- explicit overlaps_box_segment(DisjointStrategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Box, typename Segment>
- inline bool apply(Box const& box, Segment const& segment) const
- {
- return ! dispatch::disjoint<Segment, Box>::apply(segment, box, m_strategy);
- }
-
- DisjointStrategy const& m_strategy;
- };
-
- template <typename PtSegStrategy>
- class item_visitor_type
- {
- public:
- item_visitor_type(PtSegStrategy const& strategy)
- : m_intersection_found(false)
- , m_strategy(strategy)
- {}
-
- template <typename Item1, typename Item2>
- inline bool apply(Item1 const& item1, Item2 const& item2)
- {
- if (! m_intersection_found
- && ! dispatch::disjoint<Item1, Item2>::apply(item1, item2, m_strategy))
- {
- m_intersection_found = true;
- return false;
- }
- return true;
- }
-
- inline bool intersection_found() const { return m_intersection_found; }
-
- private:
- bool m_intersection_found;
- PtSegStrategy const& m_strategy;
- };
- // structs for partition -- end
-
- class segment_range
- {
- public:
- typedef geometry::segment_iterator<Linear const> const_iterator;
- typedef const_iterator iterator;
-
- segment_range(Linear const& linear)
- : m_linear(linear)
- {}
-
- const_iterator begin() const
- {
- return geometry::segments_begin(m_linear);
- }
-
- const_iterator end() const
- {
- return geometry::segments_end(m_linear);
- }
-
- private:
- Linear const& m_linear;
- };
-
-public:
- template <typename Strategy>
- static inline bool apply(MultiPoint const& multipoint, Linear const& linear, Strategy const& strategy)
- {
- item_visitor_type<Strategy> visitor(strategy);
-
- typedef typename Strategy::envelope_strategy_type envelope_strategy_type;
- typedef typename Strategy::disjoint_strategy_type disjoint_strategy_type;
-
- // TODO: disjoint Segment/Box may be called in partition multiple times
- // possibly for non-cartesian segments which could be slow. We should consider
- // passing a range of bounding boxes of segments after calculating them once.
- // Alternatively instead of a range of segments a range of Segment/Envelope pairs
- // should be passed, where envelope would be lazily calculated when needed the first time
- geometry::partition
- <
- geometry::model::box<typename point_type<MultiPoint>::type>
- >::apply(multipoint, segment_range(linear), visitor,
- expand_box_point(),
- overlaps_box_point(),
- expand_box_segment<envelope_strategy_type>(strategy.get_envelope_strategy()),
- overlaps_box_segment<disjoint_strategy_type>(strategy.get_disjoint_strategy()));
-
- return ! visitor.intersection_found();
- }
-
- template <typename Strategy>
- static inline bool apply(Linear const& linear, MultiPoint const& multipoint, Strategy const& strategy)
- {
- return apply(multipoint, linear, strategy);
- }
-};
-
-
-template <typename MultiPoint, typename SingleGeometry>
-class multi_point_single_geometry
-{
-public:
- template <typename Strategy>
- static inline bool apply(MultiPoint const& multi_point, SingleGeometry const& single_geometry, Strategy const& strategy)
- {
- typedef typename point_type<MultiPoint>::type point1_type;
- typedef typename point_type<SingleGeometry>::type point2_type;
- typedef model::box<point2_type> box2_type;
-
- box2_type box2;
- geometry::envelope(single_geometry, box2, strategy.get_envelope_strategy());
- geometry::detail::expand_by_epsilon(box2);
-
- typedef typename boost::range_const_iterator<MultiPoint>::type iterator;
- for ( iterator it = boost::begin(multi_point) ; it != boost::end(multi_point) ; ++it )
- {
- // The default strategy is enough for Point/Box
- if (! detail::disjoint::disjoint_point_box(*it, box2)
- && ! dispatch::disjoint<point1_type, SingleGeometry>::apply(*it, single_geometry, strategy))
- {
- return false;
- }
- }
-
- return true;
- }
-
- template <typename Strategy>
- static inline bool apply(SingleGeometry const& single_geometry, MultiPoint const& multi_point, Strategy const& strategy)
- {
- return apply(multi_point, single_geometry, strategy);
- }
-};
-
-
-template <typename MultiPoint, typename MultiGeometry>
-class multi_point_multi_geometry
-{
-private:
- struct expand_box_point
- {
- template <typename Box, typename Point>
- static inline void apply(Box& total, Point const& point)
- {
- geometry::expand(total, point);
- }
- };
-
- struct expand_box_box_pair
- {
- template <typename Box, typename BoxPair>
- inline void apply(Box& total, BoxPair const& box_pair) const
- {
- geometry::expand(total, box_pair.first);
- }
- };
-
- struct overlaps_box_point
- {
- template <typename Box, typename Point>
- static inline bool apply(Box const& box, Point const& point)
- {
- // The default strategy is enough for Point/Box
- return ! detail::disjoint::disjoint_point_box(point, box);
- }
- };
-
- struct overlaps_box_box_pair
- {
- template <typename Box, typename BoxPair>
- inline bool apply(Box const& box, BoxPair const& box_pair) const
- {
- // The default strategy is enough for Box/Box
- return ! detail::disjoint::disjoint_box_box(box_pair.first, box);
- }
- };
-
- template <typename PtSegStrategy>
- class item_visitor_type
- {
- public:
- item_visitor_type(MultiGeometry const& multi_geometry,
- PtSegStrategy const& strategy)
- : m_intersection_found(false)
- , m_multi_geometry(multi_geometry)
- , m_strategy(strategy)
- {}
-
- template <typename Point, typename BoxPair>
- inline bool apply(Point const& point, BoxPair const& box_pair)
- {
- typedef typename boost::range_value<MultiGeometry>::type single_type;
-
- // The default strategy is enough for Point/Box
- if (! m_intersection_found
- && ! detail::disjoint::disjoint_point_box(point, box_pair.first)
- && ! dispatch::disjoint<Point, single_type>::apply(point, range::at(m_multi_geometry, box_pair.second), m_strategy))
- {
- m_intersection_found = true;
- return false;
- }
- return true;
- }
-
- inline bool intersection_found() const { return m_intersection_found; }
-
- private:
- bool m_intersection_found;
- MultiGeometry const& m_multi_geometry;
- PtSegStrategy const& m_strategy;
- };
- // structs for partition -- end
-
-public:
- template <typename Strategy>
- static inline bool apply(MultiPoint const& multi_point, MultiGeometry const& multi_geometry, Strategy const& strategy)
- {
- typedef typename point_type<MultiPoint>::type point1_type;
- typedef typename point_type<MultiGeometry>::type point2_type;
- typedef model::box<point1_type> box1_type;
- typedef model::box<point2_type> box2_type;
- typedef std::pair<box2_type, std::size_t> box_pair_type;
-
- typename Strategy::envelope_strategy_type const
- envelope_strategy = strategy.get_envelope_strategy();
-
- std::size_t count2 = boost::size(multi_geometry);
- std::vector<box_pair_type> boxes(count2);
- for (std::size_t i = 0 ; i < count2 ; ++i)
- {
- geometry::envelope(range::at(multi_geometry, i), boxes[i].first, envelope_strategy);
- geometry::detail::expand_by_epsilon(boxes[i].first);
- boxes[i].second = i;
- }
-
- item_visitor_type<Strategy> visitor(multi_geometry, strategy);
-
- geometry::partition
- <
- box1_type
- >::apply(multi_point, boxes, visitor,
- expand_box_point(),
- overlaps_box_point(),
- expand_box_box_pair(),
- overlaps_box_box_pair());
-
- return ! visitor.intersection_found();
- }
-
- template <typename Strategy>
- static inline bool apply(MultiGeometry const& multi_geometry, MultiPoint const& multi_point, Strategy const& strategy)
- {
- return apply(multi_point, multi_geometry, strategy);
- }
-};
-
-
-template <typename MultiPoint, typename Areal, typename Tag = typename tag<Areal>::type>
-struct multipoint_areal
- : multi_point_single_geometry<MultiPoint, Areal>
-{};
-
-template <typename MultiPoint, typename Areal>
-struct multipoint_areal<MultiPoint, Areal, multi_polygon_tag>
- : multi_point_multi_geometry<MultiPoint, Areal>
-{};
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Point, typename MultiPoint, std::size_t DimensionCount>
-struct disjoint
- <
- Point, MultiPoint, DimensionCount, point_tag, multi_point_tag, false
- > : detail::disjoint::multirange_constant_size_geometry<MultiPoint, Point>
-{};
-
-
-template <typename MultiPoint, typename Segment, std::size_t DimensionCount>
-struct disjoint
- <
- MultiPoint, Segment, DimensionCount, multi_point_tag, segment_tag, false
- > : detail::disjoint::multirange_constant_size_geometry<MultiPoint, Segment>
-{};
-
-
-template <typename MultiPoint, typename Box, std::size_t DimensionCount>
-struct disjoint
- <
- MultiPoint, Box, DimensionCount, multi_point_tag, box_tag, false
- > : detail::disjoint::multirange_constant_size_geometry<MultiPoint, Box>
-{};
-
-
-template
-<
- typename MultiPoint1,
- typename MultiPoint2,
- std::size_t DimensionCount
->
-struct disjoint
- <
- MultiPoint1, MultiPoint2, DimensionCount,
- multi_point_tag, multi_point_tag, false
- >
-{
- template <typename Strategy>
- static inline bool apply(MultiPoint1 const& multipoint1,
- MultiPoint2 const& multipoint2,
- Strategy const& )
- {
- if ( boost::size(multipoint2) < boost::size(multipoint1) )
- {
- return detail::disjoint::multipoint_multipoint
- <
- MultiPoint2, MultiPoint1
- >::apply(multipoint2, multipoint1);
- }
-
- return detail::disjoint::multipoint_multipoint
- <
- MultiPoint1, MultiPoint2
- >::apply(multipoint1, multipoint2);
- }
-};
-
-
-template <typename Linear, typename MultiPoint, std::size_t DimensionCount>
-struct disjoint
- <
- Linear, MultiPoint, DimensionCount, linear_tag, multi_point_tag, false
- > : detail::disjoint::multipoint_linear<MultiPoint, Linear>
-{};
-
-
-template <typename MultiPoint, typename Linear, std::size_t DimensionCount>
-struct disjoint
- <
- MultiPoint, Linear, DimensionCount, multi_point_tag, linear_tag, false
- > : detail::disjoint::multipoint_linear<MultiPoint, Linear>
-{};
-
-
-template <typename Areal, typename MultiPoint, std::size_t DimensionCount>
-struct disjoint
- <
- Areal, MultiPoint, DimensionCount, areal_tag, multi_point_tag, false
- > : detail::disjoint::multipoint_areal<MultiPoint, Areal>
-{};
-
-
-template <typename MultiPoint, typename Areal, std::size_t DimensionCount>
-struct disjoint
- <
- MultiPoint, Areal, DimensionCount, multi_point_tag, areal_tag, false
- > : detail::disjoint::multipoint_areal<MultiPoint, Areal>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_MULTIPOINT_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/multirange_geometry.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/multirange_geometry.hpp
deleted file mode 100644
index 53fb1642afe..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/multirange_geometry.hpp
+++ /dev/null
@@ -1,94 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_MULTIRANGE_GEOMETRY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_MULTIRANGE_GEOMETRY_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-
-template <typename Geometry, typename Strategy, typename BinaryPredicate>
-class unary_disjoint_geometry_to_query_geometry
-{
-public:
- unary_disjoint_geometry_to_query_geometry(Geometry const& geometry,
- Strategy const& strategy)
- : m_geometry(geometry)
- , m_strategy(strategy)
- {}
-
- template <typename QueryGeometry>
- inline bool apply(QueryGeometry const& query_geometry) const
- {
- return BinaryPredicate::apply(query_geometry, m_geometry, m_strategy);
- }
-
-private:
- Geometry const& m_geometry;
- Strategy const& m_strategy;
-};
-
-
-template<typename MultiRange, typename ConstantSizeGeometry>
-struct multirange_constant_size_geometry
-{
- template <typename Strategy>
- static inline bool apply(MultiRange const& multirange,
- ConstantSizeGeometry const& constant_size_geometry,
- Strategy const& strategy)
- {
- typedef unary_disjoint_geometry_to_query_geometry
- <
- ConstantSizeGeometry,
- Strategy,
- dispatch::disjoint
- <
- typename boost::range_value<MultiRange>::type,
- ConstantSizeGeometry
- >
- > unary_predicate_type;
-
- return detail::check_iterator_range
- <
- unary_predicate_type
- >::apply(boost::begin(multirange), boost::end(multirange),
- unary_predicate_type(constant_size_geometry, strategy));
- }
-
- template <typename Strategy>
- static inline bool apply(ConstantSizeGeometry const& constant_size_geometry,
- MultiRange const& multirange,
- Strategy const& strategy)
- {
- return apply(multirange, constant_size_geometry, strategy);
- }
-};
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_MULTIRANGE_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/point_box.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/point_box.hpp
deleted file mode 100644
index 2e6773d2214..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/point_box.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_BOX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_BOX_HPP
-
-#include <cstddef>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
-#include <boost/geometry/strategies/disjoint.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-
-/*!
- \brief Internal utility function to detect if point/box are disjoint
- */
-template <typename Point, typename Box>
-inline bool disjoint_point_box(Point const& point, Box const& box)
-{
- typedef typename strategy::disjoint::services::default_strategy
- <
- Point, Box
- >::type strategy_type;
-
- // ! covered_by(point, box)
- return ! strategy_type::apply(point, box);
-}
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Point, typename Box, std::size_t DimensionCount>
-struct disjoint<Point, Box, DimensionCount, point_tag, box_tag, false>
-{
- template <typename Strategy>
- static inline bool apply(Point const& point, Box const& box, Strategy const& )
- {
- // ! covered_by(point, box)
- return ! Strategy::apply(point, box);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/point_geometry.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/point_geometry.hpp
deleted file mode 100644
index 66bd7c26cee..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/point_geometry.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014, 2015.
-// Modifications copyright (c) 2013-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_GEOMETRY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_GEOMETRY_HPP
-
-#include <boost/geometry/algorithms/covered_by.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint/linear_linear.hpp>
-
-#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-
-struct reverse_covered_by
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return ! geometry::covered_by(geometry1, geometry2, strategy);
- }
-};
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template<typename Point, typename Linear, std::size_t DimensionCount>
-struct disjoint<Point, Linear, DimensionCount, point_tag, linear_tag, false>
- : detail::disjoint::reverse_covered_by
-{};
-
-
-template <typename Point, typename Areal, std::size_t DimensionCount>
-struct disjoint<Point, Areal, DimensionCount, point_tag, areal_tag, false>
- : detail::disjoint::reverse_covered_by
-{};
-
-
-template<typename Point, typename Segment, std::size_t DimensionCount>
-struct disjoint<Point, Segment, DimensionCount, point_tag, segment_tag, false>
- : detail::disjoint::reverse_covered_by
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/point_point.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/point_point.hpp
deleted file mode 100644
index 13ac34d718e..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/point_point.hpp
+++ /dev/null
@@ -1,247 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_POINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_POINT_HPP
-
-#include <cstddef>
-
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-#include <boost/geometry/strategies/strategy_transform.hpp>
-
-#include <boost/geometry/geometries/helper_geometry.hpp>
-
-#include <boost/geometry/algorithms/transform.hpp>
-
-#include <boost/geometry/algorithms/detail/normalize.hpp>
-
-#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-
-template <std::size_t Dimension, std::size_t DimensionCount>
-struct point_point_generic
-{
- template <typename Point1, typename Point2, typename Strategy>
- static inline bool apply(Point1 const& p1, Point2 const& p2, Strategy const& )
- {
- return apply(p1, p2);
- }
-
- template <typename Point1, typename Point2>
- static inline bool apply(Point1 const& p1, Point2 const& p2)
- {
- if (! geometry::math::equals(get<Dimension>(p1), get<Dimension>(p2)))
- {
- return true;
- }
- return
- point_point_generic<Dimension + 1, DimensionCount>::apply(p1, p2);
- }
-};
-
-template <std::size_t DimensionCount>
-struct point_point_generic<DimensionCount, DimensionCount>
-{
- template <typename Point1, typename Point2>
- static inline bool apply(Point1 const&, Point2 const& )
- {
- return false;
- }
-};
-
-
-class point_point_on_spheroid
-{
-private:
- template <typename Point1, typename Point2, bool SameUnits>
- struct are_same_points
- {
- static inline bool apply(Point1 const& point1, Point2 const& point2)
- {
- typedef typename helper_geometry<Point1>::type helper_point_type1;
- typedef typename helper_geometry<Point2>::type helper_point_type2;
-
- helper_point_type1 point1_normalized
- = return_normalized<helper_point_type1>(point1);
- helper_point_type2 point2_normalized
- = return_normalized<helper_point_type2>(point2);
-
- return point_point_generic
- <
- 0, dimension<Point1>::value
- >::apply(point1_normalized, point2_normalized);
- }
- };
-
- template <typename Point1, typename Point2>
- struct are_same_points<Point1, Point2, false> // points have different units
- {
- static inline bool apply(Point1 const& point1, Point2 const& point2)
- {
- typedef typename geometry::select_most_precise
- <
- typename fp_coordinate_type<Point1>::type,
- typename fp_coordinate_type<Point2>::type
- >::type calculation_type;
-
- typename helper_geometry
- <
- Point1, calculation_type, radian
- >::type helper_point1, helper_point2;
-
- Point1 point1_normalized = return_normalized<Point1>(point1);
- Point2 point2_normalized = return_normalized<Point2>(point2);
-
- geometry::transform(point1_normalized, helper_point1);
- geometry::transform(point2_normalized, helper_point2);
-
- return point_point_generic
- <
- 0, dimension<Point1>::value
- >::apply(helper_point1, helper_point2);
- }
- };
-
-public:
- template <typename Point1, typename Point2, typename Strategy>
- static inline bool apply(Point1 const& point1, Point2 const& point2, Strategy const& )
- {
- return apply(point1, point2);
- }
-
- template <typename Point1, typename Point2>
- static inline bool apply(Point1 const& point1, Point2 const& point2)
- {
- return are_same_points
- <
- Point1,
- Point2,
- boost::is_same
- <
- typename coordinate_system<Point1>::type::units,
- typename coordinate_system<Point2>::type::units
- >::value
- >::apply(point1, point2);
- }
-};
-
-
-template
-<
- typename Point1, typename Point2,
- std::size_t Dimension, std::size_t DimensionCount,
- typename CSTag1 = typename cs_tag<Point1>::type,
- typename CSTag2 = CSTag1
->
-struct point_point
- : point_point<Point1, Point2, Dimension, DimensionCount, cartesian_tag>
-{};
-
-template
-<
- typename Point1, typename Point2,
- std::size_t Dimension, std::size_t DimensionCount
->
-struct point_point
- <
- Point1, Point2, Dimension, DimensionCount, spherical_equatorial_tag
- > : point_point_on_spheroid
-{};
-
-template
-<
- typename Point1, typename Point2,
- std::size_t Dimension, std::size_t DimensionCount
->
-struct point_point
- <
- Point1, Point2, Dimension, DimensionCount, geographic_tag
- > : point_point_on_spheroid
-{};
-
-template
-<
- typename Point1, typename Point2,
- std::size_t Dimension, std::size_t DimensionCount
->
-struct point_point<Point1, Point2, Dimension, DimensionCount, cartesian_tag>
- : point_point_generic<Dimension, DimensionCount>
-{};
-
-
-/*!
- \brief Internal utility function to detect of points are disjoint
- \note To avoid circular references
- */
-template <typename Point1, typename Point2>
-inline bool disjoint_point_point(Point1 const& point1, Point2 const& point2)
-{
- return point_point
- <
- Point1, Point2,
- 0, dimension<Point1>::type::value
- >::apply(point1, point2);
-}
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Point1, typename Point2, std::size_t DimensionCount>
-struct disjoint<Point1, Point2, DimensionCount, point_tag, point_tag, false>
- : detail::disjoint::point_point<Point1, Point2, 0, DimensionCount>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_POINT_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/segment_box.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/segment_box.hpp
deleted file mode 100644
index fe849e10918..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/disjoint/segment_box.hpp
+++ /dev/null
@@ -1,231 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_SEGMENT_BOX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_SEGMENT_BOX_HPP
-
-#include <cstddef>
-
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_box.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
-#include <boost/geometry/algorithms/detail/envelope/segment.hpp>
-#include <boost/geometry/algorithms/detail/normalize.hpp>
-#include <boost/geometry/algorithms/dispatch/disjoint.hpp>
-
-#include <boost/geometry/formulas/vertex_longitude.hpp>
-
-#include <boost/geometry/geometries/box.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-template <typename CS_Tag>
-struct disjoint_segment_box_sphere_or_spheroid
-{
-private:
-
- template <typename CT>
- static inline void swap(CT& lon1,
- CT& lat1,
- CT& lon2,
- CT& lat2)
- {
- std::swap(lon1, lon2);
- std::swap(lat1, lat2);
- }
-
-
-public:
-
- template <typename Segment, typename Box, typename Strategy>
- static inline bool apply(Segment const& segment,
- Box const& box,
- Strategy const& azimuth_strategy)
- {
- assert_dimension_equal<Segment, Box>();
-
- typedef typename point_type<Segment>::type segment_point_type;
- typedef typename cs_tag<Segment>::type segment_cs_type;
-
- segment_point_type p0, p1;
- geometry::detail::assign_point_from_index<0>(segment, p0);
- geometry::detail::assign_point_from_index<1>(segment, p1);
-
- // Simplest cases first
-
- // Case 1: if box contains one of segment's endpoints then they are not disjoint
- if (! disjoint_point_box(p0, box) || ! disjoint_point_box(p1, box))
- {
- return false;
- }
-
- // Case 2: disjoint if bounding boxes are disjoint
-
- typedef typename coordinate_type<segment_point_type>::type CT;
-
- segment_point_type p0_normalized =
- geometry::detail::return_normalized<segment_point_type>(p0);
- segment_point_type p1_normalized =
- geometry::detail::return_normalized<segment_point_type>(p1);
-
- CT lon1 = geometry::get_as_radian<0>(p0_normalized);
- CT lat1 = geometry::get_as_radian<1>(p0_normalized);
- CT lon2 = geometry::get_as_radian<0>(p1_normalized);
- CT lat2 = geometry::get_as_radian<1>(p1_normalized);
-
- if (lon1 > lon2)
- {
- swap(lon1, lat1, lon2, lat2);
- }
-
- //Compute alp1 outside envelope and pass it to envelope_segment_impl
- //in order for it to be used later in the algorithm
- CT alp1;
-
- azimuth_strategy.apply(lon1, lat1, lon2, lat2, alp1);
-
- geometry::model::box<segment_point_type> box_seg;
-
- geometry::detail::envelope::envelope_segment_impl<segment_cs_type>
- ::template apply<geometry::radian>(lon1, lat1,
- lon2, lat2,
- box_seg,
- azimuth_strategy,
- alp1);
- if (disjoint_box_box(box, box_seg))
- {
- return true;
- }
-
- // Case 3: test intersection by comparing angles
-
- CT a_b0, a_b1, a_b2, a_b3;
-
- CT b_lon_min = geometry::get_as_radian<geometry::min_corner, 0>(box);
- CT b_lat_min = geometry::get_as_radian<geometry::min_corner, 1>(box);
- CT b_lon_max = geometry::get_as_radian<geometry::max_corner, 0>(box);
- CT b_lat_max = geometry::get_as_radian<geometry::max_corner, 1>(box);
-
- azimuth_strategy.apply(lon1, lat1, b_lon_min, b_lat_min, a_b0);
- azimuth_strategy.apply(lon1, lat1, b_lon_max, b_lat_min, a_b1);
- azimuth_strategy.apply(lon1, lat1, b_lon_min, b_lat_max, a_b2);
- azimuth_strategy.apply(lon1, lat1, b_lon_max, b_lat_max, a_b3);
-
- bool b0 = alp1 > a_b0;
- bool b1 = alp1 > a_b1;
- bool b2 = alp1 > a_b2;
- bool b3 = alp1 > a_b3;
-
- // if not all box points on the same side of the segment then
- // there is an intersection
- if (!(b0 && b1 && b2 && b3) && (b0 || b1 || b2 || b3))
- {
- return false;
- }
-
- // Case 4: The only intersection case not covered above is when all four
- // points of the box are above (below) the segment in northern (southern)
- // hemisphere. Then we have to compute the vertex of the segment
-
- CT vertex_lat;
- CT lat_sum = lat1 + lat2;
-
- if ((b0 && b1 && b2 && b3 && lat_sum > CT(0))
- || (!(b0 && b1 && b2 && b3) && lat_sum < CT(0)))
- {
- CT b_lat_below; //latitude of box closest to equator
-
- if (lat_sum > CT(0))
- {
- vertex_lat = geometry::get_as_radian<geometry::max_corner, 1>(box_seg);
- b_lat_below = b_lat_min;
- } else {
- vertex_lat = geometry::get_as_radian<geometry::min_corner, 1>(box_seg);
- b_lat_below = b_lat_max;
- }
-
- //optimization TODO: computing the spherical longitude should suffice for
- // the majority of cases
- CT vertex_lon = geometry::formula::vertex_longitude<CT, CS_Tag>
- ::apply(lon1, lat1,
- lon2, lat2,
- vertex_lat,
- alp1,
- azimuth_strategy);
-
- // Check if the vertex point is within the band defined by the
- // minimum and maximum longitude of the box; if yes, then return
- // false if the point is above the min latitude of the box; return
- // true in all other cases
- if (vertex_lon >= b_lon_min && vertex_lon <= b_lon_max
- && std::abs(vertex_lat) > std::abs(b_lat_below))
- {
- return false;
- }
- }
-
- return true;
- }
-};
-
-struct disjoint_segment_box
-{
- template <typename Segment, typename Box, typename Strategy>
- static inline bool apply(Segment const& segment,
- Box const& box,
- Strategy const& strategy)
- {
- return strategy.apply(segment, box);
- }
-};
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Segment, typename Box, std::size_t DimensionCount>
-struct disjoint<Segment, Box, DimensionCount, segment_tag, box_tag, false>
- : detail::disjoint::disjoint_segment_box
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISJOINT_SEGMENT_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/backward_compatibility.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/backward_compatibility.hpp
deleted file mode 100644
index 5b49e571ddf..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/backward_compatibility.hpp
+++ /dev/null
@@ -1,333 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_BACKWARD_COMPATIBILITY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_BACKWARD_COMPATIBILITY_HPP
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/tags.hpp>
-
-#include <boost/geometry/algorithms/assign.hpp>
-
-#include <boost/geometry/algorithms/dispatch/distance.hpp>
-
-#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
-#include <boost/geometry/algorithms/detail/distance/point_to_geometry.hpp>
-#include <boost/geometry/algorithms/detail/distance/multipoint_to_geometry.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-template<typename Point, typename Segment, typename Strategy>
-struct point_to_segment
-{
- static inline typename strategy::distance::services::return_type
- <
- Strategy,
- Point,
- typename point_type<Segment>::type
- >::type
- apply(Point const& point, Segment const& segment, Strategy const& )
- {
- typename detail::distance::default_ps_strategy
- <
- Point,
- typename point_type<Segment>::type,
- Strategy
- >::type segment_strategy;
-
- typename point_type<Segment>::type p[2];
- geometry::detail::assign_point_from_index<0>(segment, p[0]);
- geometry::detail::assign_point_from_index<1>(segment, p[1]);
- return segment_strategy.apply(point, p[0], p[1]);
- }
-};
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// Point-segment version 1, with point-point strategy
-template <typename Point, typename Segment, typename Strategy>
-struct distance
-<
- Point, Segment, Strategy,
- point_tag, segment_tag, strategy_tag_distance_point_point,
- false
-> : detail::distance::point_to_segment<Point, Segment, Strategy>
-{};
-
-
-// Point-line version 1, where point-point strategy is specified
-template <typename Point, typename Linestring, typename Strategy>
-struct distance
-<
- Point, Linestring, Strategy,
- point_tag, linestring_tag, strategy_tag_distance_point_point,
- false
->
-{
-
- static inline typename strategy::distance::services::return_type
- <
- Strategy, Point, typename point_type<Linestring>::type
- >::type
- apply(Point const& point,
- Linestring const& linestring,
- Strategy const&)
- {
- typedef typename detail::distance::default_ps_strategy
- <
- Point,
- typename point_type<Linestring>::type,
- Strategy
- >::type ps_strategy_type;
-
- return detail::distance::point_to_range
- <
- Point, Linestring, closed, ps_strategy_type
- >::apply(point, linestring, ps_strategy_type());
- }
-};
-
-
-// Point-ring , where point-point strategy is specified
-template <typename Point, typename Ring, typename Strategy>
-struct distance
-<
- Point, Ring, Strategy,
- point_tag, ring_tag, strategy_tag_distance_point_point,
- false
->
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy, Point, typename point_type<Ring>::type
- >::type return_type;
-
- static inline return_type apply(Point const& point,
- Ring const& ring,
- Strategy const&)
- {
- typedef typename detail::distance::default_ps_strategy
- <
- Point,
- typename point_type<Ring>::type,
- Strategy
- >::type ps_strategy_type;
-
- return detail::distance::point_to_ring
- <
- Point, Ring,
- geometry::closure<Ring>::value,
- ps_strategy_type
- >::apply(point, ring, ps_strategy_type());
- }
-};
-
-
-// Point-polygon , where point-point strategy is specified
-template <typename Point, typename Polygon, typename Strategy>
-struct distance
-<
- Point, Polygon, Strategy,
- point_tag, polygon_tag, strategy_tag_distance_point_point,
- false
->
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy, Point, typename point_type<Polygon>::type
- >::type return_type;
-
- static inline return_type apply(Point const& point,
- Polygon const& polygon,
- Strategy const&)
- {
- typedef typename detail::distance::default_ps_strategy
- <
- Point,
- typename point_type<Polygon>::type,
- Strategy
- >::type ps_strategy_type;
-
- return detail::distance::point_to_polygon
- <
- Point,
- Polygon,
- geometry::closure<Polygon>::value,
- ps_strategy_type
- >::apply(point, polygon, ps_strategy_type());
- }
-};
-
-
-
-
-template
-<
- typename Point,
- typename MultiGeometry,
- typename MultiGeometryTag,
- typename Strategy
->
-struct distance
- <
- Point, MultiGeometry, Strategy,
- point_tag, MultiGeometryTag,
- strategy_tag_distance_point_point, false
- >
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy, Point, typename point_type<MultiGeometry>::type
- >::type return_type;
-
- static inline return_type apply(Point const& point,
- MultiGeometry const& multigeometry,
- Strategy const&)
- {
- typedef typename detail::distance::default_ps_strategy
- <
- Point,
- typename point_type<MultiGeometry>::type,
- Strategy
- >::type ps_strategy_type;
-
- return distance
- <
- Point, MultiGeometry, ps_strategy_type,
- point_tag, MultiGeometryTag,
- strategy_tag_distance_point_segment, false
- >::apply(point, multigeometry, ps_strategy_type());
- }
-};
-
-
-template
-<
- typename Geometry,
- typename MultiPoint,
- typename GeometryTag,
- typename Strategy
->
-struct distance
- <
- Geometry, MultiPoint, Strategy,
- GeometryTag, multi_point_tag,
- strategy_tag_distance_point_point, false
- >
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<MultiPoint>::type,
- typename point_type<Geometry>::type
- >::type return_type;
-
- static inline return_type apply(Geometry const& geometry,
- MultiPoint const& multipoint,
- Strategy const&)
- {
- typedef typename detail::distance::default_ps_strategy
- <
- typename point_type<MultiPoint>::type,
- typename point_type<Geometry>::type,
- Strategy
- >::type ps_strategy_type;
-
- return distance
- <
- Geometry, MultiPoint, ps_strategy_type,
- GeometryTag, multi_point_tag,
- strategy_tag_distance_point_segment, false
- >::apply(geometry, multipoint, ps_strategy_type());
- }
-};
-
-
-template
-<
- typename MultiPoint,
- typename MultiGeometry,
- typename MultiGeometryTag,
- typename Strategy
->
-struct distance
- <
- MultiPoint, MultiGeometry, Strategy,
- multi_point_tag, MultiGeometryTag,
- strategy_tag_distance_point_point, false
- >
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<MultiPoint>::type,
- typename point_type<MultiGeometry>::type
- >::type return_type;
-
- static inline return_type apply(MultiPoint const& multipoint,
- MultiGeometry const& multigeometry,
- Strategy const&)
- {
- typedef typename detail::distance::default_ps_strategy
- <
- typename point_type<MultiPoint>::type,
- typename point_type<MultiGeometry>::type,
- Strategy
- >::type ps_strategy_type;
-
- return distance
- <
- MultiPoint, MultiGeometry, ps_strategy_type,
- multi_point_tag, MultiGeometryTag,
- strategy_tag_distance_point_segment, false
- >::apply(multipoint, multigeometry, ps_strategy_type());
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_BACKWARD_COMPATIBILITY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/box_to_box.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/box_to_box.hpp
deleted file mode 100644
index 44778e9e067..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/box_to_box.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_BOX_TO_BOX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_BOX_TO_BOX_HPP
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/tags.hpp>
-
-#include <boost/geometry/algorithms/dispatch/distance.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Box1, typename Box2, typename Strategy>
-struct distance
- <
- Box1, Box2, Strategy, box_tag, box_tag,
- strategy_tag_distance_box_box, false
- >
-{
- static inline typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<Box1>::type,
- typename point_type<Box2>::type
- >::type
- apply(Box1 const& box1, Box2 const& box2, Strategy const& strategy)
- {
- boost::ignore_unused(strategy);
- return strategy.apply(box1, box2);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_BOX_TO_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/default_strategies.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/default_strategies.hpp
deleted file mode 100644
index a01ace2b585..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/default_strategies.hpp
+++ /dev/null
@@ -1,137 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_DEFAULT_STRATEGIES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_DEFAULT_STRATEGIES_HPP
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/reverse_dispatch.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-
-// Helper metafunction for default strategy retrieval
-template
-<
- typename Geometry1,
- typename Geometry2 = Geometry1,
- typename Tag1 = typename tag_cast
- <
- typename tag<Geometry1>::type, pointlike_tag
- >::type,
- typename Tag2 = typename tag_cast
- <
- typename tag<Geometry2>::type, pointlike_tag
- >::type,
- bool Reverse = geometry::reverse_dispatch<Geometry1, Geometry2>::type::value
->
-struct default_strategy
- : strategy::distance::services::default_strategy
- <
- point_tag, segment_tag,
- typename point_type<Geometry1>::type,
- typename point_type<Geometry2>::type
- >
-{};
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Tag1,
- typename Tag2
->
-struct default_strategy<Geometry1, Geometry2, Tag1, Tag2, true>
- : default_strategy<Geometry2, Geometry1, Tag2, Tag1, false>
-{};
-
-
-template <typename Pointlike1, typename Pointlike2>
-struct default_strategy
- <
- Pointlike1, Pointlike2,
- pointlike_tag, pointlike_tag, false
- > : strategy::distance::services::default_strategy
- <
- point_tag, point_tag,
- typename point_type<Pointlike1>::type,
- typename point_type<Pointlike2>::type
- >
-{};
-
-
-template <typename Pointlike, typename Box>
-struct default_strategy<Pointlike, Box, pointlike_tag, box_tag, false>
- : strategy::distance::services::default_strategy
- <
- point_tag, box_tag,
- typename point_type<Pointlike>::type,
- typename point_type<Box>::type
- >
-{};
-
-
-template <typename Box1, typename Box2>
-struct default_strategy<Box1, Box2, box_tag, box_tag, false>
- : strategy::distance::services::default_strategy
- <
- box_tag, box_tag,
- typename point_type<Box1>::type,
- typename point_type<Box2>::type
- >
-{};
-
-
-
-// Helper metafunction for default point-segment strategy retrieval
-template <typename Geometry1, typename Geometry2, typename Strategy>
-struct default_ps_strategy
- : strategy::distance::services::default_strategy
- <
- point_tag, segment_tag,
- typename point_type<Geometry1>::type,
- typename point_type<Geometry2>::type,
- typename cs_tag<typename point_type<Geometry1>::type>::type,
- typename cs_tag<typename point_type<Geometry2>::type>::type,
- Strategy
- >
-{};
-
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_DEFAULT_STRATEGIES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/geometry_to_segment_or_box.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/geometry_to_segment_or_box.hpp
deleted file mode 100644
index d6de7cac91b..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/geometry_to_segment_or_box.hpp
+++ /dev/null
@@ -1,464 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_GEOMETRY_TO_SEGMENT_OR_BOX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_GEOMETRY_TO_SEGMENT_OR_BOX_HPP
-
-#include <iterator>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/tags.hpp>
-
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/intersects.hpp>
-#include <boost/geometry/algorithms/num_points.hpp>
-
-#include <boost/geometry/iterators/point_iterator.hpp>
-#include <boost/geometry/iterators/segment_iterator.hpp>
-
-#include <boost/geometry/algorithms/dispatch/distance.hpp>
-
-#include <boost/geometry/algorithms/detail/closest_feature/geometry_to_range.hpp>
-#include <boost/geometry/algorithms/detail/closest_feature/point_to_range.hpp>
-
-#include <boost/geometry/algorithms/detail/distance/is_comparable.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-// closure of segment or box point range
-template
-<
- typename SegmentOrBox,
- typename Tag = typename tag<SegmentOrBox>::type
->
-struct segment_or_box_point_range_closure
- : not_implemented<SegmentOrBox>
-{};
-
-template <typename Segment>
-struct segment_or_box_point_range_closure<Segment, segment_tag>
-{
- static const closure_selector value = closed;
-};
-
-template <typename Box>
-struct segment_or_box_point_range_closure<Box, box_tag>
-{
- static const closure_selector value = open;
-};
-
-
-
-template
-<
- typename Geometry,
- typename SegmentOrBox,
- typename Strategy,
- typename Tag = typename tag<Geometry>::type
->
-class geometry_to_segment_or_box
-{
-private:
- typedef typename point_type<SegmentOrBox>::type segment_or_box_point;
-
- typedef typename strategy::distance::services::comparable_type
- <
- Strategy
- >::type comparable_strategy;
-
- typedef detail::closest_feature::point_to_point_range
- <
- typename point_type<Geometry>::type,
- std::vector<segment_or_box_point>,
- segment_or_box_point_range_closure<SegmentOrBox>::value,
- comparable_strategy
- > point_to_point_range;
-
- typedef detail::closest_feature::geometry_to_range geometry_to_range;
-
- typedef typename strategy::distance::services::return_type
- <
- comparable_strategy,
- typename point_type<Geometry>::type,
- segment_or_box_point
- >::type comparable_return_type;
-
-
- // assign the new minimum value for an iterator of the point range
- // of a segment or a box
- template
- <
- typename SegOrBox,
- typename SegOrBoxTag = typename tag<SegOrBox>::type
- >
- struct assign_new_min_iterator
- : not_implemented<SegOrBox>
- {};
-
- template <typename Segment>
- struct assign_new_min_iterator<Segment, segment_tag>
- {
- template <typename Iterator>
- static inline void apply(Iterator&, Iterator)
- {
- }
- };
-
- template <typename Box>
- struct assign_new_min_iterator<Box, box_tag>
- {
- template <typename Iterator>
- static inline void apply(Iterator& it_min, Iterator it)
- {
- it_min = it;
- }
- };
-
-
- // assign the points of a segment or a box to a range
- template
- <
- typename SegOrBox,
- typename PointRange,
- typename SegOrBoxTag = typename tag<SegOrBox>::type
- >
- struct assign_segment_or_box_points
- {};
-
- template <typename Segment, typename PointRange>
- struct assign_segment_or_box_points<Segment, PointRange, segment_tag>
- {
- static inline void apply(Segment const& segment, PointRange& range)
- {
- detail::assign_point_from_index<0>(segment, range[0]);
- detail::assign_point_from_index<1>(segment, range[1]);
- }
- };
-
- template <typename Box, typename PointRange>
- struct assign_segment_or_box_points<Box, PointRange, box_tag>
- {
- static inline void apply(Box const& box, PointRange& range)
- {
- detail::assign_box_corners_oriented<true>(box, range);
- }
- };
-
-
-public:
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<Geometry>::type,
- segment_or_box_point
- >::type return_type;
-
- static inline return_type apply(Geometry const& geometry,
- SegmentOrBox const& segment_or_box,
- Strategy const& strategy,
- bool check_intersection = true)
- {
- typedef geometry::point_iterator<Geometry const> point_iterator_type;
- typedef geometry::segment_iterator
- <
- Geometry const
- > segment_iterator_type;
-
- typedef typename boost::range_const_iterator
- <
- std::vector<segment_or_box_point>
- >::type seg_or_box_const_iterator;
-
- typedef assign_new_min_iterator<SegmentOrBox> assign_new_value;
-
-
- if (check_intersection
- && geometry::intersects(geometry, segment_or_box))
- {
- return 0;
- }
-
- comparable_strategy cstrategy =
- strategy::distance::services::get_comparable
- <
- Strategy
- >::apply(strategy);
-
- // get all points of the segment or the box
- std::vector<segment_or_box_point>
- seg_or_box_points(geometry::num_points(segment_or_box));
-
- assign_segment_or_box_points
- <
- SegmentOrBox,
- std::vector<segment_or_box_point>
- >::apply(segment_or_box, seg_or_box_points);
-
- // consider all distances of the points in the geometry to the
- // segment or box
- comparable_return_type cd_min1(0);
- point_iterator_type pit_min;
- seg_or_box_const_iterator it_min1 = boost::const_begin(seg_or_box_points);
- seg_or_box_const_iterator it_min2 = it_min1;
- ++it_min2;
- bool first = true;
-
- for (point_iterator_type pit = points_begin(geometry);
- pit != points_end(geometry); ++pit, first = false)
- {
- comparable_return_type cd;
- std::pair
- <
- seg_or_box_const_iterator, seg_or_box_const_iterator
- > it_pair
- = point_to_point_range::apply(*pit,
- boost::const_begin(seg_or_box_points),
- boost::const_end(seg_or_box_points),
- cstrategy,
- cd);
-
- if (first || cd < cd_min1)
- {
- cd_min1 = cd;
- pit_min = pit;
- assign_new_value::apply(it_min1, it_pair.first);
- assign_new_value::apply(it_min2, it_pair.second);
- }
- }
-
- // consider all distances of the points in the segment or box to the
- // segments of the geometry
- comparable_return_type cd_min2(0);
- segment_iterator_type sit_min;
- seg_or_box_const_iterator it_min;
-
- first = true;
- for (seg_or_box_const_iterator it = boost::const_begin(seg_or_box_points);
- it != boost::const_end(seg_or_box_points); ++it, first = false)
- {
- comparable_return_type cd;
- segment_iterator_type sit
- = geometry_to_range::apply(*it,
- segments_begin(geometry),
- segments_end(geometry),
- cstrategy,
- cd);
-
- if (first || cd < cd_min2)
- {
- cd_min2 = cd;
- it_min = it;
- sit_min = sit;
- }
- }
-
- if (BOOST_GEOMETRY_CONDITION(is_comparable<Strategy>::value))
- {
- return (std::min)(cd_min1, cd_min2);
- }
-
- if (cd_min1 < cd_min2)
- {
- return strategy.apply(*pit_min, *it_min1, *it_min2);
- }
- else
- {
- return dispatch::distance
- <
- segment_or_box_point,
- typename std::iterator_traits
- <
- segment_iterator_type
- >::value_type,
- Strategy
- >::apply(*it_min, *sit_min, strategy);
- }
- }
-
-
- static inline return_type
- apply(SegmentOrBox const& segment_or_box, Geometry const& geometry,
- Strategy const& strategy, bool check_intersection = true)
- {
- return apply(geometry, segment_or_box, strategy, check_intersection);
- }
-};
-
-
-
-template <typename MultiPoint, typename SegmentOrBox, typename Strategy>
-class geometry_to_segment_or_box
- <
- MultiPoint, SegmentOrBox, Strategy, multi_point_tag
- >
-{
-private:
- typedef detail::closest_feature::geometry_to_range base_type;
-
- typedef typename boost::range_iterator
- <
- MultiPoint const
- >::type iterator_type;
-
- typedef detail::closest_feature::geometry_to_range geometry_to_range;
-
-public:
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<SegmentOrBox>::type,
- typename point_type<MultiPoint>::type
- >::type return_type;
-
- static inline return_type apply(MultiPoint const& multipoint,
- SegmentOrBox const& segment_or_box,
- Strategy const& strategy)
- {
- namespace sds = strategy::distance::services;
-
- typename sds::return_type
- <
- typename sds::comparable_type<Strategy>::type,
- typename point_type<SegmentOrBox>::type,
- typename point_type<MultiPoint>::type
- >::type cd_min;
-
- iterator_type it_min
- = geometry_to_range::apply(segment_or_box,
- boost::begin(multipoint),
- boost::end(multipoint),
- sds::get_comparable
- <
- Strategy
- >::apply(strategy),
- cd_min);
-
- return
- is_comparable<Strategy>::value
- ?
- cd_min
- :
- dispatch::distance
- <
- typename point_type<MultiPoint>::type,
- SegmentOrBox,
- Strategy
- >::apply(*it_min, segment_or_box, strategy);
- }
-};
-
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Linear, typename Segment, typename Strategy>
-struct distance
- <
- Linear, Segment, Strategy, linear_tag, segment_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::geometry_to_segment_or_box<Linear, Segment, Strategy>
-{};
-
-
-template <typename Areal, typename Segment, typename Strategy>
-struct distance
- <
- Areal, Segment, Strategy, areal_tag, segment_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::geometry_to_segment_or_box<Areal, Segment, Strategy>
-{};
-
-
-template <typename Segment, typename Areal, typename Strategy>
-struct distance
- <
- Segment, Areal, Strategy, segment_tag, areal_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::geometry_to_segment_or_box<Areal, Segment, Strategy>
-{};
-
-
-template <typename Linear, typename Box, typename Strategy>
-struct distance
- <
- Linear, Box, Strategy, linear_tag, box_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::geometry_to_segment_or_box
- <
- Linear, Box, Strategy
- >
-{};
-
-
-template <typename Areal, typename Box, typename Strategy>
-struct distance
- <
- Areal, Box, Strategy, areal_tag, box_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::geometry_to_segment_or_box<Areal, Box, Strategy>
-{};
-
-
-template <typename MultiPoint, typename Segment, typename Strategy>
-struct distance
- <
- MultiPoint, Segment, Strategy,
- multi_point_tag, segment_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::geometry_to_segment_or_box
- <
- MultiPoint, Segment, Strategy
- >
-{};
-
-
-template <typename MultiPoint, typename Box, typename Strategy>
-struct distance
- <
- MultiPoint, Box, Strategy,
- multi_point_tag, box_tag,
- strategy_tag_distance_point_box, false
- > : detail::distance::geometry_to_segment_or_box
- <
- MultiPoint, Box, Strategy
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_GEOMETRY_TO_SEGMENT_OR_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/implementation.hpp
deleted file mode 100644
index 7c009f4d79d..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/implementation.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_IMPLEMENTATION_HPP
-
-// the implementation details
-#include <boost/geometry/algorithms/detail/distance/point_to_geometry.hpp>
-#include <boost/geometry/algorithms/detail/distance/multipoint_to_geometry.hpp>
-#include <boost/geometry/algorithms/detail/distance/linear_to_linear.hpp>
-#include <boost/geometry/algorithms/detail/distance/linear_or_areal_to_areal.hpp>
-#include <boost/geometry/algorithms/detail/distance/geometry_to_segment_or_box.hpp>
-#include <boost/geometry/algorithms/detail/distance/segment_to_segment.hpp>
-#include <boost/geometry/algorithms/detail/distance/segment_to_box.hpp>
-#include <boost/geometry/algorithms/detail/distance/box_to_box.hpp>
-
-#include <boost/geometry/algorithms/detail/distance/backward_compatibility.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/interface.hpp
deleted file mode 100644
index 53d24d99207..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/interface.hpp
+++ /dev/null
@@ -1,403 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-// Copyright (c) 2014 Samuel Debionne, Grenoble, France.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_INTERFACE_HPP
-
-#include <boost/concept_check.hpp>
-
-#include <boost/mpl/always.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/vector.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/default_distance_result.hpp>
-#include <boost/geometry/strategies/distance_result.hpp>
-
-#include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
-#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
-
-#include <boost/geometry/algorithms/dispatch/distance.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// If reversal is needed, perform it
-template
-<
- typename Geometry1, typename Geometry2, typename Strategy,
- typename Tag1, typename Tag2, typename StrategyTag
->
-struct distance
-<
- Geometry1, Geometry2, Strategy,
- Tag1, Tag2, StrategyTag,
- true
->
- : distance<Geometry2, Geometry1, Strategy, Tag2, Tag1, StrategyTag, false>
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<Geometry2>::type,
- typename point_type<Geometry1>::type
- >::type return_type;
-
- static inline return_type apply(
- Geometry1 const& g1,
- Geometry2 const& g2,
- Strategy const& strategy)
- {
- return distance
- <
- Geometry2, Geometry1, Strategy,
- Tag2, Tag1, StrategyTag,
- false
- >::apply(g2, g1, strategy);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy
-{
-
-struct distance
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline typename distance_result<Geometry1, Geometry2, Strategy>::type
- apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return dispatch::distance
- <
- Geometry1, Geometry2, Strategy
- >::apply(geometry1, geometry2, strategy);
- }
-
- template <typename Geometry1, typename Geometry2>
- static inline
- typename distance_result<Geometry1, Geometry2, default_strategy>::type
- apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- default_strategy)
- {
- typedef typename detail::distance::default_strategy
- <
- Geometry1, Geometry2
- >::type strategy_type;
-
- return dispatch::distance
- <
- Geometry1, Geometry2, strategy_type
- >::apply(geometry1, geometry2, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant
-{
-
-
-template <typename Geometry1, typename Geometry2>
-struct distance
-{
- template <typename Strategy>
- static inline typename distance_result<Geometry1, Geometry2, Strategy>::type
- apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return
- resolve_strategy::distance::apply(geometry1, geometry2, strategy);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct distance<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename Strategy>
- struct visitor: static_visitor
- <
- typename distance_result
- <
- variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Geometry2,
- Strategy
- >::type
- >
- {
- Geometry2 const& m_geometry2;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2,
- Strategy const& strategy)
- : m_geometry2(geometry2),
- m_strategy(strategy)
- {}
-
- template <typename Geometry1>
- typename distance_result<Geometry1, Geometry2, Strategy>::type
- operator()(Geometry1 const& geometry1) const
- {
- return distance
- <
- Geometry1,
- Geometry2
- >::template apply
- <
- Strategy
- >(geometry1, m_geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline typename distance_result
- <
- variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Geometry2,
- Strategy
- >::type
- apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry2, strategy), geometry1);
- }
-};
-
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct distance<Geometry1, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Strategy>
- struct visitor: static_visitor
- <
- typename distance_result
- <
- Geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Strategy
- >::type
- >
- {
- Geometry1 const& m_geometry1;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1,
- Strategy const& strategy)
- : m_geometry1(geometry1),
- m_strategy(strategy)
- {}
-
- template <typename Geometry2>
- typename distance_result<Geometry1, Geometry2, Strategy>::type
- operator()(Geometry2 const& geometry2) const
- {
- return distance
- <
- Geometry1,
- Geometry2
- >::template apply
- <
- Strategy
- >(m_geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline typename distance_result
- <
- Geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Strategy
- >::type
- apply(
- Geometry1 const& geometry1,
- const variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry1, strategy), geometry2);
- }
-};
-
-
-template
-<
- BOOST_VARIANT_ENUM_PARAMS(typename T1),
- BOOST_VARIANT_ENUM_PARAMS(typename T2)
->
-struct distance
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
- >
-{
- template <typename Strategy>
- struct visitor: static_visitor
- <
- typename distance_result
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>,
- Strategy
- >::type
- >
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Geometry1, typename Geometry2>
- typename distance_result<Geometry1, Geometry2, Strategy>::type
- operator()(Geometry1 const& geometry1, Geometry2 const& geometry2) const
- {
- return distance
- <
- Geometry1,
- Geometry2
- >::template apply
- <
- Strategy
- >(geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline typename distance_result
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>,
- Strategy
- >::type
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), geometry1, geometry2);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_calc2{distance} \brief_strategy
-\ingroup distance
-\details
-\details \details_calc{area}. \brief_strategy. \details_strategy_reasons
-
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Strategy \tparam_strategy{Distance}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param strategy \param_strategy{distance}
-\return \return_calc{distance}
-\note The strategy can be a point-point strategy. In case of distance point-line/point-polygon
- it may also be a point-segment strategy.
-
-\qbk{distinguish,with strategy}
-
-\qbk{
-[heading Available Strategies]
-\* [link geometry.reference.strategies.strategy_distance_pythagoras Pythagoras (cartesian)]
-\* [link geometry.reference.strategies.strategy_distance_haversine Haversine (spherical)]
-\* [link geometry.reference.strategies.strategy_distance_cross_track Cross track (spherical\, point-to-segment)]
-\* [link geometry.reference.strategies.strategy_distance_projected_point Projected point (cartesian\, point-to-segment)]
-\* more (currently extensions): Vincenty\, Andoyer (geographic)
-}
- */
-
-/*
-Note, in case of a Compilation Error:
-if you get:
- - "Failed to specialize function template ..."
- - "error: no matching function for call to ..."
-for distance, it is probably so that there is no specialization
-for return_type<...> for your strategy.
-*/
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline typename distance_result<Geometry1, Geometry2, Strategy>::type
-distance(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- detail::throw_on_empty_input(geometry1);
- detail::throw_on_empty_input(geometry2);
-
- return resolve_variant::distance
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, strategy);
-}
-
-
-/*!
-\brief \brief_calc2{distance}
-\ingroup distance
-\details The default strategy is used, corresponding to the coordinate system of the geometries
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return \return_calc{distance}
-
-\qbk{[include reference/algorithms/distance.qbk]}
- */
-template <typename Geometry1, typename Geometry2>
-inline typename default_distance_result<Geometry1, Geometry2>::type
-distance(Geometry1 const& geometry1,
- Geometry2 const& geometry2)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- return geometry::distance(geometry1, geometry2, default_strategy());
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/is_comparable.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/is_comparable.hpp
deleted file mode 100644
index d13cc6c7404..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/is_comparable.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHS_DETAIL_DISTANCE_IS_COMPARABLE_HPP
-#define BOOST_GEOMETRY_ALGORITHS_DETAIL_DISTANCE_IS_COMPARABLE_HPP
-
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-// metafunction to determine is a strategy is comparable or not
-template <typename Strategy>
-struct is_comparable
- : boost::is_same
- <
- Strategy,
- typename strategy::distance::services::comparable_type
- <
- Strategy
- >::type
- >
-{};
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHS_DETAIL_DISTANCE_IS_COMPARABLE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/iterator_selector.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/iterator_selector.hpp
deleted file mode 100644
index 363ec465a4d..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/iterator_selector.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHS_DETAIL_DISTANCE_ITERATOR_SELECTOR_HPP
-#define BOOST_GEOMETRY_ALGORITHS_DETAIL_DISTANCE_ITERATOR_SELECTOR_HPP
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/iterators/point_iterator.hpp>
-#include <boost/geometry/iterators/segment_iterator.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-// class to choose between point_iterator and segment_iterator
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct iterator_selector
-{
- typedef geometry::segment_iterator<Geometry> iterator_type;
-
- static inline iterator_type begin(Geometry& geometry)
- {
- return segments_begin(geometry);
- }
-
- static inline iterator_type end(Geometry& geometry)
- {
- return segments_end(geometry);
- }
-};
-
-template <typename MultiPoint>
-struct iterator_selector<MultiPoint, multi_point_tag>
-{
- typedef geometry::point_iterator<MultiPoint> iterator_type;
-
- static inline iterator_type begin(MultiPoint& multipoint)
- {
- return points_begin(multipoint);
- }
-
- static inline iterator_type end(MultiPoint& multipoint)
- {
- return points_end(multipoint);
- }
-};
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHS_DETAIL_DISTANCE_ITERATOR_SELECTOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/linear_or_areal_to_areal.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/linear_or_areal_to_areal.hpp
deleted file mode 100644
index b63104da7d0..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/linear_or_areal_to_areal.hpp
+++ /dev/null
@@ -1,147 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_LINEAR_OR_AREAL_TO_AREAL_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_LINEAR_OR_AREAL_TO_AREAL_HPP
-
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-
-#include <boost/geometry/algorithms/intersects.hpp>
-
-#include <boost/geometry/algorithms/detail/distance/linear_to_linear.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-template <typename Linear, typename Areal, typename Strategy>
-struct linear_to_areal
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<Linear>::type,
- typename point_type<Areal>::type
- >::type return_type;
-
- static inline return_type apply(Linear const& linear,
- Areal const& areal,
- Strategy const& strategy)
- {
- if ( geometry::intersects(linear, areal) )
- {
- return 0;
- }
-
- return linear_to_linear
- <
- Linear, Areal, Strategy
- >::apply(linear, areal, strategy, false);
- }
-
-
- static inline return_type apply(Areal const& areal,
- Linear const& linear,
- Strategy const& strategy)
- {
- return apply(linear, areal, strategy);
- }
-};
-
-
-template <typename Areal1, typename Areal2, typename Strategy>
-struct areal_to_areal
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<Areal1>::type,
- typename point_type<Areal2>::type
- >::type return_type;
-
- static inline return_type apply(Areal1 const& areal1,
- Areal2 const& areal2,
- Strategy const& strategy)
- {
- if ( geometry::intersects(areal1, areal2) )
- {
- return 0;
- }
-
- return linear_to_linear
- <
- Areal1, Areal2, Strategy
- >::apply(areal1, areal2, strategy, false);
- }
-};
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Linear, typename Areal, typename Strategy>
-struct distance
- <
- Linear, Areal, Strategy,
- linear_tag, areal_tag,
- strategy_tag_distance_point_segment, false
- >
- : detail::distance::linear_to_areal
- <
- Linear, Areal, Strategy
- >
-{};
-
-
-template <typename Areal, typename Linear, typename Strategy>
-struct distance
- <
- Areal, Linear, Strategy,
- areal_tag, linear_tag,
- strategy_tag_distance_point_segment, false
- >
- : detail::distance::linear_to_areal
- <
- Linear, Areal, Strategy
- >
-{};
-
-
-template <typename Areal1, typename Areal2, typename Strategy>
-struct distance
- <
- Areal1, Areal2, Strategy,
- areal_tag, areal_tag,
- strategy_tag_distance_point_segment, false
- >
- : detail::distance::areal_to_areal
- <
- Areal1, Areal2, Strategy
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_LINEAR_OR_AREAL_TO_AREAL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/linear_to_linear.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/linear_to_linear.hpp
deleted file mode 100644
index e44b3728422..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/linear_to_linear.hpp
+++ /dev/null
@@ -1,123 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_LINEAR_TO_LINEAR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_LINEAR_TO_LINEAR_HPP
-
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-
-#include <boost/geometry/iterators/point_iterator.hpp>
-#include <boost/geometry/iterators/segment_iterator.hpp>
-
-#include <boost/geometry/algorithms/num_points.hpp>
-#include <boost/geometry/algorithms/num_segments.hpp>
-
-#include <boost/geometry/algorithms/dispatch/distance.hpp>
-
-#include <boost/geometry/algorithms/detail/distance/range_to_geometry_rtree.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-template <typename Linear1, typename Linear2, typename Strategy>
-struct linear_to_linear
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<Linear1>::type,
- typename point_type<Linear2>::type
- >::type return_type;
-
- static inline return_type apply(Linear1 const& linear1,
- Linear2 const& linear2,
- Strategy const& strategy,
- bool = false)
- {
- if (geometry::num_points(linear1) == 1)
- {
- return dispatch::distance
- <
- typename point_type<Linear1>::type,
- Linear2,
- Strategy
- >::apply(*points_begin(linear1), linear2, strategy);
- }
-
- if (geometry::num_points(linear2) == 1)
- {
- return dispatch::distance
- <
- typename point_type<Linear2>::type,
- Linear1,
- Strategy
- >::apply(*points_begin(linear2), linear1, strategy);
- }
-
- if (geometry::num_segments(linear2) < geometry::num_segments(linear1))
- {
- return point_or_segment_range_to_geometry_rtree
- <
- geometry::segment_iterator<Linear2 const>,
- Linear1,
- Strategy
- >::apply(geometry::segments_begin(linear2),
- geometry::segments_end(linear2),
- linear1,
- strategy);
-
- }
-
- return point_or_segment_range_to_geometry_rtree
- <
- geometry::segment_iterator<Linear1 const>,
- Linear2,
- Strategy
- >::apply(geometry::segments_begin(linear1),
- geometry::segments_end(linear1),
- linear2,
- strategy);
- }
-};
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Linear1, typename Linear2, typename Strategy>
-struct distance
- <
- Linear1, Linear2, Strategy,
- linear_tag, linear_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::linear_to_linear
- <
- Linear1, Linear2, Strategy
- >
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_LINEAR_TO_LINEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/multipoint_to_geometry.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/multipoint_to_geometry.hpp
deleted file mode 100644
index 8f1b33cfb22..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/multipoint_to_geometry.hpp
+++ /dev/null
@@ -1,240 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_MULTIPOINT_TO_GEOMETRY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_MULTIPOINT_TO_GEOMETRY_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/tags.hpp>
-
-#include <boost/geometry/algorithms/covered_by.hpp>
-
-#include <boost/geometry/algorithms/dispatch/distance.hpp>
-
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-#include <boost/geometry/algorithms/detail/distance/range_to_geometry_rtree.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-template <typename MultiPoint1, typename MultiPoint2, typename Strategy>
-struct multipoint_to_multipoint
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<MultiPoint1>::type,
- typename point_type<MultiPoint2>::type
- >::type return_type;
-
- static inline return_type apply(MultiPoint1 const& multipoint1,
- MultiPoint2 const& multipoint2,
- Strategy const& strategy)
- {
- if (boost::size(multipoint2) < boost::size(multipoint1))
-
- {
- return point_or_segment_range_to_geometry_rtree
- <
- typename boost::range_iterator<MultiPoint2 const>::type,
- MultiPoint1,
- Strategy
- >::apply(boost::begin(multipoint2),
- boost::end(multipoint2),
- multipoint1,
- strategy);
- }
-
- return point_or_segment_range_to_geometry_rtree
- <
- typename boost::range_iterator<MultiPoint1 const>::type,
- MultiPoint2,
- Strategy
- >::apply(boost::begin(multipoint1),
- boost::end(multipoint1),
- multipoint2,
- strategy);
- }
-};
-
-
-template <typename MultiPoint, typename Linear, typename Strategy>
-struct multipoint_to_linear
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<MultiPoint>::type,
- typename point_type<Linear>::type
- >::type return_type;
-
- static inline return_type apply(MultiPoint const& multipoint,
- Linear const& linear,
- Strategy const& strategy)
- {
- return detail::distance::point_or_segment_range_to_geometry_rtree
- <
- typename boost::range_iterator<MultiPoint const>::type,
- Linear,
- Strategy
- >::apply(boost::begin(multipoint),
- boost::end(multipoint),
- linear,
- strategy);
- }
-
- static inline return_type apply(Linear const& linear,
- MultiPoint const& multipoint,
- Strategy const& strategy)
- {
- return apply(multipoint, linear, strategy);
- }
-};
-
-
-template <typename MultiPoint, typename Areal, typename Strategy>
-class multipoint_to_areal
-{
-private:
- struct not_covered_by_areal
- {
- not_covered_by_areal(Areal const& areal)
- : m_areal(areal)
- {}
-
- template <typename Point>
- inline bool apply(Point const& point) const
- {
- return !geometry::covered_by(point, m_areal);
- }
-
- Areal const& m_areal;
- };
-
-public:
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<MultiPoint>::type,
- typename point_type<Areal>::type
- >::type return_type;
-
- static inline return_type apply(MultiPoint const& multipoint,
- Areal const& areal,
- Strategy const& strategy)
- {
- not_covered_by_areal predicate(areal);
-
- if (check_iterator_range
- <
- not_covered_by_areal, false
- >::apply(boost::begin(multipoint),
- boost::end(multipoint),
- predicate))
- {
- return detail::distance::point_or_segment_range_to_geometry_rtree
- <
- typename boost::range_iterator<MultiPoint const>::type,
- Areal,
- Strategy
- >::apply(boost::begin(multipoint),
- boost::end(multipoint),
- areal,
- strategy);
- }
- return 0;
- }
-
- static inline return_type apply(Areal const& areal,
- MultiPoint const& multipoint,
- Strategy const& strategy)
- {
- return apply(multipoint, areal, strategy);
- }
-};
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename MultiPoint1, typename MultiPoint2, typename Strategy>
-struct distance
- <
- MultiPoint1, MultiPoint2, Strategy,
- multi_point_tag, multi_point_tag,
- strategy_tag_distance_point_point, false
- > : detail::distance::multipoint_to_multipoint
- <
- MultiPoint1, MultiPoint2, Strategy
- >
-{};
-
-
-template <typename MultiPoint, typename Linear, typename Strategy>
-struct distance
- <
- MultiPoint, Linear, Strategy, multi_point_tag, linear_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::multipoint_to_linear<MultiPoint, Linear, Strategy>
-{};
-
-
-template <typename Linear, typename MultiPoint, typename Strategy>
-struct distance
- <
- Linear, MultiPoint, Strategy, linear_tag, multi_point_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::multipoint_to_linear<MultiPoint, Linear, Strategy>
-{};
-
-
-template <typename MultiPoint, typename Areal, typename Strategy>
-struct distance
- <
- MultiPoint, Areal, Strategy, multi_point_tag, areal_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::multipoint_to_areal<MultiPoint, Areal, Strategy>
-{};
-
-
-template <typename Areal, typename MultiPoint, typename Strategy>
-struct distance
- <
- Areal, MultiPoint, Strategy, areal_tag, multi_point_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::multipoint_to_areal<MultiPoint, Areal, Strategy>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_MULTIPOINT_TO_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/point_to_geometry.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/point_to_geometry.hpp
deleted file mode 100644
index 9596799cb27..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/point_to_geometry.hpp
+++ /dev/null
@@ -1,518 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_POINT_TO_GEOMETRY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_POINT_TO_GEOMETRY_HPP
-
-#include <iterator>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/tags.hpp>
-
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/algorithms/within.hpp>
-
-#include <boost/geometry/algorithms/detail/closest_feature/geometry_to_range.hpp>
-#include <boost/geometry/algorithms/detail/closest_feature/point_to_range.hpp>
-#include <boost/geometry/algorithms/detail/distance/is_comparable.hpp>
-#include <boost/geometry/algorithms/detail/distance/iterator_selector.hpp>
-
-#include <boost/geometry/algorithms/dispatch/distance.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-template <typename P1, typename P2, typename Strategy>
-struct point_to_point
-{
- static inline
- typename strategy::distance::services::return_type<Strategy, P1, P2>::type
- apply(P1 const& p1, P2 const& p2, Strategy const& strategy)
- {
- boost::ignore_unused(strategy);
- return strategy.apply(p1, p2);
- }
-};
-
-
-template
-<
- typename Point,
- typename Range,
- closure_selector Closure,
- typename Strategy
->
-class point_to_range
-{
-private:
- typedef typename strategy::distance::services::comparable_type
- <
- Strategy
- >::type comparable_strategy;
-
- typedef detail::closest_feature::point_to_point_range
- <
- Point, Range, Closure, comparable_strategy
- > point_to_point_range;
-
-public:
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- Point,
- typename boost::range_value<Range>::type
- >::type return_type;
-
- static inline return_type apply(Point const& point, Range const& range,
- Strategy const& strategy)
- {
- return_type const zero = return_type(0);
-
- if (boost::size(range) == 0)
- {
- return zero;
- }
-
- namespace sds = strategy::distance::services;
-
- typename sds::return_type
- <
- comparable_strategy,
- Point,
- typename point_type<Range>::type
- >::type cd_min;
-
- std::pair
- <
- typename boost::range_iterator<Range const>::type,
- typename boost::range_iterator<Range const>::type
- > it_pair
- = point_to_point_range::apply(point,
- boost::begin(range),
- boost::end(range),
- sds::get_comparable
- <
- Strategy
- >::apply(strategy),
- cd_min);
-
- return
- is_comparable<Strategy>::value
- ?
- cd_min
- :
- strategy.apply(point, *it_pair.first, *it_pair.second);
- }
-};
-
-
-template
-<
- typename Point,
- typename Ring,
- closure_selector Closure,
- typename Strategy
->
-struct point_to_ring
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy, Point, typename point_type<Ring>::type
- >::type return_type;
-
- static inline return_type apply(Point const& point,
- Ring const& ring,
- Strategy const& strategy)
- {
- if (geometry::within(point, ring))
- {
- return return_type(0);
- }
-
- return point_to_range
- <
- Point, Ring, closure<Ring>::value, Strategy
- >::apply(point, ring, strategy);
- }
-};
-
-
-template
-<
- typename Point,
- typename Polygon,
- closure_selector Closure,
- typename Strategy
->
-class point_to_polygon
-{
-public:
- typedef typename strategy::distance::services::return_type
- <
- Strategy, Point, typename point_type<Polygon>::type
- >::type return_type;
-
-private:
- typedef point_to_range
- <
- Point, typename ring_type<Polygon>::type, Closure, Strategy
- > per_ring;
-
- struct distance_to_interior_rings
- {
- template <typename InteriorRingIterator>
- static inline return_type apply(Point const& point,
- InteriorRingIterator first,
- InteriorRingIterator last,
- Strategy const& strategy)
- {
- for (InteriorRingIterator it = first; it != last; ++it)
- {
- if (geometry::within(point, *it))
- {
- // the point is inside a polygon hole, so its distance
- // to the polygon its distance to the polygon's
- // hole boundary
- return per_ring::apply(point, *it, strategy);
- }
- }
- return 0;
- }
-
- template <typename InteriorRings>
- static inline return_type apply(Point const& point,
- InteriorRings const& interior_rings,
- Strategy const& strategy)
- {
- return apply(point,
- boost::begin(interior_rings),
- boost::end(interior_rings),
- strategy);
- }
- };
-
-
-public:
- static inline return_type apply(Point const& point,
- Polygon const& polygon,
- Strategy const& strategy)
- {
- if (!geometry::covered_by(point, exterior_ring(polygon)))
- {
- // the point is outside the exterior ring, so its distance
- // to the polygon is its distance to the polygon's exterior ring
- return per_ring::apply(point, exterior_ring(polygon), strategy);
- }
-
- // Check interior rings
- return distance_to_interior_rings::apply(point,
- interior_rings(polygon),
- strategy);
- }
-};
-
-
-template
-<
- typename Point,
- typename MultiGeometry,
- typename Strategy,
- bool CheckCoveredBy = boost::is_same
- <
- typename tag<MultiGeometry>::type, multi_polygon_tag
- >::value
->
-class point_to_multigeometry
-{
-private:
- typedef detail::closest_feature::geometry_to_range geometry_to_range;
-
-public:
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- Point,
- typename point_type<MultiGeometry>::type
- >::type return_type;
-
- static inline return_type apply(Point const& point,
- MultiGeometry const& multigeometry,
- Strategy const& strategy)
- {
- typedef iterator_selector<MultiGeometry const> selector_type;
-
- namespace sds = strategy::distance::services;
-
- typename sds::return_type
- <
- typename sds::comparable_type<Strategy>::type,
- Point,
- typename point_type<MultiGeometry>::type
- >::type cd;
-
- typename selector_type::iterator_type it_min
- = geometry_to_range::apply(point,
- selector_type::begin(multigeometry),
- selector_type::end(multigeometry),
- sds::get_comparable
- <
- Strategy
- >::apply(strategy),
- cd);
-
- return
- is_comparable<Strategy>::value
- ?
- cd
- :
- dispatch::distance
- <
- Point,
- typename std::iterator_traits
- <
- typename selector_type::iterator_type
- >::value_type,
- Strategy
- >::apply(point, *it_min, strategy);
- }
-};
-
-
-// this is called only for multipolygons, hence the change in the
-// template parameter name MultiGeometry to MultiPolygon
-template <typename Point, typename MultiPolygon, typename Strategy>
-struct point_to_multigeometry<Point, MultiPolygon, Strategy, true>
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- Point,
- typename point_type<MultiPolygon>::type
- >::type return_type;
-
- static inline return_type apply(Point const& point,
- MultiPolygon const& multipolygon,
- Strategy const& strategy)
- {
- if (geometry::covered_by(point, multipolygon))
- {
- return 0;
- }
-
- return point_to_multigeometry
- <
- Point, MultiPolygon, Strategy, false
- >::apply(point, multipolygon, strategy);
- }
-};
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// Point-point
-template <typename P1, typename P2, typename Strategy>
-struct distance
- <
- P1, P2, Strategy, point_tag, point_tag,
- strategy_tag_distance_point_point, false
- > : detail::distance::point_to_point<P1, P2, Strategy>
-{};
-
-
-// Point-line version 2, where point-segment strategy is specified
-template <typename Point, typename Linestring, typename Strategy>
-struct distance
- <
- Point, Linestring, Strategy, point_tag, linestring_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::point_to_range<Point, Linestring, closed, Strategy>
-{};
-
-
-// Point-ring , where point-segment strategy is specified
-template <typename Point, typename Ring, typename Strategy>
-struct distance
- <
- Point, Ring, Strategy, point_tag, ring_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::point_to_ring
- <
- Point, Ring, closure<Ring>::value, Strategy
- >
-{};
-
-
-// Point-polygon , where point-segment strategy is specified
-template <typename Point, typename Polygon, typename Strategy>
-struct distance
- <
- Point, Polygon, Strategy, point_tag, polygon_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::point_to_polygon
- <
- Point, Polygon, closure<Polygon>::value, Strategy
- >
-{};
-
-
-// Point-segment version 2, with point-segment strategy
-template <typename Point, typename Segment, typename Strategy>
-struct distance
- <
- Point, Segment, Strategy, point_tag, segment_tag,
- strategy_tag_distance_point_segment, false
- >
-{
- static inline typename strategy::distance::services::return_type
- <
- Strategy, Point, typename point_type<Segment>::type
- >::type apply(Point const& point,
- Segment const& segment,
- Strategy const& strategy)
- {
- typename point_type<Segment>::type p[2];
- geometry::detail::assign_point_from_index<0>(segment, p[0]);
- geometry::detail::assign_point_from_index<1>(segment, p[1]);
-
- boost::ignore_unused(strategy);
- return strategy.apply(point, p[0], p[1]);
- }
-};
-
-
-template <typename Point, typename Box, typename Strategy>
-struct distance
- <
- Point, Box, Strategy, point_tag, box_tag,
- strategy_tag_distance_point_box, false
- >
-{
- static inline typename strategy::distance::services::return_type
- <
- Strategy, Point, typename point_type<Box>::type
- >::type
- apply(Point const& point, Box const& box, Strategy const& strategy)
- {
- boost::ignore_unused(strategy);
- return strategy.apply(point, box);
- }
-};
-
-
-template<typename Point, typename MultiPoint, typename Strategy>
-struct distance
- <
- Point, MultiPoint, Strategy, point_tag, multi_point_tag,
- strategy_tag_distance_point_point, false
- > : detail::distance::point_to_multigeometry
- <
- Point, MultiPoint, Strategy
- >
-{};
-
-
-template<typename Point, typename MultiLinestring, typename Strategy>
-struct distance
- <
- Point, MultiLinestring, Strategy, point_tag, multi_linestring_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::point_to_multigeometry
- <
- Point, MultiLinestring, Strategy
- >
-{};
-
-
-template<typename Point, typename MultiPolygon, typename Strategy>
-struct distance
- <
- Point, MultiPolygon, Strategy, point_tag, multi_polygon_tag,
- strategy_tag_distance_point_segment, false
- > : detail::distance::point_to_multigeometry
- <
- Point, MultiPolygon, Strategy
- >
-{};
-
-
-template <typename Point, typename Linear, typename Strategy>
-struct distance
- <
- Point, Linear, Strategy, point_tag, linear_tag,
- strategy_tag_distance_point_segment, false
- > : distance
- <
- Point, Linear, Strategy,
- point_tag, typename tag<Linear>::type,
- strategy_tag_distance_point_segment, false
- >
-{};
-
-
-template <typename Point, typename Areal, typename Strategy>
-struct distance
- <
- Point, Areal, Strategy, point_tag, areal_tag,
- strategy_tag_distance_point_segment, false
- > : distance
- <
- Point, Areal, Strategy,
- point_tag, typename tag<Areal>::type,
- strategy_tag_distance_point_segment, false
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_POINT_TO_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/range_to_geometry_rtree.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/range_to_geometry_rtree.hpp
deleted file mode 100644
index 6e78bee6949..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/range_to_geometry_rtree.hpp
+++ /dev/null
@@ -1,130 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_RANGE_TO_GEOMETRY_RTREE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_RANGE_TO_GEOMETRY_RTREE_HPP
-
-#include <iterator>
-#include <utility>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/iterators/has_one_element.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-
-#include <boost/geometry/algorithms/dispatch/distance.hpp>
-
-#include <boost/geometry/algorithms/detail/closest_feature/range_to_range.hpp>
-#include <boost/geometry/algorithms/detail/distance/is_comparable.hpp>
-#include <boost/geometry/algorithms/detail/distance/iterator_selector.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-template
-<
- typename PointOrSegmentIterator,
- typename Geometry,
- typename Strategy
->
-class point_or_segment_range_to_geometry_rtree
-{
-private:
- typedef typename std::iterator_traits
- <
- PointOrSegmentIterator
- >::value_type point_or_segment_type;
-
- typedef iterator_selector<Geometry const> selector_type;
-
- typedef detail::closest_feature::range_to_range_rtree range_to_range;
-
-public:
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<point_or_segment_type>::type,
- typename point_type<Geometry>::type
- >::type return_type;
-
- static inline return_type apply(PointOrSegmentIterator first,
- PointOrSegmentIterator last,
- Geometry const& geometry,
- Strategy const& strategy)
- {
- namespace sds = strategy::distance::services;
-
- BOOST_GEOMETRY_ASSERT( first != last );
-
- if ( geometry::has_one_element(first, last) )
- {
- return dispatch::distance
- <
- point_or_segment_type, Geometry, Strategy
- >::apply(*first, geometry, strategy);
- }
-
- typename sds::return_type
- <
- typename sds::comparable_type<Strategy>::type,
- typename point_type<point_or_segment_type>::type,
- typename point_type<Geometry>::type
- >::type cd_min;
-
- std::pair
- <
- point_or_segment_type,
- typename selector_type::iterator_type
- > closest_features
- = range_to_range::apply(first,
- last,
- selector_type::begin(geometry),
- selector_type::end(geometry),
- sds::get_comparable
- <
- Strategy
- >::apply(strategy),
- cd_min);
-
- return
- is_comparable<Strategy>::value
- ?
- cd_min
- :
- dispatch::distance
- <
- point_or_segment_type,
- typename std::iterator_traits
- <
- typename selector_type::iterator_type
- >::value_type,
- Strategy
- >::apply(closest_features.first,
- *closest_features.second,
- strategy);
- }
-};
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_RANGE_TO_GEOMETRY_RTREE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/segment_to_box.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/segment_to_box.hpp
deleted file mode 100644
index fa951524767..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/segment_to_box.hpp
+++ /dev/null
@@ -1,892 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SEGMENT_TO_BOX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SEGMENT_TO_BOX_HPP
-
-#include <cstddef>
-
-#include <functional>
-#include <vector>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/calculation_type.hpp>
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/tags.hpp>
-
-#include <boost/geometry/policies/compare.hpp>
-
-#include <boost/geometry/algorithms/equals.hpp>
-#include <boost/geometry/algorithms/intersects.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/algorithms/detail/assign_box_corners.hpp>
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
-#include <boost/geometry/algorithms/detail/distance/is_comparable.hpp>
-
-#include <boost/geometry/algorithms/dispatch/distance.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-template
-<
- typename Segment,
- typename Box,
- typename Strategy,
- bool UsePointBoxStrategy = false
->
-class segment_to_box_2D_generic
-{
-private:
- typedef typename point_type<Segment>::type segment_point;
- typedef typename point_type<Box>::type box_point;
-
- typedef typename strategy::distance::services::comparable_type
- <
- Strategy
- >::type comparable_strategy;
-
- typedef detail::closest_feature::point_to_point_range
- <
- segment_point,
- std::vector<box_point>,
- open,
- comparable_strategy
- > point_to_point_range;
-
- typedef typename strategy::distance::services::return_type
- <
- comparable_strategy, segment_point, box_point
- >::type comparable_return_type;
-
-public:
- typedef typename strategy::distance::services::return_type
- <
- Strategy, segment_point, box_point
- >::type return_type;
-
- static inline return_type apply(Segment const& segment,
- Box const& box,
- Strategy const& strategy,
- bool check_intersection = true)
- {
- if (check_intersection && geometry::intersects(segment, box))
- {
- return 0;
- }
-
- comparable_strategy cstrategy =
- strategy::distance::services::get_comparable
- <
- Strategy
- >::apply(strategy);
-
- // get segment points
- segment_point p[2];
- detail::assign_point_from_index<0>(segment, p[0]);
- detail::assign_point_from_index<1>(segment, p[1]);
-
- // get box points
- std::vector<box_point> box_points(4);
- detail::assign_box_corners_oriented<true>(box, box_points);
-
- comparable_return_type cd[6];
- for (unsigned int i = 0; i < 4; ++i)
- {
- cd[i] = cstrategy.apply(box_points[i], p[0], p[1]);
- }
-
- std::pair
- <
- typename std::vector<box_point>::const_iterator,
- typename std::vector<box_point>::const_iterator
- > bit_min[2];
-
- bit_min[0] = point_to_point_range::apply(p[0],
- box_points.begin(),
- box_points.end(),
- cstrategy,
- cd[4]);
- bit_min[1] = point_to_point_range::apply(p[1],
- box_points.begin(),
- box_points.end(),
- cstrategy,
- cd[5]);
-
- unsigned int imin = 0;
- for (unsigned int i = 1; i < 6; ++i)
- {
- if (cd[i] < cd[imin])
- {
- imin = i;
- }
- }
-
- if (BOOST_GEOMETRY_CONDITION(is_comparable<Strategy>::value))
- {
- return cd[imin];
- }
-
- if (imin < 4)
- {
- return strategy.apply(box_points[imin], p[0], p[1]);
- }
- else
- {
- unsigned int bimin = imin - 4;
- return strategy.apply(p[bimin],
- *bit_min[bimin].first,
- *bit_min[bimin].second);
- }
- }
-};
-
-
-template
-<
- typename Segment,
- typename Box,
- typename Strategy
->
-class segment_to_box_2D_generic<Segment, Box, Strategy, true>
-{
-private:
- typedef typename point_type<Segment>::type segment_point;
- typedef typename point_type<Box>::type box_point;
-
- typedef typename strategy::distance::services::comparable_type
- <
- Strategy
- >::type comparable_strategy;
-
- typedef typename strategy::distance::services::return_type
- <
- comparable_strategy, segment_point, box_point
- >::type comparable_return_type;
-
- typedef typename detail::distance::default_strategy
- <
- segment_point, Box
- >::type point_box_strategy;
-
- typedef typename strategy::distance::services::comparable_type
- <
- point_box_strategy
- >::type point_box_comparable_strategy;
-
-public:
- typedef typename strategy::distance::services::return_type
- <
- Strategy, segment_point, box_point
- >::type return_type;
-
- static inline return_type apply(Segment const& segment,
- Box const& box,
- Strategy const& strategy,
- bool check_intersection = true)
- {
- if (check_intersection && geometry::intersects(segment, box))
- {
- return 0;
- }
-
- comparable_strategy cstrategy =
- strategy::distance::services::get_comparable
- <
- Strategy
- >::apply(strategy);
- boost::ignore_unused(cstrategy);
-
- // get segment points
- segment_point p[2];
- detail::assign_point_from_index<0>(segment, p[0]);
- detail::assign_point_from_index<1>(segment, p[1]);
-
- // get box points
- std::vector<box_point> box_points(4);
- detail::assign_box_corners_oriented<true>(box, box_points);
-
- comparable_return_type cd[6];
- for (unsigned int i = 0; i < 4; ++i)
- {
- cd[i] = cstrategy.apply(box_points[i], p[0], p[1]);
- }
-
- point_box_comparable_strategy pb_cstrategy;
- boost::ignore_unused(pb_cstrategy);
- cd[4] = pb_cstrategy.apply(p[0], box);
- cd[5] = pb_cstrategy.apply(p[1], box);
-
- unsigned int imin = 0;
- for (unsigned int i = 1; i < 6; ++i)
- {
- if (cd[i] < cd[imin])
- {
- imin = i;
- }
- }
-
- if (is_comparable<Strategy>::value)
- {
- return cd[imin];
- }
-
- if (imin < 4)
- {
- strategy.apply(box_points[imin], p[0], p[1]);
- }
- else
- {
- return point_box_strategy().apply(p[imin - 4], box);
- }
- }
-};
-
-
-
-
-template
-<
- typename ReturnType,
- typename SegmentPoint,
- typename BoxPoint,
- typename PPStrategy,
- typename PSStrategy
->
-class segment_to_box_2D
-{
-private:
- template <typename Result>
- struct cast_to_result
- {
- template <typename T>
- static inline Result apply(T const& t)
- {
- return boost::numeric_cast<Result>(t);
- }
- };
-
-
- template <typename T, bool IsLess /* true */>
- struct compare_less_equal
- {
- typedef compare_less_equal<T, !IsLess> other;
-
- template <typename T1, typename T2>
- inline bool operator()(T1 const& t1, T2 const& t2) const
- {
- return std::less_equal<T>()(cast_to_result<T>::apply(t1),
- cast_to_result<T>::apply(t2));
- }
- };
-
- template <typename T>
- struct compare_less_equal<T, false>
- {
- typedef compare_less_equal<T, true> other;
-
- template <typename T1, typename T2>
- inline bool operator()(T1 const& t1, T2 const& t2) const
- {
- return std::greater_equal<T>()(cast_to_result<T>::apply(t1),
- cast_to_result<T>::apply(t2));
- }
- };
-
-
- template <typename LessEqual>
- struct other_compare
- {
- typedef typename LessEqual::other type;
- };
-
-
- // it is assumed here that p0 lies to the right of the box (so the
- // entire segment lies to the right of the box)
- template <typename LessEqual>
- struct right_of_box
- {
- static inline ReturnType apply(SegmentPoint const& p0,
- SegmentPoint const& p1,
- BoxPoint const& bottom_right,
- BoxPoint const& top_right,
- PPStrategy const& pp_strategy,
- PSStrategy const& ps_strategy)
- {
- boost::ignore_unused(pp_strategy, ps_strategy);
-
- // the implementation below is written for non-negative slope
- // segments
- //
- // for negative slope segments swap the roles of bottom_right
- // and top_right and use greater_equal instead of less_equal.
-
- typedef cast_to_result<ReturnType> cast;
-
- LessEqual less_equal;
-
- if (less_equal(geometry::get<1>(top_right), geometry::get<1>(p0)))
- {
- // closest box point is the top-right corner
- return cast::apply(pp_strategy.apply(p0, top_right));
- }
- else if (less_equal(geometry::get<1>(bottom_right),
- geometry::get<1>(p0)))
- {
- // distance is realized between p0 and right-most
- // segment of box
- ReturnType diff = cast::apply(geometry::get<0>(p0))
- - cast::apply(geometry::get<0>(bottom_right));
- return strategy::distance::services::result_from_distance
- <
- PSStrategy, BoxPoint, SegmentPoint
- >::apply(ps_strategy, math::abs(diff));
- }
- else
- {
- // distance is realized between the bottom-right
- // corner of the box and the segment
- return cast::apply(ps_strategy.apply(bottom_right, p0, p1));
- }
- }
- };
-
-
- // it is assumed here that p0 lies above the box (so the
- // entire segment lies above the box)
- template <typename LessEqual>
- struct above_of_box
- {
- static inline ReturnType apply(SegmentPoint const& p0,
- SegmentPoint const& p1,
- BoxPoint const& top_left,
- PSStrategy const& ps_strategy)
- {
- boost::ignore_unused(ps_strategy);
-
- // the segment lies above the box
-
- typedef cast_to_result<ReturnType> cast;
-
- LessEqual less_equal;
-
- // p0 is above the upper segment of the box
- // (and inside its band)
- if (less_equal(geometry::get<0>(top_left), geometry::get<0>(p0)))
- {
- ReturnType diff = cast::apply(geometry::get<1>(p0))
- - cast::apply(geometry::get<1>(top_left));
- return strategy::distance::services::result_from_distance
- <
- PSStrategy, SegmentPoint, BoxPoint
- >::apply(ps_strategy, math::abs(diff));
- }
-
- // p0 is to the left of the box, but p1 is above the box
- // in this case the distance is realized between the
- // top-left corner of the box and the segment
- return cast::apply(ps_strategy.apply(top_left, p0, p1));
- }
- };
-
-
- template <typename LessEqual>
- struct check_right_left_of_box
- {
- static inline bool apply(SegmentPoint const& p0,
- SegmentPoint const& p1,
- BoxPoint const& top_left,
- BoxPoint const& top_right,
- BoxPoint const& bottom_left,
- BoxPoint const& bottom_right,
- PPStrategy const& pp_strategy,
- PSStrategy const& ps_strategy,
- ReturnType& result)
- {
- // p0 lies to the right of the box
- if (geometry::get<0>(p0) >= geometry::get<0>(top_right))
- {
- result = right_of_box
- <
- LessEqual
- >::apply(p0, p1, bottom_right, top_right,
- pp_strategy, ps_strategy);
- return true;
- }
-
- // p1 lies to the left of the box
- if (geometry::get<0>(p1) <= geometry::get<0>(bottom_left))
- {
- result = right_of_box
- <
- typename other_compare<LessEqual>::type
- >::apply(p1, p0, top_left, bottom_left,
- pp_strategy, ps_strategy);
- return true;
- }
-
- return false;
- }
- };
-
-
- template <typename LessEqual>
- struct check_above_below_of_box
- {
- static inline bool apply(SegmentPoint const& p0,
- SegmentPoint const& p1,
- BoxPoint const& top_left,
- BoxPoint const& top_right,
- BoxPoint const& bottom_left,
- BoxPoint const& bottom_right,
- PSStrategy const& ps_strategy,
- ReturnType& result)
- {
- // the segment lies below the box
- if (geometry::get<1>(p1) < geometry::get<1>(bottom_left))
- {
- result = above_of_box
- <
- typename other_compare<LessEqual>::type
- >::apply(p1, p0, bottom_right, ps_strategy);
- return true;
- }
-
- // the segment lies above the box
- if (geometry::get<1>(p0) > geometry::get<1>(top_right))
- {
- result = above_of_box
- <
- LessEqual
- >::apply(p0, p1, top_left, ps_strategy);
- return true;
- }
- return false;
- }
- };
-
- struct check_generic_position
- {
- static inline bool apply(SegmentPoint const& p0,
- SegmentPoint const& p1,
- BoxPoint const& bottom_left0,
- BoxPoint const& top_right0,
- BoxPoint const& bottom_left1,
- BoxPoint const& top_right1,
- BoxPoint const& corner1,
- BoxPoint const& corner2,
- PSStrategy const& ps_strategy,
- ReturnType& result)
- {
- typedef cast_to_result<ReturnType> cast;
-
- ReturnType diff0 = cast::apply(geometry::get<0>(p1))
- - cast::apply(geometry::get<0>(p0));
- ReturnType t_min0 = cast::apply(geometry::get<0>(bottom_left0))
- - cast::apply(geometry::get<0>(p0));
- ReturnType t_max0 = cast::apply(geometry::get<0>(top_right0))
- - cast::apply(geometry::get<0>(p0));
-
- ReturnType diff1 = cast::apply(geometry::get<1>(p1))
- - cast::apply(geometry::get<1>(p0));
- ReturnType t_min1 = cast::apply(geometry::get<1>(bottom_left1))
- - cast::apply(geometry::get<1>(p0));
- ReturnType t_max1 = cast::apply(geometry::get<1>(top_right1))
- - cast::apply(geometry::get<1>(p0));
-
- if (diff1 < 0)
- {
- diff1 = -diff1;
- t_min1 = -t_min1;
- t_max1 = -t_max1;
- }
-
- // t_min0 > t_max1
- if (t_min0 * diff1 > t_max1 * diff0)
- {
- result = cast::apply(ps_strategy.apply(corner1, p0, p1));
- return true;
- }
-
- // t_max0 < t_min1
- if (t_max0 * diff1 < t_min1 * diff0)
- {
- result = cast::apply(ps_strategy.apply(corner2, p0, p1));
- return true;
- }
- return false;
- }
- };
-
- static inline ReturnType
- non_negative_slope_segment(SegmentPoint const& p0,
- SegmentPoint const& p1,
- BoxPoint const& top_left,
- BoxPoint const& top_right,
- BoxPoint const& bottom_left,
- BoxPoint const& bottom_right,
- PPStrategy const& pp_strategy,
- PSStrategy const& ps_strategy)
- {
- typedef compare_less_equal<ReturnType, true> less_equal;
-
- // assert that the segment has non-negative slope
- BOOST_GEOMETRY_ASSERT( ( math::equals(geometry::get<0>(p0), geometry::get<0>(p1))
- && geometry::get<1>(p0) < geometry::get<1>(p1))
- ||
- ( geometry::get<0>(p0) < geometry::get<0>(p1)
- && geometry::get<1>(p0) <= geometry::get<1>(p1) )
- || geometry::has_nan_coordinate(p0)
- || geometry::has_nan_coordinate(p1));
-
- ReturnType result(0);
-
- if (check_right_left_of_box
- <
- less_equal
- >::apply(p0, p1,
- top_left, top_right, bottom_left, bottom_right,
- pp_strategy, ps_strategy, result))
- {
- return result;
- }
-
- if (check_above_below_of_box
- <
- less_equal
- >::apply(p0, p1,
- top_left, top_right, bottom_left, bottom_right,
- ps_strategy, result))
- {
- return result;
- }
-
- if (check_generic_position::apply(p0, p1,
- bottom_left, top_right,
- bottom_left, top_right,
- top_left, bottom_right,
- ps_strategy, result))
- {
- return result;
- }
-
- // in all other cases the box and segment intersect, so return 0
- return result;
- }
-
-
- static inline ReturnType
- negative_slope_segment(SegmentPoint const& p0,
- SegmentPoint const& p1,
- BoxPoint const& top_left,
- BoxPoint const& top_right,
- BoxPoint const& bottom_left,
- BoxPoint const& bottom_right,
- PPStrategy const& pp_strategy,
- PSStrategy const& ps_strategy)
- {
- typedef compare_less_equal<ReturnType, false> greater_equal;
-
- // assert that the segment has negative slope
- BOOST_GEOMETRY_ASSERT( ( geometry::get<0>(p0) < geometry::get<0>(p1)
- && geometry::get<1>(p0) > geometry::get<1>(p1) )
- || geometry::has_nan_coordinate(p0)
- || geometry::has_nan_coordinate(p1) );
-
- ReturnType result(0);
-
- if (check_right_left_of_box
- <
- greater_equal
- >::apply(p0, p1,
- bottom_left, bottom_right, top_left, top_right,
- pp_strategy, ps_strategy, result))
- {
- return result;
- }
-
- if (check_above_below_of_box
- <
- greater_equal
- >::apply(p1, p0,
- top_right, top_left, bottom_right, bottom_left,
- ps_strategy, result))
- {
- return result;
- }
-
- if (check_generic_position::apply(p0, p1,
- bottom_left, top_right,
- top_right, bottom_left,
- bottom_left, top_right,
- ps_strategy, result))
- {
- return result;
- }
-
- // in all other cases the box and segment intersect, so return 0
- return result;
- }
-
-public:
- static inline ReturnType apply(SegmentPoint const& p0,
- SegmentPoint const& p1,
- BoxPoint const& top_left,
- BoxPoint const& top_right,
- BoxPoint const& bottom_left,
- BoxPoint const& bottom_right,
- PPStrategy const& pp_strategy,
- PSStrategy const& ps_strategy)
- {
- BOOST_GEOMETRY_ASSERT( geometry::less<SegmentPoint>()(p0, p1)
- || geometry::has_nan_coordinate(p0)
- || geometry::has_nan_coordinate(p1) );
-
- if (geometry::get<0>(p0) < geometry::get<0>(p1)
- && geometry::get<1>(p0) > geometry::get<1>(p1))
- {
- return negative_slope_segment(p0, p1,
- top_left, top_right,
- bottom_left, bottom_right,
- pp_strategy, ps_strategy);
- }
-
- return non_negative_slope_segment(p0, p1,
- top_left, top_right,
- bottom_left, bottom_right,
- pp_strategy, ps_strategy);
- }
-};
-
-
-//=========================================================================
-
-
-template
-<
- typename Segment,
- typename Box,
- typename std::size_t Dimension,
- typename PPStrategy,
- typename PSStrategy
->
-class segment_to_box
- : not_implemented<Segment, Box>
-{};
-
-
-template
-<
- typename Segment,
- typename Box,
- typename PPStrategy,
- typename PSStrategy
->
-class segment_to_box<Segment, Box, 2, PPStrategy, PSStrategy>
-{
-private:
- typedef typename point_type<Segment>::type segment_point;
- typedef typename point_type<Box>::type box_point;
-
- typedef typename strategy::distance::services::comparable_type
- <
- PPStrategy
- >::type pp_comparable_strategy;
-
- typedef typename strategy::distance::services::comparable_type
- <
- PSStrategy
- >::type ps_comparable_strategy;
-
- typedef typename strategy::distance::services::return_type
- <
- ps_comparable_strategy, segment_point, box_point
- >::type comparable_return_type;
-public:
- typedef typename strategy::distance::services::return_type
- <
- PSStrategy, segment_point, box_point
- >::type return_type;
-
- static inline return_type apply(Segment const& segment,
- Box const& box,
- PPStrategy const& pp_strategy,
- PSStrategy const& ps_strategy)
- {
- segment_point p[2];
- detail::assign_point_from_index<0>(segment, p[0]);
- detail::assign_point_from_index<1>(segment, p[1]);
-
- if (geometry::equals(p[0], p[1]))
- {
- typedef typename boost::mpl::if_
- <
- boost::is_same
- <
- ps_comparable_strategy,
- PSStrategy
- >,
- typename strategy::distance::services::comparable_type
- <
- typename detail::distance::default_strategy
- <
- segment_point, Box
- >::type
- >::type,
- typename detail::distance::default_strategy
- <
- segment_point, Box
- >::type
- >::type point_box_strategy_type;
-
- return dispatch::distance
- <
- segment_point,
- Box,
- point_box_strategy_type
- >::apply(p[0], box, point_box_strategy_type());
- }
-
- box_point top_left, top_right, bottom_left, bottom_right;
- detail::assign_box_corners(box, bottom_left, bottom_right,
- top_left, top_right);
-
- if (geometry::less<segment_point>()(p[0], p[1]))
- {
- return segment_to_box_2D
- <
- return_type,
- segment_point,
- box_point,
- PPStrategy,
- PSStrategy
- >::apply(p[0], p[1],
- top_left, top_right, bottom_left, bottom_right,
- pp_strategy,
- ps_strategy);
- }
- else
- {
- return segment_to_box_2D
- <
- return_type,
- segment_point,
- box_point,
- PPStrategy,
- PSStrategy
- >::apply(p[1], p[0],
- top_left, top_right, bottom_left, bottom_right,
- pp_strategy,
- ps_strategy);
- }
- }
-};
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Segment, typename Box, typename Strategy>
-struct distance
- <
- Segment, Box, Strategy, segment_tag, box_tag,
- strategy_tag_distance_point_segment, false
- >
-{
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<Segment>::type,
- typename point_type<Box>::type
- >::type return_type;
-
-
- static inline return_type apply(Segment const& segment,
- Box const& box,
- Strategy const& strategy)
- {
- assert_dimension_equal<Segment, Box>();
-
- typedef typename boost::mpl::if_
- <
- boost::is_same
- <
- typename strategy::distance::services::comparable_type
- <
- Strategy
- >::type,
- Strategy
- >,
- typename strategy::distance::services::comparable_type
- <
- typename detail::distance::default_strategy
- <
- typename point_type<Segment>::type,
- typename point_type<Box>::type
- >::type
- >::type,
- typename detail::distance::default_strategy
- <
- typename point_type<Segment>::type,
- typename point_type<Box>::type
- >::type
- >::type pp_strategy_type;
-
-
- return detail::distance::segment_to_box
- <
- Segment,
- Box,
- dimension<Segment>::value,
- pp_strategy_type,
- Strategy
- >::apply(segment, box, pp_strategy_type(), strategy);
- }
-};
-
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SEGMENT_TO_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/segment_to_segment.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/segment_to_segment.hpp
deleted file mode 100644
index bdf056d76e8..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/distance/segment_to_segment.hpp
+++ /dev/null
@@ -1,152 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SEGMENT_TO_SEGMENT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SEGMENT_TO_SEGMENT_HPP
-
-#include <algorithm>
-#include <iterator>
-
-#include <boost/core/addressof.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/tags.hpp>
-
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/intersects.hpp>
-
-#include <boost/geometry/algorithms/detail/distance/is_comparable.hpp>
-
-#include <boost/geometry/algorithms/dispatch/distance.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace distance
-{
-
-
-
-// compute segment-segment distance
-template<typename Segment1, typename Segment2, typename Strategy>
-class segment_to_segment
-{
-private:
- typedef typename strategy::distance::services::comparable_type
- <
- Strategy
- >::type comparable_strategy;
-
- typedef typename strategy::distance::services::return_type
- <
- comparable_strategy,
- typename point_type<Segment1>::type,
- typename point_type<Segment2>::type
- >::type comparable_return_type;
-
-public:
- typedef typename strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<Segment1>::type,
- typename point_type<Segment2>::type
- >::type return_type;
-
- static inline return_type
- apply(Segment1 const& segment1, Segment2 const& segment2,
- Strategy const& strategy)
- {
- if (geometry::intersects(segment1, segment2))
- {
- return 0;
- }
-
- typename point_type<Segment1>::type p[2];
- detail::assign_point_from_index<0>(segment1, p[0]);
- detail::assign_point_from_index<1>(segment1, p[1]);
-
- typename point_type<Segment2>::type q[2];
- detail::assign_point_from_index<0>(segment2, q[0]);
- detail::assign_point_from_index<1>(segment2, q[1]);
-
- comparable_strategy cstrategy =
- strategy::distance::services::get_comparable
- <
- Strategy
- >::apply(strategy);
-
- comparable_return_type d[4];
- d[0] = cstrategy.apply(q[0], p[0], p[1]);
- d[1] = cstrategy.apply(q[1], p[0], p[1]);
- d[2] = cstrategy.apply(p[0], q[0], q[1]);
- d[3] = cstrategy.apply(p[1], q[0], q[1]);
-
- std::size_t imin = std::distance(boost::addressof(d[0]),
- std::min_element(d, d + 4));
-
- if (BOOST_GEOMETRY_CONDITION(is_comparable<Strategy>::value))
- {
- return d[imin];
- }
-
- switch (imin)
- {
- case 0:
- return strategy.apply(q[0], p[0], p[1]);
- case 1:
- return strategy.apply(q[1], p[0], p[1]);
- case 2:
- return strategy.apply(p[0], q[0], q[1]);
- default:
- return strategy.apply(p[1], q[0], q[1]);
- }
- }
-};
-
-
-
-
-}} // namespace detail::distance
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-
-// segment-segment
-template <typename Segment1, typename Segment2, typename Strategy>
-struct distance
- <
- Segment1, Segment2, Strategy, segment_tag, segment_tag,
- strategy_tag_distance_point_segment, false
- >
- : detail::distance::segment_to_segment<Segment1, Segment2, Strategy>
-{};
-
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_DISTANCE_SEGMENT_TO_SEGMENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/box.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/box.hpp
deleted file mode 100644
index 33b43da2555..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/box.hpp
+++ /dev/null
@@ -1,179 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015, 2016, 2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_BOX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_BOX_HPP
-
-#include <cstddef>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/views/detail/indexed_point_view.hpp>
-
-#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
-#include <boost/geometry/algorithms/detail/normalize.hpp>
-#include <boost/geometry/algorithms/detail/envelope/transform_units.hpp>
-
-#include <boost/geometry/algorithms/dispatch/envelope.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace envelope
-{
-
-
-template
-<
- std::size_t Index,
- std::size_t Dimension,
- std::size_t DimensionCount
->
-struct envelope_indexed_box
-{
- template <typename BoxIn, typename BoxOut>
- static inline void apply(BoxIn const& box_in, BoxOut& mbr)
- {
- detail::indexed_point_view<BoxIn const, Index> box_in_corner(box_in);
- detail::indexed_point_view<BoxOut, Index> mbr_corner(mbr);
-
- detail::conversion::point_to_point
- <
- detail::indexed_point_view<BoxIn const, Index>,
- detail::indexed_point_view<BoxOut, Index>,
- Dimension,
- DimensionCount
- >::apply(box_in_corner, mbr_corner);
- }
-};
-
-template
-<
- std::size_t Index,
- std::size_t DimensionCount
->
-struct envelope_indexed_box_on_spheroid
-{
- template <typename BoxIn, typename BoxOut>
- static inline void apply(BoxIn const& box_in, BoxOut& mbr)
- {
- // transform() does not work with boxes of dimension higher
- // than 2; to account for such boxes we transform the min/max
- // points of the boxes using the indexed_point_view
- detail::indexed_point_view<BoxIn const, Index> box_in_corner(box_in);
- detail::indexed_point_view<BoxOut, Index> mbr_corner(mbr);
-
- // first transform the units
- transform_units(box_in_corner, mbr_corner);
-
- // now transform the remaining coordinates
- detail::conversion::point_to_point
- <
- detail::indexed_point_view<BoxIn const, Index>,
- detail::indexed_point_view<BoxOut, Index>,
- 2,
- DimensionCount
- >::apply(box_in_corner, mbr_corner);
- }
-};
-
-
-struct envelope_box
-{
- template<typename BoxIn, typename BoxOut, typename Strategy>
- static inline void apply(BoxIn const& box_in,
- BoxOut& mbr,
- Strategy const&)
- {
- envelope_indexed_box
- <
- min_corner, 0, dimension<BoxIn>::value
- >::apply(box_in, mbr);
-
- envelope_indexed_box
- <
- max_corner, 0, dimension<BoxIn>::value
- >::apply(box_in, mbr);
- }
-};
-
-
-struct envelope_box_on_spheroid
-{
- template <typename BoxIn, typename BoxOut, typename Strategy>
- static inline void apply(BoxIn const& box_in,
- BoxOut& mbr,
- Strategy const&)
- {
- BoxIn box_in_normalized = detail::return_normalized<BoxIn>(box_in);
-
- envelope_indexed_box_on_spheroid
- <
- min_corner, dimension<BoxIn>::value
- >::apply(box_in_normalized, mbr);
-
- envelope_indexed_box_on_spheroid
- <
- max_corner, dimension<BoxIn>::value
- >::apply(box_in_normalized, mbr);
- }
-};
-
-
-}} // namespace detail::envelope
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Box>
-struct envelope<Box, box_tag, cartesian_tag>
- : detail::envelope::envelope_box
-{};
-
-
-template <typename Box>
-struct envelope<Box, box_tag, spherical_polar_tag>
- : detail::envelope::envelope_box_on_spheroid
-{};
-
-
-template <typename Box>
-struct envelope<Box, box_tag, spherical_equatorial_tag>
- : detail::envelope::envelope_box_on_spheroid
-{};
-
-
-template <typename Box>
-struct envelope<Box, box_tag, geographic_tag>
- : detail::envelope::envelope_box_on_spheroid
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/implementation.hpp
deleted file mode 100644
index d5497007910..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/implementation.hpp
+++ /dev/null
@@ -1,107 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015, 2016.
-// Modifications copyright (c) 2015-2016, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_IMPLEMENTATION_HPP
-
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/is_empty.hpp>
-
-#include <boost/geometry/algorithms/detail/envelope/box.hpp>
-#include <boost/geometry/algorithms/detail/envelope/linear.hpp>
-#include <boost/geometry/algorithms/detail/envelope/multipoint.hpp>
-#include <boost/geometry/algorithms/detail/envelope/point.hpp>
-#include <boost/geometry/algorithms/detail/envelope/range.hpp>
-#include <boost/geometry/algorithms/detail/envelope/segment.hpp>
-
-#include <boost/geometry/algorithms/dispatch/envelope.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace envelope
-{
-
-
-struct envelope_polygon
-{
- template <typename Polygon, typename Box, typename Strategy>
- static inline void apply(Polygon const& polygon, Box& mbr, Strategy const& strategy)
- {
- typename ring_return_type<Polygon const>::type ext_ring
- = exterior_ring(polygon);
-
- if (geometry::is_empty(ext_ring))
- {
- // if the exterior ring is empty, consider the interior rings
- envelope_multi_range
- <
- envelope_range
- >::apply(interior_rings(polygon), mbr, strategy);
- }
- else
- {
- // otherwise, consider only the exterior ring
- envelope_range::apply(ext_ring, mbr, strategy);
- }
- }
-};
-
-
-}} // namespace detail::envelope
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Ring>
-struct envelope<Ring, ring_tag>
- : detail::envelope::envelope_range
-{};
-
-
-template <typename Polygon>
-struct envelope<Polygon, polygon_tag>
- : detail::envelope::envelope_polygon
-{};
-
-
-template <typename MultiPolygon>
-struct envelope<MultiPolygon, multi_polygon_tag>
- : detail::envelope::envelope_multi_range
- <
- detail::envelope::envelope_polygon
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/initialize.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/initialize.hpp
deleted file mode 100644
index d8e252b53aa..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/initialize.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_INITIALIZE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_INITIALIZE_HPP
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/bounds.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace envelope
-{
-
-template <std::size_t Dimension, std::size_t DimensionCount>
-struct initialize_loop
-{
- template <typename Box, typename CoordinateType>
- static inline void apply(Box& box,
- CoordinateType min_value,
- CoordinateType max_value)
- {
- geometry::set<min_corner, Dimension>(box, min_value);
- geometry::set<max_corner, Dimension>(box, max_value);
-
- initialize_loop
- <
- Dimension + 1, DimensionCount
- >::apply(box, min_value, max_value);
- }
-};
-
-template <std::size_t DimensionCount>
-struct initialize_loop<DimensionCount, DimensionCount>
-{
- template <typename Box, typename CoordinateType>
- static inline void apply(Box&, CoordinateType, CoordinateType)
- {
- }
-};
-
-
-template
-<
- typename Box,
- std::size_t Dimension = 0,
- std::size_t DimensionCount = dimension<Box>::value
->
-struct initialize
-{
- typedef typename coordinate_type<Box>::type coordinate_type;
-
- static inline void apply(Box& box,
- coordinate_type min_value
- = boost::numeric::bounds<coordinate_type>::highest(),
- coordinate_type max_value
- = boost::numeric::bounds<coordinate_type>::lowest())
- {
- initialize_loop
- <
- Dimension, DimensionCount
- >::apply(box, min_value, max_value);
- }
-};
-
-}} // namespace detail::envelope
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_INITIALIZE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/interface.hpp
deleted file mode 100644
index 8e9c35b3955..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/interface.hpp
+++ /dev/null
@@ -1,224 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015, 2016, 2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_INTERFACE_HPP
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/dispatch/envelope.hpp>
-
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/envelope.hpp>
-#include <boost/geometry/strategies/cartesian/envelope_segment.hpp>
-#include <boost/geometry/strategies/spherical/envelope_segment.hpp>
-#include <boost/geometry/strategies/geographic/envelope_segment.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace resolve_strategy
-{
-
-template <typename Geometry>
-struct envelope
-{
- template <typename Box, typename Strategy>
- static inline void apply(Geometry const& geometry,
- Box& box,
- Strategy const& strategy)
- {
- dispatch::envelope<Geometry>::apply(geometry, box, strategy);
- }
-
- template <typename Box>
- static inline void apply(Geometry const& geometry,
- Box& box,
- default_strategy)
- {
- typedef typename point_type<Geometry>::type point_type;
- typedef typename coordinate_type<point_type>::type coordinate_type;
-
- typedef typename strategy::envelope::services::default_strategy
- <
- typename cs_tag<point_type>::type,
- coordinate_type
- >::type strategy_type;
-
- dispatch::envelope<Geometry>::apply(geometry, box, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct envelope
-{
- template <typename Box, typename Strategy>
- static inline void apply(Geometry const& geometry,
- Box& box,
- Strategy const& strategy)
- {
- concepts::check<Geometry const>();
- concepts::check<Box>();
-
- resolve_strategy::envelope<Geometry>::apply(geometry, box, strategy);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct envelope<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Box, typename Strategy>
- struct visitor: boost::static_visitor<void>
- {
- Box& m_box;
- Strategy const& m_strategy;
-
- visitor(Box& box, Strategy const& strategy)
- : m_box(box)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry>
- void operator()(Geometry const& geometry) const
- {
- envelope<Geometry>::apply(geometry, m_box, m_strategy);
- }
- };
-
- template <typename Box, typename Strategy>
- static inline void
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- Box& box,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Box, Strategy>(box, strategy), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-/*!
-\brief \brief_calc{envelope (with strategy)}
-\ingroup envelope
-\details \details_calc{envelope,\det_envelope}.
-\tparam Geometry \tparam_geometry
-\tparam Box \tparam_box
-\tparam Strategy \tparam_strategy{Envelope}
-\param geometry \param_geometry
-\param mbr \param_box \param_set{envelope}
-\param strategy \param_strategy{envelope}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/envelope.qbk]}
-\qbk{
-[heading Example]
-[envelope] [envelope_output]
-}
-*/
-template<typename Geometry, typename Box, typename Strategy>
-inline void envelope(Geometry const& geometry, Box& mbr, Strategy const& strategy)
-{
- resolve_variant::envelope<Geometry>::apply(geometry, mbr, strategy);
-}
-
-/*!
-\brief \brief_calc{envelope}
-\ingroup envelope
-\details \details_calc{envelope,\det_envelope}.
-\tparam Geometry \tparam_geometry
-\tparam Box \tparam_box
-\param geometry \param_geometry
-\param mbr \param_box \param_set{envelope}
-
-\qbk{[include reference/algorithms/envelope.qbk]}
-\qbk{
-[heading Example]
-[envelope] [envelope_output]
-}
-*/
-template<typename Geometry, typename Box>
-inline void envelope(Geometry const& geometry, Box& mbr)
-{
- resolve_variant::envelope<Geometry>::apply(geometry, mbr, default_strategy());
-}
-
-
-/*!
-\brief \brief_calc{envelope}
-\ingroup envelope
-\details \details_calc{return_envelope,\det_envelope}. \details_return{envelope}
-\tparam Box \tparam_box
-\tparam Geometry \tparam_geometry
-\tparam Strategy \tparam_strategy{Envelope}
-\param geometry \param_geometry
-\param strategy \param_strategy{envelope}
-\return \return_calc{envelope}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/envelope.qbk]}
-\qbk{
-[heading Example]
-[return_envelope] [return_envelope_output]
-}
-*/
-template<typename Box, typename Geometry, typename Strategy>
-inline Box return_envelope(Geometry const& geometry, Strategy const& strategy)
-{
- Box mbr;
- resolve_variant::envelope<Geometry>::apply(geometry, mbr, strategy);
- return mbr;
-}
-
-/*!
-\brief \brief_calc{envelope}
-\ingroup envelope
-\details \details_calc{return_envelope,\det_envelope}. \details_return{envelope}
-\tparam Box \tparam_box
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_calc{envelope}
-
-\qbk{[include reference/algorithms/envelope.qbk]}
-\qbk{
-[heading Example]
-[return_envelope] [return_envelope_output]
-}
-*/
-template<typename Box, typename Geometry>
-inline Box return_envelope(Geometry const& geometry)
-{
- Box mbr;
- resolve_variant::envelope<Geometry>::apply(geometry, mbr, default_strategy());
- return mbr;
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/intersects_antimeridian.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/intersects_antimeridian.hpp
deleted file mode 100644
index 47937bf7407..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/intersects_antimeridian.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_INTERSECTS_ANTIMERIDIAN_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_INTERSECTS_ANTIMERIDIAN_HPP
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/algorithms/detail/normalize.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace envelope
-{
-
-
-struct intersects_antimeridian
-{
- template <typename Units, typename CoordinateType>
- static inline bool apply(CoordinateType const& lon1,
- CoordinateType const& lat1,
- CoordinateType const& lon2,
- CoordinateType const& lat2)
- {
- typedef math::detail::constants_on_spheroid
- <
- CoordinateType, Units
- > constants;
-
- return
- math::equals(math::abs(lat1), constants::max_latitude())
- ||
- math::equals(math::abs(lat2), constants::max_latitude())
- ||
- math::larger(math::abs(lon1 - lon2), constants::half_period());
- }
-
- template <typename Segment>
- static inline bool apply(Segment const& segment)
- {
- return apply(detail::indexed_point_view<Segment, 0>(segment),
- detail::indexed_point_view<Segment, 1>(segment));
- }
-
- template <typename Point>
- static inline bool apply(Point const& p1, Point const& p2)
- {
- Point p1_normalized = detail::return_normalized<Point>(p1);
- Point p2_normalized = detail::return_normalized<Point>(p2);
-
- return apply
- <
- typename coordinate_system<Point>::type::units
- >(geometry::get<0>(p1_normalized),
- geometry::get<1>(p1_normalized),
- geometry::get<0>(p2_normalized),
- geometry::get<1>(p2_normalized));
- }
-};
-
-
-}} // namespace detail::envelope
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_INTERSECTS_ANTIMERIDIAN_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/linear.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/linear.hpp
deleted file mode 100644
index 09d8a76da55..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/linear.hpp
+++ /dev/null
@@ -1,114 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015, 2016.
-// Modifications copyright (c) 2015-2016, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_LINEAR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_LINEAR_HPP
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/iterators/segment_iterator.hpp>
-
-#include <boost/geometry/algorithms/detail/envelope/range.hpp>
-
-#include <boost/geometry/algorithms/dispatch/envelope.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace envelope
-{
-
-
-struct envelope_linestring_on_spheroid
-{
- template <typename Linestring, typename Box, typename Strategy>
- static inline void apply(Linestring const& linestring,
- Box& mbr,
- Strategy const& strategy)
- {
- envelope_range::apply(geometry::segments_begin(linestring),
- geometry::segments_end(linestring),
- mbr,
- strategy);
- }
-};
-
-
-}} // namespace detail::envelope
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Linestring, typename CS_Tag>
-struct envelope<Linestring, linestring_tag, CS_Tag>
- : detail::envelope::envelope_range
-{};
-
-template <typename Linestring>
-struct envelope<Linestring, linestring_tag, spherical_equatorial_tag>
- : detail::envelope::envelope_linestring_on_spheroid
-{};
-
-template <typename Linestring>
-struct envelope<Linestring, linestring_tag, geographic_tag>
- : detail::envelope::envelope_linestring_on_spheroid
-{};
-
-
-template <typename MultiLinestring, typename CS_Tag>
-struct envelope
- <
- MultiLinestring, multi_linestring_tag, CS_Tag
- > : detail::envelope::envelope_multi_range
- <
- detail::envelope::envelope_range
- >
-{};
-
-template <typename MultiLinestring>
-struct envelope
- <
- MultiLinestring, multi_linestring_tag, spherical_equatorial_tag
- > : detail::envelope::envelope_multi_range_on_spheroid
- <
- detail::envelope::envelope_linestring_on_spheroid
- >
-{};
-
-template <typename MultiLinestring>
-struct envelope
- <
- MultiLinestring, multi_linestring_tag, geographic_tag
- > : detail::envelope::envelope_multi_range_on_spheroid
- <
- detail::envelope::envelope_linestring_on_spheroid
- >
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_LINEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/multipoint.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/multipoint.hpp
deleted file mode 100644
index eef7563796d..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/multipoint.hpp
+++ /dev/null
@@ -1,378 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_MULTIPOINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_MULTIPOINT_HPP
-
-#include <cstddef>
-#include <algorithm>
-#include <utility>
-#include <vector>
-
-#include <boost/algorithm/minmax_element.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/geometries/helper_geometry.hpp>
-
-#include <boost/geometry/algorithms/detail/normalize.hpp>
-
-#include <boost/geometry/algorithms/detail/envelope/box.hpp>
-#include <boost/geometry/algorithms/detail/envelope/initialize.hpp>
-#include <boost/geometry/algorithms/detail/envelope/range.hpp>
-#include <boost/geometry/algorithms/detail/expand/point.hpp>
-
-#include <boost/geometry/algorithms/dispatch/envelope.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace envelope
-{
-
-
-class envelope_multipoint_on_spheroid
-{
-private:
- template <std::size_t Dim>
- struct coordinate_less
- {
- template <typename Point>
- inline bool operator()(Point const& point1, Point const& point2) const
- {
- return math::smaller(geometry::get<Dim>(point1),
- geometry::get<Dim>(point2));
- }
- };
-
- template <typename Constants, typename MultiPoint, typename OutputIterator>
- static inline void analyze_point_coordinates(MultiPoint const& multipoint,
- bool& has_south_pole,
- bool& has_north_pole,
- OutputIterator oit)
- {
- typedef typename boost::range_value<MultiPoint>::type point_type;
- typedef typename boost::range_iterator
- <
- MultiPoint const
- >::type iterator_type;
-
- // analyze point coordinates:
- // (1) normalize point coordinates
- // (2) check if any point is the north or the south pole
- // (3) put all non-pole points in a container
- //
- // notice that at this point in the algorithm, we have at
- // least two points on the spheroid
- has_south_pole = false;
- has_north_pole = false;
-
- for (iterator_type it = boost::begin(multipoint);
- it != boost::end(multipoint);
- ++it)
- {
- point_type point = detail::return_normalized<point_type>(*it);
-
- if (math::equals(geometry::get<1>(point),
- Constants::min_latitude()))
- {
- has_south_pole = true;
- }
- else if (math::equals(geometry::get<1>(point),
- Constants::max_latitude()))
- {
- has_north_pole = true;
- }
- else
- {
- *oit++ = point;
- }
- }
- }
-
- template <typename SortedRange, typename Value>
- static inline Value maximum_gap(SortedRange const& sorted_range,
- Value& max_gap_left,
- Value& max_gap_right)
- {
- typedef typename boost::range_iterator
- <
- SortedRange const
- >::type iterator_type;
-
- iterator_type it1 = boost::begin(sorted_range), it2 = it1;
- ++it2;
- max_gap_left = geometry::get<0>(*it1);
- max_gap_right = geometry::get<0>(*it2);
-
- Value max_gap = max_gap_right - max_gap_left;
- for (++it1, ++it2; it2 != boost::end(sorted_range); ++it1, ++it2)
- {
- Value gap = geometry::get<0>(*it2) - geometry::get<0>(*it1);
- if (math::larger(gap, max_gap))
- {
- max_gap_left = geometry::get<0>(*it1);
- max_gap_right = geometry::get<0>(*it2);
- max_gap = gap;
- }
- }
-
- return max_gap;
- }
-
- template
- <
- typename Constants,
- typename PointRange,
- typename LongitudeLess,
- typename CoordinateType
- >
- static inline void get_min_max_longitudes(PointRange& range,
- LongitudeLess const& lon_less,
- CoordinateType& lon_min,
- CoordinateType& lon_max)
- {
- typedef typename boost::range_iterator
- <
- PointRange const
- >::type iterator_type;
-
- // compute min and max longitude values
- std::pair<iterator_type, iterator_type> min_max_longitudes
- = boost::minmax_element(boost::begin(range),
- boost::end(range),
- lon_less);
-
- lon_min = geometry::get<0>(*min_max_longitudes.first);
- lon_max = geometry::get<0>(*min_max_longitudes.second);
-
- // if the longitude span is "large" compute the true maximum gap
- if (math::larger(lon_max - lon_min, Constants::half_period()))
- {
- std::sort(boost::begin(range), boost::end(range), lon_less);
-
- CoordinateType max_gap_left = 0, max_gap_right = 0;
- CoordinateType max_gap
- = maximum_gap(range, max_gap_left, max_gap_right);
-
- CoordinateType complement_gap
- = Constants::period() + lon_min - lon_max;
-
- if (math::larger(max_gap, complement_gap))
- {
- lon_min = max_gap_right;
- lon_max = max_gap_left + Constants::period();
- }
- }
- }
-
- template
- <
- typename Constants,
- typename Iterator,
- typename LatitudeLess,
- typename CoordinateType
- >
- static inline void get_min_max_latitudes(Iterator const first,
- Iterator const last,
- LatitudeLess const& lat_less,
- bool has_south_pole,
- bool has_north_pole,
- CoordinateType& lat_min,
- CoordinateType& lat_max)
- {
- if (has_south_pole && has_north_pole)
- {
- lat_min = Constants::min_latitude();
- lat_max = Constants::max_latitude();
- }
- else if (has_south_pole)
- {
- lat_min = Constants::min_latitude();
- lat_max
- = geometry::get<1>(*std::max_element(first, last, lat_less));
- }
- else if (has_north_pole)
- {
- lat_min
- = geometry::get<1>(*std::min_element(first, last, lat_less));
- lat_max = Constants::max_latitude();
- }
- else
- {
- std::pair<Iterator, Iterator> min_max_latitudes
- = boost::minmax_element(first, last, lat_less);
-
- lat_min = geometry::get<1>(*min_max_latitudes.first);
- lat_max = geometry::get<1>(*min_max_latitudes.second);
- }
- }
-
-public:
- template <typename MultiPoint, typename Box, typename Strategy>
- static inline void apply(MultiPoint const& multipoint, Box& mbr, Strategy const& strategy)
- {
- typedef typename point_type<MultiPoint>::type point_type;
- typedef typename coordinate_type<MultiPoint>::type coordinate_type;
- typedef typename boost::range_iterator
- <
- MultiPoint const
- >::type iterator_type;
-
- typedef math::detail::constants_on_spheroid
- <
- coordinate_type,
- typename coordinate_system<MultiPoint>::type::units
- > constants;
-
- if (boost::empty(multipoint))
- {
- initialize<Box, 0, dimension<Box>::value>::apply(mbr);
- return;
- }
-
- initialize<Box, 0, 2>::apply(mbr);
-
- if (boost::size(multipoint) == 1)
- {
- return dispatch::envelope
- <
- typename boost::range_value<MultiPoint>::type
- >::apply(range::front(multipoint), mbr, strategy);
- }
-
- // analyze the points and put the non-pole ones in the
- // points vector
- std::vector<point_type> points;
- bool has_north_pole = false, has_south_pole = false;
-
- analyze_point_coordinates<constants>(multipoint,
- has_south_pole, has_north_pole,
- std::back_inserter(points));
-
- coordinate_type lon_min, lat_min, lon_max, lat_max;
- if (points.size() == 1)
- {
- // we have one non-pole point and at least one pole point
- lon_min = geometry::get<0>(range::front(points));
- lon_max = geometry::get<0>(range::front(points));
- lat_min = has_south_pole
- ? constants::min_latitude()
- : constants::max_latitude();
- lat_max = has_north_pole
- ? constants::max_latitude()
- : constants::min_latitude();
- }
- else if (points.empty())
- {
- // all points are pole points
- BOOST_GEOMETRY_ASSERT(has_south_pole || has_north_pole);
- lon_min = coordinate_type(0);
- lon_max = coordinate_type(0);
- lat_min = has_south_pole
- ? constants::min_latitude()
- : constants::max_latitude();
- lat_max = (has_north_pole)
- ? constants::max_latitude()
- : constants::min_latitude();
- }
- else
- {
- get_min_max_longitudes<constants>(points,
- coordinate_less<0>(),
- lon_min,
- lon_max);
-
- get_min_max_latitudes<constants>(points.begin(),
- points.end(),
- coordinate_less<1>(),
- has_south_pole,
- has_north_pole,
- lat_min,
- lat_max);
- }
-
- typedef typename helper_geometry
- <
- Box,
- coordinate_type,
- typename coordinate_system<MultiPoint>::type::units
- >::type helper_box_type;
-
- helper_box_type helper_mbr;
-
- geometry::set<min_corner, 0>(helper_mbr, lon_min);
- geometry::set<min_corner, 1>(helper_mbr, lat_min);
- geometry::set<max_corner, 0>(helper_mbr, lon_max);
- geometry::set<max_corner, 1>(helper_mbr, lat_max);
-
- // now transform to output MBR (per index)
- envelope_indexed_box_on_spheroid<min_corner, 2>::apply(helper_mbr, mbr);
- envelope_indexed_box_on_spheroid<max_corner, 2>::apply(helper_mbr, mbr);
-
- // compute envelope for higher coordinates
- iterator_type it = boost::begin(multipoint);
- envelope_one_point<2, dimension<Box>::value>::apply(*it, mbr, strategy);
-
- for (++it; it != boost::end(multipoint); ++it)
- {
- detail::expand::point_loop
- <
- 2, dimension<Box>::value
- >::apply(mbr, *it, strategy);
- }
- }
-};
-
-
-}} // namespace detail::envelope
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename MultiPoint, typename CSTag>
-struct envelope<MultiPoint, multi_point_tag, CSTag>
- : detail::envelope::envelope_range
-{};
-
-template <typename MultiPoint>
-struct envelope<MultiPoint, multi_point_tag, spherical_equatorial_tag>
- : detail::envelope::envelope_multipoint_on_spheroid
-{};
-
-template <typename MultiPoint>
-struct envelope<MultiPoint, multi_point_tag, geographic_tag>
- : detail::envelope::envelope_multipoint_on_spheroid
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_MULTIPOINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/point.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/point.hpp
deleted file mode 100644
index 86e73f3aa3e..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/point.hpp
+++ /dev/null
@@ -1,135 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015, 2016, 2017.
-// Modifications copyright (c) 2015-2016, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_POINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_POINT_HPP
-
-#include <cstddef>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/views/detail/indexed_point_view.hpp>
-
-#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
-#include <boost/geometry/algorithms/detail/normalize.hpp>
-
-#include <boost/geometry/algorithms/detail/envelope/transform_units.hpp>
-
-#include <boost/geometry/algorithms/dispatch/envelope.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace envelope
-{
-
-
-template <std::size_t Dimension, std::size_t DimensionCount>
-struct envelope_one_point
-{
- template <std::size_t Index, typename Point, typename Box>
- static inline void apply(Point const& point, Box& mbr)
- {
- detail::indexed_point_view<Box, Index> box_corner(mbr);
- detail::conversion::point_to_point
- <
- Point,
- detail::indexed_point_view<Box, Index>,
- Dimension,
- DimensionCount
- >::apply(point, box_corner);
- }
-
- template <typename Point, typename Box, typename Strategy>
- static inline void apply(Point const& point, Box& mbr, Strategy const&)
- {
- apply<min_corner>(point, mbr);
- apply<max_corner>(point, mbr);
- }
-};
-
-
-struct envelope_point_on_spheroid
-{
- template<typename Point, typename Box, typename Strategy>
- static inline void apply(Point const& point, Box& mbr, Strategy const& strategy)
- {
- Point normalized_point = detail::return_normalized<Point>(point);
-
- typename point_type<Box>::type box_point;
-
- // transform units of input point to units of a box point
- transform_units(normalized_point, box_point);
-
- geometry::set<min_corner, 0>(mbr, geometry::get<0>(box_point));
- geometry::set<min_corner, 1>(mbr, geometry::get<1>(box_point));
-
- geometry::set<max_corner, 0>(mbr, geometry::get<0>(box_point));
- geometry::set<max_corner, 1>(mbr, geometry::get<1>(box_point));
-
- envelope_one_point
- <
- 2, dimension<Point>::value
- >::apply(normalized_point, mbr, strategy);
- }
-};
-
-
-}} // namespace detail::envelope
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Point>
-struct envelope<Point, point_tag, cartesian_tag>
- : detail::envelope::envelope_one_point<0, dimension<Point>::value>
-{};
-
-
-template <typename Point>
-struct envelope<Point, point_tag, spherical_polar_tag>
- : detail::envelope::envelope_point_on_spheroid
-{};
-
-
-template <typename Point>
-struct envelope<Point, point_tag, spherical_equatorial_tag>
- : detail::envelope::envelope_point_on_spheroid
-{};
-
-
-template <typename Point>
-struct envelope<Point, point_tag, geographic_tag>
- : detail::envelope::envelope_point_on_spheroid
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/range.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/range.hpp
deleted file mode 100644
index b5591f61ab3..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/range.hpp
+++ /dev/null
@@ -1,187 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015, 2016.
-// Modifications copyright (c) 2015-2016, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_RANGE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_RANGE_HPP
-
-#include <iterator>
-#include <vector>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/coordinate_dimension.hpp>
-
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/algorithms/is_empty.hpp>
-
-#include <boost/geometry/algorithms/detail/envelope/initialize.hpp>
-#include <boost/geometry/algorithms/detail/envelope/range_of_boxes.hpp>
-
-#include <boost/geometry/algorithms/detail/expand/box.hpp>
-#include <boost/geometry/algorithms/detail/expand/point.hpp>
-#include <boost/geometry/algorithms/detail/expand/segment.hpp>
-
-#include <boost/geometry/algorithms/dispatch/envelope.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace envelope
-{
-
-
-// implementation for simple ranges
-struct envelope_range
-{
- template <typename Iterator, typename Box, typename Strategy>
- static inline void apply(Iterator first,
- Iterator last,
- Box& mbr,
- Strategy const& strategy)
- {
- typedef typename std::iterator_traits<Iterator>::value_type value_type;
-
- // initialize MBR
- initialize<Box, 0, dimension<Box>::value>::apply(mbr);
-
- Iterator it = first;
- if (it != last)
- {
- // initialize box with first element in range
- dispatch::envelope<value_type>::apply(*it, mbr, strategy);
-
- // consider now the remaining elements in the range (if any)
- for (++it; it != last; ++it)
- {
- dispatch::expand<Box, value_type>::apply(mbr, *it, strategy);
- }
- }
- }
-
- template <typename Range, typename Box, typename Strategy>
- static inline void apply(Range const& range, Box& mbr, Strategy const& strategy)
- {
- return apply(boost::begin(range), boost::end(range), mbr, strategy);
- }
-};
-
-
-// implementation for multi-ranges
-template <typename EnvelopePolicy>
-struct envelope_multi_range
-{
- template <typename MultiRange, typename Box, typename Strategy>
- static inline void apply(MultiRange const& multirange,
- Box& mbr,
- Strategy const& strategy)
- {
- typedef typename boost::range_iterator
- <
- MultiRange const
- >::type iterator_type;
-
- bool initialized = false;
- for (iterator_type it = boost::begin(multirange);
- it != boost::end(multirange);
- ++it)
- {
- if (! geometry::is_empty(*it))
- {
- if (initialized)
- {
- Box helper_mbr;
- EnvelopePolicy::apply(*it, helper_mbr, strategy);
-
- dispatch::expand<Box, Box>::apply(mbr, helper_mbr, strategy);
- }
- else
- {
- // compute the initial envelope
- EnvelopePolicy::apply(*it, mbr, strategy);
- initialized = true;
- }
- }
- }
-
- if (! initialized)
- {
- // if not already initialized, initialize MBR
- initialize<Box, 0, dimension<Box>::value>::apply(mbr);
- }
- }
-};
-
-
-// implementation for multi-range on a spheroid (longitude is periodic)
-template <typename EnvelopePolicy>
-struct envelope_multi_range_on_spheroid
-{
- template <typename MultiRange, typename Box, typename Strategy>
- static inline void apply(MultiRange const& multirange,
- Box& mbr,
- Strategy const& strategy)
- {
- typedef typename boost::range_iterator
- <
- MultiRange const
- >::type iterator_type;
-
- // due to the periodicity of longitudes we need to compute the boxes
- // of all the single geometries and keep them in a container
- std::vector<Box> boxes;
- for (iterator_type it = boost::begin(multirange);
- it != boost::end(multirange);
- ++it)
- {
- if (! geometry::is_empty(*it))
- {
- Box helper_box;
- EnvelopePolicy::apply(*it, helper_box, strategy);
- boxes.push_back(helper_box);
- }
- }
-
- // now we need to compute the envelope of the range of boxes
- // (cannot be done in an incremental fashion as in the
- // Cartesian coordinate system)
- // if all single geometries are empty no boxes have been found
- // and the MBR is simply initialized
- if (! boxes.empty())
- {
- envelope_range_of_boxes::apply(boxes, mbr, strategy);
- }
- else
- {
- initialize<Box, 0, dimension<Box>::value>::apply(mbr);
- }
-
- }
-};
-
-
-}} // namespace detail::envelope
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/range_of_boxes.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/range_of_boxes.hpp
deleted file mode 100644
index 9b9e2f85d3c..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/range_of_boxes.hpp
+++ /dev/null
@@ -1,334 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_RANGE_OF_BOXES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_RANGE_OF_BOXES_HPP
-
-#include <cstddef>
-
-#include <algorithm>
-#include <vector>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
-#include <boost/geometry/algorithms/detail/max_interval_gap.hpp>
-#include <boost/geometry/algorithms/detail/expand/indexed.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace envelope
-{
-
-
-template <typename T>
-class longitude_interval
-{
- typedef T const& reference_type;
-
-public:
- typedef T value_type;
- typedef T difference_type;
-
- longitude_interval(T const& left, T const& right)
- {
- m_end[0] = left;
- m_end[1] = right;
- }
-
- template <std::size_t Index>
- reference_type get() const
- {
- return m_end[Index];
- }
-
- difference_type length() const
- {
- return get<1>() - get<0>();
- }
-
-private:
- T m_end[2];
-};
-
-
-template <typename Units>
-struct envelope_range_of_longitudes
-{
- template <std::size_t Index>
- struct longitude_less
- {
- template <typename Interval>
- inline bool operator()(Interval const& i1, Interval const& i2) const
- {
- return math::smaller(i1.template get<Index>(),
- i2.template get<Index>());
- }
- };
-
- template <typename RangeOfLongitudeIntervals, typename Longitude>
- static inline void apply(RangeOfLongitudeIntervals const& range,
- Longitude& lon_min, Longitude& lon_max)
- {
- typedef typename math::detail::constants_on_spheroid
- <
- Longitude, Units
- > constants;
-
- Longitude const zero = 0;
- Longitude const period = constants::period();
-
- lon_min = lon_max = zero;
-
- // the range of longitude intervals can be empty if all input boxes
- // degenerate to the north or south pole (or combination of the two)
- // in this case the initialization values for lon_min and
- // lon_max are valid choices
- if (! boost::empty(range))
- {
- lon_min = std::min_element(boost::begin(range),
- boost::end(range),
- longitude_less<0>())->template get<0>();
- lon_max = std::max_element(boost::begin(range),
- boost::end(range),
- longitude_less<1>())->template get<1>();
-
- if (math::larger(lon_max - lon_min, constants::half_period()))
- {
- Longitude max_gap_left, max_gap_right;
- Longitude max_gap = geometry::maximum_gap(range,
- max_gap_left,
- max_gap_right);
-
- BOOST_GEOMETRY_ASSERT(! math::larger(lon_min, lon_max));
- BOOST_GEOMETRY_ASSERT
- (! math::larger(lon_max, constants::max_longitude()));
- BOOST_GEOMETRY_ASSERT
- (! math::smaller(lon_min, constants::min_longitude()));
-
- BOOST_GEOMETRY_ASSERT
- (! math::larger(max_gap_left, max_gap_right));
- BOOST_GEOMETRY_ASSERT
- (! math::larger(max_gap_right, constants::max_longitude()));
- BOOST_GEOMETRY_ASSERT
- (! math::smaller(max_gap_left, constants::min_longitude()));
-
- if (math::larger(max_gap, zero))
- {
- Longitude wrapped_gap = period + lon_min - lon_max;
- if (math::larger(max_gap, wrapped_gap))
- {
- lon_min = max_gap_right;
- lon_max = max_gap_left + period;
- }
- }
- }
- }
- }
-};
-
-
-template <std::size_t Dimension, std::size_t DimensionCount>
-struct envelope_range_of_boxes_by_expansion
-{
- template <typename RangeOfBoxes, typename Box, typename Strategy>
- static inline void apply(RangeOfBoxes const& range_of_boxes,
- Box& mbr,
- Strategy const& strategy)
- {
- typedef typename boost::range_value<RangeOfBoxes>::type box_type;
-
- typedef typename boost::range_iterator
- <
- RangeOfBoxes const
- >::type iterator_type;
-
- // first initialize MBR
- detail::indexed_point_view<Box, min_corner> mbr_min(mbr);
- detail::indexed_point_view<Box, max_corner> mbr_max(mbr);
-
- detail::indexed_point_view<box_type const, min_corner>
- first_box_min(range::front(range_of_boxes));
-
- detail::indexed_point_view<box_type const, max_corner>
- first_box_max(range::front(range_of_boxes));
-
- detail::conversion::point_to_point
- <
- detail::indexed_point_view<box_type const, min_corner>,
- detail::indexed_point_view<Box, min_corner>,
- Dimension,
- DimensionCount
- >::apply(first_box_min, mbr_min);
-
- detail::conversion::point_to_point
- <
- detail::indexed_point_view<box_type const, max_corner>,
- detail::indexed_point_view<Box, max_corner>,
- Dimension,
- DimensionCount
- >::apply(first_box_max, mbr_max);
-
- // now expand using the remaining boxes
- iterator_type it = boost::begin(range_of_boxes);
- for (++it; it != boost::end(range_of_boxes); ++it)
- {
- detail::expand::indexed_loop
- <
- min_corner,
- Dimension,
- DimensionCount
- >::apply(mbr, *it, strategy);
-
- detail::expand::indexed_loop
- <
- max_corner,
- Dimension,
- DimensionCount
- >::apply(mbr, *it, strategy);
- }
- }
-
-};
-
-
-struct envelope_range_of_boxes
-{
- template <std::size_t Index>
- struct latitude_less
- {
- template <typename Box>
- inline bool operator()(Box const& box1, Box const& box2) const
- {
- return math::smaller(geometry::get<Index, 1>(box1),
- geometry::get<Index, 1>(box2));
- }
- };
-
- template <typename RangeOfBoxes, typename Box, typename Strategy>
- static inline void apply(RangeOfBoxes const& range_of_boxes,
- Box& mbr,
- Strategy const& strategy)
- {
- // boxes in the range are assumed to be normalized already
-
- typedef typename boost::range_value<RangeOfBoxes>::type box_type;
- typedef typename coordinate_type<box_type>::type coordinate_type;
- typedef typename coordinate_system<box_type>::type::units units_type;
- typedef typename boost::range_iterator
- <
- RangeOfBoxes const
- >::type iterator_type;
-
- static const bool is_equatorial = ! boost::is_same
- <
- typename cs_tag<box_type>::type,
- spherical_polar_tag
- >::value;
-
- typedef math::detail::constants_on_spheroid
- <
- coordinate_type, units_type, is_equatorial
- > constants;
-
- typedef longitude_interval<coordinate_type> interval_type;
- typedef std::vector<interval_type> interval_range_type;
-
- BOOST_GEOMETRY_ASSERT(! boost::empty(range_of_boxes));
-
- iterator_type it_min = std::min_element(boost::begin(range_of_boxes),
- boost::end(range_of_boxes),
- latitude_less<min_corner>());
- iterator_type it_max = std::max_element(boost::begin(range_of_boxes),
- boost::end(range_of_boxes),
- latitude_less<max_corner>());
-
- coordinate_type const min_longitude = constants::min_longitude();
- coordinate_type const max_longitude = constants::max_longitude();
- coordinate_type const period = constants::period();
-
- interval_range_type intervals;
- for (iterator_type it = boost::begin(range_of_boxes);
- it != boost::end(range_of_boxes);
- ++it)
- {
- coordinate_type lat_min = geometry::get<min_corner, 1>(*it);
- coordinate_type lat_max = geometry::get<max_corner, 1>(*it);
- if (math::equals(lat_min, constants::max_latitude())
- || math::equals(lat_max, constants::min_latitude()))
- {
- // if the box degenerates to the south or north pole
- // just ignore it
- continue;
- }
-
- coordinate_type lon_left = geometry::get<min_corner, 0>(*it);
- coordinate_type lon_right = geometry::get<max_corner, 0>(*it);
-
- if (math::larger(lon_right, max_longitude))
- {
- intervals.push_back(interval_type(lon_left, max_longitude));
- intervals.push_back
- (interval_type(min_longitude, lon_right - period));
- }
- else
- {
- intervals.push_back(interval_type(lon_left, lon_right));
- }
- }
-
- coordinate_type lon_min = 0;
- coordinate_type lon_max = 0;
- envelope_range_of_longitudes
- <
- units_type
- >::apply(intervals, lon_min, lon_max);
-
- // do not convert units; conversion will be performed at a
- // higher level
-
- // assign now the min/max longitude/latitude values
- detail::indexed_point_view<Box, min_corner> mbr_min(mbr);
- detail::indexed_point_view<Box, max_corner> mbr_max(mbr);
-
- geometry::set<0>(mbr_min, lon_min);
- geometry::set<1>(mbr_min, geometry::get<min_corner, 1>(*it_min));
- geometry::set<0>(mbr_max, lon_max);
- geometry::set<1>(mbr_max, geometry::get<max_corner, 1>(*it_max));
-
- // what remains to be done is to compute the envelope range
- // for the remaining dimensions (if any)
- envelope_range_of_boxes_by_expansion
- <
- 2, dimension<Box>::value
- >::apply(range_of_boxes, mbr, strategy);
- }
-};
-
-
-}} // namespace detail::envelope
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_RANGE_OF_BOXES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/segment.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/segment.hpp
deleted file mode 100644
index 1047b96bb65..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/segment.hpp
+++ /dev/null
@@ -1,499 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015-2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_SEGMENT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_SEGMENT_HPP
-
-#if defined(__GNUC__)
- #pragma GCC system_header
-#endif
-
-#include <cstddef>
-#include <utility>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/geometries/helper_geometry.hpp>
-
-#include <boost/geometry/formulas/vertex_latitude.hpp>
-
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-
-#include <boost/geometry/algorithms/detail/envelope/point.hpp>
-#include <boost/geometry/algorithms/detail/envelope/transform_units.hpp>
-
-#include <boost/geometry/algorithms/detail/expand/point.hpp>
-
-#include <boost/geometry/algorithms/dispatch/envelope.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace envelope
-{
-
-template <typename CalculationType, typename CS_Tag>
-struct envelope_segment_call_vertex_latitude
-{
- template <typename T1, typename T2, typename Strategy>
- static inline CalculationType apply(T1 const& lat1,
- T2 const& alp1,
- Strategy const& )
- {
- return geometry::formula::vertex_latitude<CalculationType, CS_Tag>
- ::apply(lat1, alp1);
- }
-};
-
-template <typename CalculationType>
-struct envelope_segment_call_vertex_latitude<CalculationType, geographic_tag>
-{
- template <typename T1, typename T2, typename Strategy>
- static inline CalculationType apply(T1 const& lat1,
- T2 const& alp1,
- Strategy const& strategy)
- {
- return geometry::formula::vertex_latitude<CalculationType, geographic_tag>
- ::apply(lat1, alp1, strategy.model());
- }
-};
-
-template <typename Units, typename CS_Tag>
-struct envelope_segment_convert_polar
-{
- template <typename T>
- static inline void pre(T & , T & ) {}
-
- template <typename T>
- static inline void post(T & , T & ) {}
-};
-
-template <typename Units>
-struct envelope_segment_convert_polar<Units, spherical_polar_tag>
-{
- template <typename T>
- static inline void pre(T & lat1, T & lat2)
- {
- lat1 = math::latitude_convert_ep<Units>(lat1);
- lat2 = math::latitude_convert_ep<Units>(lat2);
- }
-
- template <typename T>
- static inline void post(T & lat1, T & lat2)
- {
- lat1 = math::latitude_convert_ep<Units>(lat1);
- lat2 = math::latitude_convert_ep<Units>(lat2);
- std::swap(lat1, lat2);
- }
-};
-
-template <typename CS_Tag>
-class envelope_segment_impl
-{
-private:
-
- // degrees or radians
- template <typename CalculationType>
- static inline void swap(CalculationType& lon1,
- CalculationType& lat1,
- CalculationType& lon2,
- CalculationType& lat2)
- {
- std::swap(lon1, lon2);
- std::swap(lat1, lat2);
- }
-
- // radians
- template <typename CalculationType>
- static inline bool contains_pi_half(CalculationType const& a1,
- CalculationType const& a2)
- {
- // azimuths a1 and a2 are assumed to be in radians
- BOOST_GEOMETRY_ASSERT(! math::equals(a1, a2));
-
- static CalculationType const pi_half = math::half_pi<CalculationType>();
-
- return (a1 < a2)
- ? (a1 < pi_half && pi_half < a2)
- : (a1 > pi_half && pi_half > a2);
- }
-
- // radians or degrees
- template <typename Units, typename CoordinateType>
- static inline bool crosses_antimeridian(CoordinateType const& lon1,
- CoordinateType const& lon2)
- {
- typedef math::detail::constants_on_spheroid
- <
- CoordinateType, Units
- > constants;
-
- return math::abs(lon1 - lon2) > constants::half_period(); // > pi
- }
-
- // degrees or radians
- template <typename Units, typename CalculationType, typename Strategy>
- static inline void compute_box_corners(CalculationType& lon1,
- CalculationType& lat1,
- CalculationType& lon2,
- CalculationType& lat2,
- CalculationType a1,
- CalculationType a2,
- Strategy const& strategy)
- {
- // coordinates are assumed to be in radians
- BOOST_GEOMETRY_ASSERT(lon1 <= lon2);
-
- CalculationType lat1_rad = math::as_radian<Units>(lat1);
- CalculationType lat2_rad = math::as_radian<Units>(lat2);
-
- if (lat1 > lat2)
- {
- std::swap(lat1, lat2);
- std::swap(lat1_rad, lat2_rad);
- std::swap(a1, a2);
- }
-
- if (math::equals(a1, a2))
- {
- // the segment must lie on the equator or is very short
- return;
- }
-
- if (contains_pi_half(a1, a2))
- {
- CalculationType p_max = envelope_segment_call_vertex_latitude
- <CalculationType, CS_Tag>::apply(lat1_rad, a1, strategy);
-
- CalculationType const mid_lat = lat1 + lat2;
- if (mid_lat < 0)
- {
- // update using min latitude
- CalculationType const lat_min_rad = -p_max;
- CalculationType const lat_min
- = math::from_radian<Units>(lat_min_rad);
-
- if (lat1 > lat_min)
- {
- lat1 = lat_min;
- }
- }
- else
- {
- // update using max latitude
- CalculationType const lat_max_rad = p_max;
- CalculationType const lat_max
- = math::from_radian<Units>(lat_max_rad);
-
- if (lat2 < lat_max)
- {
- lat2 = lat_max;
- }
- }
- }
- }
-
- template <typename Units, typename CalculationType>
- static inline void special_cases(CalculationType& lon1,
- CalculationType& lat1,
- CalculationType& lon2,
- CalculationType& lat2)
- {
- typedef math::detail::constants_on_spheroid
- <
- CalculationType, Units
- > constants;
-
- bool is_pole1 = math::equals(math::abs(lat1), constants::max_latitude());
- bool is_pole2 = math::equals(math::abs(lat2), constants::max_latitude());
-
- if (is_pole1 && is_pole2)
- {
- // both points are poles; nothing more to do:
- // longitudes are already normalized to 0
- // but just in case
- lon1 = 0;
- lon2 = 0;
- }
- else if (is_pole1 && !is_pole2)
- {
- // first point is a pole, second point is not:
- // make the longitude of the first point the same as that
- // of the second point
- lon1 = lon2;
- }
- else if (!is_pole1 && is_pole2)
- {
- // second point is a pole, first point is not:
- // make the longitude of the second point the same as that
- // of the first point
- lon2 = lon1;
- }
-
- if (lon1 == lon2)
- {
- // segment lies on a meridian
- if (lat1 > lat2)
- {
- std::swap(lat1, lat2);
- }
- return;
- }
-
- BOOST_GEOMETRY_ASSERT(!is_pole1 && !is_pole2);
-
- if (lon1 > lon2)
- {
- swap(lon1, lat1, lon2, lat2);
- }
-
- if (crosses_antimeridian<Units>(lon1, lon2))
- {
- lon1 += constants::period();
- swap(lon1, lat1, lon2, lat2);
- }
- }
-
- template
- <
- typename Units,
- typename CalculationType,
- typename Box
- >
- static inline void create_box(CalculationType lon1,
- CalculationType lat1,
- CalculationType lon2,
- CalculationType lat2,
- Box& mbr)
- {
- typedef typename coordinate_type<Box>::type box_coordinate_type;
-
- typedef typename helper_geometry
- <
- Box, box_coordinate_type, Units
- >::type helper_box_type;
-
- helper_box_type helper_mbr;
-
- geometry::set
- <
- min_corner, 0
- >(helper_mbr, boost::numeric_cast<box_coordinate_type>(lon1));
-
- geometry::set
- <
- min_corner, 1
- >(helper_mbr, boost::numeric_cast<box_coordinate_type>(lat1));
-
- geometry::set
- <
- max_corner, 0
- >(helper_mbr, boost::numeric_cast<box_coordinate_type>(lon2));
-
- geometry::set
- <
- max_corner, 1
- >(helper_mbr, boost::numeric_cast<box_coordinate_type>(lat2));
-
- transform_units(helper_mbr, mbr);
- }
-
-
- template <typename Units, typename CalculationType, typename Strategy>
- static inline void apply(CalculationType& lon1,
- CalculationType& lat1,
- CalculationType& lon2,
- CalculationType& lat2,
- Strategy const& strategy)
- {
- special_cases<Units>(lon1, lat1, lon2, lat2);
-
- CalculationType lon1_rad = math::as_radian<Units>(lon1);
- CalculationType lat1_rad = math::as_radian<Units>(lat1);
- CalculationType lon2_rad = math::as_radian<Units>(lon2);
- CalculationType lat2_rad = math::as_radian<Units>(lat2);
- CalculationType alp1, alp2;
- strategy.apply(lon1_rad, lat1_rad, lon2_rad, lat2_rad, alp1, alp2);
-
- compute_box_corners<Units>(lon1, lat1, lon2, lat2, alp1, alp2, strategy);
- }
-
- template <typename Units, typename CalculationType, typename Strategy>
- static inline void apply(CalculationType& lon1,
- CalculationType& lat1,
- CalculationType& lon2,
- CalculationType& lat2,
- Strategy const& strategy,
- CalculationType alp1)
- {
- special_cases<Units>(lon1, lat1, lon2, lat2);
-
- CalculationType lon1_rad = math::as_radian<Units>(lon1);
- CalculationType lat1_rad = math::as_radian<Units>(lat1);
- CalculationType lon2_rad = math::as_radian<Units>(lon2);
- CalculationType lat2_rad = math::as_radian<Units>(lat2);
- CalculationType alp2;
- strategy.apply(lon2_rad, lat2_rad, lon1_rad, lat1_rad, alp2);
- alp2 += math::pi<CalculationType>();
-
- compute_box_corners<Units>(lon1, lat1, lon2, lat2, alp1, alp2, strategy);
- }
-
-public:
- template
- <
- typename Units,
- typename CalculationType,
- typename Box,
- typename Strategy
- >
- static inline void apply(CalculationType lon1,
- CalculationType lat1,
- CalculationType lon2,
- CalculationType lat2,
- Box& mbr,
- Strategy const& strategy)
- {
- typedef envelope_segment_convert_polar<Units, typename cs_tag<Box>::type> convert_polar;
-
- convert_polar::pre(lat1, lat2);
-
- apply<Units>(lon1, lat1, lon2, lat2, strategy);
-
- convert_polar::post(lat1, lat2);
-
- create_box<Units>(lon1, lat1, lon2, lat2, mbr);
- }
-
- template
- <
- typename Units,
- typename CalculationType,
- typename Box,
- typename Strategy
- >
- static inline void apply(CalculationType lon1,
- CalculationType lat1,
- CalculationType lon2,
- CalculationType lat2,
- Box& mbr,
- Strategy const& strategy,
- CalculationType alp1)
- {
- typedef envelope_segment_convert_polar<Units, typename cs_tag<Box>::type> convert_polar;
-
- convert_polar::pre(lat1, lat2);
-
- apply<Units>(lon1, lat1, lon2, lat2, strategy, alp1);
-
- convert_polar::post(lat1, lat2);
-
- create_box<Units>(lon1, lat1, lon2, lat2, mbr);
- }
-};
-
-template <std::size_t Dimension, std::size_t DimensionCount>
-struct envelope_one_segment
-{
- template<typename Point, typename Box, typename Strategy>
- static inline void apply(Point const& p1,
- Point const& p2,
- Box& mbr,
- Strategy const& strategy)
- {
- envelope_one_point<Dimension, DimensionCount>::apply(p1, mbr, strategy);
- detail::expand::point_loop
- <
- Dimension,
- DimensionCount
- >::apply(mbr, p2, strategy);
- }
-};
-
-
-template <std::size_t DimensionCount>
-struct envelope_segment
-{
- template <typename Point, typename Box, typename Strategy>
- static inline void apply(Point const& p1,
- Point const& p2,
- Box& mbr,
- Strategy const& strategy)
- {
- // first compute the envelope range for the first two coordinates
- strategy.apply(p1, p2, mbr);
-
- // now compute the envelope range for coordinates of
- // dimension 2 and higher
- envelope_one_segment<2, DimensionCount>::apply(p1, p2, mbr, strategy);
- }
-
- template <typename Segment, typename Box, typename Strategy>
- static inline void apply(Segment const& segment, Box& mbr,
- Strategy const& strategy)
- {
- typename point_type<Segment>::type p[2];
- detail::assign_point_from_index<0>(segment, p[0]);
- detail::assign_point_from_index<1>(segment, p[1]);
- apply(p[0], p[1], mbr, strategy);
- }
-};
-
-}} // namespace detail::envelope
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Segment>
-struct envelope<Segment, segment_tag>
-{
- template <typename Box, typename Strategy>
- static inline void apply(Segment const& segment,
- Box& mbr,
- Strategy const& strategy)
- {
- typename point_type<Segment>::type p[2];
- detail::assign_point_from_index<0>(segment, p[0]);
- detail::assign_point_from_index<1>(segment, p[1]);
- detail::envelope::envelope_segment
- <
- dimension<Segment>::value
- >::apply(p[0], p[1], mbr, strategy);
- }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_SEGMENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/transform_units.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/transform_units.hpp
deleted file mode 100644
index 790f6e386bb..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/envelope/transform_units.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_TRANSFORM_UNITS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_TRANSFORM_UNITS_HPP
-
-#include <cstddef>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/strategy_transform.hpp>
-
-#include <boost/geometry/views/detail/indexed_point_view.hpp>
-#include <boost/geometry/views/detail/two_dimensional_view.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/algorithms/transform.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace envelope
-{
-
-
-template
-<
- typename GeometryIn,
- typename GeometryOut,
- typename TagIn = typename tag<GeometryIn>::type,
- typename TagOut = typename tag<GeometryOut>::type
->
-struct transform_units_impl
- : not_implemented<TagIn, TagOut>
-{};
-
-template <typename PointIn, typename PointOut>
-struct transform_units_impl<PointIn, PointOut, point_tag, point_tag>
-{
- static inline void apply(PointIn const& point_in, PointOut& point_out)
- {
- detail::two_dimensional_view<PointIn const> view_in(point_in);
- detail::two_dimensional_view<PointOut> view_out(point_out);
-
- geometry::transform(view_in, view_out);
- }
-};
-
-template <typename BoxIn, typename BoxOut>
-struct transform_units_impl<BoxIn, BoxOut, box_tag, box_tag>
-{
- template <std::size_t Index>
- static inline void apply(BoxIn const& box_in, BoxOut& box_out)
- {
- typedef detail::indexed_point_view<BoxIn const, Index> view_in_type;
- typedef detail::indexed_point_view<BoxOut, Index> view_out_type;
-
- view_in_type view_in(box_in);
- view_out_type view_out(box_out);
-
- transform_units_impl
- <
- view_in_type, view_out_type
- >::apply(view_in, view_out);
- }
-
- static inline void apply(BoxIn const& box_in, BoxOut& box_out)
- {
- apply<min_corner>(box_in, box_out);
- apply<max_corner>(box_in, box_out);
- }
-};
-
-
-// Short utility to transform the units of the first two coordinates of
-// geometry_in to the units of geometry_out
-template <typename GeometryIn, typename GeometryOut>
-inline void transform_units(GeometryIn const& geometry_in,
- GeometryOut& geometry_out)
-{
- transform_units_impl
- <
- GeometryIn, GeometryOut
- >::apply(geometry_in, geometry_out);
-}
-
-
-}} // namespace detail::envelope
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost:geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_TRANSFORM_UNITS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp
deleted file mode 100644
index 9625f184264..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/equals/collect_vectors.hpp
+++ /dev/null
@@ -1,575 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_COLLECT_VECTORS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_COLLECT_VECTORS_HPP
-
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-#include <boost/geometry/algorithms/detail/normalize.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/formulas/spherical.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/views/detail/normalized_view.hpp>
-
-#include <boost/geometry/strategies/cartesian/side_by_triangle.hpp>
-#include <boost/geometry/strategies/spherical/ssf.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-// TODO: dispatch only by SideStrategy instead of Geometry/CSTag?
-
-// Since these vectors (though ray would be a better name) are used in the
-// implementation of equals() for Areal geometries the internal representation
-// should be consistent with the side strategy.
-template
-<
- typename T,
- typename Geometry,
- typename SideStrategy,
- typename CSTag = typename cs_tag<Geometry>::type
->
-struct collected_vector
- : nyi::not_implemented_tag
-{};
-
-// compatible with side_by_triangle cartesian strategy
-template <typename T, typename Geometry, typename CT, typename CSTag>
-struct collected_vector
- <
- T, Geometry, strategy::side::side_by_triangle<CT>, CSTag
- >
-{
- typedef T type;
-
- inline collected_vector()
- {}
-
- inline collected_vector(T const& px, T const& py,
- T const& pdx, T const& pdy)
- : x(px)
- , y(py)
- , dx(pdx)
- , dy(pdy)
- //, dx_0(dx)
- //, dy_0(dy)
- {}
-
- template <typename Point>
- inline collected_vector(Point const& p1, Point const& p2)
- : x(get<0>(p1))
- , y(get<1>(p1))
- , dx(get<0>(p2) - x)
- , dy(get<1>(p2) - y)
- //, dx_0(dx)
- //, dy_0(dy)
- {}
-
- bool normalize()
- {
- T magnitude = math::sqrt(
- boost::numeric_cast<T>(dx * dx + dy * dy));
-
- // NOTE: shouldn't here math::equals() be called?
- if (magnitude > 0)
- {
- dx /= magnitude;
- dy /= magnitude;
- return true;
- }
-
- return false;
- }
-
- // For sorting
- inline bool operator<(collected_vector const& other) const
- {
- if (math::equals(x, other.x))
- {
- if (math::equals(y, other.y))
- {
- if (math::equals(dx, other.dx))
- {
- return dy < other.dy;
- }
- return dx < other.dx;
- }
- return y < other.y;
- }
- return x < other.x;
- }
-
- inline bool next_is_collinear(collected_vector const& other) const
- {
- return same_direction(other);
- }
-
- // For std::equals
- inline bool operator==(collected_vector const& other) const
- {
- return math::equals(x, other.x)
- && math::equals(y, other.y)
- && same_direction(other);
- }
-
-private:
- inline bool same_direction(collected_vector const& other) const
- {
- // For high precision arithmetic, we have to be
- // more relaxed then using ==
- // Because 2/sqrt( (0,0)<->(2,2) ) == 1/sqrt( (0,0)<->(1,1) )
- // is not always true (at least, it is not for ttmath)
- return math::equals_with_epsilon(dx, other.dx)
- && math::equals_with_epsilon(dy, other.dy);
- }
-
- T x, y;
- T dx, dy;
- //T dx_0, dy_0;
-};
-
-// Compatible with spherical_side_formula which currently
-// is the default spherical and geographical strategy
-template <typename T, typename Geometry, typename CT, typename CSTag>
-struct collected_vector
- <
- T, Geometry, strategy::side::spherical_side_formula<CT>, CSTag
- >
-{
- typedef T type;
-
- typedef typename coordinate_system<Geometry>::type cs_type;
- typedef model::point<T, 2, cs_type> point_type;
- typedef model::point<T, 3, cs::cartesian> vector_type;
-
- collected_vector()
- {}
-
- template <typename Point>
- collected_vector(Point const& p1, Point const& p2)
- : origin(get<0>(p1), get<1>(p1))
- {
- origin = detail::return_normalized<point_type>(origin);
-
- using namespace geometry::formula;
- prev = sph_to_cart3d<vector_type>(p1);
- next = sph_to_cart3d<vector_type>(p2);
- direction = cross_product(prev, next);
- }
-
- bool normalize()
- {
- T magnitude_sqr = dot_product(direction, direction);
-
- // NOTE: shouldn't here math::equals() be called?
- if (magnitude_sqr > 0)
- {
- divide_value(direction, math::sqrt(magnitude_sqr));
- return true;
- }
-
- return false;
- }
-
- bool operator<(collected_vector const& other) const
- {
- if (math::equals(get<0>(origin), get<0>(other.origin)))
- {
- if (math::equals(get<1>(origin), get<1>(other.origin)))
- {
- if (math::equals(get<0>(direction), get<0>(other.direction)))
- {
- if (math::equals(get<1>(direction), get<1>(other.direction)))
- {
- return get<2>(direction) < get<2>(other.direction);
- }
- return get<1>(direction) < get<1>(other.direction);
- }
- return get<0>(direction) < get<0>(other.direction);
- }
- return get<1>(origin) < get<1>(other.origin);
- }
- return get<0>(origin) < get<0>(other.origin);
- }
-
- // For consistency with side and intersection strategies used by relops
- // IMPORTANT: this method should be called for previous vector
- // and next vector should be passed as parameter
- bool next_is_collinear(collected_vector const& other) const
- {
- return formula::sph_side_value(direction, other.next) == 0;
- }
-
- // For std::equals
- bool operator==(collected_vector const& other) const
- {
- return math::equals(get<0>(origin), get<0>(other.origin))
- && math::equals(get<1>(origin), get<1>(other.origin))
- && is_collinear(other);
- }
-
-private:
- // For consistency with side and intersection strategies used by relops
- bool is_collinear(collected_vector const& other) const
- {
- return formula::sph_side_value(direction, other.prev) == 0
- && formula::sph_side_value(direction, other.next) == 0;
- }
-
- /*bool same_direction(collected_vector const& other) const
- {
- return math::equals_with_epsilon(get<0>(direction), get<0>(other.direction))
- && math::equals_with_epsilon(get<1>(direction), get<1>(other.direction))
- && math::equals_with_epsilon(get<2>(direction), get<2>(other.direction));
- }*/
-
- point_type origin; // used for sorting and equality check
- vector_type direction; // used for sorting, only in operator<
- vector_type prev; // used for collinearity check, only in operator==
- vector_type next; // used for collinearity check
-};
-
-// Specialization for spherical polar
-template <typename T, typename Geometry, typename CT>
-struct collected_vector
- <
- T, Geometry,
- strategy::side::spherical_side_formula<CT>,
- spherical_polar_tag
- >
- : public collected_vector
- <
- T, Geometry,
- strategy::side::spherical_side_formula<CT>,
- spherical_equatorial_tag
- >
-{
- typedef collected_vector
- <
- T, Geometry,
- strategy::side::spherical_side_formula<CT>,
- spherical_equatorial_tag
- > base_type;
-
- collected_vector() {}
-
- template <typename Point>
- collected_vector(Point const& p1, Point const& p2)
- : base_type(to_equatorial(p1), to_equatorial(p2))
- {}
-
-private:
- template <typename Point>
- Point polar_to_equatorial(Point const& p)
- {
- typedef typename coordinate_type<Point>::type coord_type;
-
- typedef math::detail::constants_on_spheroid
- <
- coord_type,
- typename coordinate_system<Point>::type::units
- > constants;
-
- coord_type const pi_2 = constants::half_period() / 2;
-
- Point res = p;
- set<1>(res, pi_2 - get<1>(p));
- return res;
- }
-};
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace collect_vectors
-{
-
-
-template <typename Range, typename Collection>
-struct range_collect_vectors
-{
- typedef typename boost::range_value<Collection>::type item_type;
- typedef typename item_type::type calculation_type;
-
- static inline void apply(Collection& collection, Range const& range)
- {
- typedef geometry::detail::normalized_view
- <
- Range const
- > normalized_range_type;
-
- apply_impl(collection, normalized_range_type(range));
- }
-
-private:
- template <typename NormalizedRange>
- static inline void apply_impl(Collection& collection, NormalizedRange const& range)
- {
- if (boost::size(range) < 2)
- {
- return;
- }
-
- typedef typename boost::range_size<Collection>::type collection_size_t;
- collection_size_t c_old_size = boost::size(collection);
-
- typedef typename boost::range_iterator<NormalizedRange const>::type iterator;
-
- bool is_first = true;
- iterator it = boost::begin(range);
-
- for (iterator prev = it++;
- it != boost::end(range);
- prev = it++)
- {
- typename boost::range_value<Collection>::type v(*prev, *it);
-
- // Normalize the vector -> this results in points+direction
- // and is comparible between geometries
- // Avoid non-duplicate points (AND division by zero)
- if (v.normalize())
- {
- // Avoid non-direction changing points
- if (is_first || ! collection.back().next_is_collinear(v))
- {
- collection.push_back(v);
- }
- is_first = false;
- }
- }
-
- // If first one has same direction as last one, remove first one
- collection_size_t collected_count = boost::size(collection) - c_old_size;
- if ( collected_count > 1 )
- {
- typedef typename boost::range_iterator<Collection>::type c_iterator;
- c_iterator first = range::pos(collection, c_old_size);
-
- if (collection.back().next_is_collinear(*first) )
- {
- //collection.erase(first);
- // O(1) instead of O(N)
- *first = collection.back();
- collection.pop_back();
- }
- }
- }
-};
-
-
-// Default version (cartesian)
-template <typename Box, typename Collection, typename CSTag = typename cs_tag<Box>::type>
-struct box_collect_vectors
-{
- // Calculate on coordinate type, but if it is integer,
- // then use double
- typedef typename boost::range_value<Collection>::type item_type;
- typedef typename item_type::type calculation_type;
-
- static inline void apply(Collection& collection, Box const& box)
- {
- typename point_type<Box>::type lower_left, lower_right,
- upper_left, upper_right;
- geometry::detail::assign_box_corners(box, lower_left, lower_right,
- upper_left, upper_right);
-
- typedef typename boost::range_value<Collection>::type item;
-
- collection.push_back(item(get<0>(lower_left), get<1>(lower_left), 0, 1));
- collection.push_back(item(get<0>(upper_left), get<1>(upper_left), 1, 0));
- collection.push_back(item(get<0>(upper_right), get<1>(upper_right), 0, -1));
- collection.push_back(item(get<0>(lower_right), get<1>(lower_right), -1, 0));
- }
-};
-
-// NOTE: This is not fully correct because Box in spherical and geographic
-// cordinate systems cannot be seen as Polygon
-template <typename Box, typename Collection>
-struct box_collect_vectors<Box, Collection, spherical_equatorial_tag>
-{
- static inline void apply(Collection& collection, Box const& box)
- {
- typename point_type<Box>::type lower_left, lower_right,
- upper_left, upper_right;
- geometry::detail::assign_box_corners(box, lower_left, lower_right,
- upper_left, upper_right);
-
- typedef typename boost::range_value<Collection>::type item;
-
- collection.push_back(item(lower_left, upper_left));
- collection.push_back(item(upper_left, upper_right));
- collection.push_back(item(upper_right, lower_right));
- collection.push_back(item(lower_right, lower_left));
- }
-};
-
-template <typename Box, typename Collection>
-struct box_collect_vectors<Box, Collection, spherical_polar_tag>
- : box_collect_vectors<Box, Collection, spherical_equatorial_tag>
-{};
-
-template <typename Box, typename Collection>
-struct box_collect_vectors<Box, Collection, geographic_tag>
- : box_collect_vectors<Box, Collection, spherical_equatorial_tag>
-{};
-
-
-template <typename Polygon, typename Collection>
-struct polygon_collect_vectors
-{
- static inline void apply(Collection& collection, Polygon const& polygon)
- {
- typedef typename geometry::ring_type<Polygon>::type ring_type;
-
- typedef range_collect_vectors<ring_type, Collection> per_range;
- per_range::apply(collection, exterior_ring(polygon));
-
- typename interior_return_type<Polygon const>::type
- rings = interior_rings(polygon);
- for (typename detail::interior_iterator<Polygon const>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- per_range::apply(collection, *it);
- }
- }
-};
-
-
-template <typename MultiGeometry, typename Collection, typename SinglePolicy>
-struct multi_collect_vectors
-{
- static inline void apply(Collection& collection, MultiGeometry const& multi)
- {
- for (typename boost::range_iterator<MultiGeometry const>::type
- it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- SinglePolicy::apply(collection, *it);
- }
- }
-};
-
-
-}} // namespace detail::collect_vectors
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Tag,
- typename Collection,
- typename Geometry
->
-struct collect_vectors
-{
- static inline void apply(Collection&, Geometry const&)
- {}
-};
-
-
-template <typename Collection, typename Box>
-struct collect_vectors<box_tag, Collection, Box>
- : detail::collect_vectors::box_collect_vectors<Box, Collection>
-{};
-
-
-
-template <typename Collection, typename Ring>
-struct collect_vectors<ring_tag, Collection, Ring>
- : detail::collect_vectors::range_collect_vectors<Ring, Collection>
-{};
-
-
-template <typename Collection, typename LineString>
-struct collect_vectors<linestring_tag, Collection, LineString>
- : detail::collect_vectors::range_collect_vectors<LineString, Collection>
-{};
-
-
-template <typename Collection, typename Polygon>
-struct collect_vectors<polygon_tag, Collection, Polygon>
- : detail::collect_vectors::polygon_collect_vectors<Polygon, Collection>
-{};
-
-
-template <typename Collection, typename MultiPolygon>
-struct collect_vectors<multi_polygon_tag, Collection, MultiPolygon>
- : detail::collect_vectors::multi_collect_vectors
- <
- MultiPolygon,
- Collection,
- detail::collect_vectors::polygon_collect_vectors
- <
- typename boost::range_value<MultiPolygon>::type,
- Collection
- >
- >
-{};
-
-
-
-} // namespace dispatch
-#endif
-
-
-/*!
- \ingroup collect_vectors
- \tparam Collection Collection type, should be e.g. std::vector<>
- \tparam Geometry geometry type
- \param collection the collection of vectors
- \param geometry the geometry to make collect_vectors
-*/
-template <typename Collection, typename Geometry>
-inline void collect_vectors(Collection& collection, Geometry const& geometry)
-{
- concepts::check<Geometry const>();
-
- dispatch::collect_vectors
- <
- typename tag<Geometry>::type,
- Collection,
- Geometry
- >::apply(collection, geometry);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_COLLECT_VECTORS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/equals/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/equals/implementation.hpp
deleted file mode 100644
index 310059a4271..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/equals/implementation.hpp
+++ /dev/null
@@ -1,397 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014, 2015, 2016, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_IMPLEMENTATION_HPP
-
-
-#include <cstddef>
-#include <vector>
-
-#include <boost/range.hpp>
-#include <boost/type_traits/is_base_of.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-
-// For trivial checks
-#include <boost/geometry/algorithms/area.hpp>
-#include <boost/geometry/algorithms/length.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-#include <boost/geometry/algorithms/detail/equals/collect_vectors.hpp>
-#include <boost/geometry/algorithms/detail/equals/interface.hpp>
-#include <boost/geometry/algorithms/detail/relate/relate_impl.hpp>
-#include <boost/geometry/algorithms/relate.hpp>
-
-#include <boost/geometry/views/detail/indexed_point_view.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace equals
-{
-
-
-template
-<
- std::size_t Dimension,
- std::size_t DimensionCount
->
-struct point_point
-{
- template <typename Point1, typename Point2, typename Strategy>
- static inline bool apply(Point1 const& point1, Point2 const& point2, Strategy const& strategy)
- {
- return ! detail::disjoint::point_point
- <
- Point1, Point2,
- Dimension, DimensionCount
- >::apply(point1, point2, strategy);
- }
-};
-
-
-template
-<
- std::size_t Dimension,
- std::size_t DimensionCount
->
-struct box_box
-{
- template <typename Box1, typename Box2, typename Strategy>
- static inline bool apply(Box1 const& box1, Box2 const& box2, Strategy const& strategy)
- {
- if (!geometry::math::equals(get<min_corner, Dimension>(box1), get<min_corner, Dimension>(box2))
- || !geometry::math::equals(get<max_corner, Dimension>(box1), get<max_corner, Dimension>(box2)))
- {
- return false;
- }
- return box_box<Dimension + 1, DimensionCount>::apply(box1, box2, strategy);
- }
-};
-
-template <std::size_t DimensionCount>
-struct box_box<DimensionCount, DimensionCount>
-{
- template <typename Box1, typename Box2, typename Strategy>
- static inline bool apply(Box1 const& , Box2 const& , Strategy const& )
- {
- return true;
- }
-};
-
-
-struct segment_segment
-{
- template <typename Segment1, typename Segment2, typename Strategy>
- static inline bool apply(Segment1 const& segment1, Segment2 const& segment2, Strategy const& )
- {
- return equals::equals_point_point(
- indexed_point_view<Segment1 const, 0>(segment1),
- indexed_point_view<Segment2 const, 0>(segment2) )
- ? equals::equals_point_point(
- indexed_point_view<Segment1 const, 1>(segment1),
- indexed_point_view<Segment2 const, 1>(segment2) )
- : ( equals::equals_point_point(
- indexed_point_view<Segment1 const, 0>(segment1),
- indexed_point_view<Segment2 const, 1>(segment2) )
- && equals::equals_point_point(
- indexed_point_view<Segment1 const, 1>(segment1),
- indexed_point_view<Segment2 const, 0>(segment2) )
- );
- }
-};
-
-
-struct area_check
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return geometry::math::equals(
- geometry::area(geometry1,
- strategy.template get_area_strategy<Geometry1>()),
- geometry::area(geometry2,
- strategy.template get_area_strategy<Geometry2>()));
- }
-};
-
-
-struct length_check
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return geometry::math::equals(
- geometry::length(geometry1,
- strategy.template get_distance_strategy<Geometry1>()),
- geometry::length(geometry2,
- strategy.template get_distance_strategy<Geometry2>()));
- }
-};
-
-
-template <typename Geometry1, typename Geometry2, typename IntersectionStrategy>
-struct collected_vector
-{
- typedef typename geometry::select_most_precise
- <
- typename select_coordinate_type
- <
- Geometry1, Geometry2
- >::type,
- double
- >::type calculation_type;
-
- typedef geometry::collected_vector
- <
- calculation_type,
- Geometry1,
- typename IntersectionStrategy::side_strategy_type
- > type;
-};
-
-template <typename TrivialCheck>
-struct equals_by_collection
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- if (! TrivialCheck::apply(geometry1, geometry2, strategy))
- {
- return false;
- }
-
- typedef typename collected_vector
- <
- Geometry1, Geometry2, Strategy
- >::type collected_vector_type;
-
- std::vector<collected_vector_type> c1, c2;
-
- geometry::collect_vectors(c1, geometry1);
- geometry::collect_vectors(c2, geometry2);
-
- if (boost::size(c1) != boost::size(c2))
- {
- return false;
- }
-
- std::sort(c1.begin(), c1.end());
- std::sort(c2.begin(), c2.end());
-
- // Just check if these vectors are equal.
- return std::equal(c1.begin(), c1.end(), c2.begin());
- }
-};
-
-template<typename Geometry1, typename Geometry2>
-struct equals_by_relate
- : detail::relate::relate_impl
- <
- detail::de9im::static_mask_equals_type,
- Geometry1,
- Geometry2
- >
-{};
-
-// If collect_vectors which is a SideStrategy-dispatched optimization
-// is implemented in a way consistent with the Intersection/Side Strategy
-// then collect_vectors is used, otherwise relate is used.
-// NOTE: the result could be conceptually different for invalid
-// geometries in different coordinate systems because collect_vectors
-// and relate treat invalid geometries differently.
-template<typename TrivialCheck>
-struct equals_by_collection_or_relate
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- typedef typename boost::is_base_of
- <
- nyi::not_implemented_tag,
- typename collected_vector
- <
- Geometry1, Geometry2, Strategy
- >::type
- >::type enable_relate_type;
-
- return apply(geometry1, geometry2, strategy, enable_relate_type());
- }
-
-private:
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy,
- boost::false_type /*enable_relate*/)
- {
- return equals_by_collection<TrivialCheck>::apply(geometry1, geometry2, strategy);
- }
-
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy,
- boost::true_type /*enable_relate*/)
- {
- return equals_by_relate<Geometry1, Geometry2>::apply(geometry1, geometry2, strategy);
- }
-};
-
-
-}} // namespace detail::equals
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename P1, typename P2, std::size_t DimensionCount, bool Reverse>
-struct equals<P1, P2, point_tag, point_tag, DimensionCount, Reverse>
- : detail::equals::point_point<0, DimensionCount>
-{};
-
-template <typename MultiPoint1, typename MultiPoint2, std::size_t DimensionCount, bool Reverse>
-struct equals<MultiPoint1, MultiPoint2, multi_point_tag, multi_point_tag, DimensionCount, Reverse>
- : detail::equals::equals_by_relate<MultiPoint1, MultiPoint2>
-{};
-
-template <typename MultiPoint, typename Point, std::size_t DimensionCount, bool Reverse>
-struct equals<Point, MultiPoint, point_tag, multi_point_tag, DimensionCount, Reverse>
- : detail::equals::equals_by_relate<Point, MultiPoint>
-{};
-
-template <typename Box1, typename Box2, std::size_t DimensionCount, bool Reverse>
-struct equals<Box1, Box2, box_tag, box_tag, DimensionCount, Reverse>
- : detail::equals::box_box<0, DimensionCount>
-{};
-
-
-template <typename Ring1, typename Ring2, bool Reverse>
-struct equals<Ring1, Ring2, ring_tag, ring_tag, 2, Reverse>
- : detail::equals::equals_by_collection_or_relate<detail::equals::area_check>
-{};
-
-
-template <typename Polygon1, typename Polygon2, bool Reverse>
-struct equals<Polygon1, Polygon2, polygon_tag, polygon_tag, 2, Reverse>
- : detail::equals::equals_by_collection_or_relate<detail::equals::area_check>
-{};
-
-
-template <typename Polygon, typename Ring, bool Reverse>
-struct equals<Polygon, Ring, polygon_tag, ring_tag, 2, Reverse>
- : detail::equals::equals_by_collection_or_relate<detail::equals::area_check>
-{};
-
-
-template <typename Ring, typename Box, bool Reverse>
-struct equals<Ring, Box, ring_tag, box_tag, 2, Reverse>
- : detail::equals::equals_by_collection<detail::equals::area_check>
-{};
-
-
-template <typename Polygon, typename Box, bool Reverse>
-struct equals<Polygon, Box, polygon_tag, box_tag, 2, Reverse>
- : detail::equals::equals_by_collection<detail::equals::area_check>
-{};
-
-template <typename Segment1, typename Segment2, std::size_t DimensionCount, bool Reverse>
-struct equals<Segment1, Segment2, segment_tag, segment_tag, DimensionCount, Reverse>
- : detail::equals::segment_segment
-{};
-
-template <typename LineString1, typename LineString2, bool Reverse>
-struct equals<LineString1, LineString2, linestring_tag, linestring_tag, 2, Reverse>
- : detail::equals::equals_by_relate<LineString1, LineString2>
-{};
-
-template <typename LineString, typename MultiLineString, bool Reverse>
-struct equals<LineString, MultiLineString, linestring_tag, multi_linestring_tag, 2, Reverse>
- : detail::equals::equals_by_relate<LineString, MultiLineString>
-{};
-
-template <typename MultiLineString1, typename MultiLineString2, bool Reverse>
-struct equals<MultiLineString1, MultiLineString2, multi_linestring_tag, multi_linestring_tag, 2, Reverse>
- : detail::equals::equals_by_relate<MultiLineString1, MultiLineString2>
-{};
-
-
-template <typename MultiPolygon1, typename MultiPolygon2, bool Reverse>
-struct equals
- <
- MultiPolygon1, MultiPolygon2,
- multi_polygon_tag, multi_polygon_tag,
- 2,
- Reverse
- >
- : detail::equals::equals_by_collection_or_relate<detail::equals::area_check>
-{};
-
-
-template <typename Polygon, typename MultiPolygon, bool Reverse>
-struct equals
- <
- Polygon, MultiPolygon,
- polygon_tag, multi_polygon_tag,
- 2,
- Reverse
- >
- : detail::equals::equals_by_collection_or_relate<detail::equals::area_check>
-{};
-
-template <typename MultiPolygon, typename Ring, bool Reverse>
-struct equals
- <
- MultiPolygon, Ring,
- multi_polygon_tag, ring_tag,
- 2,
- Reverse
- >
- : detail::equals::equals_by_collection_or_relate<detail::equals::area_check>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_IMPLEMENTATION_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/equals/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/equals/interface.hpp
deleted file mode 100644
index eacf95e9fe4..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/equals/interface.hpp
+++ /dev/null
@@ -1,317 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014, 2015, 2016, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_INTERFACE_HPP
-
-
-#include <cstddef>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/reverse_dispatch.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/relate.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename tag<Geometry1>::type,
- typename Tag2 = typename tag<Geometry2>::type,
- std::size_t DimensionCount = dimension<Geometry1>::type::value,
- bool Reverse = reverse_dispatch<Geometry1, Geometry2>::type::value
->
-struct equals: not_implemented<Tag1, Tag2>
-{};
-
-
-// If reversal is needed, perform it
-template
-<
- typename Geometry1, typename Geometry2,
- typename Tag1, typename Tag2,
- std::size_t DimensionCount
->
-struct equals<Geometry1, Geometry2, Tag1, Tag2, DimensionCount, true>
- : equals<Geometry2, Geometry1, Tag2, Tag1, DimensionCount, false>
-{
- template <typename Strategy>
- static inline bool apply(Geometry1 const& g1, Geometry2 const& g2, Strategy const& strategy)
- {
- return equals
- <
- Geometry2, Geometry1,
- Tag2, Tag1,
- DimensionCount,
- false
- >::apply(g2, g1, strategy);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy
-{
-
-struct equals
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return dispatch::equals
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, strategy);
- }
-
- template <typename Geometry1, typename Geometry2>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- default_strategy)
- {
- typedef typename strategy::relate::services::default_strategy
- <
- Geometry1,
- Geometry2
- >::type strategy_type;
-
- return dispatch::equals
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant {
-
-template <typename Geometry1, typename Geometry2>
-struct equals
-{
- template <typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- concepts::check_concepts_and_equal_dimensions
- <
- Geometry1 const,
- Geometry2 const
- >();
-
- return resolve_strategy::equals
- ::apply(geometry1, geometry2, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct equals<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename Strategy>
- struct visitor: static_visitor<bool>
- {
- Geometry2 const& m_geometry2;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2, Strategy const& strategy)
- : m_geometry2(geometry2)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1>
- inline bool operator()(Geometry1 const& geometry1) const
- {
- return equals<Geometry1, Geometry2>
- ::apply(geometry1, m_geometry2, m_strategy);
- }
-
- };
-
- template <typename Strategy>
- static inline bool apply(
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy
- )
- {
- return boost::apply_visitor(visitor<Strategy>(geometry2, strategy), geometry1);
- }
-};
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct equals<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Strategy>
- struct visitor: static_visitor<bool>
- {
- Geometry1 const& m_geometry1;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1, Strategy const& strategy)
- : m_geometry1(geometry1)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry2>
- inline bool operator()(Geometry2 const& geometry2) const
- {
- return equals<Geometry1, Geometry2>
- ::apply(m_geometry1, geometry2, m_strategy);
- }
-
- };
-
- template <typename Strategy>
- static inline bool apply(
- Geometry1 const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- Strategy const& strategy
- )
- {
- return boost::apply_visitor(visitor<Strategy>(geometry1, strategy), geometry2);
- }
-};
-
-template <
- BOOST_VARIANT_ENUM_PARAMS(typename T1),
- BOOST_VARIANT_ENUM_PARAMS(typename T2)
->
-struct equals<
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
->
-{
- template <typename Strategy>
- struct visitor: static_visitor<bool>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Geometry1, typename Geometry2>
- inline bool operator()(Geometry1 const& geometry1,
- Geometry2 const& geometry2) const
- {
- return equals<Geometry1, Geometry2>
- ::apply(geometry1, geometry2, m_strategy);
- }
-
- };
-
- template <typename Strategy>
- static inline bool apply(
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Strategy const& strategy
- )
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), geometry1, geometry2);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_check{are spatially equal}
-\details \details_check12{equals, is spatially equal}. Spatially equal means
- that the same point set is included. A box can therefore be spatially equal
- to a ring or a polygon, or a linestring can be spatially equal to a
- multi-linestring or a segment. This only works theoretically, not all
- combinations are implemented yet.
-\ingroup equals
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Strategy \tparam_strategy{Equals}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param strategy \param_strategy{equals}
-\return \return_check2{are spatially equal}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/equals.qbk]}
- */
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline bool equals(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- return resolve_variant::equals
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, strategy);
-}
-
-
-/*!
-\brief \brief_check{are spatially equal}
-\details \details_check12{equals, is spatially equal}. Spatially equal means
- that the same point set is included. A box can therefore be spatially equal
- to a ring or a polygon, or a linestring can be spatially equal to a
- multi-linestring or a segment. This only works theoretically, not all
- combinations are implemented yet.
-\ingroup equals
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return \return_check2{are spatially equal}
-
-\qbk{[include reference/algorithms/equals.qbk]}
- */
-template <typename Geometry1, typename Geometry2>
-inline bool equals(Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- return resolve_variant::equals<Geometry1, Geometry2>
- ::apply(geometry1, geometry2, default_strategy());
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_INTERFACE_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/equals/point_point.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/equals/point_point.hpp
deleted file mode 100644
index 12daa85e9de..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/equals/point_point.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland
-
-// This file was modified by Oracle on 2013-2014.
-// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_POINT_POINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_POINT_POINT_HPP
-
-#include <boost/geometry/algorithms/detail/disjoint/point_point.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace equals
-{
-
-/*!
- \brief Internal utility function to detect of points are disjoint
- \note To avoid circular references
- */
-template <typename Point1, typename Point2>
-inline bool equals_point_point(Point1 const& point1, Point2 const& point2)
-{
- return ! detail::disjoint::disjoint_point_point(point1, point2);
-}
-
-
-}} // namespace detail::equals
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EQUALS_POINT_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/box.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/box.hpp
deleted file mode 100644
index 485f4d25e60..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/box.hpp
+++ /dev/null
@@ -1,136 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Samuel Debionne, Grenoble, France.
-
-// This file was modified by Oracle on 2015, 2016, 2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_BOX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_BOX_HPP
-
-#include <cstddef>
-#include <algorithm>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/detail/envelope/box.hpp>
-#include <boost/geometry/algorithms/detail/envelope/range_of_boxes.hpp>
-
-#include <boost/geometry/algorithms/detail/expand/indexed.hpp>
-
-#include <boost/geometry/algorithms/dispatch/expand.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace expand
-{
-
-
-struct box_on_spheroid
-{
- template <typename BoxOut, typename BoxIn, typename Strategy>
- static inline void apply(BoxOut& box_out,
- BoxIn const& box_in,
- Strategy const& strategy)
- {
- // normalize both boxes and convert box-in to be of type of box-out
- BoxOut mbrs[2];
- detail::envelope::envelope_box_on_spheroid::apply(box_in, mbrs[0], strategy);
- detail::envelope::envelope_box_on_spheroid::apply(box_out, mbrs[1], strategy);
-
- // compute the envelope of the two boxes
- detail::envelope::envelope_range_of_boxes::apply(mbrs, box_out, strategy);
- }
-};
-
-
-}} // namespace detail::expand
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// Box + box -> new box containing two input boxes
-template
-<
- typename BoxOut, typename BoxIn,
- typename CSTagOut, typename CSTag
->
-struct expand
- <
- BoxOut, BoxIn,
- box_tag, box_tag,
- CSTagOut, CSTag
- >
-{
- BOOST_MPL_ASSERT_MSG((false),
- NOT_IMPLEMENTED_FOR_THESE_COORDINATE_SYSTEMS,
- (types<CSTagOut, CSTag>()));
-};
-
-template <typename BoxOut, typename BoxIn>
-struct expand
- <
- BoxOut, BoxIn,
- box_tag, box_tag,
- cartesian_tag, cartesian_tag
- > : detail::expand::expand_indexed
- <
- 0, dimension<BoxIn>::value
- >
-{};
-
-template <typename BoxOut, typename BoxIn>
-struct expand
- <
- BoxOut, BoxIn,
- box_tag, box_tag,
- spherical_equatorial_tag, spherical_equatorial_tag
- > : detail::expand::box_on_spheroid
-{};
-
-template <typename BoxOut, typename BoxIn>
-struct expand
- <
- BoxOut, BoxIn,
- box_tag, box_tag,
- spherical_polar_tag, spherical_polar_tag
- > : detail::expand::box_on_spheroid
-{};
-
-template <typename BoxOut, typename BoxIn>
-struct expand
- <
- BoxOut, BoxIn,
- box_tag, box_tag,
- geographic_tag, geographic_tag
- > : detail::expand::box_on_spheroid
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_INDEXED_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/implementation.hpp
deleted file mode 100644
index 95de1b50496..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/implementation.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Samuel Debionne, Grenoble, France.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_IMPLEMENTATION_HPP
-
-#include <boost/geometry/algorithms/detail/expand/point.hpp>
-#include <boost/geometry/algorithms/detail/expand/segment.hpp>
-#include <boost/geometry/algorithms/detail/expand/box.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/indexed.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/indexed.hpp
deleted file mode 100644
index fe7ee4f781b..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/indexed.hpp
+++ /dev/null
@@ -1,123 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Samuel Debionne, Grenoble, France.
-
-// This file was modified by Oracle on 2015, 2016, 2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_INDEXED_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_INDEXED_HPP
-
-#include <cstddef>
-#include <functional>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-#include <boost/geometry/algorithms/dispatch/expand.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace expand
-{
-
-
-template
-<
- std::size_t Index,
- std::size_t Dimension, std::size_t DimensionCount
->
-struct indexed_loop
-{
- template <typename Box, typename Geometry, typename Strategy>
- static inline void apply(Box& box, Geometry const& source, Strategy const& strategy)
- {
- typedef typename select_coordinate_type
- <
- Box,
- Geometry
- >::type coordinate_type;
-
- coordinate_type const coord = get<Index, Dimension>(source);
-
- std::less<coordinate_type> less;
- std::greater<coordinate_type> greater;
-
- if (less(coord, get<min_corner, Dimension>(box)))
- {
- set<min_corner, Dimension>(box, coord);
- }
-
- if (greater(coord, get<max_corner, Dimension>(box)))
- {
- set<max_corner, Dimension>(box, coord);
- }
-
- indexed_loop
- <
- Index, Dimension + 1, DimensionCount
- >::apply(box, source, strategy);
- }
-};
-
-
-template <std::size_t Index, std::size_t DimensionCount>
-struct indexed_loop
- <
- Index, DimensionCount, DimensionCount
- >
-{
- template <typename Box, typename Geometry, typename Strategy>
- static inline void apply(Box&, Geometry const&, Strategy const&) {}
-};
-
-
-
-// Changes a box such that the other box is also contained by the box
-template <std::size_t Dimension, std::size_t DimensionCount>
-struct expand_indexed
-{
- template <typename Box, typename Geometry, typename Strategy>
- static inline void apply(Box& box,
- Geometry const& geometry,
- Strategy const& strategy)
- {
- indexed_loop
- <
- 0, Dimension, DimensionCount
- >::apply(box, geometry, strategy);
-
- indexed_loop
- <
- 1, Dimension, DimensionCount
- >::apply(box, geometry, strategy);
- }
-};
-
-
-}} // namespace detail::expand
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_INDEXED_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/interface.hpp
deleted file mode 100644
index 5aacd8e72a1..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/interface.hpp
+++ /dev/null
@@ -1,199 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Samuel Debionne, Grenoble, France.
-
-// This file was modified by Oracle on 2015, 2016.
-// Modifications copyright (c) 2015-2016, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_INTERFACE_HPP
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/dispatch/expand.hpp>
-
-#include <boost/geometry/strategies/default_strategy.hpp>
-
-#include <boost/geometry/strategies/envelope.hpp>
-#include <boost/geometry/strategies/cartesian/envelope_segment.hpp>
-#include <boost/geometry/strategies/spherical/envelope_segment.hpp>
-#include <boost/geometry/strategies/geographic/envelope_segment.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace resolve_strategy
-{
-
-template <typename Geometry>
-struct expand
-{
- template <typename Box, typename Strategy>
- static inline void apply(Box& box,
- Geometry const& geometry,
- Strategy const& strategy)
- {
- dispatch::expand<Box, Geometry>::apply(box, geometry, strategy);
- }
-
- template <typename Box>
- static inline void apply(Box& box,
- Geometry const& geometry,
- default_strategy)
- {
- typedef typename point_type<Geometry>::type point_type;
- typedef typename coordinate_type<point_type>::type coordinate_type;
-
- typedef typename strategy::envelope::services::default_strategy
- <
- typename cs_tag<point_type>::type,
- coordinate_type
- >::type strategy_type;
-
- dispatch::expand<Box, Geometry>::apply(box, geometry, strategy_type());
- }
-};
-
-} //namespace resolve_strategy
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct expand
-{
- template <typename Box, typename Strategy>
- static inline void apply(Box& box,
- Geometry const& geometry,
- Strategy const& strategy)
- {
- concepts::check<Box>();
- concepts::check<Geometry const>();
- concepts::check_concepts_and_equal_dimensions<Box, Geometry const>();
-
- resolve_strategy::expand<Geometry>::apply(box, geometry, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct expand<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Box, typename Strategy>
- struct visitor: boost::static_visitor<void>
- {
- Box& m_box;
- Strategy const& m_strategy;
-
- visitor(Box& box, Strategy const& strategy)
- : m_box(box)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry>
- void operator()(Geometry const& geometry) const
- {
- return expand<Geometry>::apply(m_box, geometry, m_strategy);
- }
- };
-
- template <class Box, typename Strategy>
- static inline void
- apply(Box& box,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Box, Strategy>(box, strategy),
- geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/***
-*!
-\brief Expands a box using the extend (envelope) of another geometry (box, point)
-\ingroup expand
-\tparam Box type of the box
-\tparam Geometry of second geometry, to be expanded with the box
-\param box box to expand another geometry with, might be changed
-\param geometry other geometry
-\param strategy_less
-\param strategy_greater
-\note Strategy is currently ignored
- *
-template
-<
- typename Box, typename Geometry,
- typename StrategyLess, typename StrategyGreater
->
-inline void expand(Box& box, Geometry const& geometry,
- StrategyLess const& strategy_less,
- StrategyGreater const& strategy_greater)
-{
- concepts::check_concepts_and_equal_dimensions<Box, Geometry const>();
-
- dispatch::expand<Box, Geometry>::apply(box, geometry);
-}
-***/
-
-/*!
-\brief Expands (with strategy)
-\ingroup expand
-\tparam Box type of the box
-\tparam Geometry \tparam_geometry
-\tparam Strategy \tparam_strategy{expand}
-\param box box to be expanded using another geometry, mutable
-\param geometry \param_geometry geometry which envelope (bounding box)
-\param strategy \param_strategy{expand}
-will be added to the box
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/expand.qbk]}
- */
-template <typename Box, typename Geometry, typename Strategy>
-inline void expand(Box& box, Geometry const& geometry, Strategy const& strategy)
-{
-
- resolve_variant::expand<Geometry>::apply(box, geometry, strategy);
-}
-
-/*!
-\brief Expands a box using the bounding box (envelope) of another geometry
-(box, point)
-\ingroup expand
-\tparam Box type of the box
-\tparam Geometry \tparam_geometry
-\param box box to be expanded using another geometry, mutable
-\param geometry \param_geometry geometry which envelope (bounding box) will be
-added to the box
-
-\qbk{[include reference/algorithms/expand.qbk]}
- */
-template <typename Box, typename Geometry>
-inline void expand(Box& box, Geometry const& geometry)
-{
- resolve_variant::expand<Geometry>::apply(box, geometry, default_strategy());
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/point.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/point.hpp
deleted file mode 100644
index 2d8b0feff68..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/point.hpp
+++ /dev/null
@@ -1,292 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Samuel Debionne, Grenoble, France.
-
-// This file was modified by Oracle on 2015, 2016, 2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_POINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_POINT_HPP
-
-#include <cstddef>
-#include <algorithm>
-#include <functional>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-#include <boost/geometry/algorithms/detail/normalize.hpp>
-#include <boost/geometry/algorithms/detail/envelope/transform_units.hpp>
-
-#include <boost/geometry/algorithms/dispatch/expand.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace expand
-{
-
-
-template <std::size_t Dimension, std::size_t DimensionCount>
-struct point_loop
-{
- template <typename Box, typename Point, typename Strategy>
- static inline void apply(Box& box, Point const& source, Strategy const& strategy)
- {
- typedef typename select_coordinate_type
- <
- Point, Box
- >::type coordinate_type;
-
- std::less<coordinate_type> less;
- std::greater<coordinate_type> greater;
-
- coordinate_type const coord = get<Dimension>(source);
-
- if (less(coord, get<min_corner, Dimension>(box)))
- {
- set<min_corner, Dimension>(box, coord);
- }
-
- if (greater(coord, get<max_corner, Dimension>(box)))
- {
- set<max_corner, Dimension>(box, coord);
- }
-
- point_loop<Dimension + 1, DimensionCount>::apply(box, source, strategy);
- }
-};
-
-
-template <std::size_t DimensionCount>
-struct point_loop<DimensionCount, DimensionCount>
-{
- template <typename Box, typename Point, typename Strategy>
- static inline void apply(Box&, Point const&, Strategy const&) {}
-};
-
-
-// implementation for the spherical and geographic coordinate systems
-template <std::size_t DimensionCount, bool IsEquatorial = true>
-struct point_loop_on_spheroid
-{
- template <typename Box, typename Point, typename Strategy>
- static inline void apply(Box& box,
- Point const& point,
- Strategy const& strategy)
- {
- typedef typename point_type<Box>::type box_point_type;
- typedef typename coordinate_type<Box>::type box_coordinate_type;
- typedef typename coordinate_system<Box>::type::units units_type;
-
- typedef math::detail::constants_on_spheroid
- <
- box_coordinate_type,
- units_type
- > constants;
-
- // normalize input point and input box
- Point p_normalized = detail::return_normalized<Point>(point);
- detail::normalize(box, box);
-
- // transform input point to be of the same type as the box point
- box_point_type box_point;
- detail::envelope::transform_units(p_normalized, box_point);
-
- box_coordinate_type p_lon = geometry::get<0>(box_point);
- box_coordinate_type p_lat = geometry::get<1>(box_point);
-
- typename coordinate_type<Box>::type
- b_lon_min = geometry::get<min_corner, 0>(box),
- b_lat_min = geometry::get<min_corner, 1>(box),
- b_lon_max = geometry::get<max_corner, 0>(box),
- b_lat_max = geometry::get<max_corner, 1>(box);
-
- if (math::is_latitude_pole<units_type, IsEquatorial>(p_lat))
- {
- // the point of expansion is the either the north or the
- // south pole; the only important coordinate here is the
- // pole's latitude, as the longitude can be anything;
- // we, thus, take into account the point's latitude only and return
- geometry::set<min_corner, 1>(box, (std::min)(p_lat, b_lat_min));
- geometry::set<max_corner, 1>(box, (std::max)(p_lat, b_lat_max));
- return;
- }
-
- if (math::equals(b_lat_min, b_lat_max)
- && math::is_latitude_pole<units_type, IsEquatorial>(b_lat_min))
- {
- // the box degenerates to either the north or the south pole;
- // the only important coordinate here is the pole's latitude,
- // as the longitude can be anything;
- // we thus take into account the box's latitude only and return
- geometry::set<min_corner, 0>(box, p_lon);
- geometry::set<min_corner, 1>(box, (std::min)(p_lat, b_lat_min));
- geometry::set<max_corner, 0>(box, p_lon);
- geometry::set<max_corner, 1>(box, (std::max)(p_lat, b_lat_max));
- return;
- }
-
- // update latitudes
- b_lat_min = (std::min)(b_lat_min, p_lat);
- b_lat_max = (std::max)(b_lat_max, p_lat);
-
- // update longitudes
- if (math::smaller(p_lon, b_lon_min))
- {
- box_coordinate_type p_lon_shifted = p_lon + constants::period();
-
- if (math::larger(p_lon_shifted, b_lon_max))
- {
- // here we could check using: ! math::larger(.., ..)
- if (math::smaller(b_lon_min - p_lon, p_lon_shifted - b_lon_max))
- {
- b_lon_min = p_lon;
- }
- else
- {
- b_lon_max = p_lon_shifted;
- }
- }
- }
- else if (math::larger(p_lon, b_lon_max))
- {
- // in this case, and since p_lon is normalized in the range
- // (-180, 180], we must have that b_lon_max <= 180
- if (b_lon_min < 0
- && math::larger(p_lon - b_lon_max,
- constants::period() - p_lon + b_lon_min))
- {
- b_lon_min = p_lon;
- b_lon_max += constants::period();
- }
- else
- {
- b_lon_max = p_lon;
- }
- }
-
- geometry::set<min_corner, 0>(box, b_lon_min);
- geometry::set<min_corner, 1>(box, b_lat_min);
- geometry::set<max_corner, 0>(box, b_lon_max);
- geometry::set<max_corner, 1>(box, b_lat_max);
-
- point_loop
- <
- 2, DimensionCount
- >::apply(box, point, strategy);
- }
-};
-
-
-}} // namespace detail::expand
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// Box + point -> new box containing also point
-template
-<
- typename BoxOut, typename Point,
- typename CSTagOut, typename CSTag
->
-struct expand
- <
- BoxOut, Point,
- box_tag, point_tag,
- CSTagOut, CSTag
- >
-{
- BOOST_MPL_ASSERT_MSG((false),
- NOT_IMPLEMENTED_FOR_THESE_COORDINATE_SYSTEMS,
- (types<CSTagOut, CSTag>()));
-};
-
-
-template <typename BoxOut, typename Point>
-struct expand
- <
- BoxOut, Point,
- box_tag, point_tag,
- cartesian_tag, cartesian_tag
- > : detail::expand::point_loop
- <
- 0, dimension<Point>::value
- >
-{};
-
-template <typename BoxOut, typename Point>
-struct expand
- <
- BoxOut, Point,
- box_tag, point_tag,
- spherical_equatorial_tag, spherical_equatorial_tag
- > : detail::expand::point_loop_on_spheroid
- <
- dimension<Point>::value
- >
-{};
-
-template <typename BoxOut, typename Point>
-struct expand
- <
- BoxOut, Point,
- box_tag, point_tag,
- spherical_polar_tag, spherical_polar_tag
- > : detail::expand::point_loop_on_spheroid
- <
- dimension<Point>::value,
- false
- >
-{};
-
-template
-<
- typename BoxOut, typename Point
->
-struct expand
- <
- BoxOut, Point,
- box_tag, point_tag,
- geographic_tag, geographic_tag
- > : detail::expand::point_loop_on_spheroid
- <
- dimension<Point>::value
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/segment.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/segment.hpp
deleted file mode 100644
index dddd3d2c7a2..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand/segment.hpp
+++ /dev/null
@@ -1,143 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Samuel Debionne, Grenoble, France.
-
-// This file was modified by Oracle on 2015, 2016, 2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_SEGMENT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_SEGMENT_HPP
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/detail/envelope/box.hpp>
-#include <boost/geometry/algorithms/detail/envelope/range_of_boxes.hpp>
-#include <boost/geometry/algorithms/detail/envelope/segment.hpp>
-
-#include <boost/geometry/algorithms/detail/expand/indexed.hpp>
-
-#include <boost/geometry/algorithms/dispatch/expand.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace expand
-{
-
-struct segment
-{
- template <typename Box, typename Segment, typename Strategy>
- static inline void apply(Box& box,
- Segment const& segment,
- Strategy const& strategy)
- {
- Box mbrs[2];
-
- // compute the envelope of the segment
- typename point_type<Segment>::type p[2];
- detail::assign_point_from_index<0>(segment, p[0]);
- detail::assign_point_from_index<1>(segment, p[1]);
- detail::envelope::envelope_segment
- <
- dimension<Segment>::value
- >::apply(p[0], p[1], mbrs[0], strategy);
-
- // normalize the box
- detail::envelope::envelope_box_on_spheroid::apply(box, mbrs[1], strategy);
-
- // compute the envelope of the two boxes
- detail::envelope::envelope_range_of_boxes::apply(mbrs, box, strategy);
- }
-};
-
-
-}} // namespace detail::expand
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Box, typename Segment,
- typename CSTagOut, typename CSTag
->
-struct expand
- <
- Box, Segment,
- box_tag, segment_tag,
- CSTagOut, CSTag
- >
-{
- BOOST_MPL_ASSERT_MSG((false),
- NOT_IMPLEMENTED_FOR_THESE_COORDINATE_SYSTEMS,
- (types<CSTagOut, CSTag>()));
-};
-
-template
-<
- typename Box, typename Segment
->
-struct expand
- <
- Box, Segment,
- box_tag, segment_tag,
- cartesian_tag, cartesian_tag
- > : detail::expand::expand_indexed
- <
- 0, dimension<Segment>::value
- >
-{};
-
-template <typename Box, typename Segment>
-struct expand
- <
- Box, Segment,
- box_tag, segment_tag,
- spherical_polar_tag, spherical_polar_tag
- > : detail::expand::segment
-{};
-
-template <typename Box, typename Segment>
-struct expand
- <
- Box, Segment,
- box_tag, segment_tag,
- spherical_equatorial_tag, spherical_equatorial_tag
- > : detail::expand::segment
-{};
-
-template <typename Box, typename Segment>
-struct expand
- <
- Box, Segment,
- box_tag, segment_tag,
- geographic_tag, geographic_tag
- > : detail::expand::segment
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_SEGMENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand_by_epsilon.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/expand_by_epsilon.hpp
deleted file mode 100644
index 7af08ee371a..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/expand_by_epsilon.hpp
+++ /dev/null
@@ -1,113 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_EXPAND_BY_EPSILON_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_EXPAND_BY_EPSILON_HPP
-
-#include <cstddef>
-#include <algorithm>
-
-#include <boost/type_traits/is_floating_point.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/views/detail/indexed_point_view.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace expand
-{
-
-template
-<
- typename Point,
- template <typename> class PlusOrMinus,
- std::size_t I = 0,
- std::size_t D = dimension<Point>::value,
- bool Enable = boost::is_floating_point
- <
- typename coordinate_type<Point>::type
- >::value
->
-struct corner_by_epsilon
-{
- static inline void apply(Point & point)
- {
- typedef typename coordinate_type<Point>::type coord_type;
- coord_type const coord = get<I>(point);
- coord_type const eps = math::scaled_epsilon(coord);
-
- set<I>(point, PlusOrMinus<coord_type>()(coord, eps));
-
- corner_by_epsilon<Point, PlusOrMinus, I+1>::apply(point);
- }
-};
-
-template
-<
- typename Point,
- template <typename> class PlusOrMinus,
- std::size_t I,
- std::size_t D
->
-struct corner_by_epsilon<Point, PlusOrMinus, I, D, false>
-{
- static inline void apply(Point const&) {}
-};
-
-template
-<
- typename Point,
- template <typename> class PlusOrMinus,
- std::size_t D,
- bool Enable
->
-struct corner_by_epsilon<Point, PlusOrMinus, D, D, Enable>
-{
- static inline void apply(Point const&) {}
-};
-
-template
-<
- typename Point,
- template <typename> class PlusOrMinus,
- std::size_t D
->
-struct corner_by_epsilon<Point, PlusOrMinus, D, D, false>
-{
- static inline void apply(Point const&) {}
-};
-
-} // namespace expand
-
-template <typename Box>
-inline void expand_by_epsilon(Box & box)
-{
- typedef detail::indexed_point_view<Box, min_corner> min_type;
- min_type min_point(box);
- expand::corner_by_epsilon<min_type, std::minus>::apply(min_point);
-
- typedef detail::indexed_point_view<Box, max_corner> max_type;
- max_type max_point(box);
- expand::corner_by_epsilon<max_type, std::plus>::apply(max_point);
-}
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXPAND_EXPAND_BY_EPSILON_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/extreme_points.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/extreme_points.hpp
deleted file mode 100644
index 607997813c1..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/extreme_points.hpp
+++ /dev/null
@@ -1,561 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXTREME_POINTS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXTREME_POINTS_HPP
-
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/iterators/ever_circling_iterator.hpp>
-
-#include <boost/geometry/algorithms/detail/assign_box_corners.hpp>
-
-#include <boost/geometry/strategies/side.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace extreme_points
-{
-
-template <std::size_t Dimension>
-struct compare
-{
- template <typename Point>
- inline bool operator()(Point const& lhs, Point const& rhs)
- {
- return geometry::get<Dimension>(lhs) < geometry::get<Dimension>(rhs);
- }
-};
-
-
-template <std::size_t Dimension, typename PointType, typename CoordinateType>
-inline void move_along_vector(PointType& point, PointType const& extreme, CoordinateType const& base_value)
-{
- // Moves a point along the vector (point, extreme) in the direction of the extreme point
- // This adapts the possibly uneven legs of the triangle (or trapezium-like shape)
- // _____extreme _____
- // / \ / \ .
- // /base \ => / \ point .
- // \ point .
- //
- // For so-called intruders, it can be used to adapt both legs to the level of "base"
- // For the base, it can be used to adapt both legs to the level of the max-value of the intruders
- // If there are 2 or more extreme values, use the one close to 'point' to have a correct vector
-
- CoordinateType const value = geometry::get<Dimension>(point);
- //if (geometry::math::equals(value, base_value))
- if (value >= base_value)
- {
- return;
- }
-
- PointType vector = point;
- subtract_point(vector, extreme);
-
- CoordinateType const diff = geometry::get<Dimension>(vector);
-
- // diff should never be zero
- // because of the way our triangle/trapezium is build.
- // We just return if it would be the case.
- if (geometry::math::equals(diff, 0))
- {
- return;
- }
-
- CoordinateType const base_diff = base_value - geometry::get<Dimension>(extreme);
-
- multiply_value(vector, base_diff);
- divide_value(vector, diff);
-
- // The real move:
- point = extreme;
- add_point(point, vector);
-}
-
-
-template <std::size_t Dimension, typename Range, typename CoordinateType>
-inline void move_along_vector(Range& range, CoordinateType const& base_value)
-{
- if (range.size() >= 3)
- {
- move_along_vector<Dimension>(range.front(), *(range.begin() + 1), base_value);
- move_along_vector<Dimension>(range.back(), *(range.rbegin() + 1), base_value);
- }
-}
-
-
-template<typename Ring, std::size_t Dimension>
-struct extreme_points_on_ring
-{
-
- typedef typename geometry::coordinate_type<Ring>::type coordinate_type;
- typedef typename boost::range_iterator<Ring const>::type range_iterator;
- typedef typename geometry::point_type<Ring>::type point_type;
-
- template <typename CirclingIterator, typename Points>
- static inline bool extend(CirclingIterator& it,
- std::size_t n,
- coordinate_type max_coordinate_value,
- Points& points, int direction)
- {
- std::size_t safe_index = 0;
- do
- {
- it += direction;
-
- points.push_back(*it);
-
- if (safe_index++ >= n)
- {
- // E.g.: ring is completely horizontal or vertical (= invalid, but we don't want to have an infinite loop)
- return false;
- }
- } while (geometry::math::equals(geometry::get<Dimension>(*it), max_coordinate_value));
-
- return true;
- }
-
- // Overload without adding to poinst
- template <typename CirclingIterator>
- static inline bool extend(CirclingIterator& it,
- std::size_t n,
- coordinate_type max_coordinate_value,
- int direction)
- {
- std::size_t safe_index = 0;
- do
- {
- it += direction;
-
- if (safe_index++ >= n)
- {
- // E.g.: ring is completely horizontal or vertical (= invalid, but we don't want to have an infinite loop)
- return false;
- }
- } while (geometry::math::equals(geometry::get<Dimension>(*it), max_coordinate_value));
-
- return true;
- }
-
- template <typename CirclingIterator>
- static inline bool extent_both_sides(Ring const& ring,
- point_type extreme,
- CirclingIterator& left,
- CirclingIterator& right)
- {
- std::size_t const n = boost::size(ring);
- coordinate_type const max_coordinate_value = geometry::get<Dimension>(extreme);
-
- if (! extend(left, n, max_coordinate_value, -1))
- {
- return false;
- }
- if (! extend(right, n, max_coordinate_value, +1))
- {
- return false;
- }
-
- return true;
- }
-
- template <typename Collection, typename CirclingIterator>
- static inline bool collect(Ring const& ring,
- point_type extreme,
- Collection& points,
- CirclingIterator& left,
- CirclingIterator& right)
- {
- std::size_t const n = boost::size(ring);
- coordinate_type const max_coordinate_value = geometry::get<Dimension>(extreme);
-
- // Collects first left, which is reversed (if more than one point) then adds the top itself, then right
- if (! extend(left, n, max_coordinate_value, points, -1))
- {
- return false;
- }
- std::reverse(points.begin(), points.end());
- points.push_back(extreme);
- if (! extend(right, n, max_coordinate_value, points, +1))
- {
- return false;
- }
-
- return true;
- }
-
- template <typename Extremes, typename Intruders, typename CirclingIterator, typename SideStrategy>
- static inline void get_intruders(Ring const& ring, CirclingIterator left, CirclingIterator right,
- Extremes const& extremes,
- Intruders& intruders,
- SideStrategy const& strategy)
- {
- if (boost::size(extremes) < 3)
- {
- return;
- }
- coordinate_type const min_value = geometry::get<Dimension>(*std::min_element(boost::begin(extremes), boost::end(extremes), compare<Dimension>()));
-
- // Also select left/right (if Dimension=1)
- coordinate_type const other_min = geometry::get<1 - Dimension>(*std::min_element(boost::begin(extremes), boost::end(extremes), compare<1 - Dimension>()));
- coordinate_type const other_max = geometry::get<1 - Dimension>(*std::max_element(boost::begin(extremes), boost::end(extremes), compare<1 - Dimension>()));
-
- std::size_t defensive_check_index = 0; // in case we skip over left/right check, collect modifies right too
- std::size_t const n = boost::size(ring);
- while (left != right && defensive_check_index < n)
- {
- coordinate_type const coordinate = geometry::get<Dimension>(*right);
- coordinate_type const other_coordinate = geometry::get<1 - Dimension>(*right);
- if (coordinate > min_value && other_coordinate > other_min && other_coordinate < other_max)
- {
- int const factor = geometry::point_order<Ring>::value == geometry::clockwise ? 1 : -1;
- int const first_side = strategy.apply(*right, extremes.front(), *(extremes.begin() + 1)) * factor;
- int const last_side = strategy.apply(*right, *(extremes.rbegin() + 1), extremes.back()) * factor;
-
- // If not lying left from any of the extemes side
- if (first_side != 1 && last_side != 1)
- {
- //std::cout << "first " << first_side << " last " << last_side << std::endl;
-
- // we start at this intrusion until it is handled, and don't affect our initial left iterator
- CirclingIterator left_intrusion_it = right;
- typename boost::range_value<Intruders>::type intruder;
- collect(ring, *right, intruder, left_intrusion_it, right);
-
- // Also moves these to base-level, makes sorting possible which can be done in case of self-tangencies
- // (we might postpone this action, it is often not necessary. However it is not time-consuming)
- move_along_vector<Dimension>(intruder, min_value);
- intruders.push_back(intruder);
- --right;
- }
- }
- ++right;
- defensive_check_index++;
- }
- }
-
- template <typename Extremes, typename Intruders, typename SideStrategy>
- static inline void get_intruders(Ring const& ring,
- Extremes const& extremes,
- Intruders& intruders,
- SideStrategy const& strategy)
- {
- std::size_t const n = boost::size(ring);
- if (n >= 3)
- {
- geometry::ever_circling_range_iterator<Ring const> left(ring);
- geometry::ever_circling_range_iterator<Ring const> right(ring);
- ++right;
-
- get_intruders(ring, left, right, extremes, intruders, strategy);
- }
- }
-
- template <typename Iterator, typename SideStrategy>
- static inline bool right_turn(Ring const& ring, Iterator it, SideStrategy const& strategy)
- {
- typename std::iterator_traits<Iterator>::difference_type const index
- = std::distance(boost::begin(ring), it);
- geometry::ever_circling_range_iterator<Ring const> left(ring);
- geometry::ever_circling_range_iterator<Ring const> right(ring);
- left += index;
- right += index;
-
- if (! extent_both_sides(ring, *it, left, right))
- {
- return false;
- }
-
- int const factor = geometry::point_order<Ring>::value == geometry::clockwise ? 1 : -1;
- int const first_side = strategy.apply(*(right - 1), *right, *left) * factor;
- int const last_side = strategy.apply(*left, *(left + 1), *right) * factor;
-
-//std::cout << "Candidate at " << geometry::wkt(*it) << " first=" << first_side << " last=" << last_side << std::endl;
-
- // Turn should not be left (actually, it should be right because extent removes horizontal/collinear cases)
- return first_side != 1 && last_side != 1;
- }
-
-
- // Gets the extreme segments (top point plus neighbouring points), plus intruders, if any, on the same ring
- template <typename Extremes, typename Intruders, typename SideStrategy>
- static inline bool apply(Ring const& ring,
- Extremes& extremes,
- Intruders& intruders,
- SideStrategy const& strategy)
- {
- std::size_t const n = boost::size(ring);
- if (n < 3)
- {
- return false;
- }
-
- // Get all maxima, usually one. In case of self-tangencies, or self-crossings,
- // the max might be is not valid. A valid max should make a right turn
- range_iterator max_it = boost::begin(ring);
- compare<Dimension> smaller;
- for (range_iterator it = max_it + 1; it != boost::end(ring); ++it)
- {
- if (smaller(*max_it, *it) && right_turn(ring, it, strategy))
- {
- max_it = it;
- }
- }
-
- if (max_it == boost::end(ring))
- {
- return false;
- }
-
- typename std::iterator_traits<range_iterator>::difference_type const
- index = std::distance(boost::begin(ring), max_it);
-//std::cout << "Extreme point lies at " << index << " having " << geometry::wkt(*max_it) << std::endl;
-
- geometry::ever_circling_range_iterator<Ring const> left(ring);
- geometry::ever_circling_range_iterator<Ring const> right(ring);
- left += index;
- right += index;
-
- // Collect all points (often 3) in a temporary vector
- std::vector<point_type> points;
- points.reserve(3);
- if (! collect(ring, *max_it, points, left, right))
- {
- return false;
- }
-
-//std::cout << "Built vector of " << points.size() << std::endl;
-
- coordinate_type const front_value = geometry::get<Dimension>(points.front());
- coordinate_type const back_value = geometry::get<Dimension>(points.back());
- coordinate_type const base_value = (std::max)(front_value, back_value);
- if (front_value < back_value)
- {
- move_along_vector<Dimension>(points.front(), *(points.begin() + 1), base_value);
- }
- else
- {
- move_along_vector<Dimension>(points.back(), *(points.rbegin() + 1), base_value);
- }
-
- std::copy(points.begin(), points.end(), std::back_inserter(extremes));
-
- get_intruders(ring, left, right, extremes, intruders, strategy);
-
- return true;
- }
-};
-
-
-
-
-
-}} // namespace detail::extreme_points
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry,
- std::size_t Dimension,
- typename GeometryTag = typename tag<Geometry>::type
->
-struct extreme_points
-{};
-
-
-template<typename Ring, std::size_t Dimension>
-struct extreme_points<Ring, Dimension, ring_tag>
- : detail::extreme_points::extreme_points_on_ring<Ring, Dimension>
-{};
-
-
-template<typename Polygon, std::size_t Dimension>
-struct extreme_points<Polygon, Dimension, polygon_tag>
-{
- template <typename Extremes, typename Intruders, typename SideStrategy>
- static inline bool apply(Polygon const& polygon, Extremes& extremes, Intruders& intruders,
- SideStrategy const& strategy)
- {
- typedef typename geometry::ring_type<Polygon>::type ring_type;
- typedef detail::extreme_points::extreme_points_on_ring
- <
- ring_type, Dimension
- > ring_implementation;
-
- if (! ring_implementation::apply(geometry::exterior_ring(polygon),
- extremes, intruders, strategy))
- {
- return false;
- }
-
- // For a polygon, its interior rings can contain intruders
- typename interior_return_type<Polygon const>::type
- rings = interior_rings(polygon);
- for (typename detail::interior_iterator<Polygon const>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- ring_implementation::get_intruders(*it, extremes, intruders, strategy);
- }
-
- return true;
- }
-};
-
-template<typename Box>
-struct extreme_points<Box, 1, box_tag>
-{
- template <typename Extremes, typename Intruders, typename SideStrategy>
- static inline bool apply(Box const& box, Extremes& extremes, Intruders& ,
- SideStrategy const& )
- {
- extremes.resize(4);
- geometry::detail::assign_box_corners_oriented<false>(box, extremes);
- // ll,ul,ur,lr, contains too exactly the right info
- return true;
- }
-};
-
-template<typename Box>
-struct extreme_points<Box, 0, box_tag>
-{
- template <typename Extremes, typename Intruders, typename SideStrategy>
- static inline bool apply(Box const& box, Extremes& extremes, Intruders& ,
- SideStrategy const& )
- {
- extremes.resize(4);
- geometry::detail::assign_box_corners_oriented<false>(box, extremes);
- // ll,ul,ur,lr, rotate one to start with UL and end with LL
- std::rotate(extremes.begin(), extremes.begin() + 1, extremes.end());
- return true;
- }
-};
-
-template<typename MultiPolygon, std::size_t Dimension>
-struct extreme_points<MultiPolygon, Dimension, multi_polygon_tag>
-{
- template <typename Extremes, typename Intruders, typename SideStrategy>
- static inline bool apply(MultiPolygon const& multi, Extremes& extremes,
- Intruders& intruders, SideStrategy const& strategy)
- {
- // Get one for the very first polygon, that is (for the moment) enough.
- // It is not guaranteed the "extreme" then, but for the current purpose
- // (point_on_surface) it can just be this point.
- if (boost::size(multi) >= 1)
- {
- return extreme_points
- <
- typename boost::range_value<MultiPolygon const>::type,
- Dimension,
- polygon_tag
- >::apply(*boost::begin(multi), extremes, intruders, strategy);
- }
-
- return false;
- }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief Returns extreme points (for Edge=1 in dimension 1, so the top,
- for Edge=0 in dimension 0, the right side)
-\note We could specify a strategy (less/greater) to get bottom/left side too. However, until now we don't need that.
- */
-template
-<
- std::size_t Edge,
- typename Geometry,
- typename Extremes,
- typename Intruders,
- typename SideStrategy
->
-inline bool extreme_points(Geometry const& geometry,
- Extremes& extremes,
- Intruders& intruders,
- SideStrategy const& strategy)
-{
- concepts::check<Geometry const>();
-
- // Extremes is not required to follow a geometry concept (but it should support an output iterator),
- // but its elements should fulfil the point-concept
- concepts::check<typename boost::range_value<Extremes>::type>();
-
- // Intruders should contain collections which value type is point-concept
- // Extremes might be anything (supporting an output iterator), but its elements should fulfil the point-concept
- concepts::check
- <
- typename boost::range_value
- <
- typename boost::range_value<Intruders>::type
- >::type
- const
- >();
-
- return dispatch::extreme_points
- <
- Geometry,
- Edge
- >::apply(geometry, extremes, intruders, strategy);
-}
-
-
-template
-<
- std::size_t Edge,
- typename Geometry,
- typename Extremes,
- typename Intruders
->
-inline bool extreme_points(Geometry const& geometry,
- Extremes& extremes,
- Intruders& intruders)
-{
- typedef typename strategy::side::services::default_strategy
- <
- typename cs_tag<Geometry>::type
- >::type strategy_type;
-
- return geometry::extreme_points<Edge>(geometry,extremes, intruders, strategy_type());
-}
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_EXTREME_POINTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/for_each_range.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/for_each_range.hpp
deleted file mode 100644
index e8c92160f11..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/for_each_range.hpp
+++ /dev/null
@@ -1,201 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP
-
-
-#include <boost/mpl/assert.hpp>
-#include <boost/concept/requires.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/add_const_if_c.hpp>
-#include <boost/geometry/views/box_view.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace for_each
-{
-
-
-template <typename Range, typename Actor>
-struct fe_range_range
-{
- static inline void apply(Range & range, Actor & actor)
- {
- actor.apply(range);
- }
-};
-
-
-template <typename Polygon, typename Actor>
-struct fe_range_polygon
-{
- static inline void apply(Polygon & polygon, Actor & actor)
- {
- actor.apply(exterior_ring(polygon));
-
- // TODO: If some flag says true, also do the inner rings.
- // for convex hull, it's not necessary
- }
-};
-
-template <typename Box, typename Actor>
-struct fe_range_box
-{
- static inline void apply(Box & box, Actor & actor)
- {
- actor.apply(box_view<typename boost::remove_const<Box>::type>(box));
- }
-};
-
-template <typename Multi, typename Actor, typename SinglePolicy>
-struct fe_range_multi
-{
- static inline void apply(Multi & multi, Actor & actor)
- {
- for ( typename boost::range_iterator<Multi>::type
- it = boost::begin(multi); it != boost::end(multi); ++it)
- {
- SinglePolicy::apply(*it, actor);
- }
- }
-};
-
-}} // namespace detail::for_each
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry,
- typename Actor,
- typename Tag = typename tag<Geometry>::type
->
-struct for_each_range
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-
-template <typename Linestring, typename Actor>
-struct for_each_range<Linestring, Actor, linestring_tag>
- : detail::for_each::fe_range_range<Linestring, Actor>
-{};
-
-
-template <typename Ring, typename Actor>
-struct for_each_range<Ring, Actor, ring_tag>
- : detail::for_each::fe_range_range<Ring, Actor>
-{};
-
-
-template <typename Polygon, typename Actor>
-struct for_each_range<Polygon, Actor, polygon_tag>
- : detail::for_each::fe_range_polygon<Polygon, Actor>
-{};
-
-
-template <typename Box, typename Actor>
-struct for_each_range<Box, Actor, box_tag>
- : detail::for_each::fe_range_box<Box, Actor>
-{};
-
-
-template <typename MultiPoint, typename Actor>
-struct for_each_range<MultiPoint, Actor, multi_point_tag>
- : detail::for_each::fe_range_range<MultiPoint, Actor>
-{};
-
-
-template <typename Geometry, typename Actor>
-struct for_each_range<Geometry, Actor, multi_linestring_tag>
- : detail::for_each::fe_range_multi
- <
- Geometry,
- Actor,
- detail::for_each::fe_range_range
- <
- typename add_const_if_c
- <
- boost::is_const<Geometry>::value,
- typename boost::range_value<Geometry>::type
- >::type,
- Actor
- >
- >
-{};
-
-
-template <typename Geometry, typename Actor>
-struct for_each_range<Geometry, Actor, multi_polygon_tag>
- : detail::for_each::fe_range_multi
- <
- Geometry,
- Actor,
- detail::for_each::fe_range_polygon
- <
- typename add_const_if_c
- <
- boost::is_const<Geometry>::value,
- typename boost::range_value<Geometry>::type
- >::type,
- Actor
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-namespace detail
-{
-
-template <typename Geometry, typename Actor>
-inline void for_each_range(Geometry const& geometry, Actor & actor)
-{
- dispatch::for_each_range
- <
- Geometry const,
- Actor
- >::apply(geometry, actor);
-}
-
-
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/get_left_turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/get_left_turns.hpp
deleted file mode 100644
index e9f6a508596..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/get_left_turns.hpp
+++ /dev/null
@@ -1,318 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_LEFT_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_LEFT_TURNS_HPP
-
-#include <boost/geometry/core/assert.hpp>
-
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/iterators/closing_iterator.hpp>
-#include <boost/geometry/iterators/ever_circling_iterator.hpp>
-#include <boost/geometry/strategies/side.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-// TODO: move this to /util/
-template <typename T>
-inline std::pair<T, T> ordered_pair(T const& first, T const& second)
-{
- return first < second ? std::make_pair(first, second) : std::make_pair(second, first);
-}
-
-namespace left_turns
-{
-
-
-
-template <typename Vector>
-inline int get_quadrant(Vector const& vector)
-{
- // Return quadrant as layouted in the code below:
- // 3 | 0
- // -----
- // 2 | 1
- return geometry::get<1>(vector) >= 0
- ? (geometry::get<0>(vector) < 0 ? 3 : 0)
- : (geometry::get<0>(vector) < 0 ? 2 : 1)
- ;
-}
-
-template <typename Vector>
-inline int squared_length(Vector const& vector)
-{
- return geometry::get<0>(vector) * geometry::get<0>(vector)
- + geometry::get<1>(vector) * geometry::get<1>(vector)
- ;
-}
-
-
-template <typename Point, typename SideStrategy>
-struct angle_less
-{
- typedef Point vector_type;
-
- angle_less(Point const& origin, SideStrategy const& strategy)
- : m_origin(origin)
- , m_strategy(strategy)
- {}
-
- template <typename Angle>
- inline bool operator()(Angle const& p, Angle const& q) const
- {
- // Vector origin -> p and origin -> q
- vector_type pv = p.point;
- vector_type qv = q.point;
- geometry::subtract_point(pv, m_origin);
- geometry::subtract_point(qv, m_origin);
-
- int const quadrant_p = get_quadrant(pv);
- int const quadrant_q = get_quadrant(qv);
- if (quadrant_p != quadrant_q)
- {
- return quadrant_p < quadrant_q;
- }
- // Same quadrant, check if p is located left of q
- int const side = m_strategy.apply(m_origin, q.point, p.point);
- if (side != 0)
- {
- return side == 1;
- }
- // Collinear, check if one is incoming, incoming angles come first
- if (p.incoming != q.incoming)
- {
- return int(p.incoming) < int(q.incoming);
- }
- // Same quadrant/side/direction, return longest first
- // TODO: maybe not necessary, decide this
- int const length_p = squared_length(pv);
- int const length_q = squared_length(qv);
- if (length_p != length_q)
- {
- return squared_length(pv) > squared_length(qv);
- }
- // They are still the same. Just compare on seg_id
- return p.seg_id < q.seg_id;
- }
-
-private:
- Point m_origin;
- SideStrategy m_strategy;
-};
-
-template <typename Point, typename SideStrategy>
-struct angle_equal_to
-{
- typedef Point vector_type;
-
- inline angle_equal_to(Point const& origin, SideStrategy const& strategy)
- : m_origin(origin)
- , m_strategy(strategy)
- {}
-
- template <typename Angle>
- inline bool operator()(Angle const& p, Angle const& q) const
- {
- // Vector origin -> p and origin -> q
- vector_type pv = p.point;
- vector_type qv = q.point;
- geometry::subtract_point(pv, m_origin);
- geometry::subtract_point(qv, m_origin);
-
- if (get_quadrant(pv) != get_quadrant(qv))
- {
- return false;
- }
- // Same quadrant, check if p/q are collinear
- int const side = m_strategy.apply(m_origin, q.point, p.point);
- return side == 0;
- }
-
-private:
- Point m_origin;
- SideStrategy m_strategy;
-};
-
-template <typename AngleCollection, typename Turns>
-inline void get_left_turns(AngleCollection const& sorted_angles,
- Turns& turns)
-{
- std::set<std::size_t> good_incoming;
- std::set<std::size_t> good_outgoing;
-
- for (typename boost::range_iterator<AngleCollection const>::type it =
- sorted_angles.begin(); it != sorted_angles.end(); ++it)
- {
- if (!it->blocked)
- {
- if (it->incoming)
- {
- good_incoming.insert(it->turn_index);
- }
- else
- {
- good_outgoing.insert(it->turn_index);
- }
- }
- }
-
- if (good_incoming.empty() || good_outgoing.empty())
- {
- return;
- }
-
- for (typename boost::range_iterator<AngleCollection const>::type it =
- sorted_angles.begin(); it != sorted_angles.end(); ++it)
- {
- if (good_incoming.count(it->turn_index) == 0
- || good_outgoing.count(it->turn_index) == 0)
- {
- turns[it->turn_index].remove_on_multi = true;
- }
- }
-}
-
-
-//! Returns the number of clusters
-template <typename Point, typename AngleCollection, typename SideStrategy>
-inline std::size_t assign_cluster_indices(AngleCollection& sorted, Point const& origin,
- SideStrategy const& strategy)
-{
- // Assign same cluster_index for all turns in same direction
- BOOST_GEOMETRY_ASSERT(boost::size(sorted) >= 4u);
-
- angle_equal_to<Point, SideStrategy> comparator(origin, strategy);
- typename boost::range_iterator<AngleCollection>::type it = sorted.begin();
-
- std::size_t cluster_index = 0;
- it->cluster_index = cluster_index;
- typename boost::range_iterator<AngleCollection>::type previous = it++;
- for (; it != sorted.end(); ++it)
- {
- if (!comparator(*previous, *it))
- {
- cluster_index++;
- previous = it;
- }
- it->cluster_index = cluster_index;
- }
- return cluster_index + 1;
-}
-
-template <typename AngleCollection>
-inline void block_turns(AngleCollection& sorted, std::size_t cluster_size)
-{
- BOOST_GEOMETRY_ASSERT(boost::size(sorted) >= 4u && cluster_size > 0);
-
- std::vector<std::pair<bool, bool> > directions;
- for (std::size_t i = 0; i < cluster_size; i++)
- {
- directions.push_back(std::make_pair(false, false));
- }
-
- for (typename boost::range_iterator<AngleCollection const>::type it = sorted.begin();
- it != sorted.end(); ++it)
- {
- if (it->incoming)
- {
- directions[it->cluster_index].first = true;
- }
- else
- {
- directions[it->cluster_index].second = true;
- }
- }
-
- for (typename boost::range_iterator<AngleCollection>::type it = sorted.begin();
- it != sorted.end(); ++it)
- {
- signed_size_type cluster_index = static_cast<signed_size_type>(it->cluster_index);
- signed_size_type previous_index = cluster_index - 1;
- if (previous_index < 0)
- {
- previous_index = cluster_size - 1;
- }
- signed_size_type next_index = cluster_index + 1;
- if (next_index >= static_cast<signed_size_type>(cluster_size))
- {
- next_index = 0;
- }
-
- if (directions[cluster_index].first
- && directions[cluster_index].second)
- {
- it->blocked = true;
- }
- else if (!directions[cluster_index].first
- && directions[cluster_index].second
- && directions[previous_index].second)
- {
- // Only outgoing, previous was also outgoing: block this one
- it->blocked = true;
- }
- else if (directions[cluster_index].first
- && !directions[cluster_index].second
- && !directions[previous_index].first
- && directions[previous_index].second)
- {
- // Only incoming, previous was only outgoing: block this one
- it->blocked = true;
- }
- else if (directions[cluster_index].first
- && !directions[cluster_index].second
- && directions[next_index].first
- && !directions[next_index].second)
- {
- // Only incoming, next also incoming, block this one
- it->blocked = true;
- }
- }
-}
-
-#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
-template <typename AngleCollection, typename Point>
-inline bool has_rounding_issues(AngleCollection const& angles, Point const& origin)
-{
- for (typename boost::range_iterator<AngleCollection const>::type it =
- angles.begin(); it != angles.end(); ++it)
- {
- // Vector origin -> p and origin -> q
- typedef Point vector_type;
- vector_type v = it->point;
- geometry::subtract_point(v, origin);
- return geometry::math::abs(geometry::get<0>(v)) <= 1
- || geometry::math::abs(geometry::get<1>(v)) <= 1
- ;
- }
- return false;
-}
-#endif
-
-
-} // namespace left_turns
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_LEFT_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/get_max_size.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/get_max_size.hpp
deleted file mode 100644
index 8ac43e78b86..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/get_max_size.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_MAX_SIZE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_MAX_SIZE_HPP
-
-
-#include <cstddef>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/util/math.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Box, std::size_t Dimension>
-struct get_max_size_box
-{
- static inline typename coordinate_type<Box>::type apply(Box const& box)
- {
- typename coordinate_type<Box>::type s
- = geometry::math::abs(geometry::get<1, Dimension>(box) - geometry::get<0, Dimension>(box));
-
- return (std::max)(s, get_max_size_box<Box, Dimension - 1>::apply(box));
- }
-};
-
-template <typename Box>
-struct get_max_size_box<Box, 0>
-{
- static inline typename coordinate_type<Box>::type apply(Box const& box)
- {
- return geometry::math::abs(geometry::get<1, 0>(box) - geometry::get<0, 0>(box));
- }
-};
-
-// This might be implemented later on for other geometries too.
-// Not dispatched yet.
-template <typename Box>
-inline typename coordinate_type<Box>::type get_max_size(Box const& box)
-{
- return get_max_size_box<Box, dimension<Box>::value - 1>::apply(box);
-}
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_GET_MAX_SIZE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp
deleted file mode 100644
index 6252b85b59d..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/has_self_intersections.hpp
+++ /dev/null
@@ -1,168 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_HAS_SELF_INTERSECTIONS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_HAS_SELF_INTERSECTIONS_HPP
-
-#include <deque>
-
-#include <boost/range.hpp>
-#include <boost/throw_exception.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
-#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
-
-#include <boost/geometry/policies/disjoint_interrupt_policy.hpp>
-#include <boost/geometry/policies/robustness/robust_point_type.hpp>
-#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
-#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
-
-#ifdef BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS
-# include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
-# include <boost/geometry/io/dsv/write.hpp>
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-
-#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
-
-/*!
-\brief Overlay Invalid Input Exception
-\ingroup overlay
-\details The overlay_invalid_input_exception is thrown at invalid input
- */
-class overlay_invalid_input_exception : public geometry::exception
-{
-public:
-
- inline overlay_invalid_input_exception() {}
-
- virtual char const* what() const noexcept
- {
- return "Boost.Geometry Overlay invalid input exception";
- }
-};
-
-#endif
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-template <typename Geometry, typename Strategy, typename RobustPolicy>
-inline bool has_self_intersections(Geometry const& geometry,
- Strategy const& strategy,
- RobustPolicy const& robust_policy,
- bool throw_on_self_intersection = true)
-{
- typedef typename point_type<Geometry>::type point_type;
- typedef turn_info
- <
- point_type,
- typename segment_ratio_type<point_type, RobustPolicy>::type
- > turn_info;
- std::deque<turn_info> turns;
- detail::disjoint::disjoint_interrupt_policy policy;
-
- detail::self_get_turn_points::self_turns
- <
- false,
- detail::overlay::assign_null_policy
- >(geometry, strategy, robust_policy, turns, policy, 0, false);
-
-#ifdef BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS
- bool first = true;
-#endif
- for(typename std::deque<turn_info>::const_iterator it = boost::begin(turns);
- it != boost::end(turns); ++it)
- {
- turn_info const& info = *it;
- bool const both_union_turn =
- info.operations[0].operation == detail::overlay::operation_union
- && info.operations[1].operation == detail::overlay::operation_union;
- bool const both_intersection_turn =
- info.operations[0].operation == detail::overlay::operation_intersection
- && info.operations[1].operation == detail::overlay::operation_intersection;
-
- bool const valid = (both_union_turn || both_intersection_turn)
- && (info.method == detail::overlay::method_touch
- || info.method == detail::overlay::method_touch_interior);
-
- if (! valid)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS
- if (first)
- {
- std::cout << "turn points: " << std::endl;
- first = false;
- }
- std::cout << method_char(info.method);
- for (int i = 0; i < 2; i++)
- {
- std::cout << " " << operation_char(info.operations[i].operation);
- std::cout << " " << info.operations[i].seg_id;
- }
- std::cout << " " << geometry::dsv(info.point) << std::endl;
-#endif
-
-#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
- if (throw_on_self_intersection)
- {
- BOOST_THROW_EXCEPTION(overlay_invalid_input_exception());
- }
-#endif
- return true;
- }
-
- }
- return false;
-}
-
-// For backward compatibility
-template <typename Geometry>
-inline bool has_self_intersections(Geometry const& geometry,
- bool throw_on_self_intersection = true)
-{
- typedef typename geometry::point_type<Geometry>::type point_type;
- typedef typename geometry::rescale_policy_type<point_type>::type
- rescale_policy_type;
-
- typename strategy::intersection::services::default_strategy
- <
- typename cs_tag<Geometry>::type
- >::type strategy;
-
- rescale_policy_type robust_policy
- = geometry::get_rescale_policy<rescale_policy_type>(geometry);
-
- return has_self_intersections(geometry, strategy, robust_policy,
- throw_on_self_intersection);
-}
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_HAS_SELF_INTERSECTIONS_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/interior_iterator.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/interior_iterator.hpp
deleted file mode 100644
index 3582773c3d0..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/interior_iterator.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERIOR_ITERATOR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERIOR_ITERATOR_HPP
-
-#include <boost/range/iterator.hpp>
-#include <boost/range/value_type.hpp>
-
-#include <boost/geometry/core/interior_type.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-/*!
-\brief Structure defining the type of interior rings iterator
-\note If the Geometry is const, const iterator is defined.
-\tparam Geometry \tparam_geometry
- */
-template <typename Geometry>
-struct interior_iterator
-{
- typedef typename boost::range_iterator
- <
- typename geometry::interior_type<Geometry>::type
- >::type type;
-};
-
-template <typename BaseT, typename T>
-struct copy_const
-{
- typedef T type;
-};
-
-template <typename BaseT, typename T>
-struct copy_const<BaseT const, T>
-{
- typedef T const type;
-};
-
-template <typename Geometry>
-struct interior_ring_iterator
-{
- typedef typename boost::range_iterator
- <
- typename copy_const
- <
- typename geometry::interior_type<Geometry>::type,
- typename boost::range_value
- <
- typename geometry::interior_type<Geometry>::type
- >::type
- >::type
- >::type type;
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERIOR_ITERATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/box_box.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/box_box.hpp
deleted file mode 100644
index 30c31ff1e56..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/box_box.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTION_BOX_BOX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTION_BOX_BOX_HPP
-
-
-#include <boost/geometry/algorithms/detail/intersection/interface.hpp>
-#include <boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Box1, typename Box2, bool Reverse
->
-struct intersection
- <
- Box1, Box2,
- box_tag, box_tag,
- Reverse
- > : public detail::intersection::intersection_box_box
- <
- 0, geometry::dimension<Box1>::value
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTION_BOX_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/implementation.hpp
deleted file mode 100644
index d8fb2ec38c7..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/implementation.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTION_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTION_IMPLEMENTATION_HPP
-
-
-#include <boost/geometry/algorithms/detail/intersection/box_box.hpp>
-#include <boost/geometry/algorithms/detail/intersection/multi.hpp>
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTION_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/interface.hpp
deleted file mode 100644
index 0efc9731b53..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/interface.hpp
+++ /dev/null
@@ -1,398 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014, 2017.
-// Modifications copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTION_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTION_INTERFACE_HPP
-
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/intersection_insert.hpp>
-#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/util/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-// By default, all is forwarded to the intersection_insert-dispatcher
-template
-<
- typename Geometry1, typename Geometry2,
- typename Tag1 = typename geometry::tag<Geometry1>::type,
- typename Tag2 = typename geometry::tag<Geometry2>::type,
- bool Reverse = reverse_dispatch<Geometry1, Geometry2>::type::value
->
-struct intersection
-{
- template <typename RobustPolicy, typename GeometryOut, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- GeometryOut& geometry_out,
- Strategy const& strategy)
- {
- typedef typename boost::range_value<GeometryOut>::type OneOut;
-
- intersection_insert
- <
- Geometry1, Geometry2, OneOut,
- overlay_intersection
- >::apply(geometry1, geometry2, robust_policy,
- range::back_inserter(geometry_out), strategy);
-
- return true;
- }
-
-};
-
-
-// If reversal is needed, perform it
-template
-<
- typename Geometry1, typename Geometry2,
- typename Tag1, typename Tag2
->
-struct intersection
-<
- Geometry1, Geometry2,
- Tag1, Tag2,
- true
->
- : intersection<Geometry2, Geometry1, Tag2, Tag1, false>
-{
- template <typename RobustPolicy, typename GeometryOut, typename Strategy>
- static inline bool apply(
- Geometry1 const& g1,
- Geometry2 const& g2,
- RobustPolicy const& robust_policy,
- GeometryOut& out,
- Strategy const& strategy)
- {
- return intersection
- <
- Geometry2, Geometry1,
- Tag2, Tag1,
- false
- >::apply(g2, g1, robust_policy, out, strategy);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy {
-
-struct intersection
-{
- template
- <
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename GeometryOut,
- typename Strategy
- >
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- GeometryOut & geometry_out,
- Strategy const& strategy)
- {
- return dispatch::intersection
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, robust_policy, geometry_out,
- strategy);
- }
-
- template
- <
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename GeometryOut
- >
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- GeometryOut & geometry_out,
- default_strategy)
- {
- typedef typename strategy::relate::services::default_strategy
- <
- Geometry1, Geometry2
- >::type strategy_type;
-
- return dispatch::intersection
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, robust_policy, geometry_out,
- strategy_type());
- }
-};
-
-} // resolve_strategy
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry1, typename Geometry2>
-struct intersection
-{
- template <typename GeometryOut, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- GeometryOut& geometry_out,
- Strategy const& strategy)
- {
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- typedef typename geometry::rescale_overlay_policy_type
- <
- Geometry1,
- Geometry2
- >::type rescale_policy_type;
-
- rescale_policy_type robust_policy
- = geometry::get_rescale_policy<rescale_policy_type>(geometry1,
- geometry2);
-
- return resolve_strategy::intersection::apply(geometry1,
- geometry2,
- robust_policy,
- geometry_out,
- strategy);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct intersection<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename GeometryOut, typename Strategy>
- struct visitor: static_visitor<bool>
- {
- Geometry2 const& m_geometry2;
- GeometryOut& m_geometry_out;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2,
- GeometryOut& geometry_out,
- Strategy const& strategy)
- : m_geometry2(geometry2)
- , m_geometry_out(geometry_out)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1>
- bool operator()(Geometry1 const& geometry1) const
- {
- return intersection
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, m_geometry2, m_geometry_out, m_strategy);
- }
- };
-
- template <typename GeometryOut, typename Strategy>
- static inline bool
- apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- GeometryOut& geometry_out,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<GeometryOut, Strategy>(geometry2,
- geometry_out,
- strategy),
- geometry1);
- }
-};
-
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct intersection<Geometry1, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename GeometryOut, typename Strategy>
- struct visitor: static_visitor<bool>
- {
- Geometry1 const& m_geometry1;
- GeometryOut& m_geometry_out;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1,
- GeometryOut& geometry_out,
- Strategy const& strategy)
- : m_geometry1(geometry1)
- , m_geometry_out(geometry_out)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry2>
- bool operator()(Geometry2 const& geometry2) const
- {
- return intersection
- <
- Geometry1,
- Geometry2
- >::apply(m_geometry1, geometry2, m_geometry_out, m_strategy);
- }
- };
-
- template <typename GeometryOut, typename Strategy>
- static inline bool
- apply(Geometry1 const& geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- GeometryOut& geometry_out,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<GeometryOut, Strategy>(geometry1,
- geometry_out,
- strategy),
- geometry2);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T1), BOOST_VARIANT_ENUM_PARAMS(typename T2)>
-struct intersection<variant<BOOST_VARIANT_ENUM_PARAMS(T1)>, variant<BOOST_VARIANT_ENUM_PARAMS(T2)> >
-{
- template <typename GeometryOut, typename Strategy>
- struct visitor: static_visitor<bool>
- {
- GeometryOut& m_geometry_out;
- Strategy const& m_strategy;
-
- visitor(GeometryOut& geometry_out, Strategy const& strategy)
- : m_geometry_out(geometry_out)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1, typename Geometry2>
- bool operator()(Geometry1 const& geometry1,
- Geometry2 const& geometry2) const
- {
- return intersection
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, m_geometry_out, m_strategy);
- }
- };
-
- template <typename GeometryOut, typename Strategy>
- static inline bool
- apply(variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- GeometryOut& geometry_out,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<GeometryOut, Strategy>(geometry_out,
- strategy),
- geometry1, geometry2);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_calc2{intersection}
-\ingroup intersection
-\details \details_calc2{intersection, spatial set theoretic intersection}.
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam GeometryOut Collection of geometries (e.g. std::vector, std::deque, boost::geometry::multi*) of which
- the value_type fulfills a \p_l_or_c concept, or it is the output geometry (e.g. for a box)
-\tparam Strategy \tparam_strategy{Intersection}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param geometry_out The output geometry, either a multi_point, multi_polygon,
- multi_linestring, or a box (for intersection of two boxes)
-\param strategy \param_strategy{intersection}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/intersection.qbk]}
-*/
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename GeometryOut,
- typename Strategy
->
-inline bool intersection(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- GeometryOut& geometry_out,
- Strategy const& strategy)
-{
- return resolve_variant::intersection
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, geometry_out, strategy);
-}
-
-
-/*!
-\brief \brief_calc2{intersection}
-\ingroup intersection
-\details \details_calc2{intersection, spatial set theoretic intersection}.
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam GeometryOut Collection of geometries (e.g. std::vector, std::deque, boost::geometry::multi*) of which
- the value_type fulfills a \p_l_or_c concept, or it is the output geometry (e.g. for a box)
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param geometry_out The output geometry, either a multi_point, multi_polygon,
- multi_linestring, or a box (for intersection of two boxes)
-
-\qbk{[include reference/algorithms/intersection.qbk]}
-*/
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename GeometryOut
->
-inline bool intersection(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- GeometryOut& geometry_out)
-{
- return resolve_variant::intersection
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, geometry_out, default_strategy());
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTION_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/multi.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/multi.hpp
deleted file mode 100644
index 92ce89bb2d8..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/intersection/multi.hpp
+++ /dev/null
@@ -1,421 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTION_MULTI_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTION_MULTI_HPP
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/geometry_id.hpp>
-#include <boost/geometry/core/is_areal.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-// TODO: those headers probably may be removed
-#include <boost/geometry/algorithms/detail/overlay/get_ring.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
-#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
-#include <boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp>
-#include <boost/geometry/algorithms/detail/overlay/select_rings.hpp>
-#include <boost/geometry/algorithms/detail/sections/range_by_section.hpp>
-#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
-
-#include <boost/geometry/algorithms/detail/intersection/interface.hpp>
-
-#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/algorithms/envelope.hpp>
-#include <boost/geometry/algorithms/num_points.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection
-{
-
-
-template <typename PointOut>
-struct intersection_multi_linestring_multi_linestring_point
-{
- template
- <
- typename MultiLinestring1, typename MultiLinestring2,
- typename RobustPolicy,
- typename OutputIterator, typename Strategy
- >
- static inline OutputIterator apply(MultiLinestring1 const& ml1,
- MultiLinestring2 const& ml2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- // Note, this loop is quadratic w.r.t. number of linestrings per input.
- // Future Enhancement: first do the sections of each, then intersect.
- for (typename boost::range_iterator
- <
- MultiLinestring1 const
- >::type it1 = boost::begin(ml1);
- it1 != boost::end(ml1);
- ++it1)
- {
- for (typename boost::range_iterator
- <
- MultiLinestring2 const
- >::type it2 = boost::begin(ml2);
- it2 != boost::end(ml2);
- ++it2)
- {
- out = intersection_linestring_linestring_point<PointOut>
- ::apply(*it1, *it2, robust_policy, out, strategy);
- }
- }
-
- return out;
- }
-};
-
-
-template <typename PointOut>
-struct intersection_linestring_multi_linestring_point
-{
- template
- <
- typename Linestring, typename MultiLinestring,
- typename RobustPolicy,
- typename OutputIterator, typename Strategy
- >
- static inline OutputIterator apply(Linestring const& linestring,
- MultiLinestring const& ml,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- for (typename boost::range_iterator
- <
- MultiLinestring const
- >::type it = boost::begin(ml);
- it != boost::end(ml);
- ++it)
- {
- out = intersection_linestring_linestring_point<PointOut>
- ::apply(linestring, *it, robust_policy, out, strategy);
- }
-
- return out;
- }
-};
-
-
-// This loop is quite similar to the loop above, but beacuse the iterator
-// is second (above) or first (below) argument, it is not trivial to merge them.
-template
-<
- bool ReverseAreal,
- typename LineStringOut,
- overlay_type OverlayType
->
-struct intersection_of_multi_linestring_with_areal
-{
- template
- <
- typename MultiLinestring, typename Areal,
- typename RobustPolicy,
- typename OutputIterator, typename Strategy
- >
- static inline OutputIterator apply(MultiLinestring const& ml, Areal const& areal,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- for (typename boost::range_iterator
- <
- MultiLinestring const
- >::type it = boost::begin(ml);
- it != boost::end(ml);
- ++it)
- {
- out = intersection_of_linestring_with_areal
- <
- ReverseAreal, LineStringOut, OverlayType
- >::apply(*it, areal, robust_policy, out, strategy);
- }
-
- return out;
-
- }
-};
-
-// This one calls the one above with reversed arguments
-template
-<
- bool ReverseAreal,
- typename LineStringOut,
- overlay_type OverlayType
->
-struct intersection_of_areal_with_multi_linestring
-{
- template
- <
- typename Areal, typename MultiLinestring,
- typename RobustPolicy,
- typename OutputIterator, typename Strategy
- >
- static inline OutputIterator apply(Areal const& areal, MultiLinestring const& ml,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- return intersection_of_multi_linestring_with_areal
- <
- ReverseAreal, LineStringOut, OverlayType
- >::apply(ml, areal, robust_policy, out, strategy);
- }
-};
-
-
-
-template <typename LinestringOut>
-struct clip_multi_linestring
-{
- template
- <
- typename MultiLinestring, typename Box,
- typename RobustPolicy,
- typename OutputIterator, typename Strategy
- >
- static inline OutputIterator apply(MultiLinestring const& multi_linestring,
- Box const& box,
- RobustPolicy const& robust_policy,
- OutputIterator out, Strategy const& )
- {
- typedef typename point_type<LinestringOut>::type point_type;
- strategy::intersection::liang_barsky<Box, point_type> lb_strategy;
- for (typename boost::range_iterator<MultiLinestring const>::type it
- = boost::begin(multi_linestring);
- it != boost::end(multi_linestring); ++it)
- {
- out = detail::intersection::clip_range_with_box
- <LinestringOut>(box, *it, robust_policy, out, lb_strategy);
- }
- return out;
- }
-};
-
-
-}} // namespace detail::intersection
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// Linear
-template
-<
- typename MultiLinestring1, typename MultiLinestring2,
- typename GeometryOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert
- <
- MultiLinestring1, MultiLinestring2,
- GeometryOut,
- OverlayType,
- Reverse1, Reverse2, ReverseOut,
- multi_linestring_tag, multi_linestring_tag, point_tag,
- linear_tag, linear_tag, pointlike_tag
- > : detail::intersection::intersection_multi_linestring_multi_linestring_point
- <
- GeometryOut
- >
-{};
-
-
-template
-<
- typename Linestring, typename MultiLinestring,
- typename GeometryOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert
- <
- Linestring, MultiLinestring,
- GeometryOut,
- OverlayType,
- Reverse1, Reverse2, ReverseOut,
- linestring_tag, multi_linestring_tag, point_tag,
- linear_tag, linear_tag, pointlike_tag
- > : detail::intersection::intersection_linestring_multi_linestring_point
- <
- GeometryOut
- >
-{};
-
-
-template
-<
- typename MultiLinestring, typename Box,
- typename GeometryOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert
- <
- MultiLinestring, Box,
- GeometryOut,
- OverlayType,
- Reverse1, Reverse2, ReverseOut,
- multi_linestring_tag, box_tag, linestring_tag,
- linear_tag, areal_tag, linear_tag
- > : detail::intersection::clip_multi_linestring
- <
- GeometryOut
- >
-{};
-
-
-template
-<
- typename Linestring, typename MultiPolygon,
- typename GeometryOut,
- overlay_type OverlayType,
- bool ReverseLinestring, bool ReverseMultiPolygon, bool ReverseOut
->
-struct intersection_insert
- <
- Linestring, MultiPolygon,
- GeometryOut,
- OverlayType,
- ReverseLinestring, ReverseMultiPolygon, ReverseOut,
- linestring_tag, multi_polygon_tag, linestring_tag,
- linear_tag, areal_tag, linear_tag
- > : detail::intersection::intersection_of_linestring_with_areal
- <
- ReverseMultiPolygon,
- GeometryOut,
- OverlayType
- >
-{};
-
-
-// Derives from areal/mls because runtime arguments are in that order.
-// areal/mls reverses it itself to mls/areal
-template
-<
- typename Polygon, typename MultiLinestring,
- typename GeometryOut,
- overlay_type OverlayType,
- bool ReversePolygon, bool ReverseMultiLinestring, bool ReverseOut
->
-struct intersection_insert
- <
- Polygon, MultiLinestring,
- GeometryOut,
- OverlayType,
- ReversePolygon, ReverseMultiLinestring, ReverseOut,
- polygon_tag, multi_linestring_tag, linestring_tag,
- areal_tag, linear_tag, linear_tag
- > : detail::intersection::intersection_of_areal_with_multi_linestring
- <
- ReversePolygon,
- GeometryOut,
- OverlayType
- >
-{};
-
-
-template
-<
- typename MultiLinestring, typename Ring,
- typename GeometryOut,
- overlay_type OverlayType,
- bool ReverseMultiLinestring, bool ReverseRing, bool ReverseOut
->
-struct intersection_insert
- <
- MultiLinestring, Ring,
- GeometryOut,
- OverlayType,
- ReverseMultiLinestring, ReverseRing, ReverseOut,
- multi_linestring_tag, ring_tag, linestring_tag,
- linear_tag, areal_tag, linear_tag
- > : detail::intersection::intersection_of_multi_linestring_with_areal
- <
- ReverseRing,
- GeometryOut,
- OverlayType
- >
-{};
-
-template
-<
- typename MultiLinestring, typename Polygon,
- typename GeometryOut,
- overlay_type OverlayType,
- bool ReverseMultiLinestring, bool ReverseRing, bool ReverseOut
->
-struct intersection_insert
- <
- MultiLinestring, Polygon,
- GeometryOut,
- OverlayType,
- ReverseMultiLinestring, ReverseRing, ReverseOut,
- multi_linestring_tag, polygon_tag, linestring_tag,
- linear_tag, areal_tag, linear_tag
- > : detail::intersection::intersection_of_multi_linestring_with_areal
- <
- ReverseRing,
- GeometryOut,
- OverlayType
- >
-{};
-
-
-
-template
-<
- typename MultiLinestring, typename MultiPolygon,
- typename GeometryOut,
- overlay_type OverlayType,
- bool ReverseMultiLinestring, bool ReverseMultiPolygon, bool ReverseOut
->
-struct intersection_insert
- <
- MultiLinestring, MultiPolygon,
- GeometryOut,
- OverlayType,
- ReverseMultiLinestring, ReverseMultiPolygon, ReverseOut,
- multi_linestring_tag, multi_polygon_tag, linestring_tag,
- linear_tag, areal_tag, linear_tag
- > : detail::intersection::intersection_of_multi_linestring_with_areal
- <
- ReverseMultiPolygon,
- GeometryOut,
- OverlayType
- >
-{};
-
-
-} // namespace dispatch
-#endif
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTION_MULTI_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/intersects/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/intersects/implementation.hpp
deleted file mode 100644
index f9b5402d0c1..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/intersects/implementation.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTS_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTS_IMPLEMENTATION_HPP
-
-
-#include <deque>
-
-#include <boost/geometry/algorithms/detail/intersects/interface.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/implementation.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
-#include <boost/geometry/policies/disjoint_interrupt_policy.hpp>
-#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
-#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
-
-#include <boost/geometry/strategies/relate.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersects
-{
-
-template <typename Geometry>
-struct self_intersects
-{
- static bool apply(Geometry const& geometry)
- {
- concepts::check<Geometry const>();
-
- typedef typename geometry::point_type<Geometry>::type point_type;
- typedef typename strategy::relate::services::default_strategy
- <
- Geometry, Geometry
- >::type strategy_type;
- typedef detail::no_rescale_policy rescale_policy_type;
-
- typedef detail::overlay::turn_info
- <
- point_type,
- typename segment_ratio_type<point_type, rescale_policy_type>::type
- > turn_info;
-
- std::deque<turn_info> turns;
-
- typedef detail::overlay::get_turn_info
- <
- detail::overlay::assign_null_policy
- > turn_policy;
-
- strategy_type strategy;
- rescale_policy_type robust_policy;
-
- detail::disjoint::disjoint_interrupt_policy policy;
- // TODO: skip_adjacent should be set to false
- detail::self_get_turn_points::get_turns
- <
- false, turn_policy
- >::apply(geometry, strategy, robust_policy, turns, policy, 0, true);
- return policy.has_intersections;
- }
-};
-
-}} // namespace detail::intersects
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTS_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/intersects/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/intersects/interface.hpp
deleted file mode 100644
index 8940a426f37..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/intersects/interface.hpp
+++ /dev/null
@@ -1,115 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTS_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTS_INTERFACE_HPP
-
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint/interface.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersects
-{
-
-// Forward declaration
-template <typename Geometry>
-struct self_intersects;
-
-}} // namespace detail::intersects
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief \brief_check{has at least one intersection (crossing or self-tangency)}
-\note This function can be called for one geometry (self-intersection) and
- also for two geometries (intersection)
-\ingroup intersects
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_check{is self-intersecting}
-
-\qbk{distinguish,one geometry}
-\qbk{[def __one_parameter__]}
-\qbk{[include reference/algorithms/intersects.qbk]}
-*/
-template <typename Geometry>
-inline bool intersects(Geometry const& geometry)
-{
- return detail::intersects::self_intersects<Geometry>::apply(geometry);
-}
-
-
-/*!
-\brief \brief_check2{have at least one intersection}
-\ingroup intersects
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Strategy \tparam_strategy{Intersects}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param strategy \param_strategy{intersects}
-\return \return_check2{intersect each other}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/intersects.qbk]}
- */
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline bool intersects(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- return ! geometry::disjoint(geometry1, geometry2, strategy);
-}
-
-
-/*!
-\brief \brief_check2{have at least one intersection}
-\ingroup intersects
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return \return_check2{intersect each other}
-
-\qbk{distinguish,two geometries}
-\qbk{[include reference/algorithms/intersects.qbk]}
- */
-template <typename Geometry1, typename Geometry2>
-inline bool intersects(Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- return ! geometry::disjoint(geometry1, geometry2);
-}
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERSECTS_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/always_simple.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/always_simple.hpp
deleted file mode 100644
index 5cec5e19247..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/always_simple.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_ALWAYS_SIMPLE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_ALWAYS_SIMPLE_HPP
-
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/dispatch/is_simple.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_simple
-{
-
-
-template <typename Geometry>
-struct always_simple
-{
- template <typename Strategy>
- static inline bool apply(Geometry const&, Strategy const&)
- {
- return true;
- }
-};
-
-
-}} // namespace detail::is_simple
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// A point is always simple
-template <typename Point>
-struct is_simple<Point, point_tag>
- : detail::is_simple::always_simple<Point>
-{};
-
-
-// A valid segment is always simple.
-// A segment is a curve.
-// A curve is simple if it does not pass through the same point twice,
-// with the possible exception of its two endpoints
-//
-// Reference: OGC 06-103r4 (6.1.6.1)
-template <typename Segment>
-struct is_simple<Segment, segment_tag>
- : detail::is_simple::always_simple<Segment>
-{};
-
-
-// A valid box is always simple
-// A box is a Polygon, and it satisfies the conditions for Polygon validity.
-//
-// Reference (for polygon validity): OGC 06-103r4 (6.1.11.1)
-template <typename Box>
-struct is_simple<Box, box_tag>
- : detail::is_simple::always_simple<Box>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_ALWAYS_SIMPLE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/areal.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/areal.hpp
deleted file mode 100644
index d4d6db9bcea..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/areal.hpp
+++ /dev/null
@@ -1,157 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_AREAL_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_AREAL_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-#include <boost/geometry/algorithms/detail/is_simple/failure_policy.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp>
-
-#include <boost/geometry/algorithms/dispatch/is_simple.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_simple
-{
-
-
-template <typename Ring>
-struct is_simple_ring
-{
- template <typename Strategy>
- static inline bool apply(Ring const& ring, Strategy const&)
- {
- return apply(ring);
- }
-
- static inline bool apply(Ring const& ring)
- {
- simplicity_failure_policy policy;
- return ! boost::empty(ring)
- && ! detail::is_valid::has_duplicates
- <
- Ring, geometry::closure<Ring>::value
- >::apply(ring, policy);
- }
-};
-
-
-template <typename Polygon>
-class is_simple_polygon
-{
-private:
- template <typename InteriorRings>
- static inline
- bool are_simple_interior_rings(InteriorRings const& interior_rings)
- {
- return
- detail::check_iterator_range
- <
- is_simple_ring
- <
- typename boost::range_value<InteriorRings>::type
- >
- >::apply(boost::begin(interior_rings),
- boost::end(interior_rings));
- }
-
-public:
- template <typename Strategy>
- static inline bool apply(Polygon const& polygon, Strategy const&)
- {
- return apply(polygon);
- }
-
- static inline bool apply(Polygon const& polygon)
- {
- return
- is_simple_ring
- <
- typename ring_type<Polygon>::type
- >::apply(exterior_ring(polygon))
- &&
- are_simple_interior_rings(geometry::interior_rings(polygon));
- }
-};
-
-
-}} // namespace detail::is_simple
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// A Ring is a Polygon.
-// A Polygon is always a simple geometric object provided that it is valid.
-//
-// Reference (for polygon validity): OGC 06-103r4 (6.1.11.1)
-template <typename Ring>
-struct is_simple<Ring, ring_tag>
- : detail::is_simple::is_simple_ring<Ring>
-{};
-
-
-// A Polygon is always a simple geometric object provided that it is valid.
-//
-// Reference (for validity of Polygons): OGC 06-103r4 (6.1.11.1)
-template <typename Polygon>
-struct is_simple<Polygon, polygon_tag>
- : detail::is_simple::is_simple_polygon<Polygon>
-{};
-
-
-// Not clear what the definition is.
-// Right now we consider a MultiPolygon as simple if it is valid.
-//
-// Reference (for validity of MultiPolygons): OGC 06-103r4 (6.1.14)
-template <typename MultiPolygon>
-struct is_simple<MultiPolygon, multi_polygon_tag>
-{
- template <typename Strategy>
- static inline bool apply(MultiPolygon const& multipolygon, Strategy const&)
- {
- return
- detail::check_iterator_range
- <
- detail::is_simple::is_simple_polygon
- <
- typename boost::range_value<MultiPolygon>::type
- >,
- true // allow empty multi-polygon
- >::apply(boost::begin(multipolygon), boost::end(multipolygon));
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_AREAL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp
deleted file mode 100644
index 196d89b925e..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp
+++ /dev/null
@@ -1,113 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_DEBUG_PRINT_BOUNDARY_POINTS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_DEBUG_PRINT_BOUNDARY_POINTS_HPP
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
-#include <algorithm>
-#include <iostream>
-#include <vector>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/io/dsv/write.hpp>
-
-#include <boost/geometry/policies/compare.hpp>
-
-#include <boost/geometry/algorithms/equals.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#endif // BOOST_GEOMETRY_TEST_DEBUG
-
-
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace is_simple
-{
-
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
-template <typename Linear, typename Tag = typename tag<Linear>::type>
-struct debug_boundary_points_printer
- : not_implemented<Linear>
-{};
-
-template <typename Linestring>
-struct debug_boundary_points_printer<Linestring, linestring_tag>
-{
- static inline void apply(Linestring const& linestring)
- {
- std::cout << "boundary points: ";
- std::cout << " " << geometry::dsv(range::front(linestring));
- std::cout << " " << geometry::dsv(range::back(linestring));
- std::cout << std::endl << std::endl;
- }
-};
-
-template <typename MultiLinestring>
-struct debug_boundary_points_printer<MultiLinestring, multi_linestring_tag>
-{
- static inline void apply(MultiLinestring const& multilinestring)
- {
- typedef typename point_type<MultiLinestring>::type point_type;
- typedef std::vector<point_type> point_vector;
-
- point_vector boundary_points;
- for (typename boost::range_iterator<MultiLinestring const>::type it
- = boost::begin(multilinestring);
- it != boost::end(multilinestring); ++it)
- {
- if ( boost::size(*it) > 1
- && !geometry::equals(range::front(*it), range::back(*it)) )
- {
- boundary_points.push_back( range::front(*it) );
- boundary_points.push_back( range::back(*it) );
- }
- }
-
- std::sort(boundary_points.begin(), boundary_points.end(),
- geometry::less<point_type>());
-
- std::cout << "boundary points: ";
- for (typename point_vector::const_iterator
- pit = boundary_points.begin();
- pit != boundary_points.end(); ++pit)
- {
- std::cout << " " << geometry::dsv(*pit);
- }
- std::cout << std::endl << std::endl;
- }
-};
-
-
-template <typename Linear>
-inline void debug_print_boundary_points(Linear const& linear)
-{
- debug_boundary_points_printer<Linear>::apply(linear);
-}
-#else
-template <typename Linear>
-inline void debug_print_boundary_points(Linear const&)
-{
-}
-#endif // BOOST_GEOMETRY_TEST_DEBUG
-
-
-}} // namespace detail::is_simple
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_DEBUG_PRINT_BOUNDARY_POINTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/failure_policy.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/failure_policy.hpp
deleted file mode 100644
index 6504edd1d5f..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/failure_policy.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_FAILURE_POLICY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_FAILURE_POLICY_HPP
-
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_simple
-{
-
-
-struct simplicity_failure_policy
-{
- template <validity_failure_type Failure>
- static inline bool apply()
- {
- return Failure == no_failure;
- }
-
- template <validity_failure_type Failure, typename Data>
- static inline bool apply(Data const&)
- {
- return apply<Failure>();
- }
-
- template <validity_failure_type Failure, typename Data1, typename Data2>
- static inline bool apply(Data1 const&, Data2 const&)
- {
- return apply<Failure>();
- }
-};
-
-
-}} // namespace detail::is_simple
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_FAILURE_POLICY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/implementation.hpp
deleted file mode 100644
index e69b273ce3c..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/implementation.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_IMPLEMENTATION_HPP
-
-#include <boost/geometry/algorithms/detail/is_simple/always_simple.hpp>
-#include <boost/geometry/algorithms/detail/is_simple/areal.hpp>
-#include <boost/geometry/algorithms/detail/is_simple/linear.hpp>
-#include <boost/geometry/algorithms/detail/is_simple/multipoint.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/interface.hpp
deleted file mode 100644
index af0127dc75c..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/interface.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_INTERFACE_HPP
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/dispatch/is_simple.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/intersection.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace resolve_strategy
-{
-
-struct is_simple
-{
- template <typename Geometry, typename Strategy>
- static inline bool apply(Geometry const& geometry,
- Strategy const& strategy)
- {
- return dispatch::is_simple<Geometry>::apply(geometry, strategy);
- }
-
- template <typename Geometry>
- static inline bool apply(Geometry const& geometry,
- default_strategy)
- {
- // NOTE: Currently the strategy is only used for Linear geometries
- typedef typename strategy::intersection::services::default_strategy
- <
- typename cs_tag<Geometry>::type
- >::type strategy_type;
-
- return dispatch::is_simple<Geometry>::apply(geometry, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct is_simple
-{
- template <typename Strategy>
- static inline bool apply(Geometry const& geometry, Strategy const& strategy)
- {
- concepts::check<Geometry const>();
-
- return resolve_strategy::is_simple::apply(geometry, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct is_simple<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Strategy>
- struct visitor : boost::static_visitor<bool>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Geometry>
- bool operator()(Geometry const& geometry) const
- {
- return is_simple<Geometry>::apply(geometry, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_check{is simple}
-\ingroup is_simple
-\tparam Geometry \tparam_geometry
-\tparam Strategy \tparam_strategy{Is_simple}
-\param geometry \param_geometry
-\param strategy \param_strategy{is_simple}
-\return \return_check{is simple}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/is_simple.qbk]}
-*/
-template <typename Geometry, typename Strategy>
-inline bool is_simple(Geometry const& geometry, Strategy const& strategy)
-{
- return resolve_variant::is_simple<Geometry>::apply(geometry, strategy);
-}
-
-
-/*!
-\brief \brief_check{is simple}
-\ingroup is_simple
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_check{is simple}
-
-\qbk{[include reference/algorithms/is_simple.qbk]}
-*/
-template <typename Geometry>
-inline bool is_simple(Geometry const& geometry)
-{
- return resolve_variant::is_simple<Geometry>::apply(geometry, default_strategy());
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/linear.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/linear.hpp
deleted file mode 100644
index e36049a9619..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/linear.hpp
+++ /dev/null
@@ -1,364 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_LINEAR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_LINEAR_HPP
-
-#include <algorithm>
-#include <deque>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/policies/predicate_based_interrupt_policy.hpp>
-#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
-#include <boost/geometry/policies/robustness/segment_ratio.hpp>
-
-#include <boost/geometry/algorithms/equals.hpp>
-#include <boost/geometry/algorithms/intersects.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint/linear_linear.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_spikes.hpp>
-
-#include <boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp>
-#include <boost/geometry/algorithms/detail/is_simple/failure_policy.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp>
-
-#include <boost/geometry/algorithms/dispatch/is_simple.hpp>
-
-#include <boost/geometry/strategies/intersection.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_simple
-{
-
-
-template <typename Turn>
-inline bool check_segment_indices(Turn const& turn,
- signed_size_type last_index)
-{
- return
- (turn.operations[0].seg_id.segment_index == 0
- && turn.operations[1].seg_id.segment_index == last_index)
- ||
- (turn.operations[0].seg_id.segment_index == 0
- && turn.operations[1].seg_id.segment_index == last_index);
-}
-
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-class is_acceptable_turn
- : not_implemented<Geometry>
-{};
-
-template <typename Linestring>
-class is_acceptable_turn<Linestring, linestring_tag>
-{
-public:
- is_acceptable_turn(Linestring const& linestring)
- : m_linestring(linestring)
- , m_is_closed(geometry::equals(range::front(linestring),
- range::back(linestring)))
- {}
-
- template <typename Turn>
- inline bool apply(Turn const& turn) const
- {
- BOOST_GEOMETRY_ASSERT(boost::size(m_linestring) > 1);
- return m_is_closed
- && turn.method == overlay::method_none
- && check_segment_indices(turn, boost::size(m_linestring) - 2)
- && turn.operations[0].fraction.is_zero();
- }
-
-private:
- Linestring const& m_linestring;
- bool const m_is_closed;
-};
-
-template <typename MultiLinestring>
-class is_acceptable_turn<MultiLinestring, multi_linestring_tag>
-{
-private:
- typedef typename boost::range_value<MultiLinestring>::type linestring_type;
- typedef is_acceptable_turn<linestring_type> base_type;
-
- template <typename Point, typename Linestring>
- static inline bool is_boundary_point_of(Point const& point,
- Linestring const& linestring)
- {
- BOOST_GEOMETRY_ASSERT(boost::size(linestring) > 1);
- return
- ! geometry::equals(range::front(linestring),
- range::back(linestring))
- &&
- (geometry::equals(point, range::front(linestring))
- || geometry::equals(point, range::back(linestring)));
- }
-
- template <typename Turn, typename Linestring>
- static inline bool is_closing_point_of(Turn const& turn,
- Linestring const& linestring)
- {
- BOOST_GEOMETRY_ASSERT(boost::size(linestring) > 1);
- return
- turn.method == overlay::method_none
- &&
- check_segment_indices(turn, boost::size(linestring) - 2)
- &&
- geometry::equals(range::front(linestring), range::back(linestring))
- &&
- turn.operations[0].fraction.is_zero();
- ;
- }
-
- template <typename Linestring1, typename Linestring2>
- static inline bool have_same_boundary_points(Linestring1 const& ls1,
- Linestring2 const& ls2)
- {
- return
- geometry::equals(range::front(ls1), range::front(ls2))
- ?
- geometry::equals(range::back(ls1), range::back(ls2))
- :
- (geometry::equals(range::front(ls1), range::back(ls2))
- &&
- geometry::equals(range::back(ls1), range::front(ls2)))
- ;
- }
-
-public:
- is_acceptable_turn(MultiLinestring const& multilinestring)
- : m_multilinestring(multilinestring)
- {}
-
- template <typename Turn>
- inline bool apply(Turn const& turn) const
- {
- linestring_type const& ls1 =
- range::at(m_multilinestring, turn.operations[0].seg_id.multi_index);
-
- linestring_type const& ls2 =
- range::at(m_multilinestring, turn.operations[1].seg_id.multi_index);
-
- if (turn.operations[0].seg_id.multi_index
- == turn.operations[1].seg_id.multi_index)
- {
- return is_closing_point_of(turn, ls1);
- }
-
- return
- is_boundary_point_of(turn.point, ls1)
- && is_boundary_point_of(turn.point, ls2)
- &&
- ( boost::size(ls1) != 2
- || boost::size(ls2) != 2
- || ! have_same_boundary_points(ls1, ls2) );
- }
-
-private:
- MultiLinestring const& m_multilinestring;
-};
-
-
-template <typename Linear, typename Strategy>
-inline bool has_self_intersections(Linear const& linear, Strategy const& strategy)
-{
- typedef typename point_type<Linear>::type point_type;
-
- // compute self turns
- typedef detail::overlay::turn_info
- <
- point_type,
- geometry::segment_ratio
- <
- typename geometry::coordinate_type<point_type>::type
- >
- > turn_info;
-
- std::deque<turn_info> turns;
-
- typedef detail::overlay::get_turn_info
- <
- detail::disjoint::assign_disjoint_policy
- > turn_policy;
-
- is_acceptable_turn<Linear> predicate(linear);
- detail::overlay::predicate_based_interrupt_policy
- <
- is_acceptable_turn<Linear>
- > interrupt_policy(predicate);
-
- // TODO: skip_adjacent should be set to false
- detail::self_get_turn_points::get_turns
- <
- false, turn_policy
- >::apply(linear,
- strategy,
- detail::no_rescale_policy(),
- turns,
- interrupt_policy, 0, true);
-
- detail::is_valid::debug_print_turns(turns.begin(), turns.end());
- debug_print_boundary_points(linear);
-
- return interrupt_policy.has_intersections;
-}
-
-
-template <typename Linestring, bool CheckSelfIntersections = true>
-struct is_simple_linestring
-{
- template <typename Strategy>
- static inline bool apply(Linestring const& linestring,
- Strategy const& strategy)
- {
- simplicity_failure_policy policy;
- return ! boost::empty(linestring)
- && ! detail::is_valid::has_duplicates
- <
- Linestring, closed
- >::apply(linestring, policy)
- && ! detail::is_valid::has_spikes
- <
- Linestring, closed
- >::apply(linestring, policy, strategy.get_side_strategy());
- }
-};
-
-template <typename Linestring>
-struct is_simple_linestring<Linestring, true>
-{
- template <typename Strategy>
- static inline bool apply(Linestring const& linestring,
- Strategy const& strategy)
- {
- return is_simple_linestring
- <
- Linestring, false
- >::apply(linestring, strategy)
- && ! has_self_intersections(linestring, strategy);
- }
-};
-
-
-template <typename MultiLinestring>
-struct is_simple_multilinestring
-{
-private:
- template <typename Strategy>
- struct per_linestring
- {
- per_linestring(Strategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Linestring>
- inline bool apply(Linestring const& linestring) const
- {
- return detail::is_simple::is_simple_linestring
- <
- Linestring,
- false // do not compute self-intersections
- >::apply(linestring, m_strategy);
- }
-
- Strategy const& m_strategy;
- };
-
-public:
- template <typename Strategy>
- static inline bool apply(MultiLinestring const& multilinestring,
- Strategy const& strategy)
- {
- typedef per_linestring<Strategy> per_ls;
-
- // check each of the linestrings for simplicity
- // but do not compute self-intersections yet; these will be
- // computed for the entire multilinestring
- if ( ! detail::check_iterator_range
- <
- per_ls, // do not compute self-intersections
- true // allow empty multilinestring
- >::apply(boost::begin(multilinestring),
- boost::end(multilinestring),
- per_ls(strategy))
- )
- {
- return false;
- }
-
- return ! has_self_intersections(multilinestring, strategy);
- }
-};
-
-
-
-}} // namespace detail::is_simple
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-// A linestring is a curve.
-// A curve is simple if it does not pass through the same point twice,
-// with the possible exception of its two endpoints
-//
-// Reference: OGC 06-103r4 (6.1.6.1)
-template <typename Linestring>
-struct is_simple<Linestring, linestring_tag>
- : detail::is_simple::is_simple_linestring<Linestring>
-{};
-
-
-// A MultiLinestring is a MultiCurve
-// A MultiCurve is simple if all of its elements are simple and the
-// only intersections between any two elements occur at Points that
-// are on the boundaries of both elements.
-//
-// Reference: OGC 06-103r4 (6.1.8.1; Fig. 9)
-template <typename MultiLinestring>
-struct is_simple<MultiLinestring, multi_linestring_tag>
- : detail::is_simple::is_simple_multilinestring<MultiLinestring>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_LINEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/multipoint.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/multipoint.hpp
deleted file mode 100644
index 61f0bc91309..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_simple/multipoint.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_MULTIPOINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_MULTIPOINT_HPP
-
-#include <algorithm>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/policies/compare.hpp>
-
-#include <boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp>
-#include <boost/geometry/algorithms/detail/is_simple/failure_policy.hpp>
-
-#include <boost/geometry/algorithms/dispatch/is_simple.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_simple
-{
-
-
-template <typename MultiPoint>
-struct is_simple_multipoint
-{
- template <typename Strategy>
- static inline bool apply(MultiPoint const& multipoint, Strategy const&)
- {
- if (boost::empty(multipoint))
- {
- return true;
- }
-
- MultiPoint mp(multipoint);
- std::sort(boost::begin(mp), boost::end(mp),
- geometry::less<typename point_type<MultiPoint>::type>());
-
- simplicity_failure_policy policy;
- return !detail::is_valid::has_duplicates
- <
- MultiPoint, closed
- >::apply(mp, policy);
- }
-};
-
-
-}} // namespace detail::is_simple
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// A MultiPoint is simple if no two Points in the MultiPoint are equal
-// (have identical coordinate values in X and Y)
-//
-// Reference: OGC 06-103r4 (6.1.5)
-template <typename MultiPoint>
-struct is_simple<MultiPoint, multi_point_tag>
- : detail::is_simple::is_simple_multipoint<MultiPoint>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_MULTIPOINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/box.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/box.hpp
deleted file mode 100644
index 69a4d4e78ec..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/box.hpp
+++ /dev/null
@@ -1,115 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_BOX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_BOX_HPP
-
-#include <cstddef>
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp>
-#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_valid
-{
-
-template <typename Box, std::size_t I>
-struct has_valid_corners
-{
- template <typename VisitPolicy>
- static inline bool apply(Box const& box, VisitPolicy& visitor)
- {
- if (math::equals(geometry::get<geometry::min_corner, I-1>(box),
- geometry::get<geometry::max_corner, I-1>(box)))
- {
- return
- visitor.template apply<failure_wrong_topological_dimension>();
- }
- else if (geometry::get<geometry::min_corner, I-1>(box)
- >
- geometry::get<geometry::max_corner, I-1>(box))
- {
- return visitor.template apply<failure_wrong_corner_order>();
- }
- return has_valid_corners<Box, I-1>::apply(box, visitor);
- }
-};
-
-
-template <typename Box>
-struct has_valid_corners<Box, 0>
-{
- template <typename VisitPolicy>
- static inline bool apply(Box const&, VisitPolicy& visitor)
- {
- boost::ignore_unused(visitor);
-
- return visitor.template apply<no_failure>();
- }
-};
-
-
-template <typename Box>
-struct is_valid_box
-{
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(Box const& box, VisitPolicy& visitor, Strategy const&)
- {
- return
- ! has_invalid_coordinate<Box>::apply(box, visitor)
- &&
- has_valid_corners<Box, dimension<Box>::value>::apply(box, visitor);
- }
-};
-
-}} // namespace detail::is_valid
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// A box is always simple
-// A box is a Polygon, and it satisfies the conditions for Polygon validity.
-//
-// The only thing we have to check is whether the max corner lies in
-// the upper-right quadrant as defined by the min corner
-//
-// Reference (for polygon validity): OGC 06-103r4 (6.1.11.1)
-template <typename Box>
-struct is_valid<Box, box_tag>
- : detail::is_valid::is_valid_box<Box>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp
deleted file mode 100644
index f08e70242c5..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp
+++ /dev/null
@@ -1,239 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_COMPLEMENT_GRAPH_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_COMPLEMENT_GRAPH_HPP
-
-#include <cstddef>
-
-#include <set>
-#include <stack>
-#include <utility>
-#include <vector>
-
-#include <boost/core/addressof.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/policies/compare.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace is_valid
-{
-
-
-template <typename TurnPoint>
-class complement_graph_vertex
-{
-public:
- complement_graph_vertex(std::size_t id)
- : m_id(id)
- , m_turn_point(NULL)
- {}
-
- complement_graph_vertex(TurnPoint const* turn_point,
- std::size_t expected_id)
- : m_id(expected_id)
- , m_turn_point(turn_point)
- {}
-
- inline std::size_t id() const { return m_id; }
-
- inline bool operator<(complement_graph_vertex const& other) const
- {
- if ( m_turn_point != NULL && other.m_turn_point != NULL )
- {
- return geometry::less
- <
- TurnPoint
- >()(*m_turn_point, *other.m_turn_point);
- }
- if ( m_turn_point == NULL && other.m_turn_point == NULL )
- {
- return m_id < other.m_id;
- }
- return m_turn_point == NULL;
- }
-
-private:
- // the value of m_turn_point determines the type of the vertex
- // non-NULL: vertex corresponds to an IP
- // NULL : vertex corresponds to a hole or outer space, and the id
- // is the ring id of the corresponding ring of the polygon
- std::size_t m_id;
- TurnPoint const* m_turn_point;
-};
-
-
-
-
-template <typename TurnPoint>
-class complement_graph
-{
-private:
- typedef complement_graph_vertex<TurnPoint> vertex;
- typedef std::set<vertex> vertex_container;
-
-public:
- typedef typename vertex_container::const_iterator vertex_handle;
-
-private:
- struct vertex_handle_less
- {
- inline bool operator()(vertex_handle v1, vertex_handle v2) const
- {
- return v1->id() < v2->id();
- }
- };
-
- typedef std::set<vertex_handle, vertex_handle_less> neighbor_container;
-
- class has_cycles_dfs_data
- {
- public:
- has_cycles_dfs_data(std::size_t num_nodes)
- : m_visited(num_nodes, false)
- , m_parent_id(num_nodes, -1)
- {}
-
- inline signed_size_type parent_id(vertex_handle v) const
- {
- return m_parent_id[v->id()];
- }
-
- inline void set_parent_id(vertex_handle v, signed_size_type id)
- {
- m_parent_id[v->id()] = id;
- }
-
- inline bool visited(vertex_handle v) const
- {
- return m_visited[v->id()];
- }
-
- inline void set_visited(vertex_handle v, bool value)
- {
- m_visited[v->id()] = value;
- }
- private:
- std::vector<bool> m_visited;
- std::vector<signed_size_type> m_parent_id;
- };
-
-
- inline bool has_cycles(vertex_handle start_vertex,
- has_cycles_dfs_data& data) const
- {
- std::stack<vertex_handle> stack;
- stack.push(start_vertex);
-
- while ( !stack.empty() )
- {
- vertex_handle v = stack.top();
- stack.pop();
-
- data.set_visited(v, true);
- for (typename neighbor_container::const_iterator nit
- = m_neighbors[v->id()].begin();
- nit != m_neighbors[v->id()].end(); ++nit)
- {
- if ( static_cast<signed_size_type>((*nit)->id()) != data.parent_id(v) )
- {
- if ( data.visited(*nit) )
- {
- return true;
- }
- else
- {
- data.set_parent_id(*nit, static_cast<signed_size_type>(v->id()));
- stack.push(*nit);
- }
- }
- }
- }
- return false;
- }
-
-public:
- // num_rings: total number of rings, including the exterior ring
- complement_graph(std::size_t num_rings)
- : m_num_rings(num_rings)
- , m_num_turns(0)
- , m_vertices()
- , m_neighbors(num_rings)
- {}
-
- // inserts a ring vertex in the graph and returns its handle
- // ring id's are zero-based (so the first interior ring has id 1)
- inline vertex_handle add_vertex(signed_size_type id)
- {
- return m_vertices.insert(vertex(static_cast<std::size_t>(id))).first;
- }
-
- // inserts an IP in the graph and returns its id
- inline vertex_handle add_vertex(TurnPoint const& turn_point)
- {
- std::pair<vertex_handle, bool> res
- = m_vertices.insert(vertex(boost::addressof(turn_point),
- m_num_rings + m_num_turns)
- );
-
- if ( res.second )
- {
- // a new element is inserted
- m_neighbors.push_back(neighbor_container());
- ++m_num_turns;
- }
- return res.first;
- }
-
- inline void add_edge(vertex_handle v1, vertex_handle v2)
- {
- BOOST_GEOMETRY_ASSERT( v1 != m_vertices.end() );
- BOOST_GEOMETRY_ASSERT( v2 != m_vertices.end() );
- m_neighbors[v1->id()].insert(v2);
- m_neighbors[v2->id()].insert(v1);
- }
-
- inline bool has_cycles() const
- {
- // initialize all vertices as non-visited and with no parent set
- // this is done by the constructor of has_cycles_dfs_data
- has_cycles_dfs_data data(m_num_rings + m_num_turns);
-
- // for each non-visited vertex, start a DFS from that vertex
- for (vertex_handle it = m_vertices.begin();
- it != m_vertices.end(); ++it)
- {
- if ( !data.visited(it) && has_cycles(it, data) )
- {
- return true;
- }
- }
- return false;
- }
-
- template <typename OStream, typename TP>
- friend inline
- void debug_print_complement_graph(OStream&, complement_graph<TP> const&);
-
-private:
- std::size_t m_num_rings, m_num_turns;
- vertex_container m_vertices;
- std::vector<neighbor_container> m_neighbors;
-};
-
-
-}} // namespace detail::is_valid
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_COMPLEMENT_GRAPH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp
deleted file mode 100644
index 60f597e2964..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_COMPLEMENT_GRAPH_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_COMPLEMENT_GRAPH_HPP
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
-#include <iostream>
-#endif
-
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace is_valid
-{
-
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
-template <typename OutputStream, typename TurnPoint>
-inline void
-debug_print_complement_graph(OutputStream& os,
- complement_graph<TurnPoint> const& graph)
-{
- typedef typename complement_graph<TurnPoint>::vertex_handle vertex_handle;
-
- os << "num rings: " << graph.m_num_rings << std::endl;
- os << "vertex ids: {";
- for (vertex_handle it = graph.m_vertices.begin();
- it != graph.m_vertices.end(); ++it)
- {
- os << " " << it->id();
- }
- os << " }" << std::endl;
-
- for (vertex_handle it = graph.m_vertices.begin();
- it != graph.m_vertices.end(); ++it)
- {
- os << "neighbors of " << it->id() << ": {";
- for (typename complement_graph
- <
- TurnPoint
- >::neighbor_container::const_iterator
- nit = graph.m_neighbors[it->id()].begin();
- nit != graph.m_neighbors[it->id()].end(); ++nit)
- {
- os << " " << (*nit)->id();
- }
- os << "}" << std::endl;
- }
-}
-#else
-template <typename OutputStream, typename TurnPoint>
-inline void debug_print_complement_graph(OutputStream&,
- complement_graph<TurnPoint> const&)
-{
-}
-#endif
-
-
-}} // namespace detail::is_valid
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_COMPLEMENT_GRAPH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp
deleted file mode 100644
index ab99a9921b1..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_PRINT_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_PRINT_TURNS_HPP
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
-#include <iostream>
-
-#include <boost/geometry/io/dsv/write.hpp>
-#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace is_valid
-{
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
-template <typename Turn>
-inline void debug_print_turn(Turn const& turn)
-{
- std::cout << " ["
- << geometry::method_char(turn.method)
- << ","
- << geometry::operation_char(turn.operations[0].operation)
- << "/"
- << geometry::operation_char(turn.operations[1].operation)
- << " {"
- << turn.operations[0].seg_id.multi_index
- << ", "
- << turn.operations[1].seg_id.multi_index
- << "} {"
- << turn.operations[0].seg_id.ring_index
- << ", "
- << turn.operations[1].seg_id.ring_index
- << "} {"
- << turn.operations[0].seg_id.segment_index
- << ", "
- << turn.operations[1].seg_id.segment_index
- << "} "
- << geometry::dsv(turn.point)
- << "]";
-}
-
-template <typename TurnIterator>
-inline void debug_print_turns(TurnIterator first, TurnIterator beyond)
-{
- std::cout << "turns:";
- for (TurnIterator tit = first; tit != beyond; ++tit)
- {
- debug_print_turn(*tit);
- }
- std::cout << std::endl << std::endl;
-}
-#else
-template <typename Turn>
-inline void debug_print_turn(Turn const&)
-{}
-
-template <typename TurnIterator>
-inline void debug_print_turns(TurnIterator, TurnIterator)
-{}
-#endif // BOOST_GEOMETRY_TEST_DEBUG
-
-}} // namespace detail::is_valid
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_PRINT_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp
deleted file mode 100644
index a10e0fe5966..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_VALIDITY_PHASE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_VALIDITY_PHASE_HPP
-
-#ifdef GEOMETRY_TEST_DEBUG
-#include <iostream>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace is_valid
-{
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct debug_validity_phase
-{
- static inline void apply(int)
- {
- }
-};
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
-template <typename Polygon>
-struct debug_validity_phase<Polygon, polygon_tag>
-{
- static inline void apply(int phase)
- {
- switch (phase)
- {
- case 1:
- std::cout << "checking exterior ring..." << std::endl;
- break;
- case 2:
- std::cout << "checking interior rings..." << std::endl;
- break;
- case 3:
- std::cout << "computing and analyzing turns..." << std::endl;
- break;
- case 4:
- std::cout << "checking if interior rings are inside "
- << "the exterior ring..." << std::endl;
- break;
- case 5:
- std::cout << "checking connectivity of interior..." << std::endl;
- break;
- }
- }
-};
-#endif
-
-}} // namespace detail::is_valid
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_DEBUG_VALIDITY_PHASE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp
deleted file mode 100644
index 685a4aac353..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_DUPLICATES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_DUPLICATES_HPP
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-
-#include <boost/geometry/policies/compare.hpp>
-#include <boost/geometry/policies/is_valid/default_policy.hpp>
-
-#include <boost/geometry/views/closeable_view.hpp>
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_valid
-{
-
-template <typename Range, closure_selector Closure>
-struct has_duplicates
-{
- template <typename VisitPolicy>
- static inline bool apply(Range const& range, VisitPolicy& visitor)
- {
- boost::ignore_unused(visitor);
-
- typedef typename closeable_view<Range const, Closure>::type view_type;
- typedef typename boost::range_const_iterator
- <
- view_type const
- >::type const_iterator;
-
- view_type view(range);
-
- if ( boost::size(view) < 2 )
- {
- return ! visitor.template apply<no_failure>();
- }
-
- geometry::equal_to<typename boost::range_value<Range>::type> equal;
-
- const_iterator it = boost::const_begin(view);
- const_iterator next = it;
- ++next;
- for (; next != boost::const_end(view); ++it, ++next)
- {
- if ( equal(*it, *next) )
- {
- return ! visitor.template apply<failure_duplicate_points>(*it);
- }
- }
- return ! visitor.template apply<no_failure>();
- }
-};
-
-
-
-}} // namespace detail::is_valid
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_DUPLICATES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp
deleted file mode 100644
index 6e6823d62f3..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp
+++ /dev/null
@@ -1,151 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_INVALID_COORDINATE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_INVALID_COORDINATE_HPP
-
-#include <cstddef>
-
-#include <boost/type_traits/is_floating_point.hpp>
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/util/has_non_finite_coordinate.hpp>
-
-#include <boost/geometry/iterators/point_iterator.hpp>
-#include <boost/geometry/views/detail/indexed_point_view.hpp>
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_valid
-{
-
-struct always_valid
-{
- template <typename Geometry, typename VisitPolicy>
- static inline bool apply(Geometry const&, VisitPolicy& visitor)
- {
- return ! visitor.template apply<no_failure>();
- }
-};
-
-struct point_has_invalid_coordinate
-{
- template <typename Point, typename VisitPolicy>
- static inline bool apply(Point const& point, VisitPolicy& visitor)
- {
- boost::ignore_unused(visitor);
-
- return
- geometry::has_non_finite_coordinate(point)
- ?
- (! visitor.template apply<failure_invalid_coordinate>())
- :
- (! visitor.template apply<no_failure>());
- }
-
- template <typename Point>
- static inline bool apply(Point const& point)
- {
- return geometry::has_non_finite_coordinate(point);
- }
-};
-
-struct indexed_has_invalid_coordinate
-{
- template <typename Geometry, typename VisitPolicy>
- static inline bool apply(Geometry const& geometry, VisitPolicy& visitor)
- {
- geometry::detail::indexed_point_view<Geometry const, 0> p0(geometry);
- geometry::detail::indexed_point_view<Geometry const, 1> p1(geometry);
-
- return point_has_invalid_coordinate::apply(p0, visitor)
- || point_has_invalid_coordinate::apply(p1, visitor);
- }
-};
-
-
-struct range_has_invalid_coordinate
-{
- struct point_has_valid_coordinates
- {
- template <typename Point>
- static inline bool apply(Point const& point)
- {
- return ! point_has_invalid_coordinate::apply(point);
- }
- };
-
- template <typename Geometry, typename VisitPolicy>
- static inline bool apply(Geometry const& geometry, VisitPolicy& visitor)
- {
- boost::ignore_unused(visitor);
-
- bool const has_valid_coordinates = detail::check_iterator_range
- <
- point_has_valid_coordinates,
- true // do not consider an empty range as problematic
- >::apply(geometry::points_begin(geometry),
- geometry::points_end(geometry));
-
- return has_valid_coordinates
- ?
- (! visitor.template apply<no_failure>())
- :
- (! visitor.template apply<failure_invalid_coordinate>());
- }
-};
-
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type,
- bool HasFloatingPointCoordinates = boost::is_floating_point
- <
- typename coordinate_type<Geometry>::type
- >::value
->
-struct has_invalid_coordinate
- : range_has_invalid_coordinate
-{};
-
-template <typename Geometry, typename Tag>
-struct has_invalid_coordinate<Geometry, Tag, false>
- : always_valid
-{};
-
-template <typename Point>
-struct has_invalid_coordinate<Point, point_tag, true>
- : point_has_invalid_coordinate
-{};
-
-template <typename Segment>
-struct has_invalid_coordinate<Segment, segment_tag, true>
- : indexed_has_invalid_coordinate
-{};
-
-template <typename Box>
-struct has_invalid_coordinate<Box, box_tag, true>
- : indexed_has_invalid_coordinate
-{};
-
-
-}} // namespace detail::is_valid
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_INVALID_COORDINATE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp
deleted file mode 100644
index 96efec79cdb..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp
+++ /dev/null
@@ -1,174 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_SPIKES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_SPIKES_HPP
-
-#include <algorithm>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/policies/is_valid/default_policy.hpp>
-
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/views/closeable_view.hpp>
-
-#include <boost/geometry/algorithms/equals.hpp>
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-#include <boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp>
-#include <boost/geometry/io/dsv/write.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_valid
-{
-
-template <typename Point>
-struct equal_to
-{
- Point const& m_point;
-
- equal_to(Point const& point)
- : m_point(point)
- {}
-
- template <typename OtherPoint>
- inline bool operator()(OtherPoint const& other) const
- {
- return geometry::equals(m_point, other);
- }
-};
-
-template <typename Point>
-struct not_equal_to
-{
- Point const& m_point;
-
- not_equal_to(Point const& point)
- : m_point(point)
- {}
-
- template <typename OtherPoint>
- inline bool operator()(OtherPoint const& other) const
- {
- return ! geometry::equals(other, m_point);
- }
-};
-
-
-
-template <typename Range, closure_selector Closure>
-struct has_spikes
-{
- template <typename Iterator>
- static inline Iterator find_different_from_first(Iterator first,
- Iterator last)
- {
- typedef not_equal_to<typename point_type<Range>::type> not_equal;
-
- BOOST_GEOMETRY_ASSERT(first != last);
-
- Iterator second = first;
- ++second;
- return std::find_if(second, last, not_equal(*first));
- }
-
- template <typename VisitPolicy, typename SideStrategy>
- static inline bool apply(Range const& range, VisitPolicy& visitor,
- SideStrategy const& strategy)
- {
- boost::ignore_unused(visitor);
-
- typedef typename closeable_view<Range const, Closure>::type view_type;
- typedef typename boost::range_iterator<view_type const>::type iterator;
-
- bool const is_linear
- = boost::is_same<typename tag<Range>::type, linestring_tag>::value;
-
- view_type const view(range);
-
- iterator prev = boost::begin(view);
-
- iterator cur = find_different_from_first(prev, boost::end(view));
- if (cur == boost::end(view))
- {
- // the range has only one distinct point, so it
- // cannot have a spike
- return ! visitor.template apply<no_failure>();
- }
-
- iterator next = find_different_from_first(cur, boost::end(view));
- if (next == boost::end(view))
- {
- // the range has only two distinct points, so it
- // cannot have a spike
- return ! visitor.template apply<no_failure>();
- }
-
- while (next != boost::end(view))
- {
- if ( geometry::detail::point_is_spike_or_equal(*prev, *next, *cur,
- strategy) )
- {
- return
- ! visitor.template apply<failure_spikes>(is_linear, *cur);
- }
- prev = cur;
- cur = next;
- next = find_different_from_first(cur, boost::end(view));
- }
-
- if (geometry::equals(range::front(view), range::back(view)))
- {
- iterator cur = boost::begin(view);
- typename boost::range_reverse_iterator
- <
- view_type const
- >::type prev = find_different_from_first(boost::rbegin(view),
- boost::rend(view));
-
- iterator next = find_different_from_first(cur, boost::end(view));
- if (detail::point_is_spike_or_equal(*prev, *next, *cur, strategy))
- {
- return
- ! visitor.template apply<failure_spikes>(is_linear, *cur);
- }
- else
- {
- return ! visitor.template apply<no_failure>();
- }
- }
-
- return ! visitor.template apply<no_failure>();
- }
-};
-
-
-
-}} // namespace detail::is_valid
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_SPIKES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp
deleted file mode 100644
index b36e9f38b75..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp
+++ /dev/null
@@ -1,121 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_VALID_SELF_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_VALID_SELF_TURNS_HPP
-
-#include <vector>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/policies/predicate_based_interrupt_policy.hpp>
-#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
-#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
-
-#include <boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_valid
-{
-
-
-template
-<
- typename Geometry,
- typename IsAcceptableTurn = is_acceptable_turn<Geometry>
->
-class has_valid_self_turns
-{
-private:
- typedef typename point_type<Geometry>::type point_type;
-
- typedef typename geometry::rescale_policy_type
- <
- point_type
- >::type rescale_policy_type;
-
- typedef detail::overlay::get_turn_info
- <
- detail::overlay::assign_null_policy
- > turn_policy;
-
-public:
- typedef detail::overlay::turn_info
- <
- point_type,
- typename geometry::segment_ratio_type
- <
- point_type,
- rescale_policy_type
- >::type
- > turn_type;
-
- // returns true if all turns are valid
- template <typename Turns, typename VisitPolicy, typename Strategy>
- static inline bool apply(Geometry const& geometry,
- Turns& turns,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- boost::ignore_unused(visitor);
-
- rescale_policy_type robust_policy
- = geometry::get_rescale_policy<rescale_policy_type>(geometry);
-
- detail::overlay::stateless_predicate_based_interrupt_policy
- <
- IsAcceptableTurn
- > interrupt_policy;
-
- detail::self_get_turn_points::self_turns<false, turn_policy>(geometry,
- strategy,
- robust_policy,
- turns,
- interrupt_policy);
-
- if (interrupt_policy.has_intersections)
- {
- BOOST_GEOMETRY_ASSERT(! boost::empty(turns));
- return visitor.template apply<failure_self_intersections>(turns);
- }
- else
- {
- return visitor.template apply<no_failure>();
- }
- }
-
- // returns true if all turns are valid
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(Geometry const& geometry, VisitPolicy& visitor, Strategy const& strategy)
- {
- std::vector<turn_type> turns;
- return apply(geometry, turns, visitor, strategy);
- }
-};
-
-
-}} // namespace detail::is_valid
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_VALID_SELF_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/implementation.hpp
deleted file mode 100644
index 4a515a30736..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/implementation.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_IMPLEMENTATION_HPP
-
-#include <boost/geometry/algorithms/detail/is_valid/pointlike.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/linear.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/polygon.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/multipolygon.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/ring.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/segment.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/box.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/interface.hpp
deleted file mode 100644
index e7f5c5783e0..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/interface.hpp
+++ /dev/null
@@ -1,272 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2014-2018, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_INTERFACE_HPP
-
-#include <sstream>
-#include <string>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/policies/is_valid/default_policy.hpp>
-#include <boost/geometry/policies/is_valid/failing_reason_policy.hpp>
-#include <boost/geometry/policies/is_valid/failure_type_policy.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/intersection.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace resolve_strategy
-{
-
-struct is_valid
-{
- template <typename Geometry, typename VisitPolicy, typename Strategy>
- static inline bool apply(Geometry const& geometry,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- return dispatch::is_valid<Geometry>::apply(geometry, visitor, strategy);
- }
-
- template <typename Geometry, typename VisitPolicy>
- static inline bool apply(Geometry const& geometry,
- VisitPolicy& visitor,
- default_strategy)
- {
- // NOTE: Currently the strategy is only used for Areal geometries
- typedef typename strategy::intersection::services::default_strategy
- <
- typename cs_tag<Geometry>::type
- >::type strategy_type;
-
- return dispatch::is_valid<Geometry>::apply(geometry, visitor, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct is_valid
-{
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(Geometry const& geometry,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- concepts::check<Geometry const>();
-
- return resolve_strategy::is_valid::apply(geometry, visitor, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct is_valid<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename VisitPolicy, typename Strategy>
- struct visitor : boost::static_visitor<bool>
- {
- visitor(VisitPolicy& policy, Strategy const& strategy)
- : m_policy(policy)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry>
- bool operator()(Geometry const& geometry) const
- {
- return is_valid<Geometry>::apply(geometry, m_policy, m_strategy);
- }
-
- VisitPolicy& m_policy;
- Strategy const& m_strategy;
- };
-
- template <typename VisitPolicy, typename Strategy>
- static inline bool
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- VisitPolicy& policy_visitor,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<VisitPolicy, Strategy>(policy_visitor, strategy),
- geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-// Undocumented for now
-template <typename Geometry, typename VisitPolicy, typename Strategy>
-inline bool is_valid(Geometry const& geometry,
- VisitPolicy& visitor,
- Strategy const& strategy)
-{
- return resolve_variant::is_valid<Geometry>::apply(geometry, visitor, strategy);
-}
-
-
-/*!
-\brief \brief_check{is valid (in the OGC sense)}
-\ingroup is_valid
-\tparam Geometry \tparam_geometry
-\tparam Strategy \tparam_strategy{Is_valid}
-\param geometry \param_geometry
-\param strategy \param_strategy{is_valid}
-\return \return_check{is valid (in the OGC sense);
-furthermore, the following geometries are considered valid:
-multi-geometries with no elements,
-linear geometries containing spikes,
-areal geometries with duplicate (consecutive) points}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/is_valid.qbk]}
-*/
-template <typename Geometry, typename Strategy>
-inline bool is_valid(Geometry const& geometry, Strategy const& strategy)
-{
- is_valid_default_policy<> visitor;
- return resolve_variant::is_valid<Geometry>::apply(geometry, visitor, strategy);
-}
-
-/*!
-\brief \brief_check{is valid (in the OGC sense)}
-\ingroup is_valid
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_check{is valid (in the OGC sense);
- furthermore, the following geometries are considered valid:
- multi-geometries with no elements,
- linear geometries containing spikes,
- areal geometries with duplicate (consecutive) points}
-
-\qbk{[include reference/algorithms/is_valid.qbk]}
-*/
-template <typename Geometry>
-inline bool is_valid(Geometry const& geometry)
-{
- return is_valid(geometry, default_strategy());
-}
-
-
-/*!
-\brief \brief_check{is valid (in the OGC sense)}
-\ingroup is_valid
-\tparam Geometry \tparam_geometry
-\tparam Strategy \tparam_strategy{Is_valid}
-\param geometry \param_geometry
-\param failure An enumeration value indicating that the geometry is
- valid or not, and if not valid indicating the reason why
-\param strategy \param_strategy{is_valid}
-\return \return_check{is valid (in the OGC sense);
- furthermore, the following geometries are considered valid:
- multi-geometries with no elements,
- linear geometries containing spikes,
- areal geometries with duplicate (consecutive) points}
-
-\qbk{distinguish,with failure value and strategy}
-\qbk{[include reference/algorithms/is_valid_with_failure.qbk]}
-*/
-template <typename Geometry, typename Strategy>
-inline bool is_valid(Geometry const& geometry, validity_failure_type& failure, Strategy const& strategy)
-{
- failure_type_policy<> visitor;
- bool result = resolve_variant::is_valid<Geometry>::apply(geometry, visitor, strategy);
- failure = visitor.failure();
- return result;
-}
-
-/*!
-\brief \brief_check{is valid (in the OGC sense)}
-\ingroup is_valid
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\param failure An enumeration value indicating that the geometry is
- valid or not, and if not valid indicating the reason why
-\return \return_check{is valid (in the OGC sense);
- furthermore, the following geometries are considered valid:
- multi-geometries with no elements,
- linear geometries containing spikes,
- areal geometries with duplicate (consecutive) points}
-
-\qbk{distinguish,with failure value}
-\qbk{[include reference/algorithms/is_valid_with_failure.qbk]}
-*/
-template <typename Geometry>
-inline bool is_valid(Geometry const& geometry, validity_failure_type& failure)
-{
- return is_valid(geometry, failure, default_strategy());
-}
-
-
-/*!
-\brief \brief_check{is valid (in the OGC sense)}
-\ingroup is_valid
-\tparam Geometry \tparam_geometry
-\tparam Strategy \tparam_strategy{Is_valid}
-\param geometry \param_geometry
-\param message A string containing a message stating if the geometry
- is valid or not, and if not valid a reason why
-\param strategy \param_strategy{is_valid}
-\return \return_check{is valid (in the OGC sense);
- furthermore, the following geometries are considered valid:
- multi-geometries with no elements,
- linear geometries containing spikes,
- areal geometries with duplicate (consecutive) points}
-
-\qbk{distinguish,with message and strategy}
-\qbk{[include reference/algorithms/is_valid_with_message.qbk]}
-*/
-template <typename Geometry, typename Strategy>
-inline bool is_valid(Geometry const& geometry, std::string& message, Strategy const& strategy)
-{
- std::ostringstream stream;
- failing_reason_policy<> visitor(stream);
- bool result = resolve_variant::is_valid<Geometry>::apply(geometry, visitor, strategy);
- message = stream.str();
- return result;
-}
-
-/*!
-\brief \brief_check{is valid (in the OGC sense)}
-\ingroup is_valid
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\param message A string containing a message stating if the geometry
- is valid or not, and if not valid a reason why
-\return \return_check{is valid (in the OGC sense);
- furthermore, the following geometries are considered valid:
- multi-geometries with no elements,
- linear geometries containing spikes,
- areal geometries with duplicate (consecutive) points}
-
-\qbk{distinguish,with message}
-\qbk{[include reference/algorithms/is_valid_with_message.qbk]}
-*/
-template <typename Geometry>
-inline bool is_valid(Geometry const& geometry, std::string& message)
-{
- return is_valid(geometry, message, default_strategy());
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp
deleted file mode 100644
index fccc0ffdb72..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp
+++ /dev/null
@@ -1,161 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_IS_ACCEPTABLE_TURN_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_IS_ACCEPTABLE_TURN_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_valid
-{
-
-
-template
-<
- typename Geometry,
- order_selector Order = geometry::point_order<Geometry>::value,
- typename Tag = typename tag<Geometry>::type
->
-struct acceptable_operation
-{};
-
-template <typename Polygon>
-struct acceptable_operation<Polygon, counterclockwise, polygon_tag>
-{
- static const detail::overlay::operation_type value =
- detail::overlay::operation_union;
-};
-
-template <typename Polygon>
-struct acceptable_operation<Polygon, clockwise, polygon_tag>
-{
- static const detail::overlay::operation_type value =
- detail::overlay::operation_intersection;
-};
-
-template <typename MultiPolygon>
-struct acceptable_operation<MultiPolygon, counterclockwise, multi_polygon_tag>
-{
- static const detail::overlay::operation_type value =
- detail::overlay::operation_intersection;
-};
-
-template <typename MultiPolygon>
-struct acceptable_operation<MultiPolygon, clockwise, multi_polygon_tag>
-{
- static const detail::overlay::operation_type value =
- detail::overlay::operation_union;
-};
-
-
-
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct is_acceptable_turn
-{};
-
-template <typename Ring>
-struct is_acceptable_turn<Ring, ring_tag>
-{
- template <typename Turn>
- static inline bool apply(Turn const&)
- {
- return false;
- }
-};
-
-template <typename Polygon>
-class is_acceptable_turn<Polygon, polygon_tag>
-{
-protected:
- template <typename Turn, typename Method, typename Operation>
- static inline bool check_turn(Turn const& turn,
- Method method,
- Operation operation)
- {
- return turn.method == method
- && turn.operations[0].operation == operation
- && turn.operations[1].operation == operation;
- }
-
-
-public:
- template <typename Turn>
- static inline bool apply(Turn const& turn)
- {
- using namespace detail::overlay;
-
- if ( turn.operations[0].seg_id.ring_index
- == turn.operations[1].seg_id.ring_index )
- {
- return false;
- }
-
- operation_type const op = acceptable_operation<Polygon>::value;
-
- return check_turn(turn, method_touch_interior, op)
- || check_turn(turn, method_touch, op)
- ;
- }
-};
-
-template <typename MultiPolygon>
-class is_acceptable_turn<MultiPolygon, multi_polygon_tag>
- : is_acceptable_turn<typename boost::range_value<MultiPolygon>::type>
-{
-private:
- typedef typename boost::range_value<MultiPolygon>::type polygon;
- typedef is_acceptable_turn<polygon> base;
-
-public:
- template <typename Turn>
- static inline bool apply(Turn const& turn)
- {
- using namespace detail::overlay;
-
- if ( turn.operations[0].seg_id.multi_index
- == turn.operations[1].seg_id.multi_index )
- {
- return base::apply(turn);
- }
-
- operation_type const op = acceptable_operation<MultiPolygon>::value;
- if ( base::check_turn(turn, method_touch_interior, op)
- || base::check_turn(turn, method_touch, op))
- {
- return true;
- }
-
- // Turn is acceptable only in case of a touch(interior) and both lines
- // (polygons) do not cross
- return (turn.method == method_touch
- || turn.method == method_touch_interior)
- && turn.touch_only;
- }
-};
-
-
-}} // namespace detail::is_valid
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_IS_ACCEPTABLE_TURN_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/linear.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/linear.hpp
deleted file mode 100644
index 39cb36ef5bf..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/linear.hpp
+++ /dev/null
@@ -1,186 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_LINEAR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_LINEAR_HPP
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/algorithms/equals.hpp>
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_spikes.hpp>
-#include <boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp>
-
-#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_valid
-{
-
-
-template <typename Linestring>
-struct is_valid_linestring
-{
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(Linestring const& linestring,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- if (has_invalid_coordinate<Linestring>::apply(linestring, visitor))
- {
- return false;
- }
-
- if (boost::size(linestring) < 2)
- {
- return visitor.template apply<failure_few_points>();
- }
-
- std::size_t num_distinct = detail::num_distinct_consecutive_points
- <
- Linestring,
- 3u,
- true,
- not_equal_to<typename point_type<Linestring>::type>
- >::apply(linestring);
-
- if (num_distinct < 2u)
- {
- return
- visitor.template apply<failure_wrong_topological_dimension>();
- }
-
- if (num_distinct == 2u)
- {
- return visitor.template apply<no_failure>();
- }
-
- return ! has_spikes
- <
- Linestring, closed
- >::apply(linestring, visitor,
- strategy.get_side_strategy());
- }
-};
-
-
-}} // namespace detail::is_valid
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// A linestring is a curve.
-// A curve is 1-dimensional so it has to have at least two distinct
-// points.
-// A curve is simple if it does not pass through the same point twice,
-// with the possible exception of its two endpoints
-//
-// There is an option here as to whether spikes are allowed for linestrings;
-// here we pass this as an additional template parameter: allow_spikes
-// If allow_spikes is set to true, spikes are allowed, false otherwise.
-// By default, spikes are disallowed
-//
-// Reference: OGC 06-103r4 (6.1.6.1)
-template <typename Linestring, bool AllowEmptyMultiGeometries>
-struct is_valid
- <
- Linestring, linestring_tag, AllowEmptyMultiGeometries
- > : detail::is_valid::is_valid_linestring<Linestring>
-{};
-
-
-// A MultiLinestring is a MultiCurve
-// A MultiCurve is simple if all of its elements are simple and the
-// only intersections between any two elements occur at Points that
-// are on the boundaries of both elements.
-//
-// Reference: OGC 06-103r4 (6.1.8.1; Fig. 9)
-template <typename MultiLinestring, bool AllowEmptyMultiGeometries>
-class is_valid
- <
- MultiLinestring, multi_linestring_tag, AllowEmptyMultiGeometries
- >
-{
-private:
- template <typename VisitPolicy, typename Strategy>
- struct per_linestring
- {
- per_linestring(VisitPolicy& policy, Strategy const& strategy)
- : m_policy(policy)
- , m_strategy(strategy)
- {}
-
- template <typename Linestring>
- inline bool apply(Linestring const& linestring) const
- {
- return detail::is_valid::is_valid_linestring
- <
- Linestring
- >::apply(linestring, m_policy, m_strategy);
- }
-
- VisitPolicy& m_policy;
- Strategy const& m_strategy;
- };
-
-public:
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(MultiLinestring const& multilinestring,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- if (BOOST_GEOMETRY_CONDITION(
- AllowEmptyMultiGeometries && boost::empty(multilinestring)))
- {
- return visitor.template apply<no_failure>();
- }
-
- typedef per_linestring<VisitPolicy, Strategy> per_ls;
-
- return detail::check_iterator_range
- <
- per_ls,
- false // do not check for empty multilinestring (done above)
- >::apply(boost::begin(multilinestring),
- boost::end(multilinestring),
- per_ls(visitor, strategy));
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_LINEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp
deleted file mode 100644
index ed24b138101..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp
+++ /dev/null
@@ -1,402 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_MULTIPOLYGON_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_MULTIPOLYGON_HPP
-
-#include <deque>
-#include <vector>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/iterator/filter_iterator.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/geometries/box.hpp>
-
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-#include <boost/geometry/algorithms/within.hpp>
-
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-#include <boost/geometry/algorithms/detail/partition.hpp>
-
-#include <boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/polygon.hpp>
-
-#include <boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp>
-
-#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
-
-#include <boost/geometry/strategies/intersection.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_valid
-{
-
-
-template <typename MultiPolygon, bool AllowEmptyMultiGeometries>
-class is_valid_multipolygon
- : is_valid_polygon
- <
- typename boost::range_value<MultiPolygon>::type,
- true // check only the validity of rings
- >
-{
-private:
- typedef is_valid_polygon
- <
- typename boost::range_value<MultiPolygon>::type,
- true
- > base;
-
-
-
- template
- <
- typename PolygonIterator,
- typename TurnIterator,
- typename VisitPolicy,
- typename Strategy
- >
- static inline
- bool are_polygon_interiors_disjoint(PolygonIterator polygons_first,
- PolygonIterator polygons_beyond,
- TurnIterator turns_first,
- TurnIterator turns_beyond,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- boost::ignore_unused(visitor);
-
- // collect all polygons that have crossing turns
- std::set<signed_size_type> multi_indices;
- for (TurnIterator tit = turns_first; tit != turns_beyond; ++tit)
- {
- if (! tit->touch_only)
- {
- multi_indices.insert(tit->operations[0].seg_id.multi_index);
- multi_indices.insert(tit->operations[1].seg_id.multi_index);
- }
- }
-
- typedef geometry::model::box<typename point_type<MultiPolygon>::type> box_type;
- typedef typename base::template partition_item<PolygonIterator, box_type> item_type;
-
- // put polygon iterators without turns in a vector
- std::vector<item_type> polygon_iterators;
- signed_size_type multi_index = 0;
- for (PolygonIterator it = polygons_first; it != polygons_beyond;
- ++it, ++multi_index)
- {
- if (multi_indices.find(multi_index) == multi_indices.end())
- {
- polygon_iterators.push_back(item_type(it));
- }
- }
-
- // prepare strategies
- typedef typename std::iterator_traits<PolygonIterator>::value_type polygon_type;
- typedef typename Strategy::template point_in_geometry_strategy
- <
- polygon_type, polygon_type
- >::type within_strategy_type;
- within_strategy_type const within_strategy
- = strategy.template get_point_in_geometry_strategy<polygon_type, polygon_type>();
- typedef typename Strategy::envelope_strategy_type envelope_strategy_type;
- envelope_strategy_type const envelope_strategy
- = strategy.get_envelope_strategy();
-
- // call partition to check if polygons are disjoint from each other
- typename base::template item_visitor_type<within_strategy_type> item_visitor(within_strategy);
-
- geometry::partition
- <
- geometry::model::box<typename point_type<MultiPolygon>::type>
- >::apply(polygon_iterators, item_visitor,
- typename base::template expand_box<envelope_strategy_type>(envelope_strategy),
- typename base::template overlaps_box<envelope_strategy_type>(envelope_strategy));
-
- if (item_visitor.items_overlap)
- {
- return visitor.template apply<failure_intersecting_interiors>();
- }
- else
- {
- return visitor.template apply<no_failure>();
- }
- }
-
-
-
- class has_multi_index
- {
- public:
- has_multi_index(signed_size_type multi_index)
- : m_multi_index(multi_index)
- {}
-
- template <typename Turn>
- inline bool operator()(Turn const& turn) const
- {
- return turn.operations[0].seg_id.multi_index == m_multi_index
- && turn.operations[1].seg_id.multi_index == m_multi_index;
- }
-
- private:
- signed_size_type const m_multi_index;
- };
-
-
-
- template <typename Predicate>
- struct has_property_per_polygon
- {
- template
- <
- typename PolygonIterator,
- typename TurnIterator,
- typename VisitPolicy,
- typename Strategy
- >
- static inline bool apply(PolygonIterator polygons_first,
- PolygonIterator polygons_beyond,
- TurnIterator turns_first,
- TurnIterator turns_beyond,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- signed_size_type multi_index = 0;
- for (PolygonIterator it = polygons_first; it != polygons_beyond;
- ++it, ++multi_index)
- {
- has_multi_index index_predicate(multi_index);
-
- typedef boost::filter_iterator
- <
- has_multi_index, TurnIterator
- > filtered_turn_iterator;
-
- filtered_turn_iterator filtered_turns_first(index_predicate,
- turns_first,
- turns_beyond);
-
- filtered_turn_iterator filtered_turns_beyond(index_predicate,
- turns_beyond,
- turns_beyond);
-
- if (! Predicate::apply(*it,
- filtered_turns_first,
- filtered_turns_beyond,
- visitor,
- strategy))
- {
- return false;
- }
- }
- return true;
- }
- };
-
-
-
- template
- <
- typename PolygonIterator,
- typename TurnIterator,
- typename VisitPolicy,
- typename Strategy
- >
- static inline bool have_holes_inside(PolygonIterator polygons_first,
- PolygonIterator polygons_beyond,
- TurnIterator turns_first,
- TurnIterator turns_beyond,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- return has_property_per_polygon
- <
- typename base::has_holes_inside
- >::apply(polygons_first, polygons_beyond,
- turns_first, turns_beyond, visitor, strategy);
- }
-
-
-
- template
- <
- typename PolygonIterator,
- typename TurnIterator,
- typename VisitPolicy,
- typename Strategy
- >
- static inline bool have_connected_interior(PolygonIterator polygons_first,
- PolygonIterator polygons_beyond,
- TurnIterator turns_first,
- TurnIterator turns_beyond,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- return has_property_per_polygon
- <
- typename base::has_connected_interior
- >::apply(polygons_first, polygons_beyond,
- turns_first, turns_beyond, visitor, strategy);
- }
-
-
- template <typename VisitPolicy, typename Strategy>
- struct per_polygon
- {
- per_polygon(VisitPolicy& policy, Strategy const& strategy)
- : m_policy(policy)
- , m_strategy(strategy)
- {}
-
- template <typename Polygon>
- inline bool apply(Polygon const& polygon) const
- {
- return base::apply(polygon, m_policy, m_strategy);
- }
-
- VisitPolicy& m_policy;
- Strategy const& m_strategy;
- };
-public:
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(MultiPolygon const& multipolygon,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- typedef debug_validity_phase<MultiPolygon> debug_phase;
-
- if (BOOST_GEOMETRY_CONDITION(
- AllowEmptyMultiGeometries && boost::empty(multipolygon)))
- {
- return visitor.template apply<no_failure>();
- }
-
- // check validity of all polygons ring
- debug_phase::apply(1);
-
- if (! detail::check_iterator_range
- <
- per_polygon<VisitPolicy, Strategy>,
- false // do not check for empty multipolygon (done above)
- >::apply(boost::begin(multipolygon),
- boost::end(multipolygon),
- per_polygon<VisitPolicy, Strategy>(visitor, strategy)))
- {
- return false;
- }
-
-
- // compute turns and check if all are acceptable
- debug_phase::apply(2);
-
- typedef has_valid_self_turns<MultiPolygon> has_valid_turns;
-
- std::deque<typename has_valid_turns::turn_type> turns;
- bool has_invalid_turns =
- ! has_valid_turns::apply(multipolygon, turns, visitor, strategy);
- debug_print_turns(turns.begin(), turns.end());
-
- if (has_invalid_turns)
- {
- return false;
- }
-
-
- // check if each polygon's interior rings are inside the
- // exterior and not one inside the other
- debug_phase::apply(3);
-
- if (! have_holes_inside(boost::begin(multipolygon),
- boost::end(multipolygon),
- turns.begin(),
- turns.end(),
- visitor,
- strategy))
- {
- return false;
- }
-
-
- // check that each polygon's interior is connected
- debug_phase::apply(4);
-
- if (! have_connected_interior(boost::begin(multipolygon),
- boost::end(multipolygon),
- turns.begin(),
- turns.end(),
- visitor,
- strategy))
- {
- return false;
- }
-
-
- // check if polygon interiors are disjoint
- debug_phase::apply(5);
- return are_polygon_interiors_disjoint(boost::begin(multipolygon),
- boost::end(multipolygon),
- turns.begin(),
- turns.end(),
- visitor,
- strategy);
- }
-};
-
-}} // namespace detail::is_valid
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// Not clear what the definition is.
-// Right now we check that each element is simple (in fact valid), and
-// that the MultiPolygon is also valid.
-//
-// Reference (for validity of MultiPolygons): OGC 06-103r4 (6.1.14)
-template <typename MultiPolygon, bool AllowEmptyMultiGeometries>
-struct is_valid
- <
- MultiPolygon, multi_polygon_tag, AllowEmptyMultiGeometries
- > : detail::is_valid::is_valid_multipolygon
- <
- MultiPolygon, AllowEmptyMultiGeometries
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_MULTIPOLYGON_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/pointlike.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/pointlike.hpp
deleted file mode 100644
index f77f7a35eb9..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/pointlike.hpp
+++ /dev/null
@@ -1,92 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POINTLIKE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POINTLIKE_HPP
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp>
-#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-// A point is always simple
-template <typename Point>
-struct is_valid<Point, point_tag>
-{
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(Point const& point, VisitPolicy& visitor, Strategy const&)
- {
- boost::ignore_unused(visitor);
- return ! detail::is_valid::has_invalid_coordinate
- <
- Point
- >::apply(point, visitor);
- }
-};
-
-
-
-// A MultiPoint is simple if no two Points in the MultiPoint are equal
-// (have identical coordinate values in X and Y)
-//
-// Reference: OGC 06-103r4 (6.1.5)
-template <typename MultiPoint, bool AllowEmptyMultiGeometries>
-struct is_valid<MultiPoint, multi_point_tag, AllowEmptyMultiGeometries>
-{
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(MultiPoint const& multipoint,
- VisitPolicy& visitor,
- Strategy const&)
- {
- boost::ignore_unused(multipoint, visitor);
-
- if (BOOST_GEOMETRY_CONDITION(
- AllowEmptyMultiGeometries || !boost::empty(multipoint)))
- {
- // we allow empty multi-geometries, so an empty multipoint
- // is considered valid
- return ! detail::is_valid::has_invalid_coordinate
- <
- MultiPoint
- >::apply(multipoint, visitor);
- }
- else
- {
- // we do not allow an empty multipoint
- return visitor.template apply<failure_few_points>();
- }
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POINTLIKE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/polygon.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/polygon.hpp
deleted file mode 100644
index 5c6229b793f..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/polygon.hpp
+++ /dev/null
@@ -1,531 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POLYGON_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POLYGON_HPP
-
-#include <cstddef>
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
-#include <iostream>
-#endif // BOOST_GEOMETRY_TEST_DEBUG
-
-#include <algorithm>
-#include <deque>
-#include <iterator>
-#include <set>
-#include <vector>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/geometries/box.hpp>
-
-#include <boost/geometry/iterators/point_iterator.hpp>
-
-#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/algorithms/disjoint.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-#include <boost/geometry/algorithms/within.hpp>
-
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-#include <boost/geometry/algorithms/detail/partition.hpp>
-
-#include <boost/geometry/algorithms/detail/is_valid/complement_graph.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/ring.hpp>
-
-#include <boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp>
-
-#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_valid
-{
-
-
-template <typename Polygon, bool CheckRingValidityOnly = false>
-class is_valid_polygon
-{
-protected:
- typedef debug_validity_phase<Polygon> debug_phase;
-
- template <typename VisitPolicy, typename Strategy>
- struct per_ring
- {
- per_ring(VisitPolicy& policy, Strategy const& strategy)
- : m_policy(policy)
- , m_strategy(strategy)
- {}
-
- template <typename Ring>
- inline bool apply(Ring const& ring) const
- {
- return detail::is_valid::is_valid_ring
- <
- Ring, false, true
- >::apply(ring, m_policy, m_strategy);
- }
-
- VisitPolicy& m_policy;
- Strategy const& m_strategy;
- };
-
- template <typename InteriorRings, typename VisitPolicy, typename Strategy>
- static bool has_valid_interior_rings(InteriorRings const& interior_rings,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- return
- detail::check_iterator_range
- <
- per_ring<VisitPolicy, Strategy>,
- true // allow for empty interior ring range
- >::apply(boost::begin(interior_rings),
- boost::end(interior_rings),
- per_ring<VisitPolicy, Strategy>(visitor, strategy));
- }
-
- struct has_valid_rings
- {
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(Polygon const& polygon,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- typedef typename ring_type<Polygon>::type ring_type;
-
- // check validity of exterior ring
- debug_phase::apply(1);
-
- if (! detail::is_valid::is_valid_ring
- <
- ring_type,
- false // do not check self intersections
- >::apply(exterior_ring(polygon), visitor, strategy))
- {
- return false;
- }
-
- // check validity of interior rings
- debug_phase::apply(2);
-
- return has_valid_interior_rings(geometry::interior_rings(polygon),
- visitor,
- strategy);
- }
- };
-
-
- // Iterator value_type is a Ring or Polygon
- template <typename Iterator, typename Box>
- struct partition_item
- {
- explicit partition_item(Iterator it)
- : m_it(it)
- , m_is_initialized(false)
- {}
-
- Iterator get() const
- {
- return m_it;
- }
-
- template <typename EnvelopeStrategy>
- Box const& get_envelope(EnvelopeStrategy const& strategy) const
- {
- if (! m_is_initialized)
- {
- m_box = geometry::return_envelope<Box>(*m_it, strategy);
- m_is_initialized = true;
- }
- return m_box;
- }
-
- private:
- Iterator m_it;
- mutable Box m_box;
- mutable bool m_is_initialized;
- };
-
- // structs for partition -- start
- template <typename EnvelopeStrategy>
- struct expand_box
- {
- explicit expand_box(EnvelopeStrategy const& strategy) : m_strategy(strategy) {}
-
- template <typename Box, typename Iterator>
- inline void apply(Box& total, partition_item<Iterator, Box> const& item) const
- {
- geometry::expand(total, item.get_envelope(m_strategy));
- }
-
- EnvelopeStrategy const& m_strategy;
- };
-
- template <typename EnvelopeStrategy>
- struct overlaps_box
- {
- explicit overlaps_box(EnvelopeStrategy const& strategy) : m_strategy(strategy) {}
-
- template <typename Box, typename Iterator>
- inline bool apply(Box const& box, partition_item<Iterator, Box> const& item) const
- {
- return ! geometry::disjoint(item.get_envelope(m_strategy), box);
- }
-
- EnvelopeStrategy const& m_strategy;
- };
-
-
- template <typename WithinStrategy>
- struct item_visitor_type
- {
- bool items_overlap;
- WithinStrategy const& m_strategy;
-
- explicit item_visitor_type(WithinStrategy const& strategy)
- : items_overlap(false)
- , m_strategy(strategy)
- {}
-
- template <typename Item>
- inline bool is_within(Item const& first, Item const& second)
- {
- typename point_type<Polygon>::type point;
- typedef detail::point_on_border::point_on_range<true> pob;
-
- // TODO: this should check for a point on the interior, instead
- // of on border. Or it should check using the overlap function.
-
- return pob::apply(point, points_begin(first), points_end(first))
- && geometry::within(point, second, m_strategy);
- }
-
- template <typename Iterator, typename Box>
- inline bool apply(partition_item<Iterator, Box> const& item1,
- partition_item<Iterator, Box> const& item2)
- {
- if (! items_overlap
- && (is_within(*item1.get(), *item2.get())
- || is_within(*item2.get(), *item1.get())))
- {
- items_overlap = true;
- return false; // interrupt
- }
- return true;
- }
- };
- // structs for partition -- end
-
-
- template
- <
- typename RingIterator,
- typename ExteriorRing,
- typename TurnIterator,
- typename VisitPolicy,
- typename Strategy
- >
- static inline bool are_holes_inside(RingIterator rings_first,
- RingIterator rings_beyond,
- ExteriorRing const& exterior_ring,
- TurnIterator turns_first,
- TurnIterator turns_beyond,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- boost::ignore_unused(visitor);
-
- // collect the interior ring indices that have turns with the
- // exterior ring
- std::set<signed_size_type> ring_indices;
- for (TurnIterator tit = turns_first; tit != turns_beyond; ++tit)
- {
- if (tit->operations[0].seg_id.ring_index == -1)
- {
- BOOST_GEOMETRY_ASSERT(tit->operations[1].seg_id.ring_index != -1);
- ring_indices.insert(tit->operations[1].seg_id.ring_index);
- }
- else if (tit->operations[1].seg_id.ring_index == -1)
- {
- BOOST_GEOMETRY_ASSERT(tit->operations[0].seg_id.ring_index != -1);
- ring_indices.insert(tit->operations[0].seg_id.ring_index);
- }
- }
-
- // prepare strategy
- typedef typename std::iterator_traits<RingIterator>::value_type inter_ring_type;
- typename Strategy::template point_in_geometry_strategy
- <
- inter_ring_type, ExteriorRing
- >::type const in_exterior_strategy
- = strategy.template get_point_in_geometry_strategy<inter_ring_type, ExteriorRing>();
-
- signed_size_type ring_index = 0;
- for (RingIterator it = rings_first; it != rings_beyond;
- ++it, ++ring_index)
- {
- // do not examine interior rings that have turns with the
- // exterior ring
- if (ring_indices.find(ring_index) == ring_indices.end()
- && ! geometry::covered_by(range::front(*it), exterior_ring, in_exterior_strategy))
- {
- return visitor.template apply<failure_interior_rings_outside>();
- }
- }
-
- // collect all rings (exterior and/or interior) that have turns
- for (TurnIterator tit = turns_first; tit != turns_beyond; ++tit)
- {
- ring_indices.insert(tit->operations[0].seg_id.ring_index);
- ring_indices.insert(tit->operations[1].seg_id.ring_index);
- }
-
- typedef geometry::model::box<typename point_type<Polygon>::type> box_type;
- typedef partition_item<RingIterator, box_type> item_type;
-
- // put iterators for interior rings without turns in a vector
- std::vector<item_type> ring_iterators;
- ring_index = 0;
- for (RingIterator it = rings_first; it != rings_beyond;
- ++it, ++ring_index)
- {
- if (ring_indices.find(ring_index) == ring_indices.end())
- {
- ring_iterators.push_back(item_type(it));
- }
- }
-
- // prepare strategies
- typedef typename Strategy::template point_in_geometry_strategy
- <
- inter_ring_type, inter_ring_type
- >::type in_interior_strategy_type;
- in_interior_strategy_type const in_interior_strategy
- = strategy.template get_point_in_geometry_strategy<inter_ring_type, inter_ring_type>();
- typedef typename Strategy::envelope_strategy_type envelope_strategy_type;
- envelope_strategy_type const envelope_strategy
- = strategy.get_envelope_strategy();
-
- // call partition to check if interior rings are disjoint from
- // each other
- item_visitor_type<in_interior_strategy_type> item_visitor(in_interior_strategy);
-
- geometry::partition
- <
- box_type
- >::apply(ring_iterators, item_visitor,
- expand_box<envelope_strategy_type>(envelope_strategy),
- overlaps_box<envelope_strategy_type>(envelope_strategy));
-
- if (item_visitor.items_overlap)
- {
- return visitor.template apply<failure_nested_interior_rings>();
- }
- else
- {
- return visitor.template apply<no_failure>();
- }
- }
-
- template
- <
- typename InteriorRings,
- typename ExteriorRing,
- typename TurnIterator,
- typename VisitPolicy,
- typename Strategy
- >
- static inline bool are_holes_inside(InteriorRings const& interior_rings,
- ExteriorRing const& exterior_ring,
- TurnIterator first,
- TurnIterator beyond,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- return are_holes_inside(boost::begin(interior_rings),
- boost::end(interior_rings),
- exterior_ring,
- first,
- beyond,
- visitor,
- strategy);
- }
-
- struct has_holes_inside
- {
- template <typename TurnIterator, typename VisitPolicy, typename Strategy>
- static inline bool apply(Polygon const& polygon,
- TurnIterator first,
- TurnIterator beyond,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- return are_holes_inside(geometry::interior_rings(polygon),
- geometry::exterior_ring(polygon),
- first,
- beyond,
- visitor,
- strategy);
- }
- };
-
-
-
-
- struct has_connected_interior
- {
- template <typename TurnIterator, typename VisitPolicy, typename Strategy>
- static inline bool apply(Polygon const& polygon,
- TurnIterator first,
- TurnIterator beyond,
- VisitPolicy& visitor,
- Strategy const& )
- {
- boost::ignore_unused(visitor);
-
- typedef typename std::iterator_traits
- <
- TurnIterator
- >::value_type turn_type;
- typedef complement_graph<typename turn_type::point_type> graph;
-
- graph g(geometry::num_interior_rings(polygon) + 1);
- for (TurnIterator tit = first; tit != beyond; ++tit)
- {
- typename graph::vertex_handle v1 = g.add_vertex
- ( tit->operations[0].seg_id.ring_index + 1 );
- typename graph::vertex_handle v2 = g.add_vertex
- ( tit->operations[1].seg_id.ring_index + 1 );
- typename graph::vertex_handle vip = g.add_vertex(tit->point);
-
- g.add_edge(v1, vip);
- g.add_edge(v2, vip);
- }
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
- debug_print_complement_graph(std::cout, g);
-#endif // BOOST_GEOMETRY_TEST_DEBUG
-
- if (g.has_cycles())
- {
- return visitor.template apply<failure_disconnected_interior>();
- }
- else
- {
- return visitor.template apply<no_failure>();
- }
- }
- };
-
-public:
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(Polygon const& polygon,
- VisitPolicy& visitor,
- Strategy const& strategy)
- {
- if (! has_valid_rings::apply(polygon, visitor, strategy))
- {
- return false;
- }
-
- if (BOOST_GEOMETRY_CONDITION(CheckRingValidityOnly))
- {
- return true;
- }
-
- // compute turns and check if all are acceptable
- debug_phase::apply(3);
-
- typedef has_valid_self_turns<Polygon> has_valid_turns;
-
- std::deque<typename has_valid_turns::turn_type> turns;
- bool has_invalid_turns
- = ! has_valid_turns::apply(polygon, turns, visitor, strategy);
- debug_print_turns(turns.begin(), turns.end());
-
- if (has_invalid_turns)
- {
- return false;
- }
-
- // check if all interior rings are inside the exterior ring
- debug_phase::apply(4);
-
- if (! has_holes_inside::apply(polygon,
- turns.begin(), turns.end(),
- visitor,
- strategy))
- {
- return false;
- }
-
- // check whether the interior of the polygon is a connected set
- debug_phase::apply(5);
-
- return has_connected_interior::apply(polygon,
- turns.begin(),
- turns.end(),
- visitor,
- strategy);
- }
-};
-
-
-}} // namespace detail::is_valid
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// A Polygon is always a simple geometric object provided that it is valid.
-//
-// Reference (for validity of Polygons): OGC 06-103r4 (6.1.11.1)
-template <typename Polygon, bool AllowEmptyMultiGeometries>
-struct is_valid
- <
- Polygon, polygon_tag, AllowEmptyMultiGeometries
- > : detail::is_valid::is_valid_polygon<Polygon>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POLYGON_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/ring.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/ring.hpp
deleted file mode 100644
index 40698155b5c..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/ring.hpp
+++ /dev/null
@@ -1,237 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_RING_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_RING_HPP
-
-#include <deque>
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/point_order.hpp>
-
-#include <boost/geometry/util/order_as_direction.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/algorithms/equals.hpp>
-
-#include <boost/geometry/views/closeable_view.hpp>
-
-#include <boost/geometry/algorithms/area.hpp>
-#include <boost/geometry/algorithms/intersects.hpp>
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-#include <boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_spikes.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp>
-
-#include <boost/geometry/strategies/area.hpp>
-
-#ifdef BOOST_GEOMETRY_TEST_DEBUG
-#include <boost/geometry/io/dsv/write.hpp>
-#endif
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_valid
-{
-
-
-// struct to check whether a ring is topologically closed
-template <typename Ring, closure_selector Closure /* open */>
-struct is_topologically_closed
-{
- template <typename VisitPolicy>
- static inline bool apply(Ring const&, VisitPolicy& visitor)
- {
- boost::ignore_unused(visitor);
-
- return visitor.template apply<no_failure>();
- }
-};
-
-template <typename Ring>
-struct is_topologically_closed<Ring, closed>
-{
- template <typename VisitPolicy>
- static inline bool apply(Ring const& ring, VisitPolicy& visitor)
- {
- boost::ignore_unused(visitor);
-
- if (geometry::equals(range::front(ring), range::back(ring)))
- {
- return visitor.template apply<no_failure>();
- }
- else
- {
- return visitor.template apply<failure_not_closed>();
- }
- }
-};
-
-
-
-template <typename ResultType, bool IsInteriorRing /* false */>
-struct ring_area_predicate
-{
- typedef std::greater<ResultType> type;
-};
-
-template <typename ResultType>
-struct ring_area_predicate<ResultType, true>
-{
- typedef std::less<ResultType> type;
-};
-
-
-
-template <typename Ring, bool IsInteriorRing>
-struct is_properly_oriented
-{
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(Ring const& ring, VisitPolicy& visitor,
- Strategy const& strategy)
- {
- boost::ignore_unused(visitor);
-
- typedef detail::area::ring_area
- <
- order_as_direction<geometry::point_order<Ring>::value>::value,
- geometry::closure<Ring>::value
- > ring_area_type;
-
- typedef typename Strategy::template area_strategy
- <
- Ring
- >::type::template result_type<Ring>::type area_result_type;
-
- typename ring_area_predicate
- <
- area_result_type, IsInteriorRing
- >::type predicate;
-
- // Check area
- area_result_type const zero = 0;
- area_result_type const area
- = ring_area_type::apply(ring,
- strategy.template get_area_strategy<Ring>());
- if (predicate(area, zero))
- {
- return visitor.template apply<no_failure>();
- }
- else
- {
- return visitor.template apply<failure_wrong_orientation>();
- }
- }
-};
-
-
-
-template
-<
- typename Ring,
- bool CheckSelfIntersections = true,
- bool IsInteriorRing = false
->
-struct is_valid_ring
-{
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(Ring const& ring, VisitPolicy& visitor,
- Strategy const& strategy)
- {
- // return invalid if any of the following condition holds:
- // (a) the ring's point coordinates are not invalid (e.g., NaN)
- // (b) the ring's size is below the minimal one
- // (c) the ring consists of at most two distinct points
- // (d) the ring is not topologically closed
- // (e) the ring has spikes
- // (f) the ring has duplicate points (if AllowDuplicates is false)
- // (g) the boundary of the ring has self-intersections
- // (h) the order of the points is inconsistent with the defined order
- //
- // Note: no need to check if the area is zero. If this is the
- // case, then the ring must have at least two spikes, which is
- // checked by condition (d).
-
- if (has_invalid_coordinate<Ring>::apply(ring, visitor))
- {
- return false;
- }
-
- closure_selector const closure = geometry::closure<Ring>::value;
- typedef typename closeable_view<Ring const, closure>::type view_type;
-
- if (boost::size(ring)
- < core_detail::closure::minimum_ring_size<closure>::value)
- {
- return visitor.template apply<failure_few_points>();
- }
-
- view_type const view(ring);
- if (detail::num_distinct_consecutive_points
- <
- view_type, 4u, true,
- not_equal_to<typename point_type<Ring>::type>
- >::apply(view)
- < 4u)
- {
- return
- visitor.template apply<failure_wrong_topological_dimension>();
- }
-
- return
- is_topologically_closed<Ring, closure>::apply(ring, visitor)
- && ! has_duplicates<Ring, closure>::apply(ring, visitor)
- && ! has_spikes<Ring, closure>::apply(ring, visitor, strategy.get_side_strategy())
- && (! CheckSelfIntersections
- || has_valid_self_turns<Ring>::apply(ring, visitor, strategy))
- && is_properly_oriented<Ring, IsInteriorRing>::apply(ring, visitor, strategy);
- }
-};
-
-
-}} // namespace detail::is_valid
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-// A Ring is a Polygon with exterior boundary only.
-// The Ring's boundary must be a LinearRing (see OGC 06-103-r4,
-// 6.1.7.1, for the definition of LinearRing)
-//
-// Reference (for polygon validity): OGC 06-103r4 (6.1.11.1)
-template <typename Ring, bool AllowEmptyMultiGeometries>
-struct is_valid
- <
- Ring, ring_tag, AllowEmptyMultiGeometries
- > : detail::is_valid::is_valid_ring<Ring>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_RING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/segment.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/segment.hpp
deleted file mode 100644
index 30cbf7afdb3..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/is_valid/segment.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_SEGMENT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_SEGMENT_HPP
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/equals.hpp>
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp>
-#include <boost/geometry/algorithms/dispatch/is_valid.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// A segment is a curve.
-// A curve is simple if it does not pass through the same point twice,
-// with the possible exception of its two endpoints
-// A curve is 1-dimensional, hence we have to check is the two
-// endpoints of the segment coincide, since in this case it is
-// 0-dimensional.
-//
-// Reference: OGC 06-103r4 (6.1.6.1)
-template <typename Segment>
-struct is_valid<Segment, segment_tag>
-{
- template <typename VisitPolicy, typename Strategy>
- static inline bool apply(Segment const& segment, VisitPolicy& visitor, Strategy const&)
- {
- boost::ignore_unused(visitor);
-
- typename point_type<Segment>::type p[2];
- detail::assign_point_from_index<0>(segment, p[0]);
- detail::assign_point_from_index<1>(segment, p[1]);
-
- if (detail::is_valid::has_invalid_coordinate
- <
- Segment
- >::apply(segment, visitor))
- {
- return false;
- }
- else if (! geometry::equals(p[0], p[1]))
- {
- return visitor.template apply<no_failure>();
- }
- else
- {
- return
- visitor.template apply<failure_wrong_topological_dimension>();
- }
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_SEGMENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/max_interval_gap.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/max_interval_gap.hpp
deleted file mode 100644
index e8a70a6b5f5..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/max_interval_gap.hpp
+++ /dev/null
@@ -1,278 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_MAX_INTERVAL_GAP_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_MAX_INTERVAL_GAP_HPP
-
-#include <cstddef>
-#include <queue>
-#include <utility>
-#include <vector>
-
-#include <boost/core/ref.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/remove_const.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/algorithms/detail/sweep.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace max_interval_gap
-{
-
-// the class Interval must provide the following:
-// * must define the type value_type
-// * must define the type difference_type
-// * must have the methods:
-// value_type get<Index>() const
-// difference_type length() const
-// where an Index value of 0 (resp., 1) refers to the left (resp.,
-// right) endpoint of the interval
-
-template <typename Interval>
-class sweep_event
-{
-public:
- typedef Interval interval_type;
- typedef typename Interval::value_type time_type;
-
- sweep_event(Interval const& interval, bool start_event = true)
- : m_interval(boost::cref(interval))
- , m_start_event(start_event)
- {}
-
- inline bool is_start_event() const
- {
- return m_start_event;
- }
-
- inline interval_type const& interval() const
- {
- return m_interval;
- }
-
- inline time_type time() const
- {
- return (m_start_event)
- ? interval().template get<0>()
- : interval().template get<1>();
- }
-
- inline bool operator<(sweep_event const& other) const
- {
- if (! math::equals(time(), other.time()))
- {
- return time() < other.time();
- }
- // a start-event is before an end-event with the same event time
- return is_start_event() && ! other.is_start_event();
- }
-
-private:
- boost::reference_wrapper<Interval const> m_interval;
- bool m_start_event;
-};
-
-template <typename Event>
-struct event_greater
-{
- inline bool operator()(Event const& event1, Event const& event2) const
- {
- return event2 < event1;
- }
-};
-
-
-struct initialization_visitor
-{
- template <typename Range, typename PriorityQueue, typename EventVisitor>
- static inline void apply(Range const& range,
- PriorityQueue& queue,
- EventVisitor&)
- {
- BOOST_GEOMETRY_ASSERT(queue.empty());
-
- // it is faster to build the queue directly from the entire
- // range, rather than insert elements one after the other
- PriorityQueue pq(boost::begin(range), boost::end(range));
- std::swap(pq, queue);
- }
-};
-
-
-template <typename Event>
-class event_visitor
-{
- typedef typename Event::time_type event_time_type;
- typedef typename Event::interval_type::difference_type difference_type;
-
- typedef typename boost::remove_const
- <
- typename boost::remove_reference
- <
- event_time_type
- >::type
- >::type bare_time_type;
-
-
-public:
- event_visitor()
- : m_overlap_count(0)
- , m_max_gap_left(0)
- , m_max_gap_right(0)
- {}
-
- template <typename PriorityQueue>
- inline void apply(Event const& event, PriorityQueue& queue)
- {
- if (event.is_start_event())
- {
- ++m_overlap_count;
- queue.push(Event(event.interval(), false));
- }
- else
- {
- --m_overlap_count;
- if (m_overlap_count == 0 && ! queue.empty())
- {
- // we may have a gap
- BOOST_GEOMETRY_ASSERT(queue.top().is_start_event());
-
- event_time_type next_event_time
- = queue.top().interval().template get<0>();
- difference_type gap = next_event_time - event.time();
- if (gap > max_gap())
- {
- m_max_gap_left = event.time();
- m_max_gap_right = next_event_time;
- }
- }
- }
- }
-
- bare_time_type const& max_gap_left() const
- {
- return m_max_gap_left;
- }
-
- bare_time_type const& max_gap_right() const
- {
- return m_max_gap_right;
- }
-
- difference_type max_gap() const
- {
- return m_max_gap_right - m_max_gap_left;
- }
-
-private:
- std::size_t m_overlap_count;
- bare_time_type m_max_gap_left, m_max_gap_right;
-};
-
-}} // namespace detail::max_interval_gap
-#endif // DOXYGEN_NO_DETAIL
-
-
-// Given a range of intervals I1, I2, ..., In, maximum_gap() returns
-// the maximum length of an interval M that satisfies the following
-// properties:
-//
-// 1. M.left >= min(I1, I2, ..., In)
-// 2. M.right <= max(I1, I2, ..., In)
-// 3. intersection(interior(M), Ik) is the empty set for all k=1, ..., n
-// 4. length(M) is maximal
-//
-// where M.left and M.right denote the left and right extreme values
-// for the interval M, and length(M) is equal to M.right - M.left.
-//
-// If M does not exist (or, alternatively, M is identified as the
-// empty set), 0 is returned.
-//
-// The algorithm proceeds for performing a sweep: the left endpoints
-// are inserted into a min-priority queue with the priority being the
-// value of the endpoint. The sweep algorithm maintains an "overlap
-// counter" that counts the number of overlaping intervals at any
-// specific sweep-time value.
-// There are two types of events encountered during the sweep:
-// (a) a start event: the left endpoint of an interval is found.
-// In this case the overlap count is increased by one and the
-// right endpoint of the interval in inserted into the event queue
-// (b) an end event: the right endpoint of an interval is found.
-// In this case the overlap count is decreased by one. If the
-// updated overlap count is 0, then we could expect to have a gap
-// in-between intervals. This gap is measured as the (absolute)
-// distance of the current interval right endpoint (being
-// processed) to the upcoming left endpoint of the next interval
-// to be processed (if such an interval exists). If the measured
-// gap is greater than the current maximum gap, it is recorded.
-// The initial maximum gap is initialized to 0. This value is returned
-// if no gap is found during the sweeping procedure.
-
-template <typename RangeOfIntervals, typename T>
-inline typename boost::range_value<RangeOfIntervals>::type::difference_type
-maximum_gap(RangeOfIntervals const& range_of_intervals,
- T& max_gap_left, T& max_gap_right)
-{
- typedef typename boost::range_value<RangeOfIntervals>::type interval_type;
- typedef detail::max_interval_gap::sweep_event<interval_type> event_type;
-
- // create a min-priority queue for the events
- std::priority_queue
- <
- event_type,
- std::vector<event_type>,
- detail::max_interval_gap::event_greater<event_type>
- > queue;
-
- // define initialization and event-process visitors
- detail::max_interval_gap::initialization_visitor init_visitor;
- detail::max_interval_gap::event_visitor<event_type> sweep_visitor;
-
- // perform the sweep
- geometry::sweep(range_of_intervals,
- queue,
- init_visitor,
- sweep_visitor);
-
- max_gap_left = sweep_visitor.max_gap_left();
- max_gap_right = sweep_visitor.max_gap_right();
- return sweep_visitor.max_gap();
-}
-
-template <typename RangeOfIntervals>
-inline typename boost::range_value<RangeOfIntervals>::type::difference_type
-maximum_gap(RangeOfIntervals const& range_of_intervals)
-{
- typedef typename boost::remove_const
- <
- typename boost::remove_reference
- <
- typename boost::range_value
- <
- RangeOfIntervals
- >::type::value_type
- >::type
- >::type value_type;
-
- value_type left, right;
-
- return maximum_gap(range_of_intervals, left, right);
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_MAX_INTERVAL_GAP_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/multi_modify.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/multi_modify.hpp
deleted file mode 100644
index 23187f9323a..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/multi_modify.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_MODIFY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_MODIFY_HPP
-
-
-#include <boost/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-template <typename MultiGeometry, typename Policy>
-struct multi_modify
-{
- static inline void apply(MultiGeometry& multi)
- {
- typedef typename boost::range_iterator<MultiGeometry>::type iterator_type;
- for (iterator_type it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- Policy::apply(*it);
- }
- }
-
- template <typename Strategy>
- static inline void apply(MultiGeometry& multi, Strategy const& strategy)
- {
- typedef typename boost::range_iterator<MultiGeometry>::type iterator_type;
- for (iterator_type it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- Policy::apply(*it, strategy);
- }
- }
-};
-
-
-} // namespace detail
-#endif
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_MODIFY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp
deleted file mode 100644
index c3787f9a109..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_MODIFY_WITH_PREDICATE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_MODIFY_WITH_PREDICATE_HPP
-
-
-#include <boost/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename MultiGeometry, typename Predicate, typename Policy>
-struct multi_modify_with_predicate
-{
- static inline void apply(MultiGeometry& multi, Predicate const& predicate)
- {
- typedef typename boost::range_iterator<MultiGeometry>::type iterator_type;
- for (iterator_type it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- Policy::apply(*it, predicate);
- }
- }
-};
-
-
-} // namespace detail
-#endif
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_MODIFY_WITH_PREDICATE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/multi_sum.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/multi_sum.hpp
deleted file mode 100644
index af3f425c9c8..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/multi_sum.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_SUM_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_SUM_HPP
-
-#include <boost/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-struct multi_sum
-{
- template <typename ReturnType, typename Policy, typename MultiGeometry, typename Strategy>
- static inline ReturnType apply(MultiGeometry const& geometry, Strategy const& strategy)
- {
- ReturnType sum = ReturnType();
- for (typename boost::range_iterator
- <
- MultiGeometry const
- >::type it = boost::begin(geometry);
- it != boost::end(geometry);
- ++it)
- {
- sum += Policy::apply(*it, strategy);
- }
- return sum;
- }
-};
-
-
-} // namespace detail
-#endif
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_MULTI_SUM_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/normalize.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/normalize.hpp
deleted file mode 100644
index 7a761d42bbd..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/normalize.hpp
+++ /dev/null
@@ -1,315 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_NORMALIZE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_NORMALIZE_HPP
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-#include <boost/geometry/util/normalize_spheroidal_box_coordinates.hpp>
-
-#include <boost/geometry/views/detail/indexed_point_view.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace normalization
-{
-
-
-struct do_nothing
-{
- template <typename GeometryIn, typename GeometryOut>
- static inline void apply(GeometryIn const&, GeometryOut&)
- {
- }
-};
-
-
-template <std::size_t Dimension, std::size_t DimensionCount>
-struct assign_loop
-{
- template <typename CoordinateType, typename PointIn, typename PointOut>
- static inline void apply(CoordinateType const& longitude,
- CoordinateType const& latitude,
- PointIn const& point_in,
- PointOut& point_out)
- {
- geometry::set<Dimension>(point_out, boost::numeric_cast
- <
- typename coordinate_type<PointOut>::type
- >(geometry::get<Dimension>(point_in)));
-
- assign_loop
- <
- Dimension + 1, DimensionCount
- >::apply(longitude, latitude, point_in, point_out);
- }
-};
-
-template <std::size_t DimensionCount>
-struct assign_loop<DimensionCount, DimensionCount>
-{
- template <typename CoordinateType, typename PointIn, typename PointOut>
- static inline void apply(CoordinateType const&,
- CoordinateType const&,
- PointIn const&,
- PointOut&)
- {
- }
-};
-
-template <std::size_t DimensionCount>
-struct assign_loop<0, DimensionCount>
-{
- template <typename CoordinateType, typename PointIn, typename PointOut>
- static inline void apply(CoordinateType const& longitude,
- CoordinateType const& latitude,
- PointIn const& point_in,
- PointOut& point_out)
- {
- geometry::set<0>(point_out, boost::numeric_cast
- <
- typename coordinate_type<PointOut>::type
- >(longitude));
-
- assign_loop
- <
- 1, DimensionCount
- >::apply(longitude, latitude, point_in, point_out);
- }
-};
-
-template <std::size_t DimensionCount>
-struct assign_loop<1, DimensionCount>
-{
- template <typename CoordinateType, typename PointIn, typename PointOut>
- static inline void apply(CoordinateType const& longitude,
- CoordinateType const& latitude,
- PointIn const& point_in,
- PointOut& point_out)
- {
- geometry::set<1>(point_out, boost::numeric_cast
- <
- typename coordinate_type<PointOut>::type
- >(latitude));
-
- assign_loop
- <
- 2, DimensionCount
- >::apply(longitude, latitude, point_in, point_out);
- }
-};
-
-
-template <typename PointIn, typename PointOut, bool IsEquatorial = true>
-struct normalize_point
-{
- static inline void apply(PointIn const& point_in, PointOut& point_out)
- {
- typedef typename coordinate_type<PointIn>::type in_coordinate_type;
-
- in_coordinate_type longitude = geometry::get<0>(point_in);
- in_coordinate_type latitude = geometry::get<1>(point_in);
-
- math::normalize_spheroidal_coordinates
- <
- typename coordinate_system<PointIn>::type::units,
- IsEquatorial,
- in_coordinate_type
- >(longitude, latitude);
-
- assign_loop
- <
- 0, dimension<PointIn>::value
- >::apply(longitude, latitude, point_in, point_out);
- }
-};
-
-
-template <typename BoxIn, typename BoxOut, bool IsEquatorial = true>
-class normalize_box
-{
- template <typename UnitsIn, typename UnitsOut, typename CoordinateInType>
- static inline void apply_to_coordinates(CoordinateInType& lon_min,
- CoordinateInType& lat_min,
- CoordinateInType& lon_max,
- CoordinateInType& lat_max,
- BoxIn const& box_in,
- BoxOut& box_out)
- {
- detail::indexed_point_view<BoxOut, min_corner> p_min_out(box_out);
- assign_loop
- <
- 0, dimension<BoxIn>::value
- >::apply(lon_min,
- lat_min,
- detail::indexed_point_view
- <
- BoxIn const, min_corner
- >(box_in),
- p_min_out);
-
- detail::indexed_point_view<BoxOut, max_corner> p_max_out(box_out);
- assign_loop
- <
- 0, dimension<BoxIn>::value
- >::apply(lon_max,
- lat_max,
- detail::indexed_point_view
- <
- BoxIn const, max_corner
- >(box_in),
- p_max_out);
- }
-
-public:
- static inline void apply(BoxIn const& box_in, BoxOut& box_out)
- {
- typedef typename coordinate_type<BoxIn>::type in_coordinate_type;
-
- in_coordinate_type lon_min = geometry::get<min_corner, 0>(box_in);
- in_coordinate_type lat_min = geometry::get<min_corner, 1>(box_in);
- in_coordinate_type lon_max = geometry::get<max_corner, 0>(box_in);
- in_coordinate_type lat_max = geometry::get<max_corner, 1>(box_in);
-
- math::normalize_spheroidal_box_coordinates
- <
- typename coordinate_system<BoxIn>::type::units,
- IsEquatorial,
- in_coordinate_type
- >(lon_min, lat_min, lon_max, lat_max);
-
- apply_to_coordinates
- <
- typename coordinate_system<BoxIn>::type::units,
- typename coordinate_system<BoxOut>::type::units
- >(lon_min, lat_min, lon_max, lat_max, box_in, box_out);
- }
-};
-
-
-}} // namespace detail::normalization
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename GeometryIn,
- typename GeometryOut,
- typename TagIn = typename tag<GeometryIn>::type,
- typename TagOut = typename tag<GeometryOut>::type,
- typename CSTagIn = typename cs_tag<GeometryIn>::type,
- typename CSTagOut = typename cs_tag<GeometryOut>::type
->
-struct normalize : detail::normalization::do_nothing
-{};
-
-
-template <typename PointIn, typename PointOut>
-struct normalize
- <
- PointIn, PointOut, point_tag, point_tag,
- spherical_equatorial_tag, spherical_equatorial_tag
- > : detail::normalization::normalize_point<PointIn, PointOut>
-{};
-
-
-template <typename PointIn, typename PointOut>
-struct normalize
- <
- PointIn, PointOut, point_tag, point_tag,
- spherical_polar_tag, spherical_polar_tag
- > : detail::normalization::normalize_point<PointIn, PointOut, false>
-{};
-
-
-template <typename PointIn, typename PointOut>
-struct normalize
- <
- PointIn, PointOut, point_tag, point_tag, geographic_tag, geographic_tag
- > : detail::normalization::normalize_point<PointIn, PointOut>
-{};
-
-
-template <typename BoxIn, typename BoxOut>
-struct normalize
- <
- BoxIn, BoxOut, box_tag, box_tag,
- spherical_equatorial_tag, spherical_equatorial_tag
- > : detail::normalization::normalize_box<BoxIn, BoxOut>
-{};
-
-
-template <typename BoxIn, typename BoxOut>
-struct normalize
- <
- BoxIn, BoxOut, box_tag, box_tag,
- spherical_polar_tag, spherical_polar_tag
- > : detail::normalization::normalize_box<BoxIn, BoxOut, false>
-{};
-
-
-template <typename BoxIn, typename BoxOut>
-struct normalize
- <
- BoxIn, BoxOut, box_tag, box_tag, geographic_tag, geographic_tag
- > : detail::normalization::normalize_box<BoxIn, BoxOut>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-template <typename GeometryIn, typename GeometryOut>
-inline void normalize(GeometryIn const& geometry_in, GeometryOut& geometry_out)
-{
- dispatch::normalize
- <
- GeometryIn, GeometryOut
- >::apply(geometry_in, geometry_out);
-}
-
-template <typename GeometryOut, typename GeometryIn>
-inline GeometryOut return_normalized(GeometryIn const& geometry_in)
-{
- GeometryOut geometry_out;
- detail::normalize(geometry_in, geometry_out);
- return geometry_out;
-}
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_NORMALIZE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/not.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/not.hpp
deleted file mode 100644
index 95cdfa24e62..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/not.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015, 2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_NOT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_NOT_HPP
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-
-/*!
-\brief Structure negating the result of specified policy
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Policy
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return Negation of the result of the policy
- */
-template <typename Policy>
-struct not_
-{
- template <typename Geometry1, typename Geometry2>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2)
- {
- return ! Policy::apply(geometry1, geometry2);
- }
-
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return ! Policy::apply(geometry1, geometry2, strategy);
- }
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_NOT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp
deleted file mode 100644
index 16fba72fe01..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_NUM_DISTINCT_CONSECUTIVE_POINTS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_NUM_DISTINCT_CONSECUTIVE_POINTS_HPP
-
-#include <cstddef>
-
-#include <algorithm>
-
-#include <boost/range.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-// returns the number of distinct values in the range;
-// return values are 0u through MaximumNumber, where MaximumNumber
-// corresponds to MaximumNumber or more distinct values
-//
-// FUTURE: take into account topologically closed ranges;
-// add appropriate template parameter(s) to control whether
-// the closing point for topologically closed ranges is to be
-// accounted for separately or not
-template
-<
- typename Range,
- std::size_t MaximumNumber,
- bool AllowDuplicates /* true */,
- typename NotEqualTo
->
-struct num_distinct_consecutive_points
-{
- static inline std::size_t apply(Range const& range)
- {
- typedef typename boost::range_iterator<Range const>::type iterator;
-
- std::size_t const size = boost::size(range);
-
- if ( size < 2u )
- {
- return (size < MaximumNumber) ? size : MaximumNumber;
- }
-
- iterator current = boost::begin(range);
- std::size_t counter(0);
- do
- {
- ++counter;
- iterator next = std::find_if(current,
- boost::end(range),
- NotEqualTo(*current));
- current = next;
- }
- while ( current != boost::end(range) && counter <= MaximumNumber );
-
- return counter;
- }
-};
-
-
-template <typename Range, std::size_t MaximumNumber, typename NotEqualTo>
-struct num_distinct_consecutive_points<Range, MaximumNumber, false, NotEqualTo>
-{
- static inline std::size_t apply(Range const& range)
- {
- std::size_t const size = boost::size(range);
- return (size < MaximumNumber) ? size : MaximumNumber;
- }
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_NUM_DISTINCT_CONSECUTIVE_POINTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/occupation_info.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/occupation_info.hpp
deleted file mode 100644
index fc74f0cc7fd..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/occupation_info.hpp
+++ /dev/null
@@ -1,219 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OCCUPATION_INFO_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OCCUPATION_INFO_HPP
-
-#include <algorithm>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/policies/compare.hpp>
-#include <boost/geometry/iterators/closing_iterator.hpp>
-
-#include <boost/geometry/algorithms/detail/get_left_turns.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Point, typename T>
-struct angle_info
-{
- typedef T angle_type;
- typedef Point point_type;
-
- segment_identifier seg_id;
- std::size_t turn_index;
- int operation_index;
- std::size_t cluster_index;
- Point intersection_point;
- Point point; // either incoming or outgoing point
- bool incoming;
- bool blocked;
- bool included;
-
- inline angle_info()
- : blocked(false)
- , included(false)
- {}
-};
-
-template <typename AngleInfo>
-class occupation_info
-{
-public :
- typedef std::vector<AngleInfo> collection_type;
-
- std::size_t count;
-
- inline occupation_info()
- : count(0)
- {}
-
- template <typename RobustPoint>
- inline void add(RobustPoint const& incoming_point,
- RobustPoint const& outgoing_point,
- RobustPoint const& intersection_point,
- std::size_t turn_index, int operation_index,
- segment_identifier const& seg_id)
- {
- geometry::equal_to<RobustPoint> comparator;
- if (comparator(incoming_point, intersection_point))
- {
- return;
- }
- if (comparator(outgoing_point, intersection_point))
- {
- return;
- }
-
- AngleInfo info;
- info.seg_id = seg_id;
- info.turn_index = turn_index;
- info.operation_index = operation_index;
- info.intersection_point = intersection_point;
-
- {
- info.point = incoming_point;
- info.incoming = true;
- m_angles.push_back(info);
- }
- {
- info.point = outgoing_point;
- info.incoming = false;
- m_angles.push_back(info);
- }
- }
-
- template <typename RobustPoint, typename Turns, typename SideStrategy>
- inline void get_left_turns(RobustPoint const& origin, Turns& turns,
- SideStrategy const& strategy)
- {
- typedef detail::left_turns::angle_less
- <
- typename AngleInfo::point_type,
- SideStrategy
- > angle_less;
-
- // Sort on angle
- std::sort(m_angles.begin(), m_angles.end(), angle_less(origin, strategy));
-
- // Group same-angled elements
- std::size_t cluster_size = detail::left_turns::assign_cluster_indices(m_angles, origin);
- // Block all turns on the right side of any turn
- detail::left_turns::block_turns(m_angles, cluster_size);
- detail::left_turns::get_left_turns(m_angles, turns);
- }
-
-#if defined(BOOST_GEOMETRY_BUFFER_ENLARGED_CLUSTERS)
- template <typename RobustPoint>
- inline bool has_rounding_issues(RobustPoint const& origin) const
- {
- return detail::left_turns::has_rounding_issues(angles, origin);
- }
-#endif
-
-private :
- collection_type m_angles; // each turn splitted in incoming/outgoing vectors
-};
-
-template<typename Pieces>
-inline void move_index(Pieces const& pieces, signed_size_type& index, signed_size_type& piece_index, int direction)
-{
- BOOST_GEOMETRY_ASSERT(direction == 1 || direction == -1);
- BOOST_GEOMETRY_ASSERT(
- piece_index >= 0
- && piece_index < static_cast<signed_size_type>(boost::size(pieces)) );
- BOOST_GEOMETRY_ASSERT(
- index >= 0
- && index < static_cast<signed_size_type>(boost::size(pieces[piece_index].robust_ring)));
-
- // NOTE: both index and piece_index must be in valid range
- // this means that then they could be of type std::size_t
- // if the code below was refactored
-
- index += direction;
- if (direction == -1 && index < 0)
- {
- piece_index--;
- if (piece_index < 0)
- {
- piece_index = boost::size(pieces) - 1;
- }
- index = boost::size(pieces[piece_index].robust_ring) - 1;
- }
- if (direction == 1
- && index >= static_cast<signed_size_type>(boost::size(pieces[piece_index].robust_ring)))
- {
- piece_index++;
- if (piece_index >= static_cast<signed_size_type>(boost::size(pieces)))
- {
- piece_index = 0;
- }
- index = 0;
- }
-}
-
-
-template
-<
- typename RobustPoint,
- typename Turn,
- typename Pieces,
- typename Info
->
-inline void add_incoming_and_outgoing_angles(
- RobustPoint const& intersection_point, // rescaled
- Turn const& turn,
- Pieces const& pieces, // using rescaled offsets of it
- int operation_index,
- segment_identifier seg_id,
- Info& info)
-{
- segment_identifier real_seg_id = seg_id;
- geometry::equal_to<RobustPoint> comparator;
-
- // Move backward and forward
- RobustPoint direction_points[2];
- for (int i = 0; i < 2; i++)
- {
- signed_size_type index = turn.operations[operation_index].index_in_robust_ring;
- signed_size_type piece_index = turn.operations[operation_index].piece_index;
- while(comparator(pieces[piece_index].robust_ring[index], intersection_point))
- {
- move_index(pieces, index, piece_index, i == 0 ? -1 : 1);
- }
- direction_points[i] = pieces[piece_index].robust_ring[index];
- }
-
- info.add(direction_points[0], direction_points[1], intersection_point,
- turn.turn_index, operation_index, real_seg_id);
-}
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OCCUPATION_INFO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlaps/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlaps/implementation.hpp
deleted file mode 100644
index 49f44bef81a..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlaps/implementation.hpp
+++ /dev/null
@@ -1,156 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014, 2015, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAPS_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAPS_IMPLEMENTATION_HPP
-
-
-#include <cstddef>
-
-#include <boost/geometry/core/access.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/relate.hpp>
-#include <boost/geometry/algorithms/detail/overlaps/interface.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlaps
-{
-
-template
-<
- std::size_t Dimension,
- std::size_t DimensionCount
->
-struct box_box_loop
-{
- template <typename Box1, typename Box2>
- static inline void apply(Box1 const& b1, Box2 const& b2,
- bool& overlaps, bool& one_in_two, bool& two_in_one)
- {
- assert_dimension_equal<Box1, Box2>();
-
- typedef typename coordinate_type<Box1>::type coordinate_type1;
- typedef typename coordinate_type<Box2>::type coordinate_type2;
-
- coordinate_type1 const& min1 = get<min_corner, Dimension>(b1);
- coordinate_type1 const& max1 = get<max_corner, Dimension>(b1);
- coordinate_type2 const& min2 = get<min_corner, Dimension>(b2);
- coordinate_type2 const& max2 = get<max_corner, Dimension>(b2);
-
- // We might use the (not yet accepted) Boost.Interval
- // submission in the future
-
- // If:
- // B1: |-------|
- // B2: |------|
- // in any dimension -> no overlap
- if (max1 <= min2 || min1 >= max2)
- {
- overlaps = false;
- return;
- }
-
- // If:
- // B1: |--------------------|
- // B2: |-------------|
- // in all dimensions -> within, then no overlap
- // B1: |--------------------|
- // B2: |-------------|
- // this is "within-touch" -> then no overlap. So use < and >
- if (min1 < min2 || max1 > max2)
- {
- one_in_two = false;
- }
-
- // Same other way round
- if (min2 < min1 || max2 > max1)
- {
- two_in_one = false;
- }
-
- box_box_loop
- <
- Dimension + 1,
- DimensionCount
- >::apply(b1, b2, overlaps, one_in_two, two_in_one);
- }
-};
-
-template
-<
- std::size_t DimensionCount
->
-struct box_box_loop<DimensionCount, DimensionCount>
-{
- template <typename Box1, typename Box2>
- static inline void apply(Box1 const& , Box2 const&, bool&, bool&, bool&)
- {
- }
-};
-
-struct box_box
-{
- template <typename Box1, typename Box2, typename Strategy>
- static inline bool apply(Box1 const& b1, Box2 const& b2, Strategy const& /*strategy*/)
- {
- bool overlaps = true;
- bool within1 = true;
- bool within2 = true;
- box_box_loop
- <
- 0,
- dimension<Box1>::type::value
- >::apply(b1, b2, overlaps, within1, within2);
-
- /*
- \see http://docs.codehaus.org/display/GEOTDOC/02+Geometry+Relationships#02GeometryRelationships-Overlaps
- where is stated that "inside" is not an "overlap",
- this is true and is implemented as such.
- */
- return overlaps && ! within1 && ! within2;
- }
-};
-
-}} // namespace detail::overlaps
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Box1, typename Box2>
-struct overlaps<Box1, Box2, box_tag, box_tag>
- : detail::overlaps::box_box
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAPS_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlaps/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlaps/interface.hpp
deleted file mode 100644
index f9f6a853fd7..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlaps/interface.hpp
+++ /dev/null
@@ -1,124 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014, 2015, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAPS_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAPS_INTERFACE_HPP
-
-
-#include <cstddef>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/detail/relate/relate_impl.hpp>
-
-#include <boost/geometry/strategies/relate.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename tag<Geometry1>::type,
- typename Tag2 = typename tag<Geometry2>::type
->
-struct overlaps
- : detail::relate::relate_impl
- <
- detail::de9im::static_mask_overlaps_type,
- Geometry1,
- Geometry2
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief \brief_check2{overlap}
-\ingroup overlaps
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Strategy \tparam_strategy{Overlaps}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param strategy \param_strategy{overlaps}
-\return \return_check2{overlap}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/overlaps.qbk]}
-*/
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline bool overlaps(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- return dispatch::overlaps
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, strategy);
-}
-
-/*!
-\brief \brief_check2{overlap}
-\ingroup overlaps
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return \return_check2{overlap}
-
-\qbk{[include reference/algorithms/overlaps.qbk]}
-*/
-template <typename Geometry1, typename Geometry2>
-inline bool overlaps(Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- typedef typename strategy::relate::services::default_strategy
- <
- Geometry1,
- Geometry2
- >::type strategy_type;
-
- return dispatch::overlaps
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, strategy_type());
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAPS_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/add_rings.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/add_rings.hpp
deleted file mode 100644
index 242e30cbcbf..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/add_rings.hpp
+++ /dev/null
@@ -1,195 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ADD_RINGS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ADD_RINGS_HPP
-
-#include <boost/range.hpp>
-#include <boost/throw_exception.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/exception.hpp>
-#include <boost/geometry/algorithms/area.hpp>
-#include <boost/geometry/algorithms/detail/overlay/convert_ring.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_ring.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-template
-<
- typename GeometryOut,
- typename Geometry1,
- typename Geometry2,
- typename RingCollection
->
-inline void convert_and_add(GeometryOut& result,
- Geometry1 const& geometry1, Geometry2 const& geometry2,
- RingCollection const& collection,
- ring_identifier id,
- bool reversed, bool append)
-{
- typedef typename geometry::tag<Geometry1>::type tag1;
- typedef typename geometry::tag<Geometry2>::type tag2;
- typedef typename geometry::tag<GeometryOut>::type tag_out;
-
- if (id.source_index == 0)
- {
- convert_ring<tag_out>::apply(result,
- get_ring<tag1>::apply(id, geometry1),
- append, reversed);
- }
- else if (id.source_index == 1)
- {
- convert_ring<tag_out>::apply(result,
- get_ring<tag2>::apply(id, geometry2),
- append, reversed);
- }
- else if (id.source_index == 2)
- {
- convert_ring<tag_out>::apply(result,
- get_ring<void>::apply(id, collection),
- append, reversed);
- }
-}
-
-enum add_rings_error_handling
-{
- add_rings_ignore_unordered,
- add_rings_add_unordered,
- add_rings_throw_if_reversed
-};
-
-template
-<
- typename GeometryOut,
- typename SelectionMap,
- typename Geometry1,
- typename Geometry2,
- typename RingCollection,
- typename OutputIterator,
- typename AreaStrategy
->
-inline OutputIterator add_rings(SelectionMap const& map,
- Geometry1 const& geometry1, Geometry2 const& geometry2,
- RingCollection const& collection,
- OutputIterator out,
- AreaStrategy const& area_strategy,
- add_rings_error_handling error_handling = add_rings_ignore_unordered)
-{
- typedef typename SelectionMap::const_iterator iterator;
- typedef typename AreaStrategy::template result_type
- <
- GeometryOut
- >::type area_type;
-
- area_type const zero = 0;
- std::size_t const min_num_points = core_detail::closure::minimum_ring_size
- <
- geometry::closure
- <
- typename boost::range_value
- <
- RingCollection const
- >::type
- >::value
- >::value;
-
-
- for (iterator it = boost::begin(map);
- it != boost::end(map);
- ++it)
- {
- if (! it->second.discarded
- && it->second.parent.source_index == -1)
- {
- GeometryOut result;
- convert_and_add(result, geometry1, geometry2, collection,
- it->first, it->second.reversed, false);
-
- // Add children
- for (typename std::vector<ring_identifier>::const_iterator child_it
- = it->second.children.begin();
- child_it != it->second.children.end();
- ++child_it)
- {
- iterator mit = map.find(*child_it);
- if (mit != map.end()
- && ! mit->second.discarded)
- {
- convert_and_add(result, geometry1, geometry2, collection,
- *child_it, mit->second.reversed, true);
- }
- }
-
- // Only add rings if they satisfy minimal requirements.
- // This cannot be done earlier (during traversal), not
- // everything is figured out yet (sum of positive/negative rings)
- if (geometry::num_points(result) >= min_num_points)
- {
- area_type const area = geometry::area(result, area_strategy);
- // Ignore if area is 0
- if (! math::equals(area, zero))
- {
- if (error_handling == add_rings_add_unordered
- || area > zero)
- {
- *out++ = result;
- }
- else if (error_handling == add_rings_throw_if_reversed)
- {
- BOOST_THROW_EXCEPTION(invalid_output_exception());
- }
- }
- }
- }
- }
- return out;
-}
-
-
-template
-<
- typename GeometryOut,
- typename SelectionMap,
- typename Geometry,
- typename RingCollection,
- typename OutputIterator,
- typename AreaStrategy
->
-inline OutputIterator add_rings(SelectionMap const& map,
- Geometry const& geometry,
- RingCollection const& collection,
- OutputIterator out,
- AreaStrategy const& area_strategy)
-{
- Geometry empty;
- return add_rings<GeometryOut>(map, geometry, empty, collection, out, area_strategy);
-}
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ADD_RINGS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp
deleted file mode 100644
index 0fd1fe4de9f..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPLICATES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPLICATES_HPP
-
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/append.hpp>
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-template <typename Range, typename Point>
-inline void append_no_duplicates(Range& range, Point const& point, bool force = false)
-{
- if (boost::size(range) == 0
- || force
- || ! geometry::detail::equals::equals_point_point(*(boost::end(range)-1), point))
- {
-#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
- std::cout << " add: ("
- << geometry::get<0>(point) << ", " << geometry::get<1>(point) << ")"
- << std::endl;
-#endif
- geometry::append(range, point);
- }
-}
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPLICATES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp
deleted file mode 100644
index 724996ae33d..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp
+++ /dev/null
@@ -1,201 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPS_OR_SPIKES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPS_OR_SPIKES_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/append.hpp>
-#include <boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp>
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-// TODO: move this / rename this
-template <typename Point1, typename Point2, typename RobustPolicy>
-inline bool points_equal_or_close(Point1 const& point1,
- Point2 const& point2,
- RobustPolicy const& robust_policy)
-{
- if (detail::equals::equals_point_point(point1, point2))
- {
- return true;
- }
-
- if (BOOST_GEOMETRY_CONDITION(! RobustPolicy::enabled))
- {
- return false;
- }
-
- // Try using specified robust policy
- typedef typename geometry::robust_point_type
- <
- Point1,
- RobustPolicy
- >::type robust_point_type;
-
- robust_point_type point1_rob, point2_rob;
- geometry::recalculate(point1_rob, point1, robust_policy);
- geometry::recalculate(point2_rob, point2, robust_policy);
-
- return detail::equals::equals_point_point(point1_rob, point2_rob);
-}
-
-
-template <typename Range, typename Point, typename SideStrategy, typename RobustPolicy>
-inline void append_no_dups_or_spikes(Range& range, Point const& point,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy)
-{
-#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
- std::cout << " add: ("
- << geometry::get<0>(point) << ", " << geometry::get<1>(point) << ")"
- << std::endl;
-#endif
- // The code below this condition checks all spikes/dups
- // for geometries >= 3 points.
- // So we have to check the first potential duplicate differently
- if (boost::size(range) == 1
- && points_equal_or_close(*(boost::begin(range)), point, robust_policy))
- {
- return;
- }
-
- traits::push_back<Range>::apply(range, point);
-
- // If a point is equal, or forming a spike, remove the pen-ultimate point
- // because this one caused the spike.
- // If so, the now-new-pen-ultimate point can again cause a spike
- // (possibly at a corner). So keep doing this.
- // Besides spikes it will also avoid adding duplicates.
- while(boost::size(range) >= 3
- && point_is_spike_or_equal(point,
- *(boost::end(range) - 3),
- *(boost::end(range) - 2),
- strategy,
- robust_policy))
- {
- // Use the Concept/traits, so resize and append again
- traits::resize<Range>::apply(range, boost::size(range) - 2);
- traits::push_back<Range>::apply(range, point);
- }
-}
-
-template <typename Range, typename Point, typename SideStrategy, typename RobustPolicy>
-inline void append_no_collinear(Range& range, Point const& point,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy)
-{
- // Stricter version, not allowing any point in a linear row
- // (spike, continuation or same point)
-
- // The code below this condition checks all spikes/dups
- // for geometries >= 3 points.
- // So we have to check the first potential duplicate differently
- if (boost::size(range) == 1
- && points_equal_or_close(*(boost::begin(range)), point, robust_policy))
- {
- return;
- }
-
- traits::push_back<Range>::apply(range, point);
-
- // If a point is equal, or forming a spike, remove the pen-ultimate point
- // because this one caused the spike.
- // If so, the now-new-pen-ultimate point can again cause a spike
- // (possibly at a corner). So keep doing this.
- // Besides spikes it will also avoid adding duplicates.
- while(boost::size(range) >= 3
- && point_is_collinear(point,
- *(boost::end(range) - 3),
- *(boost::end(range) - 2),
- strategy,
- robust_policy))
- {
- // Use the Concept/traits, so resize and append again
- traits::resize<Range>::apply(range, boost::size(range) - 2);
- traits::push_back<Range>::apply(range, point);
- }
-}
-
-template <typename Range, typename SideStrategy, typename RobustPolicy>
-inline void clean_closing_dups_and_spikes(Range& range,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy)
-{
- std::size_t const minsize
- = core_detail::closure::minimum_ring_size
- <
- geometry::closure<Range>::value
- >::value;
-
- if (boost::size(range) <= minsize)
- {
- return;
- }
-
- typedef typename boost::range_iterator<Range>::type iterator_type;
- static bool const closed = geometry::closure<Range>::value == geometry::closed;
-
-// TODO: the following algorithm could be rewritten to first look for spikes
-// and then erase some number of points from the beginning of the Range
-
- bool found = false;
- do
- {
- found = false;
- iterator_type first = boost::begin(range);
- iterator_type second = first + 1;
- iterator_type ultimate = boost::end(range) - 1;
- if (BOOST_GEOMETRY_CONDITION(closed))
- {
- ultimate--;
- }
-
- // Check if closing point is a spike (this is so if the second point is
- // considered as collinear w.r.t. the last segment)
- if (point_is_collinear(*second, *ultimate, *first, strategy, robust_policy))
- {
- range::erase(range, first);
- if (BOOST_GEOMETRY_CONDITION(closed))
- {
- // Remove closing last point
- range::resize(range, boost::size(range) - 1);
- // Add new closing point
- range::push_back(range, range::front(range));
- }
- found = true;
- }
- } while(found && boost::size(range) > minsize);
-}
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_APPEND_NO_DUPS_OR_SPIKES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp
deleted file mode 100644
index 3be53934868..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/assign_parents.hpp
+++ /dev/null
@@ -1,420 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ASSIGN_PARENTS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ASSIGN_PARENTS_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/area.hpp>
-#include <boost/geometry/algorithms/envelope.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-#include <boost/geometry/algorithms/detail/partition.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_ring.hpp>
-#include <boost/geometry/algorithms/detail/overlay/range_in_geometry.hpp>
-#include <boost/geometry/algorithms/covered_by.hpp>
-
-#include <boost/geometry/geometries/box.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-
-template
-<
- typename Item,
- typename InnerGeometry,
- typename Geometry1, typename Geometry2,
- typename RingCollection,
- typename Strategy
->
-static inline bool within_selected_input(Item const& item2,
- InnerGeometry const& inner_geometry,
- ring_identifier const& outer_id,
- Geometry1 const& geometry1, Geometry2 const& geometry2,
- RingCollection const& collection,
- Strategy const& strategy)
-{
- typedef typename geometry::tag<Geometry1>::type tag1;
- typedef typename geometry::tag<Geometry2>::type tag2;
-
- // NOTE: range_in_geometry first checks the item2.point and then
- // if this point is on boundary it checks points of inner_geometry
- // ring until a point inside/outside other geometry ring is found
- switch (outer_id.source_index)
- {
- // covered_by
- case 0 :
- return range_in_geometry(item2.point, inner_geometry,
- get_ring<tag1>::apply(outer_id, geometry1), strategy) >= 0;
- case 1 :
- return range_in_geometry(item2.point, inner_geometry,
- get_ring<tag2>::apply(outer_id, geometry2), strategy) >= 0;
- case 2 :
- return range_in_geometry(item2.point, inner_geometry,
- get_ring<void>::apply(outer_id, collection), strategy) >= 0;
- }
- return false;
-}
-
-template
-<
- typename Item,
- typename Geometry1, typename Geometry2,
- typename RingCollection,
- typename Strategy
->
-static inline bool within_selected_input(Item const& item2,
- ring_identifier const& inner_id, ring_identifier const& outer_id,
- Geometry1 const& geometry1, Geometry2 const& geometry2,
- RingCollection const& collection,
- Strategy const& strategy)
-{
- typedef typename geometry::tag<Geometry1>::type tag1;
- typedef typename geometry::tag<Geometry2>::type tag2;
-
- switch (inner_id.source_index)
- {
- case 0 :
- return within_selected_input(item2,
- get_ring<tag1>::apply(inner_id, geometry1),
- outer_id, geometry1, geometry2, collection, strategy);
- case 1 :
- return within_selected_input(item2,
- get_ring<tag2>::apply(inner_id, geometry2),
- outer_id, geometry1, geometry2, collection, strategy);
- case 2 :
- return within_selected_input(item2,
- get_ring<void>::apply(inner_id, collection),
- outer_id, geometry1, geometry2, collection, strategy);
- }
- return false;
-}
-
-
-template <typename Point, typename AreaType>
-struct ring_info_helper
-{
- ring_identifier id;
- AreaType real_area;
- AreaType abs_area;
- model::box<Point> envelope;
-
- inline ring_info_helper()
- : real_area(0), abs_area(0)
- {}
-
- inline ring_info_helper(ring_identifier i, AreaType const& a)
- : id(i), real_area(a), abs_area(geometry::math::abs(a))
- {}
-};
-
-
-struct ring_info_helper_get_box
-{
- template <typename Box, typename InputItem>
- static inline void apply(Box& total, InputItem const& item)
- {
- geometry::expand(total, item.envelope);
- }
-};
-
-struct ring_info_helper_ovelaps_box
-{
- template <typename Box, typename InputItem>
- static inline bool apply(Box const& box, InputItem const& item)
- {
- return ! geometry::detail::disjoint::disjoint_box_box(box, item.envelope);
- }
-};
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Collection,
- typename RingMap,
- typename Strategy
->
-struct assign_visitor
-{
- typedef typename RingMap::mapped_type ring_info_type;
-
- Geometry1 const& m_geometry1;
- Geometry2 const& m_geometry2;
- Collection const& m_collection;
- RingMap& m_ring_map;
- Strategy const& m_strategy;
- bool m_check_for_orientation;
-
- inline assign_visitor(Geometry1 const& g1, Geometry2 const& g2, Collection const& c,
- RingMap& map, Strategy const& strategy, bool check)
- : m_geometry1(g1)
- , m_geometry2(g2)
- , m_collection(c)
- , m_ring_map(map)
- , m_strategy(strategy)
- , m_check_for_orientation(check)
- {}
-
- template <typename Item>
- inline bool apply(Item const& outer, Item const& inner, bool first = true)
- {
- if (first && outer.abs_area < inner.abs_area)
- {
- // Apply with reversed arguments
- apply(inner, outer, false);
- return true;
- }
-
- if (m_check_for_orientation
- || (math::larger(outer.real_area, 0)
- && math::smaller(inner.real_area, 0)))
- {
- ring_info_type& inner_in_map = m_ring_map[inner.id];
-
- if (geometry::covered_by(inner_in_map.point, outer.envelope)
- && within_selected_input(inner_in_map, inner.id, outer.id,
- m_geometry1, m_geometry2, m_collection,
- m_strategy)
- )
- {
- // Assign a parent if there was no earlier parent, or the newly
- // found parent is smaller than the previous one
- if (inner_in_map.parent.source_index == -1
- || outer.abs_area < inner_in_map.parent_area)
- {
- inner_in_map.parent = outer.id;
- inner_in_map.parent_area = outer.abs_area;
- }
- }
- }
-
- return true;
- }
-};
-
-
-template
-<
- overlay_type OverlayType,
- typename Geometry1, typename Geometry2,
- typename RingCollection,
- typename RingMap,
- typename Strategy
->
-inline void assign_parents(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RingCollection const& collection,
- RingMap& ring_map,
- Strategy const& strategy)
-{
- static bool const is_difference = OverlayType == overlay_difference;
- static bool const is_buffer = OverlayType == overlay_buffer;
- static bool const is_dissolve = OverlayType == overlay_dissolve;
- static bool const check_for_orientation = is_buffer || is_dissolve;
-
- typedef typename geometry::tag<Geometry1>::type tag1;
- typedef typename geometry::tag<Geometry2>::type tag2;
-
- typedef typename RingMap::mapped_type ring_info_type;
- typedef typename ring_info_type::point_type point_type;
- typedef model::box<point_type> box_type;
- typedef typename Strategy::template area_strategy
- <
- point_type
- >::type::template result_type<point_type>::type area_result_type;
-
- typedef typename RingMap::iterator map_iterator_type;
-
- {
- typedef ring_info_helper<point_type, area_result_type> helper;
- typedef std::vector<helper> vector_type;
- typedef typename boost::range_iterator<vector_type const>::type vector_iterator_type;
-
- std::size_t count_total = ring_map.size();
- std::size_t count_positive = 0;
- std::size_t index_positive = 0; // only used if count_positive>0
- std::size_t index = 0;
-
- // Copy to vector (with new approach this might be obsolete as well, using the map directly)
- vector_type vector(count_total);
-
- for (map_iterator_type it = boost::begin(ring_map);
- it != boost::end(ring_map); ++it, ++index)
- {
- vector[index] = helper(it->first, it->second.get_area());
- helper& item = vector[index];
- switch(it->first.source_index)
- {
- case 0 :
- geometry::envelope(get_ring<tag1>::apply(it->first, geometry1),
- item.envelope, strategy.get_envelope_strategy());
- break;
- case 1 :
- geometry::envelope(get_ring<tag2>::apply(it->first, geometry2),
- item.envelope, strategy.get_envelope_strategy());
- break;
- case 2 :
- geometry::envelope(get_ring<void>::apply(it->first, collection),
- item.envelope, strategy.get_envelope_strategy());
- break;
- }
-
- // Expand envelope slightly
- expand_by_epsilon(item.envelope);
-
- if (item.real_area > 0)
- {
- count_positive++;
- index_positive = index;
- }
- }
-
- if (! check_for_orientation)
- {
- if (count_positive == count_total)
- {
- // Optimization for only positive rings
- // -> no assignment of parents or reversal necessary, ready here.
- return;
- }
-
- if (count_positive == 1 && ! is_difference && ! is_dissolve)
- {
- // Optimization for one outer ring
- // -> assign this as parent to all others (all interior rings)
- // In unions, this is probably the most occuring case and gives
- // a dramatic improvement (factor 5 for star_comb testcase)
- // In difference or other cases where interior rings might be
- // located outside the outer ring, this cannot be done
- ring_identifier id_of_positive = vector[index_positive].id;
- ring_info_type& outer = ring_map[id_of_positive];
- index = 0;
- for (vector_iterator_type it = boost::begin(vector);
- it != boost::end(vector); ++it, ++index)
- {
- if (index != index_positive)
- {
- ring_info_type& inner = ring_map[it->id];
- inner.parent = id_of_positive;
- outer.children.push_back(it->id);
- }
- }
- return;
- }
- }
-
- assign_visitor
- <
- Geometry1, Geometry2,
- RingCollection, RingMap,
- Strategy
- > visitor(geometry1, geometry2, collection, ring_map, strategy, check_for_orientation);
-
- geometry::partition
- <
- box_type
- >::apply(vector, visitor, ring_info_helper_get_box(),
- ring_info_helper_ovelaps_box());
- }
-
- if (check_for_orientation)
- {
- for (map_iterator_type it = boost::begin(ring_map);
- it != boost::end(ring_map); ++it)
- {
- ring_info_type& info = it->second;
- if (geometry::math::equals(info.get_area(), 0))
- {
- info.discarded = true;
- }
- else if (info.parent.source_index >= 0)
- {
- const ring_info_type& parent = ring_map[info.parent];
- bool const pos = math::larger(info.get_area(), 0);
- bool const parent_pos = math::larger(parent.area, 0);
-
- bool const double_neg = is_dissolve && ! pos && ! parent_pos;
-
- if ((pos && parent_pos) || double_neg)
- {
- // Discard positive inner ring with positive parent
- // Also, for some cases (dissolve), negative inner ring
- // with negative parent should be discarded
- info.discarded = true;
- }
-
- if (pos || info.discarded)
- {
- // Remove parent ID from any positive or discarded inner rings
- info.parent.source_index = -1;
- }
- }
- else if (info.parent.source_index < 0
- && math::smaller(info.get_area(), 0))
- {
- // Reverse negative ring without parent
- info.reversed = true;
- }
- }
- }
-
- // Assign childlist
- for (map_iterator_type it = boost::begin(ring_map);
- it != boost::end(ring_map); ++it)
- {
- if (it->second.parent.source_index >= 0)
- {
- ring_map[it->second.parent].children.push_back(it->first);
- }
- }
-}
-
-
-// Version for one geometry (called by buffer/dissolve)
-template
-<
- overlay_type OverlayType,
- typename Geometry,
- typename RingCollection,
- typename RingMap,
- typename Strategy
->
-inline void assign_parents(Geometry const& geometry,
- RingCollection const& collection,
- RingMap& ring_map,
- Strategy const& strategy)
-{
- // Call it with an empty geometry as second geometry (source_id == 1)
- // (ring_map should be empty for source_id==1)
- Geometry empty;
- assign_parents<OverlayType>(geometry, empty,
- collection, ring_map, strategy);
-}
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ASSIGN_PARENTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp
deleted file mode 100644
index 9beb8ad64f0..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp
+++ /dev/null
@@ -1,215 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_BACKTRACK_CHECK_SI_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_BACKTRACK_CHECK_SI_HPP
-
-#include <cstddef>
-#include <string>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/detail/has_self_intersections.hpp>
-#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) || defined(BOOST_GEOMETRY_OVERLAY_REPORT_WKT)
-# include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
-# include <boost/geometry/io/wkt/wkt.hpp>
-#endif
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-template <typename Turns>
-inline void clear_visit_info(Turns& turns)
-{
- typedef typename boost::range_value<Turns>::type tp_type;
-
- for (typename boost::range_iterator<Turns>::type
- it = boost::begin(turns);
- it != boost::end(turns);
- ++it)
- {
- for (typename boost::range_iterator
- <
- typename tp_type::container_type
- >::type op_it = boost::begin(it->operations);
- op_it != boost::end(it->operations);
- ++op_it)
- {
- op_it->visited.clear();
- }
- }
-}
-
-struct backtrack_state
-{
- bool m_good;
-
- inline backtrack_state() : m_good(true) {}
- inline void reset() { m_good = true; }
- inline bool good() const { return m_good; }
-};
-
-
-enum traverse_error_type
-{
- traverse_error_none,
- traverse_error_no_next_ip_at_start,
- traverse_error_no_next_ip,
- traverse_error_dead_end_at_start,
- traverse_error_dead_end,
- traverse_error_visit_again,
- traverse_error_endless_loop
-};
-
-inline std::string traverse_error_string(traverse_error_type error)
-{
- switch (error)
- {
- case traverse_error_none : return "";
- case traverse_error_no_next_ip_at_start : return "No next IP at start";
- case traverse_error_no_next_ip : return "No next IP";
- case traverse_error_dead_end_at_start : return "Dead end at start";
- case traverse_error_dead_end : return "Dead end";
- case traverse_error_visit_again : return "Visit again";
- case traverse_error_endless_loop : return "Endless loop";
- default : return "";
- }
- return "";
-}
-
-
-template
-<
- typename Geometry1,
- typename Geometry2
->
-class backtrack_check_self_intersections
-{
- struct state : public backtrack_state
- {
- bool m_checked;
- inline state()
- : m_checked(true)
- {}
- };
-public :
- typedef state state_type;
-
- template
- <
- typename Operation,
- typename Rings, typename Ring, typename Turns,
- typename Strategy,
- typename RobustPolicy,
- typename Visitor
- >
- static inline void apply(std::size_t size_at_start,
- Rings& rings,
- Ring& ring,
- Turns& turns,
- typename boost::range_value<Turns>::type const& turn,
- Operation& operation,
- traverse_error_type traverse_error,
- Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy,
- RobustPolicy const& robust_policy,
- state_type& state,
- Visitor& visitor)
- {
- visitor.visit_traverse_reject(turns, turn, operation, traverse_error);
-
- state.m_good = false;
-
- // Check self-intersections and throw exception if appropriate
- if (! state.m_checked)
- {
- state.m_checked = true;
- has_self_intersections(geometry1, strategy, robust_policy);
- has_self_intersections(geometry2, strategy, robust_policy);
- }
-
- // Make bad output clean
- rings.resize(size_at_start);
- geometry::traits::clear<typename boost::range_value<Rings>::type>::apply(ring);
-
- // Reject this as a starting point
- operation.visited.set_rejected();
-
- // And clear all visit info
- clear_visit_info(turns);
- }
-};
-
-#ifdef BOOST_GEOMETRY_OVERLAY_REPORT_WKT
-template
-<
- typename Geometry1,
- typename Geometry2
->
-class backtrack_debug
-{
-public :
- typedef backtrack_state state_type;
-
- template <typename Operation, typename Rings, typename Turns>
- static inline void apply(std::size_t size_at_start,
- Rings& rings, typename boost::range_value<Rings>::type& ring,
- Turns& turns, Operation& operation,
- std::string const& reason,
- Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- state_type& state
- )
- {
- std::cout << " REJECT " << reason << std::endl;
-
- state.m_good = false;
-
- rings.resize(size_at_start);
- ring.clear();
- operation.visited.set_rejected();
- clear_visit_info(turns);
-
- int c = 0;
- for (int i = 0; i < turns.size(); i++)
- {
- for (int j = 0; j < 2; j++)
- {
- if (turns[i].operations[j].visited.rejected())
- {
- c++;
- }
- }
- }
- std::cout << "BACKTRACK (" << reason << " )"
- << " " << c << " of " << turns.size() << " rejected"
- << std::endl;
- std::cout
- << geometry::wkt(geometry1) << std::endl
- << geometry::wkt(geometry2) << std::endl;
- }
-};
-#endif // BOOST_GEOMETRY_OVERLAY_REPORT_WKT
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_BACKTRACK_CHECK_SI_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp
deleted file mode 100644
index 25e442982b1..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/check_enrich.hpp
+++ /dev/null
@@ -1,168 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CHECK_ENRICH_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CHECK_ENRICH_HPP
-
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/ring_identifier.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-template<typename Turn>
-struct meta_turn
-{
- int index;
- Turn const* turn;
- bool handled[2];
-
- inline meta_turn(int i, Turn const& t)
- : index(i), turn(&t)
- {
- handled[0] = false;
- handled[1] = false;
- }
-};
-
-
-template <typename MetaTurn>
-inline void display(MetaTurn const& meta_turn, std::string const& reason = "")
-{
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
- std::cout << meta_turn.index
- << "\tMethods: " << method_char(meta_turn.turn->method)
- << " operations: " << operation_char(meta_turn.turn->operations[0].operation)
- << operation_char(meta_turn.turn->operations[1].operation)
- << " travels to " << meta_turn.turn->operations[0].enriched.travels_to_ip_index
- << " and " << meta_turn.turn->operations[1].enriched.travels_to_ip_index
- //<< " -> " << op_index
- << " " << reason
- << std::endl;
-#endif
-}
-
-
-template <typename MetaTurns, typename MetaTurn>
-inline void check_detailed(MetaTurns& meta_turns, MetaTurn const& meta_turn,
- int op_index, int cycle, int start, operation_type for_operation,
- bool& error)
-{
- display(meta_turn);
- int const ip_index = meta_turn.turn->operations[op_index].enriched.travels_to_ip_index;
- if (ip_index >= 0)
- {
- bool found = false;
-
- if (ip_index == start)
- {
- display(meta_turns[ip_index], " FINISH");
- return;
- }
-
- // check on continuing, or on same-operation-on-same-geometry
- if (! meta_turns[ip_index].handled[op_index]
- && (meta_turns[ip_index].turn->operations[op_index].operation == operation_continue
- || meta_turns[ip_index].turn->operations[op_index].operation == for_operation)
- )
- {
- meta_turns[ip_index].handled[op_index] = true;
- check_detailed(meta_turns, meta_turns[ip_index], op_index, cycle, start, for_operation, error);
- found = true;
- }
- // check on other geometry
- if (! found)
- {
- int const other_index = 1 - op_index;
- if (! meta_turns[ip_index].handled[other_index]
- && meta_turns[ip_index].turn->operations[other_index].operation == for_operation)
- {
- meta_turns[ip_index].handled[other_index] = true;
- check_detailed(meta_turns, meta_turns[ip_index], other_index, cycle, start, for_operation, error);
- found = true;
- }
- }
-
- if (! found)
- {
- display(meta_turns[ip_index], " STOP");
- error = true;
-#ifndef BOOST_GEOMETRY_DEBUG_ENRICH
- //std::cout << " STOP";
-#endif
- }
- }
-}
-
-
-template <typename TurnPoints>
-inline bool check_graph(TurnPoints& turn_points, operation_type for_operation)
-{
- typedef typename boost::range_value<TurnPoints>::type turn_point_type;
-
- bool error = false;
- int index = 0;
-
- std::vector<meta_turn<turn_point_type> > meta_turns;
- for (typename boost::range_iterator<TurnPoints const>::type
- it = boost::begin(turn_points);
- it != boost::end(turn_points);
- ++it, ++index)
- {
- meta_turns.push_back(meta_turn<turn_point_type>(index, *it));
- }
-
- int cycle = 0;
- for (typename boost::range_iterator<std::vector<meta_turn<turn_point_type> > > ::type
- it = boost::begin(meta_turns);
- it != boost::end(meta_turns);
- ++it)
- {
- if (! (it->turn->blocked() || it->turn->discarded))
- {
- for (int i = 0 ; i < 2; i++)
- {
- if (! it->handled[i]
- && it->turn->operations[i].operation == for_operation)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
- std::cout << "CYCLE " << cycle << std::endl;
-#endif
- it->handled[i] = true;
- check_detailed(meta_turns, *it, i, cycle++, it->index, for_operation, error);
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
- std::cout <<" END CYCLE " << it->index << std::endl;
-#endif
- }
- }
- }
- }
- return error;
-}
-
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CHECK_ENRICH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp
deleted file mode 100644
index 8cb37d6954a..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp
+++ /dev/null
@@ -1,250 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CLIP_LINESTRING_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CLIP_LINESTRING_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/clear.hpp>
-#include <boost/geometry/algorithms/convert.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp>
-
-#include <boost/geometry/util/select_coordinate_type.hpp>
-#include <boost/geometry/geometries/segment.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace intersection
-{
-
-/*!
- \brief Strategy: line clipping algorithm after Liang Barsky
- \ingroup overlay
- \details The Liang-Barsky line clipping algorithm clips a line with a clipping box.
- It is slightly adapted in the sense that it returns which points are clipped
- \tparam B input box type of clipping box
- \tparam P input/output point-type of segments to be clipped
- \note The algorithm is currently only implemented for 2D Cartesian points
- \note Though it is implemented in namespace strategy, and theoretically another
- strategy could be used, it is not (yet) updated to the general strategy concepts,
- and not (yet) splitted into a file in folder strategies
- \author Barend Gehrels, and the following recourses
- - A tutorial: http://www.skytopia.com/project/articles/compsci/clipping.html
- - a German applet (link broken): http://ls7-www.cs.uni-dortmund.de/students/projectgroups/acit/lineclip.shtml
-*/
-template<typename Box, typename Point>
-class liang_barsky
-{
-private:
- typedef model::referring_segment<Point> segment_type;
-
- template <typename CoordinateType, typename CalcType>
- inline bool check_edge(CoordinateType const& p, CoordinateType const& q, CalcType& t1, CalcType& t2) const
- {
- bool visible = true;
-
- if(p < 0)
- {
- CalcType const r = static_cast<CalcType>(q) / p;
- if (r > t2)
- visible = false;
- else if (r > t1)
- t1 = r;
- }
- else if(p > 0)
- {
- CalcType const r = static_cast<CalcType>(q) / p;
- if (r < t1)
- visible = false;
- else if (r < t2)
- t2 = r;
- }
- else
- {
- if (q < 0)
- visible = false;
- }
-
- return visible;
- }
-
-public:
-
- inline bool clip_segment(Box const& b, segment_type& s, bool& sp1_clipped, bool& sp2_clipped) const
- {
- typedef typename select_coordinate_type<Box, Point>::type coordinate_type;
- typedef typename select_most_precise<coordinate_type, double>::type calc_type;
-
- calc_type t1 = 0;
- calc_type t2 = 1;
-
- coordinate_type const dx = get<1, 0>(s) - get<0, 0>(s);
- coordinate_type const dy = get<1, 1>(s) - get<0, 1>(s);
-
- coordinate_type const p1 = -dx;
- coordinate_type const p2 = dx;
- coordinate_type const p3 = -dy;
- coordinate_type const p4 = dy;
-
- coordinate_type const q1 = get<0, 0>(s) - get<min_corner, 0>(b);
- coordinate_type const q2 = get<max_corner, 0>(b) - get<0, 0>(s);
- coordinate_type const q3 = get<0, 1>(s) - get<min_corner, 1>(b);
- coordinate_type const q4 = get<max_corner, 1>(b) - get<0, 1>(s);
-
- if (check_edge(p1, q1, t1, t2) // left
- && check_edge(p2, q2, t1, t2) // right
- && check_edge(p3, q3, t1, t2) // bottom
- && check_edge(p4, q4, t1, t2)) // top
- {
- sp1_clipped = t1 > 0;
- sp2_clipped = t2 < 1;
-
- if (sp2_clipped)
- {
- set<1, 0>(s, get<0, 0>(s) + t2 * dx);
- set<1, 1>(s, get<0, 1>(s) + t2 * dy);
- }
-
- if(sp1_clipped)
- {
- set<0, 0>(s, get<0, 0>(s) + t1 * dx);
- set<0, 1>(s, get<0, 1>(s) + t1 * dy);
- }
-
- return true;
- }
-
- return false;
- }
-
- template<typename Linestring, typename OutputIterator>
- inline void apply(Linestring& line_out, OutputIterator out) const
- {
- if (!boost::empty(line_out))
- {
- *out = line_out;
- ++out;
- geometry::clear(line_out);
- }
- }
-};
-
-
-}} // namespace strategy::intersection
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection
-{
-
-/*!
- \brief Clips a linestring with a box
- \details A linestring is intersected (clipped) by the specified box
- and the resulting linestring, or pieces of linestrings, are sent to the specified output operator.
- \tparam OutputLinestring type of the output linestrings
- \tparam OutputIterator an output iterator which outputs linestrings
- \tparam Linestring linestring-type, for example a vector of points, matching the output-iterator type,
- the points should also match the input-iterator type
- \tparam Box box type
- \tparam Strategy strategy, a clipping strategy which should implement the methods "clip_segment" and "apply"
-*/
-template
-<
- typename OutputLinestring,
- typename OutputIterator,
- typename Range,
- typename RobustPolicy,
- typename Box,
- typename Strategy
->
-OutputIterator clip_range_with_box(Box const& b, Range const& range,
- RobustPolicy const&,
- OutputIterator out, Strategy const& strategy)
-{
- if (boost::begin(range) == boost::end(range))
- {
- return out;
- }
-
- typedef typename point_type<OutputLinestring>::type point_type;
-
- OutputLinestring line_out;
-
- typedef typename boost::range_iterator<Range const>::type iterator_type;
- iterator_type vertex = boost::begin(range);
- for(iterator_type previous = vertex++;
- vertex != boost::end(range);
- ++previous, ++vertex)
- {
- point_type p1, p2;
- geometry::convert(*previous, p1);
- geometry::convert(*vertex, p2);
-
- // Clip the segment. Five situations:
- // 1. Segment is invisible, finish line if any (shouldn't occur)
- // 2. Segment is completely visible. Add (p1)-p2 to line
- // 3. Point 1 is invisible (clipped), point 2 is visible. Start new line from p1-p2...
- // 4. Point 1 is visible, point 2 is invisible (clipped). End the line with ...p2
- // 5. Point 1 and point 2 are both invisible (clipped). Start/finish an independant line p1-p2
- //
- // This results in:
- // a. if p1 is clipped, start new line
- // b. if segment is partly or completely visible, add the segment
- // c. if p2 is clipped, end the line
-
- bool c1 = false;
- bool c2 = false;
- model::referring_segment<point_type> s(p1, p2);
-
- if (!strategy.clip_segment(b, s, c1, c2))
- {
- strategy.apply(line_out, out);
- }
- else
- {
- // a. If necessary, finish the line and add a start a new one
- if (c1)
- {
- strategy.apply(line_out, out);
- }
-
- // b. Add p1 only if it is the first point, then add p2
- if (boost::empty(line_out))
- {
- detail::overlay::append_no_duplicates(line_out, p1, true);
- }
- detail::overlay::append_no_duplicates(line_out, p2);
-
- // c. If c2 is clipped, finish the line
- if (c2)
- {
- strategy.apply(line_out, out);
- }
- }
-
- }
-
- // Add last part
- strategy.apply(line_out, out);
- return out;
-}
-
-}} // namespace detail::intersection
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CLIP_LINESTRING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/cluster_info.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/cluster_info.hpp
deleted file mode 100644
index 19343488f36..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/cluster_info.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2016 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CLUSTER_INFO_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CLUSTER_INFO_HPP
-
-
-#include <set>
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-struct cluster_info
-{
- std::set<signed_size_type> turn_indices;
-
- //! Number of open spaces (e.g. 2 for touch)
- std::size_t open_count;
-
- inline cluster_info()
- : open_count(0)
- {}
-};
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CLUSTER_INFO_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/convert_ring.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/convert_ring.hpp
deleted file mode 100644
index 51955b515d1..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/convert_ring.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CONVERT_RING_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CONVERT_RING_HPP
-
-
-#include <boost/mpl/assert.hpp>
-#include <boost/range.hpp>
-#include <boost/range/algorithm/reverse.hpp>
-
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/algorithms/detail/ring_identifier.hpp>
-
-#include <boost/geometry/algorithms/convert.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-template<typename Tag>
-struct convert_ring
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TAG
- , (types<Tag>)
- );
-};
-
-template<>
-struct convert_ring<ring_tag>
-{
- template<typename Destination, typename Source>
- static inline void apply(Destination& destination, Source const& source,
- bool append, bool reverse)
- {
- if (! append)
- {
- geometry::convert(source, destination);
- if (reverse)
- {
- boost::reverse(destination);
- }
- }
- }
-};
-
-
-template<>
-struct convert_ring<polygon_tag>
-{
- template<typename Destination, typename Source>
- static inline void apply(Destination& destination, Source const& source,
- bool append, bool reverse)
- {
- if (! append)
- {
- geometry::convert(source, exterior_ring(destination));
- if (reverse)
- {
- boost::reverse(exterior_ring(destination));
- }
- }
- else
- {
- // Avoid adding interior rings which are invalid
- // because of its number of points:
- std::size_t const min_num_points
- = core_detail::closure::minimum_ring_size
- <
- geometry::closure<Destination>::value
- >::value;
-
- if (geometry::num_points(source) >= min_num_points)
- {
- interior_rings(destination).resize(
- interior_rings(destination).size() + 1);
- geometry::convert(source, interior_rings(destination).back());
- if (reverse)
- {
- boost::reverse(interior_rings(destination).back());
- }
- }
- }
- }
-};
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_CONVERT_RING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp
deleted file mode 100644
index 0e9bfe2ea03..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp
+++ /dev/null
@@ -1,400 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP
-
-
-#include <boost/array.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/util/range.hpp>
-#include <boost/geometry/iterators/ever_circling_iterator.hpp>
-#include <boost/geometry/views/closeable_view.hpp>
-#include <boost/geometry/views/reversible_view.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace copy_segments
-{
-
-
-template <typename Range, bool Reverse, typename SegmentIdentifier, typename PointOut>
-struct copy_segment_point_range
-{
- static inline bool apply(Range const& range,
- SegmentIdentifier const& seg_id, int offset,
- PointOut& point)
- {
- typedef typename closeable_view
- <
- Range const,
- closure<Range>::value
- >::type cview_type;
-
- typedef typename reversible_view
- <
- cview_type const,
- Reverse ? iterate_reverse : iterate_forward
- >::type rview_type;
-
- cview_type cview(range);
- rview_type view(cview);
-
- typedef typename boost::range_iterator<rview_type>::type iterator;
- geometry::ever_circling_iterator<iterator> it(boost::begin(view), boost::end(view),
- boost::begin(view) + seg_id.segment_index, true);
-
- for (signed_size_type i = 0; i < offset; ++i, ++it)
- {
- }
-
- geometry::convert(*it, point);
- return true;
- }
-};
-
-
-template <typename Polygon, bool Reverse, typename SegmentIdentifier, typename PointOut>
-struct copy_segment_point_polygon
-{
- static inline bool apply(Polygon const& polygon,
- SegmentIdentifier const& seg_id, int offset,
- PointOut& point)
- {
- // Call ring-version with the right ring
- return copy_segment_point_range
- <
- typename geometry::ring_type<Polygon>::type,
- Reverse,
- SegmentIdentifier,
- PointOut
- >::apply
- (
- seg_id.ring_index < 0
- ? geometry::exterior_ring(polygon)
- : range::at(geometry::interior_rings(polygon), seg_id.ring_index),
- seg_id, offset,
- point
- );
- }
-};
-
-
-template <typename Box, bool Reverse, typename SegmentIdentifier, typename PointOut>
-struct copy_segment_point_box
-{
- static inline bool apply(Box const& box,
- SegmentIdentifier const& seg_id, int offset,
- PointOut& point)
- {
- signed_size_type index = seg_id.segment_index;
- for (int i = 0; i < offset; i++)
- {
- index++;
- }
-
- boost::array<typename point_type<Box>::type, 4> bp;
- assign_box_corners_oriented<Reverse>(box, bp);
- point = bp[index % 4];
- return true;
- }
-};
-
-
-template
-<
- typename MultiGeometry,
- typename SegmentIdentifier,
- typename PointOut,
- typename Policy
->
-struct copy_segment_point_multi
-{
- static inline bool apply(MultiGeometry const& multi,
- SegmentIdentifier const& seg_id, int offset,
- PointOut& point)
- {
-
- BOOST_GEOMETRY_ASSERT
- (
- seg_id.multi_index >= 0
- && seg_id.multi_index < int(boost::size(multi))
- );
-
- // Call the single-version
- return Policy::apply(range::at(multi, seg_id.multi_index), seg_id, offset, point);
- }
-};
-
-
-}} // namespace detail::copy_segments
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Tag,
- typename GeometryIn,
- bool Reverse,
- typename SegmentIdentifier,
- typename PointOut
->
-struct copy_segment_point
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<GeometryIn>)
- );
-};
-
-
-template <typename LineString, bool Reverse, typename SegmentIdentifier, typename PointOut>
-struct copy_segment_point<linestring_tag, LineString, Reverse, SegmentIdentifier, PointOut>
- : detail::copy_segments::copy_segment_point_range
- <
- LineString, Reverse, SegmentIdentifier, PointOut
- >
-{};
-
-
-template <typename Ring, bool Reverse, typename SegmentIdentifier, typename PointOut>
-struct copy_segment_point<ring_tag, Ring, Reverse, SegmentIdentifier, PointOut>
- : detail::copy_segments::copy_segment_point_range
- <
- Ring, Reverse, SegmentIdentifier, PointOut
- >
-{};
-
-template <typename Polygon, bool Reverse, typename SegmentIdentifier, typename PointOut>
-struct copy_segment_point<polygon_tag, Polygon, Reverse, SegmentIdentifier, PointOut>
- : detail::copy_segments::copy_segment_point_polygon
- <
- Polygon, Reverse, SegmentIdentifier, PointOut
- >
-{};
-
-
-template <typename Box, bool Reverse, typename SegmentIdentifier, typename PointOut>
-struct copy_segment_point<box_tag, Box, Reverse, SegmentIdentifier, PointOut>
- : detail::copy_segments::copy_segment_point_box
- <
- Box, Reverse, SegmentIdentifier, PointOut
- >
-{};
-
-
-template
-<
- typename MultiGeometry,
- bool Reverse,
- typename SegmentIdentifier,
- typename PointOut
->
-struct copy_segment_point
- <
- multi_polygon_tag,
- MultiGeometry,
- Reverse,
- SegmentIdentifier,
- PointOut
- >
- : detail::copy_segments::copy_segment_point_multi
- <
- MultiGeometry,
- SegmentIdentifier,
- PointOut,
- detail::copy_segments::copy_segment_point_polygon
- <
- typename boost::range_value<MultiGeometry>::type,
- Reverse,
- SegmentIdentifier,
- PointOut
- >
- >
-{};
-
-template
-<
- typename MultiGeometry,
- bool Reverse,
- typename SegmentIdentifier,
- typename PointOut
->
-struct copy_segment_point
- <
- multi_linestring_tag,
- MultiGeometry,
- Reverse,
- SegmentIdentifier,
- PointOut
- >
- : detail::copy_segments::copy_segment_point_multi
- <
- MultiGeometry,
- SegmentIdentifier,
- PointOut,
- detail::copy_segments::copy_segment_point_range
- <
- typename boost::range_value<MultiGeometry>::type,
- Reverse,
- SegmentIdentifier,
- PointOut
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-
-
-/*!
- \brief Helper function, copies a point from a segment
- \ingroup overlay
- */
-template<bool Reverse, typename Geometry, typename SegmentIdentifier, typename PointOut>
-inline bool copy_segment_point(Geometry const& geometry,
- SegmentIdentifier const& seg_id, int offset,
- PointOut& point_out)
-{
- concepts::check<Geometry const>();
-
- return dispatch::copy_segment_point
- <
- typename tag<Geometry>::type,
- Geometry,
- Reverse,
- SegmentIdentifier,
- PointOut
- >::apply(geometry, seg_id, offset, point_out);
-}
-
-
-/*!
- \brief Helper function, to avoid the same construct several times,
- copies a point, based on a source-index and two geometries
- \ingroup overlay
- */
-template
-<
- bool Reverse1, bool Reverse2,
- typename Geometry1, typename Geometry2,
- typename SegmentIdentifier,
- typename PointOut
->
-inline bool copy_segment_point(Geometry1 const& geometry1, Geometry2 const& geometry2,
- SegmentIdentifier const& seg_id, int offset,
- PointOut& point_out)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- BOOST_GEOMETRY_ASSERT(seg_id.source_index == 0 || seg_id.source_index == 1);
-
- if (seg_id.source_index == 0)
- {
- return dispatch::copy_segment_point
- <
- typename tag<Geometry1>::type,
- Geometry1,
- Reverse1,
- SegmentIdentifier,
- PointOut
- >::apply(geometry1, seg_id, offset, point_out);
- }
- else if (seg_id.source_index == 1)
- {
- return dispatch::copy_segment_point
- <
- typename tag<Geometry2>::type,
- Geometry2,
- Reverse2,
- SegmentIdentifier,
- PointOut
- >::apply(geometry2, seg_id, offset, point_out);
- }
- // Exception?
- return false;
-}
-
-
-/*!
- \brief Helper function, to avoid the same construct several times,
- copies a point, based on a source-index and two geometries
- \ingroup overlay
- */
-template
-<
- bool Reverse1, bool Reverse2,
- typename Geometry1, typename Geometry2,
- typename SegmentIdentifier,
- typename PointOut
->
-inline bool copy_segment_points(Geometry1 const& geometry1, Geometry2 const& geometry2,
- SegmentIdentifier const& seg_id,
- PointOut& point1, PointOut& point2)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- return copy_segment_point<Reverse1, Reverse2>(geometry1, geometry2, seg_id, 0, point1)
- && copy_segment_point<Reverse1, Reverse2>(geometry1, geometry2, seg_id, 1, point2);
-}
-
-/*!
- \brief Helper function, copies three points: two from the specified segment
- (from, to) and the next one
- \ingroup overlay
- */
-template
-<
- bool Reverse1, bool Reverse2,
- typename Geometry1, typename Geometry2,
- typename SegmentIdentifier,
- typename PointOut
->
-inline bool copy_segment_points(Geometry1 const& geometry1, Geometry2 const& geometry2,
- SegmentIdentifier const& seg_id,
- PointOut& point1, PointOut& point2, PointOut& point3)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- return copy_segment_point<Reverse1, Reverse2>(geometry1, geometry2, seg_id, 0, point1)
- && copy_segment_point<Reverse1, Reverse2>(geometry1, geometry2, seg_id, 1, point2)
- && copy_segment_point<Reverse1, Reverse2>(geometry1, geometry2, seg_id, 2, point3);
-}
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp
deleted file mode 100644
index c6f540a9788..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/copy_segments.hpp
+++ /dev/null
@@ -1,383 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP
-
-
-#include <vector>
-
-#include <boost/array.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/iterators/ever_circling_iterator.hpp>
-#include <boost/geometry/views/closeable_view.hpp>
-#include <boost/geometry/views/reversible_view.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp>
-#include <boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp>
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-
-#include <boost/geometry/util/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace copy_segments
-{
-
-
-template <bool Reverse>
-struct copy_segments_ring
-{
- template
- <
- typename Ring,
- typename SegmentIdentifier,
- typename SideStrategy,
- typename RobustPolicy,
- typename RangeOut
- >
- static inline void apply(Ring const& ring,
- SegmentIdentifier const& seg_id,
- signed_size_type to_index,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy,
- RangeOut& current_output)
- {
- typedef typename closeable_view
- <
- Ring const,
- closure<Ring>::value
- >::type cview_type;
-
- typedef typename reversible_view
- <
- cview_type const,
- Reverse ? iterate_reverse : iterate_forward
- >::type rview_type;
-
- typedef typename boost::range_iterator<rview_type const>::type iterator;
- typedef geometry::ever_circling_iterator<iterator> ec_iterator;
-
-
- cview_type cview(ring);
- rview_type view(cview);
-
- // The problem: sometimes we want to from "3" to "2"
- // -> end = "3" -> end == begin
- // This is not convenient with iterators.
-
- // So we use the ever-circling iterator and determine when to step out
-
- signed_size_type const from_index = seg_id.segment_index + 1;
-
- // Sanity check
- BOOST_GEOMETRY_ASSERT(from_index < static_cast<signed_size_type>(boost::size(view)));
-
- ec_iterator it(boost::begin(view), boost::end(view),
- boost::begin(view) + from_index);
-
- // [2..4] -> 4 - 2 + 1 = 3 -> {2,3,4} -> OK
- // [4..2],size=6 -> 6 - 4 + 2 + 1 = 5 -> {4,5,0,1,2} -> OK
- // [1..1], travel the whole ring round
- signed_size_type const count = from_index <= to_index
- ? to_index - from_index + 1
- : static_cast<signed_size_type>(boost::size(view))
- - from_index + to_index + 1;
-
- for (signed_size_type i = 0; i < count; ++i, ++it)
- {
- detail::overlay::append_no_dups_or_spikes(current_output, *it, strategy, robust_policy);
- }
- }
-};
-
-template <bool Reverse, bool RemoveSpikes = true>
-class copy_segments_linestring
-{
-private:
- // remove spikes
- template <typename RangeOut, typename Point, typename SideStrategy, typename RobustPolicy>
- static inline void append_to_output(RangeOut& current_output,
- Point const& point,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy,
- boost::true_type const&)
- {
- detail::overlay::append_no_dups_or_spikes(current_output, point,
- strategy,
- robust_policy);
- }
-
- // keep spikes
- template <typename RangeOut, typename Point, typename SideStrategy, typename RobustPolicy>
- static inline void append_to_output(RangeOut& current_output,
- Point const& point,
- SideStrategy const&,
- RobustPolicy const&,
- boost::false_type const&)
- {
- detail::overlay::append_no_duplicates(current_output, point);
- }
-
-public:
- template
- <
- typename LineString,
- typename SegmentIdentifier,
- typename SideStrategy,
- typename RobustPolicy,
- typename RangeOut
- >
- static inline void apply(LineString const& ls,
- SegmentIdentifier const& seg_id,
- signed_size_type to_index,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy,
- RangeOut& current_output)
- {
- signed_size_type const from_index = seg_id.segment_index + 1;
-
- // Sanity check
- if ( from_index > to_index
- || from_index < 0
- || to_index >= static_cast<signed_size_type>(boost::size(ls)) )
- {
- return;
- }
-
- signed_size_type const count = to_index - from_index + 1;
-
- typename boost::range_iterator<LineString const>::type
- it = boost::begin(ls) + from_index;
-
- for (signed_size_type i = 0; i < count; ++i, ++it)
- {
- append_to_output(current_output, *it, strategy, robust_policy,
- boost::integral_constant<bool, RemoveSpikes>());
- }
- }
-};
-
-template <bool Reverse>
-struct copy_segments_polygon
-{
- template
- <
- typename Polygon,
- typename SegmentIdentifier,
- typename SideStrategy,
- typename RobustPolicy,
- typename RangeOut
- >
- static inline void apply(Polygon const& polygon,
- SegmentIdentifier const& seg_id,
- signed_size_type to_index,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy,
- RangeOut& current_output)
- {
- // Call ring-version with the right ring
- copy_segments_ring<Reverse>::apply
- (
- seg_id.ring_index < 0
- ? geometry::exterior_ring(polygon)
- : range::at(geometry::interior_rings(polygon), seg_id.ring_index),
- seg_id, to_index,
- strategy,
- robust_policy,
- current_output
- );
- }
-};
-
-
-template <bool Reverse>
-struct copy_segments_box
-{
- template
- <
- typename Box,
- typename SegmentIdentifier,
- typename SideStrategy,
- typename RobustPolicy,
- typename RangeOut
- >
- static inline void apply(Box const& box,
- SegmentIdentifier const& seg_id,
- signed_size_type to_index,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy,
- RangeOut& current_output)
- {
- signed_size_type index = seg_id.segment_index + 1;
- BOOST_GEOMETRY_ASSERT(index < 5);
-
- signed_size_type const count = index <= to_index
- ? to_index - index + 1
- : 5 - index + to_index + 1;
-
- // Create array of points, the fifth one closes it
- boost::array<typename point_type<Box>::type, 5> bp;
- assign_box_corners_oriented<Reverse>(box, bp);
- bp[4] = bp[0];
-
- // (possibly cyclic) copy to output
- // (see comments in ring-version)
- for (signed_size_type i = 0; i < count; i++, index++)
- {
- detail::overlay::append_no_dups_or_spikes(current_output,
- bp[index % 5], strategy, robust_policy);
-
- }
- }
-};
-
-
-template<typename Policy>
-struct copy_segments_multi
-{
- template
- <
- typename MultiGeometry,
- typename SegmentIdentifier,
- typename SideStrategy,
- typename RobustPolicy,
- typename RangeOut
- >
- static inline void apply(MultiGeometry const& multi_geometry,
- SegmentIdentifier const& seg_id,
- signed_size_type to_index,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy,
- RangeOut& current_output)
- {
-
- BOOST_GEOMETRY_ASSERT
- (
- seg_id.multi_index >= 0
- && static_cast<std::size_t>(seg_id.multi_index) < boost::size(multi_geometry)
- );
-
- // Call the single-version
- Policy::apply(range::at(multi_geometry, seg_id.multi_index),
- seg_id, to_index,
- strategy,
- robust_policy,
- current_output);
- }
-};
-
-
-}} // namespace detail::copy_segments
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Tag,
- bool Reverse
->
-struct copy_segments : not_implemented<Tag>
-{};
-
-
-template <bool Reverse>
-struct copy_segments<ring_tag, Reverse>
- : detail::copy_segments::copy_segments_ring<Reverse>
-{};
-
-
-template <bool Reverse>
-struct copy_segments<linestring_tag, Reverse>
- : detail::copy_segments::copy_segments_linestring<Reverse>
-{};
-
-template <bool Reverse>
-struct copy_segments<polygon_tag, Reverse>
- : detail::copy_segments::copy_segments_polygon<Reverse>
-{};
-
-
-template <bool Reverse>
-struct copy_segments<box_tag, Reverse>
- : detail::copy_segments::copy_segments_box<Reverse>
-{};
-
-
-template<bool Reverse>
-struct copy_segments<multi_polygon_tag, Reverse>
- : detail::copy_segments::copy_segments_multi
- <
- detail::copy_segments::copy_segments_polygon<Reverse>
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
- \brief Copy segments from a geometry, starting with the specified segment (seg_id)
- until the specified index (to_index)
- \ingroup overlay
- */
-template
-<
- bool Reverse,
- typename Geometry,
- typename SegmentIdentifier,
- typename SideStrategy,
- typename RobustPolicy,
- typename RangeOut
->
-inline void copy_segments(Geometry const& geometry,
- SegmentIdentifier const& seg_id,
- signed_size_type to_index,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy,
- RangeOut& range_out)
-{
- concepts::check<Geometry const>();
-
- dispatch::copy_segments
- <
- typename tag<Geometry>::type,
- Reverse
- >::apply(geometry, seg_id, to_index, strategy, robust_policy, range_out);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp
deleted file mode 100644
index 0cc34255cac..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_DEBUG_TURN_INFO_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_DEBUG_TURN_INFO_HPP
-
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/visit_info.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-inline char method_char(detail::overlay::method_type const& method)
-{
- using namespace detail::overlay;
- switch(method)
- {
- case method_none : return '-';
- case method_disjoint : return 'd';
- case method_crosses : return 'i';
- case method_touch : return 't';
- case method_touch_interior : return 'm';
- case method_collinear : return 'c';
- case method_equal : return 'e';
- case method_error : return '!';
- default : return '?';
- }
-}
-
-inline char operation_char(detail::overlay::operation_type const& operation)
-{
- using namespace detail::overlay;
- switch(operation)
- {
- case operation_none : return '-';
- case operation_union : return 'u';
- case operation_intersection : return 'i';
- case operation_blocked : return 'x';
- case operation_continue : return 'c';
- case operation_opposite : return 'o';
- default : return '?';
- }
-}
-
-inline char visited_char(detail::overlay::visit_info const& v)
-{
- if (v.rejected()) return 'R';
- if (v.started()) return 's';
- if (v.visited()) return 'v';
- if (v.none()) return '-';
- if (v.finished()) return 'f';
- return '?';
-}
-
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_DEBUG_TURN_INFO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/do_reverse.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/do_reverse.hpp
deleted file mode 100644
index 15100f8d0b7..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/do_reverse.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_DO_REVERSE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_DO_REVERSE_HPP
-
-#include <boost/geometry/core/point_order.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-// Metafunction helper for intersection and union
-template <order_selector Selector, bool Reverse = false>
-struct do_reverse {};
-
-template <>
-struct do_reverse<clockwise, false> : boost::false_type {};
-
-template <>
-struct do_reverse<clockwise, true> : boost::true_type {};
-
-template <>
-struct do_reverse<counterclockwise, false> : boost::true_type {};
-
-template <>
-struct do_reverse<counterclockwise, true> : boost::false_type {};
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_DO_REVERSE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp
deleted file mode 100644
index a35be052a03..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp
+++ /dev/null
@@ -1,550 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICH_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICH_HPP
-
-#include <cstddef>
-#include <algorithm>
-#include <map>
-#include <set>
-#include <vector>
-
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
-# include <iostream>
-# include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
-# include <boost/geometry/io/wkt/wkt.hpp>
-# if ! defined(BOOST_GEOMETRY_DEBUG_IDENTIFIER)
-# define BOOST_GEOMETRY_DEBUG_IDENTIFIER
- #endif
-#endif
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/ring_identifier.hpp>
-#include <boost/geometry/algorithms/detail/overlay/handle_colocations.hpp>
-#include <boost/geometry/algorithms/detail/overlay/handle_self_turns.hpp>
-#include <boost/geometry/algorithms/detail/overlay/is_self_turn.hpp>
-#include <boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
-#include <boost/geometry/policies/robustness/robust_type.hpp>
-
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
-# include <boost/geometry/algorithms/detail/overlay/check_enrich.hpp>
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-template <typename Turns>
-struct discarded_turn
-{
- discarded_turn(Turns const& turns)
- : m_turns(turns)
- {}
-
- template <typename IndexedTurn>
- inline bool operator()(IndexedTurn const& indexed) const
- {
- return m_turns[indexed.turn_index].discarded;
- }
-
- Turns const& m_turns;
-};
-
-// Sorts IP-s of this ring on segment-identifier, and if on same segment,
-// on distance.
-// Then assigns for each IP which is the next IP on this segment,
-// plus the vertex-index to travel to, plus the next IP
-// (might be on another segment)
-template
-<
- bool Reverse1, bool Reverse2,
- typename Operations,
- typename Turns,
- typename Geometry1, typename Geometry2,
- typename RobustPolicy,
- typename SideStrategy
->
-inline void enrich_sort(Operations& operations,
- Turns const& turns,
- Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- SideStrategy const& strategy)
-{
- std::sort(boost::begin(operations),
- boost::end(operations),
- less_by_segment_ratio
- <
- Turns,
- typename boost::range_value<Operations>::type,
- Geometry1, Geometry2,
- RobustPolicy,
- SideStrategy,
- Reverse1, Reverse2
- >(turns, geometry1, geometry2, robust_policy, strategy));
-}
-
-
-template <typename Operations, typename Turns>
-inline void enrich_assign(Operations& operations, Turns& turns,
- bool check_turns)
-{
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::turn_operation_type op_type;
- typedef typename boost::range_iterator<Operations>::type iterator_type;
-
-
- if (operations.size() > 0)
- {
- // Assign travel-to-vertex/ip index for each turning point.
- // Iterator "next" is circular
-
- geometry::ever_circling_range_iterator<Operations const> next(operations);
- ++next;
-
- for (iterator_type it = boost::begin(operations);
- it != boost::end(operations); ++it)
- {
- turn_type& turn = turns[it->turn_index];
- op_type& op = turn.operations[it->operation_index];
-
- if (check_turns && it->turn_index == next->turn_index)
- {
- // Normal behaviour: next points at next turn, increase next.
- // For dissolve this should not be done, turn_index is often
- // the same for two consecutive operations
- ++next;
- }
-
- // Cluster behaviour: next should point after cluster, unless
- // their seg_ids are not the same
- // (For dissolve, this is still to be examined - TODO)
- while (turn.is_clustered()
- && it->turn_index != next->turn_index
- && turn.cluster_id == turns[next->turn_index].cluster_id
- && op.seg_id == turns[next->turn_index].operations[next->operation_index].seg_id)
- {
- ++next;
- }
-
- turn_type const& next_turn = turns[next->turn_index];
- op_type const& next_op = next_turn.operations[next->operation_index];
-
- op.enriched.travels_to_ip_index
- = static_cast<signed_size_type>(next->turn_index);
- op.enriched.travels_to_vertex_index
- = next->subject->seg_id.segment_index;
-
- if (op.seg_id.segment_index == next_op.seg_id.segment_index
- && op.fraction < next_op.fraction)
- {
- // Next turn is located further on same segment
- // assign next_ip_index
- // (this is one not circular therefore fraction is considered)
- op.enriched.next_ip_index = static_cast<signed_size_type>(next->turn_index);
- }
-
- if (! check_turns)
- {
- ++next;
- }
- }
- }
-
- // DEBUG
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
- {
- for (iterator_type it = boost::begin(operations);
- it != boost::end(operations);
- ++it)
- {
- op_type const& op = turns[it->turn_index]
- .operations[it->operation_index];
-
- std::cout << it->turn_index
- << " cl=" << turns[it->turn_index].cluster_id
- << " meth=" << method_char(turns[it->turn_index].method)
- << " seg=" << op.seg_id
- << " dst=" << op.fraction // needs define
- << " op=" << operation_char(turns[it->turn_index].operations[0].operation)
- << operation_char(turns[it->turn_index].operations[1].operation)
- << " (" << operation_char(op.operation) << ")"
- << " nxt=" << op.enriched.next_ip_index
- << " / " << op.enriched.travels_to_ip_index
- << " [vx " << op.enriched.travels_to_vertex_index << "]"
- << std::boolalpha << turns[it->turn_index].discarded
- << std::endl;
- ;
- }
- }
-#endif
- // END DEBUG
-
-}
-
-template <typename Operations, typename Turns>
-inline void enrich_adapt(Operations& operations, Turns& turns)
-{
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::turn_operation_type op_type;
- typedef typename boost::range_value<Operations>::type indexed_turn_type;
-
- if (operations.size() < 3)
- {
- // If it is empty, or contains one or two turns, it makes no sense
- return;
- }
-
- // Operations is a vector of indexed_turn_operation<>
-
- // Last index:
- std::size_t const x = operations.size() - 1;
- bool next_phase = false;
-
- for (std::size_t i = 0; i < operations.size(); i++)
- {
- indexed_turn_type const& indexed = operations[i];
-
- turn_type& turn = turns[indexed.turn_index];
- op_type& op = turn.operations[indexed.operation_index];
-
- // Previous/next index
- std::size_t const p = i > 0 ? i - 1 : x;
- std::size_t const n = i < x ? i + 1 : 0;
-
- turn_type const& next_turn = turns[operations[n].turn_index];
- op_type const& next_op = next_turn.operations[operations[n].operation_index];
-
- if (op.seg_id.segment_index == next_op.seg_id.segment_index)
- {
- turn_type const& prev_turn = turns[operations[p].turn_index];
- op_type const& prev_op = prev_turn.operations[operations[p].operation_index];
- if (op.seg_id.segment_index == prev_op.seg_id.segment_index)
- {
- op.enriched.startable = false;
- next_phase = true;
- }
- }
- }
-
- if (! next_phase)
- {
- return;
- }
-
- // Discard turns which are both non-startable
- next_phase = false;
- for (typename boost::range_iterator<Turns>::type
- it = boost::begin(turns);
- it != boost::end(turns);
- ++it)
- {
- turn_type& turn = *it;
- if (! turn.operations[0].enriched.startable
- && ! turn.operations[1].enriched.startable)
- {
- turn.discarded = true;
- next_phase = true;
- }
- }
-
- if (! next_phase)
- {
- return;
- }
-
- // Remove discarded turns from operations to avoid having them as next turn
- discarded_turn<Turns> const predicate(turns);
- operations.erase(std::remove_if(boost::begin(operations),
- boost::end(operations), predicate), boost::end(operations));
-}
-
-template <typename Turns, typename MappedVector>
-inline void create_map(Turns const& turns, MappedVector& mapped_vector)
-{
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::container_type container_type;
- typedef typename MappedVector::mapped_type mapped_type;
- typedef typename boost::range_value<mapped_type>::type indexed_type;
-
- std::size_t index = 0;
- for (typename boost::range_iterator<Turns const>::type
- it = boost::begin(turns);
- it != boost::end(turns);
- ++it, ++index)
- {
- // Add all (non discarded) operations on this ring
- // Blocked operations or uu on clusters (for intersection)
- // should be included, to block potential paths in clusters
- turn_type const& turn = *it;
- if (turn.discarded)
- {
- continue;
- }
-
- std::size_t op_index = 0;
- for (typename boost::range_iterator<container_type const>::type
- op_it = boost::begin(turn.operations);
- op_it != boost::end(turn.operations);
- ++op_it, ++op_index)
- {
- ring_identifier const ring_id
- (
- op_it->seg_id.source_index,
- op_it->seg_id.multi_index,
- op_it->seg_id.ring_index
- );
- mapped_vector[ring_id].push_back
- (
- indexed_type(index, op_index, *op_it,
- it->operations[1 - op_index].seg_id)
- );
- }
- }
-}
-
-template <typename Point1, typename Point2>
-inline typename geometry::coordinate_type<Point1>::type
- distance_measure(Point1 const& a, Point2 const& b)
-{
- // TODO: use comparable distance for point-point instead - but that
- // causes currently cycling include problems
- typedef typename geometry::coordinate_type<Point1>::type ctype;
- ctype const dx = get<0>(a) - get<0>(b);
- ctype const dy = get<1>(a) - get<1>(b);
- return dx * dx + dy * dy;
-}
-
-template <typename Turns>
-inline void calculate_remaining_distance(Turns& turns)
-{
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::turn_operation_type op_type;
-
- for (typename boost::range_iterator<Turns>::type
- it = boost::begin(turns);
- it != boost::end(turns);
- ++it)
- {
- turn_type& turn = *it;
-
- op_type& op0 = turn.operations[0];
- op_type& op1 = turn.operations[1];
-
- if (op0.remaining_distance != 0
- || op1.remaining_distance != 0)
- {
- continue;
- }
-
- signed_size_type const to_index0 = op0.enriched.get_next_turn_index();
- signed_size_type const to_index1 = op1.enriched.get_next_turn_index();
- if (to_index0 >= 0
- && to_index1 >= 0
- && to_index0 != to_index1)
- {
- op0.remaining_distance = distance_measure(turn.point, turns[to_index0].point);
- op1.remaining_distance = distance_measure(turn.point, turns[to_index1].point);
- }
- }
-}
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-
-/*!
-\brief All intersection points are enriched with successor information
-\ingroup overlay
-\tparam Turns type of intersection container
- (e.g. vector of "intersection/turn point"'s)
-\tparam Clusters type of cluster container
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam SideStrategy side strategy type
-\param turns container containing intersection points
-\param clusters container containing clusters
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param robust_policy policy to handle robustness issues
-\param strategy strategy
- */
-template
-<
- bool Reverse1, bool Reverse2,
- overlay_type OverlayType,
- typename Turns,
- typename Clusters,
- typename Geometry1, typename Geometry2,
- typename RobustPolicy,
- typename SideStrategy
->
-inline void enrich_intersection_points(Turns& turns,
- Clusters& clusters,
- Geometry1 const& geometry1, Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- SideStrategy const& strategy)
-{
- static const detail::overlay::operation_type target_operation
- = detail::overlay::operation_from_overlay<OverlayType>::value;
- static const detail::overlay::operation_type opposite_operation
- = target_operation == detail::overlay::operation_union
- ? detail::overlay::operation_intersection
- : detail::overlay::operation_union;
- static const bool is_dissolve = OverlayType == overlay_dissolve;
-
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::turn_operation_type op_type;
- typedef detail::overlay::indexed_turn_operation
- <
- op_type
- > indexed_turn_operation;
-
- typedef std::map
- <
- ring_identifier,
- std::vector<indexed_turn_operation>
- > mapped_vector_type;
-
- bool has_cc = false;
- bool const has_colocations
- = detail::overlay::handle_colocations<Reverse1, Reverse2, OverlayType>(turns,
- clusters, geometry1, geometry2);
-
- // Discard turns not part of target overlay
- for (typename boost::range_iterator<Turns>::type
- it = boost::begin(turns);
- it != boost::end(turns);
- ++it)
- {
- turn_type& turn = *it;
-
- if (turn.both(detail::overlay::operation_none)
- || turn.both(opposite_operation)
- || (detail::overlay::is_self_turn<OverlayType>(turn)
- && ! turn.is_clustered()
- && ! turn.both(target_operation)))
- {
- // For intersections, remove uu to avoid the need to travel
- // a union (during intersection) in uu/cc clusters (e.g. #31,#32,#33)
-
- // Similarly, for union, discard ii
-
- // Only keep self-uu-turns or self-ii-turns
-
- // Blocked (or combination with blocked is still needed for difference)
- turn.discarded = true;
- turn.cluster_id = -1;
- continue;
- }
-
- if (! turn.discarded
- && turn.both(detail::overlay::operation_continue))
- {
- has_cc = true;
- }
- }
-
- if (! is_dissolve)
- {
- detail::overlay::discard_closed_turns
- <
- OverlayType,
- target_operation
- >::apply(turns, clusters, geometry1, geometry2);
- detail::overlay::discard_open_turns
- <
- OverlayType,
- target_operation
- >::apply(turns, clusters, geometry1, geometry2);
- }
-
- // Create a map of vectors of indexed operation-types to be able
- // to sort intersection points PER RING
- mapped_vector_type mapped_vector;
-
- detail::overlay::create_map(turns, mapped_vector);
-
- // No const-iterator; contents of mapped copy is temporary,
- // and changed by enrich
- for (typename mapped_vector_type::iterator mit
- = mapped_vector.begin();
- mit != mapped_vector.end();
- ++mit)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
- std::cout << "ENRICH-sort Ring "
- << mit->first << std::endl;
-#endif
- detail::overlay::enrich_sort<Reverse1, Reverse2>(
- mit->second, turns,
- geometry1, geometry2,
- robust_policy, strategy);
- }
-
- for (typename mapped_vector_type::iterator mit
- = mapped_vector.begin();
- mit != mapped_vector.end();
- ++mit)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
- std::cout << "ENRICH-assign Ring "
- << mit->first << std::endl;
-#endif
- if (is_dissolve)
- {
- detail::overlay::enrich_adapt(mit->second, turns);
- }
-
- detail::overlay::enrich_assign(mit->second, turns, ! is_dissolve);
- }
-
- if (has_colocations)
- {
- // First gather cluster properties (using even clusters with
- // discarded turns - for open turns), then clean up clusters
- detail::overlay::gather_cluster_properties
- <
- Reverse1,
- Reverse2,
- OverlayType
- >(clusters, turns, target_operation,
- geometry1, geometry2, strategy);
-
- detail::overlay::cleanup_clusters(turns, clusters);
- }
-
- if (has_cc)
- {
- detail::overlay::calculate_remaining_distance(turns);
- }
-
-#ifdef BOOST_GEOMETRY_DEBUG_ENRICH
- //detail::overlay::check_graph(turns, for_operation);
-#endif
-
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp
deleted file mode 100644
index e01c13f7490..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICHMENT_INFO_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICHMENT_INFO_HPP
-
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-/*!
-\brief Keeps info to enrich intersection info (per source)
-\details Class to keep information necessary for traversal phase (a phase
- of the overlay process). The information is gathered during the
- enrichment phase
- */
-template<typename Point>
-struct enrichment_info
-{
- inline enrichment_info()
- : travels_to_vertex_index(-1)
- , travels_to_ip_index(-1)
- , next_ip_index(-1)
- , startable(true)
- , prefer_start(true)
- , count_left(0)
- , count_right(0)
- , rank(-1)
- , zone(-1)
- , region_id(-1)
- , isolated(false)
- {}
-
- inline signed_size_type get_next_turn_index() const
- {
- return next_ip_index == -1 ? travels_to_ip_index : next_ip_index;
- }
-
- // vertex to which is free travel after this IP,
- // so from "segment_index+1" to "travels_to_vertex_index", without IP-s,
- // can be -1
- signed_size_type travels_to_vertex_index;
-
- // same but now IP index, so "next IP index" but not on THIS segment
- signed_size_type travels_to_ip_index;
-
- // index of next IP on this segment, -1 if there is no one
- signed_size_type next_ip_index;
-
- bool startable; // Can be used to start in traverse
- bool prefer_start; // Is preferred as starting point (if true)
-
- // Counts if polygons left/right of this operation
- std::size_t count_left;
- std::size_t count_right;
- signed_size_type rank; // in cluster
- signed_size_type zone; // open zone, in cluster
- signed_size_type region_id;
- bool isolated;
-};
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_ENRICHMENT_INFO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/follow.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/follow.hpp
deleted file mode 100644
index 7793ca8eceb..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/follow.hpp
+++ /dev/null
@@ -1,528 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-#ifdef __GNUC__
-#pragma GCC system_header
-#endif
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_HPP
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-#include <boost/mpl/assert.hpp>
-
-#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-#include <boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp>
-#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-
-#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/algorithms/clear.hpp>
-#include <boost/geometry/algorithms/detail/relate/turns.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-namespace following
-{
-
-template <typename Turn, typename Operation>
-static inline bool is_entering(Turn const& /* TODO remove this parameter */, Operation const& op)
-{
- // (Blocked means: blocked for polygon/polygon intersection, because
- // they are reversed. But for polygon/line it is similar to continue)
- return op.operation == operation_intersection
- || op.operation == operation_continue
- || op.operation == operation_blocked
- ;
-}
-
-template
-<
- typename Turn,
- typename Operation,
- typename LineString,
- typename Polygon,
- typename PtInPolyStrategy
->
-static inline bool last_covered_by(Turn const& /*turn*/, Operation const& op,
- LineString const& linestring, Polygon const& polygon,
- PtInPolyStrategy const& strategy)
-{
- return geometry::covered_by(range::at(linestring, op.seg_id.segment_index), polygon, strategy);
-}
-
-
-template
-<
- typename Turn,
- typename Operation,
- typename LineString,
- typename Polygon,
- typename PtInPolyStrategy
->
-static inline bool is_leaving(Turn const& turn, Operation const& op,
- bool entered, bool first,
- LineString const& linestring, Polygon const& polygon,
- PtInPolyStrategy const& strategy)
-{
- if (op.operation == operation_union)
- {
- return entered
- || turn.method == method_crosses
- || (first && last_covered_by(turn, op, linestring, polygon, strategy))
- ;
- }
- return false;
-}
-
-
-template
-<
- typename Turn,
- typename Operation,
- typename LineString,
- typename Polygon,
- typename PtInPolyStrategy
->
-static inline bool is_staying_inside(Turn const& turn, Operation const& op,
- bool entered, bool first,
- LineString const& linestring, Polygon const& polygon,
- PtInPolyStrategy const& strategy)
-{
- if (turn.method == method_crosses)
- {
- // The normal case, this is completely covered with entering/leaving
- // so stay out of this time consuming "covered_by"
- return false;
- }
-
- if (is_entering(turn, op))
- {
- return entered || (first && last_covered_by(turn, op, linestring, polygon, strategy));
- }
-
- return false;
-}
-
-template
-<
- typename Turn,
- typename Operation,
- typename Linestring,
- typename Polygon,
- typename PtInPolyStrategy
->
-static inline bool was_entered(Turn const& turn, Operation const& op, bool first,
- Linestring const& linestring, Polygon const& polygon,
- PtInPolyStrategy const& strategy)
-{
- if (first && (turn.method == method_collinear || turn.method == method_equal))
- {
- return last_covered_by(turn, op, linestring, polygon, strategy);
- }
- return false;
-}
-
-
-// Template specialization structure to call the right actions for the right type
-template <overlay_type OverlayType, bool RemoveSpikes = true>
-struct action_selector
-{
- // If you get here the overlay type is not intersection or difference
- // BOOST_MPL_ASSERT(false);
-};
-
-// Specialization for intersection, containing the implementation
-template <bool RemoveSpikes>
-struct action_selector<overlay_intersection, RemoveSpikes>
-{
- template
- <
- typename OutputIterator,
- typename LineStringOut,
- typename LineString,
- typename Point,
- typename Operation,
- typename SideStrategy,
- typename RobustPolicy
- >
- static inline void enter(LineStringOut& current_piece,
- LineString const& ,
- segment_identifier& segment_id,
- signed_size_type , Point const& point,
- Operation const& operation,
- SideStrategy const& ,
- RobustPolicy const& ,
- OutputIterator& )
- {
- // On enter, append the intersection point and remember starting point
- // TODO: we don't check on spikes for linestrings (?). Consider this.
- detail::overlay::append_no_duplicates(current_piece, point);
- segment_id = operation.seg_id;
- }
-
- template
- <
- typename OutputIterator,
- typename LineStringOut,
- typename LineString,
- typename Point,
- typename Operation,
- typename SideStrategy,
- typename RobustPolicy
- >
- static inline void leave(LineStringOut& current_piece,
- LineString const& linestring,
- segment_identifier& segment_id,
- signed_size_type index, Point const& point,
- Operation const& ,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy,
- OutputIterator& out)
- {
- // On leave, copy all segments from starting point, append the intersection point
- // and add the output piece
- detail::copy_segments::copy_segments_linestring
- <
- false, RemoveSpikes
- >::apply(linestring, segment_id, index, strategy, robust_policy, current_piece);
- detail::overlay::append_no_duplicates(current_piece, point);
- if (::boost::size(current_piece) > 1)
- {
- *out++ = current_piece;
- }
-
- geometry::clear(current_piece);
- }
-
- template
- <
- typename OutputIterator,
- typename LineStringOut,
- typename LineString,
- typename Point,
- typename Operation
- >
- static inline void isolated_point(LineStringOut&,
- LineString const&,
- segment_identifier&,
- signed_size_type, Point const& point,
- Operation const& , OutputIterator& out)
- {
- LineStringOut isolated_point_ls;
- geometry::append(isolated_point_ls, point);
-
-#ifndef BOOST_GEOMETRY_ALLOW_ONE_POINT_LINESTRINGS
- geometry::append(isolated_point_ls, point);
-#endif // BOOST_GEOMETRY_ALLOW_ONE_POINT_LINESTRINGS
-
- *out++ = isolated_point_ls;
- }
-
- static inline bool is_entered(bool entered)
- {
- return entered;
- }
-
- static inline bool included(int inside_value)
- {
- return inside_value >= 0; // covered_by
- }
-
-};
-
-// Specialization for difference, which reverses these actions
-template <bool RemoveSpikes>
-struct action_selector<overlay_difference, RemoveSpikes>
-{
- typedef action_selector<overlay_intersection, RemoveSpikes> normal_action;
-
- template
- <
- typename OutputIterator,
- typename LineStringOut,
- typename LineString,
- typename Point,
- typename Operation,
- typename SideStrategy,
- typename RobustPolicy
- >
- static inline void enter(LineStringOut& current_piece,
- LineString const& linestring,
- segment_identifier& segment_id,
- signed_size_type index, Point const& point,
- Operation const& operation,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy,
- OutputIterator& out)
- {
- normal_action::leave(current_piece, linestring, segment_id, index,
- point, operation, strategy, robust_policy, out);
- }
-
- template
- <
- typename OutputIterator,
- typename LineStringOut,
- typename LineString,
- typename Point,
- typename Operation,
- typename SideStrategy,
- typename RobustPolicy
- >
- static inline void leave(LineStringOut& current_piece,
- LineString const& linestring,
- segment_identifier& segment_id,
- signed_size_type index, Point const& point,
- Operation const& operation,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy,
- OutputIterator& out)
- {
- normal_action::enter(current_piece, linestring, segment_id, index,
- point, operation, strategy, robust_policy, out);
- }
-
- template
- <
- typename OutputIterator,
- typename LineStringOut,
- typename LineString,
- typename Point,
- typename Operation
- >
- static inline void isolated_point(LineStringOut&,
- LineString const&,
- segment_identifier&,
- signed_size_type, Point const&,
- Operation const&, OutputIterator&)
- {
- }
-
- static inline bool is_entered(bool entered)
- {
- return ! normal_action::is_entered(entered);
- }
-
- static inline bool included(int inside_value)
- {
- return ! normal_action::included(inside_value);
- }
-
-};
-
-}
-
-/*!
-\brief Follows a linestring from intersection point to intersection point, outputting which
- is inside, or outside, a ring or polygon
-\ingroup overlay
- */
-template
-<
- typename LineStringOut,
- typename LineString,
- typename Polygon,
- overlay_type OverlayType,
- bool RemoveSpikes = true
->
-class follow
-{
-
-#ifdef BOOST_GEOMETRY_SETOPS_LA_OLD_BEHAVIOR
- template <typename Turn>
- struct sort_on_segment
- {
- // In case of turn point at the same location, we want to have continue/blocked LAST
- // because that should be followed (intersection) or skipped (difference).
- inline int operation_order(Turn const& turn) const
- {
- operation_type const& operation = turn.operations[0].operation;
- switch(operation)
- {
- case operation_opposite : return 0;
- case operation_none : return 0;
- case operation_union : return 1;
- case operation_intersection : return 2;
- case operation_blocked : return 3;
- case operation_continue : return 4;
- }
- return -1;
- };
-
- inline bool use_operation(Turn const& left, Turn const& right) const
- {
- // If they are the same, OK.
- return operation_order(left) < operation_order(right);
- }
-
- inline bool use_distance(Turn const& left, Turn const& right) const
- {
- return left.operations[0].fraction == right.operations[0].fraction
- ? use_operation(left, right)
- : left.operations[0].fraction < right.operations[0].fraction
- ;
- }
-
- inline bool operator()(Turn const& left, Turn const& right) const
- {
- segment_identifier const& sl = left.operations[0].seg_id;
- segment_identifier const& sr = right.operations[0].seg_id;
-
- return sl == sr
- ? use_distance(left, right)
- : sl < sr
- ;
-
- }
- };
-#endif // BOOST_GEOMETRY_SETOPS_LA_OLD_BEHAVIOR
-
-
-public :
-
- static inline bool included(int inside_value)
- {
- return following::action_selector
- <
- OverlayType, RemoveSpikes
- >::included(inside_value);
- }
-
- template
- <
- typename Turns,
- typename OutputIterator,
- typename RobustPolicy,
- typename Strategy
- >
- static inline OutputIterator apply(LineString const& linestring, Polygon const& polygon,
- detail::overlay::operation_type , // TODO: this parameter might be redundant
- Turns& turns,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- typedef typename boost::range_iterator<Turns>::type turn_iterator;
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename boost::range_iterator
- <
- typename turn_type::container_type
- >::type turn_operation_iterator_type;
-
- typedef following::action_selector<OverlayType, RemoveSpikes> action;
-
- typename Strategy::template point_in_geometry_strategy
- <
- LineString, Polygon
- >::type const pt_in_poly_strategy
- = strategy.template get_point_in_geometry_strategy<LineString, Polygon>();
-
- // Sort intersection points on segments-along-linestring, and distance
- // (like in enrich is done for poly/poly)
- // sort turns by Linear seg_id, then by fraction, then
- // for same ring id: x, u, i, c
- // for different ring id: c, i, u, x
-#ifdef BOOST_GEOMETRY_SETOPS_LA_OLD_BEHAVIOR
- std::sort(boost::begin(turns), boost::end(turns), sort_on_segment<turn_type>());
-#else
- typedef relate::turns::less<0, relate::turns::less_op_linear_areal_single<0> > turn_less;
- std::sort(boost::begin(turns), boost::end(turns), turn_less());
-#endif
-
- LineStringOut current_piece;
- geometry::segment_identifier current_segment_id(0, -1, -1, -1);
-
- // Iterate through all intersection points (they are ordered along the line)
- bool entered = false;
- bool first = true;
- for (turn_iterator it = boost::begin(turns); it != boost::end(turns); ++it)
- {
- turn_operation_iterator_type iit = boost::begin(it->operations);
-
- if (following::was_entered(*it, *iit, first, linestring, polygon, pt_in_poly_strategy))
- {
- debug_traverse(*it, *iit, "-> Was entered");
- entered = true;
- }
-
- if (following::is_staying_inside(*it, *iit, entered, first, linestring, polygon, pt_in_poly_strategy))
- {
- debug_traverse(*it, *iit, "-> Staying inside");
-
- entered = true;
- }
- else if (following::is_entering(*it, *iit))
- {
- debug_traverse(*it, *iit, "-> Entering");
-
- entered = true;
- action::enter(current_piece, linestring, current_segment_id,
- iit->seg_id.segment_index, it->point, *iit,
- strategy, robust_policy,
- out);
- }
- else if (following::is_leaving(*it, *iit, entered, first, linestring, polygon, pt_in_poly_strategy))
- {
- debug_traverse(*it, *iit, "-> Leaving");
-
- entered = false;
- action::leave(current_piece, linestring, current_segment_id,
- iit->seg_id.segment_index, it->point, *iit,
- strategy, robust_policy,
- out);
- }
- first = false;
- }
-
- if (action::is_entered(entered))
- {
- detail::copy_segments::copy_segments_linestring
- <
- false, RemoveSpikes
- >::apply(linestring,
- current_segment_id,
- static_cast<signed_size_type>(boost::size(linestring) - 1),
- strategy, robust_policy,
- current_piece);
- }
-
- // Output the last one, if applicable
- if (::boost::size(current_piece) > 1)
- {
- *out++ = current_piece;
- }
- return out;
- }
-
-};
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp
deleted file mode 100644
index 2a374bf0b09..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp
+++ /dev/null
@@ -1,557 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_LINEAR_LINEAR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_LINEAR_LINEAR_HPP
-
-#include <cstddef>
-#include <algorithm>
-#include <iterator>
-
-#include <boost/range.hpp>
-#include <boost/throw_exception.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
-#include <boost/geometry/algorithms/detail/overlay/follow.hpp>
-#include <boost/geometry/algorithms/detail/overlay/inconsistent_turns_exception.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
-#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-
-#include <boost/geometry/algorithms/detail/turns/debug_turn.hpp>
-
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-namespace following { namespace linear
-{
-
-
-
-
-// follower for linear/linear geometries set operations
-
-template <typename Turn, typename Operation>
-static inline bool is_entering(Turn const& turn,
- Operation const& operation)
-{
- if ( turn.method != method_touch && turn.method != method_touch_interior )
- {
- return false;
- }
- return operation.operation == operation_intersection;
-}
-
-
-
-template <typename Turn, typename Operation>
-static inline bool is_staying_inside(Turn const& turn,
- Operation const& operation,
- bool entered)
-{
- if ( !entered )
- {
- return false;
- }
-
- if ( turn.method != method_equal && turn.method != method_collinear )
- {
- return false;
- }
- return operation.operation == operation_continue;
-}
-
-
-
-template <typename Turn, typename Operation>
-static inline bool is_leaving(Turn const& turn,
- Operation const& operation,
- bool entered)
-{
- if ( !entered )
- {
- return false;
- }
-
- if ( turn.method != method_touch
- && turn.method != method_touch_interior
- && turn.method != method_equal
- && turn.method != method_collinear )
- {
- return false;
- }
-
- if ( operation.operation == operation_blocked )
- {
- return true;
- }
-
- if ( operation.operation != operation_union )
- {
- return false;
- }
-
- return operation.is_collinear;
-}
-
-
-
-template <typename Turn, typename Operation>
-static inline bool is_isolated_point(Turn const& turn,
- Operation const& operation,
- bool entered)
-{
- if ( entered )
- {
- return false;
- }
-
- if ( turn.method == method_none )
- {
- BOOST_GEOMETRY_ASSERT( operation.operation == operation_continue );
- return true;
- }
-
- if ( turn.method == method_crosses )
- {
- return true;
- }
-
- if ( turn.method != method_touch && turn.method != method_touch_interior )
- {
- return false;
- }
-
- if ( operation.operation == operation_blocked )
- {
- return true;
- }
-
- if ( operation.operation != operation_union )
- {
- return false;
- }
-
- return !operation.is_collinear;
-}
-
-
-
-
-
-
-
-
-
-template
-<
- typename LinestringOut,
- typename Linestring,
- typename Linear,
- overlay_type OverlayType,
- bool FollowIsolatedPoints,
- bool FollowContinueTurns
->
-class follow_linestring_linear_linestring
-{
-protected:
- // allow spikes (false indicates: do not remove spikes)
- typedef following::action_selector<OverlayType, false> action;
-
- template
- <
- typename TurnIterator,
- typename TurnOperationIterator,
- typename SegmentIdentifier,
- typename OutputIterator,
- typename SideStrategy
- >
- static inline OutputIterator
- process_turn(TurnIterator it,
- TurnOperationIterator op_it,
- bool& entered,
- std::size_t& enter_count,
- Linestring const& linestring,
- LinestringOut& current_piece,
- SegmentIdentifier& current_segment_id,
- OutputIterator oit,
- SideStrategy const& strategy)
- {
- // We don't rescale linear/linear
- detail::no_rescale_policy robust_policy;
-
- if ( is_entering(*it, *op_it) )
- {
- detail::turns::debug_turn(*it, *op_it, "-> Entering");
-
- entered = true;
- if ( enter_count == 0 )
- {
- action::enter(current_piece, linestring,
- current_segment_id,
- op_it->seg_id.segment_index,
- it->point, *op_it, strategy, robust_policy, oit);
- }
- ++enter_count;
- }
- else if ( is_leaving(*it, *op_it, entered) )
- {
- detail::turns::debug_turn(*it, *op_it, "-> Leaving");
-
- --enter_count;
- if ( enter_count == 0 )
- {
- entered = false;
- action::leave(current_piece, linestring,
- current_segment_id,
- op_it->seg_id.segment_index,
- it->point, *op_it, strategy, robust_policy, oit);
- }
- }
- else if ( FollowIsolatedPoints
- && is_isolated_point(*it, *op_it, entered) )
- {
- detail::turns::debug_turn(*it, *op_it, "-> Isolated point");
-
- action::isolated_point(current_piece, linestring,
- current_segment_id,
- op_it->seg_id.segment_index,
- it->point, *op_it, oit);
- }
- else if ( FollowContinueTurns
- && is_staying_inside(*it, *op_it, entered) )
- {
- detail::turns::debug_turn(*it, *op_it, "-> Staying inside");
-
- entered = true;
- }
- return oit;
- }
-
- template
- <
- typename SegmentIdentifier,
- typename OutputIterator,
- typename SideStrategy
- >
- static inline OutputIterator
- process_end(bool entered,
- Linestring const& linestring,
- SegmentIdentifier const& current_segment_id,
- LinestringOut& current_piece,
- OutputIterator oit,
- SideStrategy const& strategy)
- {
- if ( action::is_entered(entered) )
- {
- // We don't rescale linear/linear
- detail::no_rescale_policy robust_policy;
-
- detail::copy_segments::copy_segments_linestring
- <
- false, false // do not reverse; do not remove spikes
- >::apply(linestring,
- current_segment_id,
- static_cast<signed_size_type>(boost::size(linestring) - 1),
- strategy,
- robust_policy,
- current_piece);
- }
-
- // Output the last one, if applicable
- if (::boost::size(current_piece) > 1)
- {
- *oit++ = current_piece;
- }
-
- return oit;
- }
-
-public:
- template <typename TurnIterator, typename OutputIterator, typename SideStrategy>
- static inline OutputIterator
- apply(Linestring const& linestring, Linear const&,
- TurnIterator first, TurnIterator beyond,
- OutputIterator oit,
- SideStrategy const& strategy)
- {
- // Iterate through all intersection points (they are
- // ordered along the each line)
-
- LinestringOut current_piece;
- geometry::segment_identifier current_segment_id(0, -1, -1, -1);
-
- bool entered = false;
- std::size_t enter_count = 0;
-
- for (TurnIterator it = first; it != beyond; ++it)
- {
- oit = process_turn(it, boost::begin(it->operations),
- entered, enter_count,
- linestring,
- current_piece, current_segment_id,
- oit,
- strategy);
- }
-
-#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
- if (enter_count != 0)
- {
- BOOST_THROW_EXCEPTION(inconsistent_turns_exception());
- }
-#else
- BOOST_GEOMETRY_ASSERT(enter_count == 0);
-#endif
-
- return process_end(entered, linestring,
- current_segment_id, current_piece,
- oit,
- strategy);
- }
-};
-
-
-
-
-template
-<
- typename LinestringOut,
- typename MultiLinestring,
- typename Linear,
- overlay_type OverlayType,
- bool FollowIsolatedPoints,
- bool FollowContinueTurns
->
-class follow_multilinestring_linear_linestring
- : follow_linestring_linear_linestring
- <
- LinestringOut,
- typename boost::range_value<MultiLinestring>::type,
- Linear,
- OverlayType,
- FollowIsolatedPoints,
- FollowContinueTurns
- >
-{
-protected:
- typedef typename boost::range_value<MultiLinestring>::type Linestring;
-
- typedef follow_linestring_linear_linestring
- <
- LinestringOut, Linestring, Linear,
- OverlayType, FollowIsolatedPoints, FollowContinueTurns
- > Base;
-
- typedef following::action_selector<OverlayType> action;
-
- typedef typename boost::range_iterator
- <
- MultiLinestring const
- >::type linestring_iterator;
-
-
- template <typename OutputIt, overlay_type OT>
- struct copy_linestrings_in_range
- {
- static inline OutputIt
- apply(linestring_iterator, linestring_iterator, OutputIt oit)
- {
- return oit;
- }
- };
-
- template <typename OutputIt>
- struct copy_linestrings_in_range<OutputIt, overlay_difference>
- {
- static inline OutputIt
- apply(linestring_iterator first, linestring_iterator beyond,
- OutputIt oit)
- {
- for (linestring_iterator ls_it = first; ls_it != beyond; ++ls_it)
- {
- LinestringOut line_out;
- geometry::convert(*ls_it, line_out);
- *oit++ = line_out;
- }
- return oit;
- }
- };
-
- template <typename TurnIterator>
- static inline signed_size_type get_multi_index(TurnIterator it)
- {
- return boost::begin(it->operations)->seg_id.multi_index;
- }
-
- class has_other_multi_id
- {
- private:
- signed_size_type m_multi_id;
-
- public:
- has_other_multi_id(signed_size_type multi_id)
- : m_multi_id(multi_id) {}
-
- template <typename Turn>
- bool operator()(Turn const& turn) const
- {
- return boost::begin(turn.operations)->seg_id.multi_index
- != m_multi_id;
- }
- };
-
-public:
- template <typename TurnIterator, typename OutputIterator, typename SideStrategy>
- static inline OutputIterator
- apply(MultiLinestring const& multilinestring, Linear const& linear,
- TurnIterator first, TurnIterator beyond,
- OutputIterator oit,
- SideStrategy const& strategy)
- {
- BOOST_GEOMETRY_ASSERT( first != beyond );
-
- typedef copy_linestrings_in_range
- <
- OutputIterator, OverlayType
- > copy_linestrings;
-
- linestring_iterator ls_first = boost::begin(multilinestring);
- linestring_iterator ls_beyond = boost::end(multilinestring);
-
- // Iterate through all intersection points (they are
- // ordered along the each linestring)
-
- signed_size_type current_multi_id = get_multi_index(first);
-
- oit = copy_linestrings::apply(ls_first,
- ls_first + current_multi_id,
- oit);
-
- TurnIterator per_ls_next = first;
- do {
- TurnIterator per_ls_current = per_ls_next;
-
- // find turn with different multi-index
- per_ls_next = std::find_if(per_ls_current, beyond,
- has_other_multi_id(current_multi_id));
-
- oit = Base::apply(*(ls_first + current_multi_id),
- linear, per_ls_current, per_ls_next, oit, strategy);
-
- signed_size_type next_multi_id = -1;
- linestring_iterator ls_next = ls_beyond;
- if ( per_ls_next != beyond )
- {
- next_multi_id = get_multi_index(per_ls_next);
- ls_next = ls_first + next_multi_id;
- }
- oit = copy_linestrings::apply(ls_first + current_multi_id + 1,
- ls_next,
- oit);
-
- current_multi_id = next_multi_id;
- }
- while ( per_ls_next != beyond );
-
- return oit;
- }
-};
-
-
-
-
-
-
-template
-<
- typename LinestringOut,
- typename Geometry1,
- typename Geometry2,
- overlay_type OverlayType,
- bool FollowIsolatedPoints,
- bool FollowContinueTurns,
- typename TagOut = typename tag<LinestringOut>::type,
- typename TagIn1 = typename tag<Geometry1>::type
->
-struct follow
- : not_implemented<LinestringOut, Geometry1>
-{};
-
-
-
-template
-<
- typename LinestringOut,
- typename Linestring,
- typename Linear,
- overlay_type OverlayType,
- bool FollowIsolatedPoints,
- bool FollowContinueTurns
->
-struct follow
- <
- LinestringOut, Linestring, Linear,
- OverlayType, FollowIsolatedPoints, FollowContinueTurns,
- linestring_tag, linestring_tag
- > : follow_linestring_linear_linestring
- <
- LinestringOut, Linestring, Linear,
- OverlayType, FollowIsolatedPoints, FollowContinueTurns
- >
-{};
-
-
-template
-<
- typename LinestringOut,
- typename MultiLinestring,
- typename Linear,
- overlay_type OverlayType,
- bool FollowIsolatedPoints,
- bool FollowContinueTurns
->
-struct follow
- <
- LinestringOut, MultiLinestring, Linear,
- OverlayType, FollowIsolatedPoints, FollowContinueTurns,
- linestring_tag, multi_linestring_tag
- > : follow_multilinestring_linear_linestring
- <
- LinestringOut, MultiLinestring, Linear,
- OverlayType, FollowIsolatedPoints, FollowContinueTurns
- >
-{};
-
-
-
-}} // namespace following::linear
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_FOLLOW_LINEAR_LINEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp
deleted file mode 100644
index 94667d0ed00..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp
+++ /dev/null
@@ -1,165 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_INTERSECTION_POINTS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_INTERSECTION_POINTS_HPP
-
-
-#include <cstddef>
-
-#include <boost/mpl/if.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
-
-#include <boost/geometry/geometries/segment.hpp>
-
-#include <boost/geometry/policies/robustness/robust_point_type.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace get_intersection_points
-{
-
-
-template
-<
- typename Point1,
- typename Point2,
- typename TurnInfo
->
-struct get_turn_without_info
-{
- template <typename Strategy, typename RobustPolicy, typename OutputIterator>
- static inline OutputIterator apply(
- Point1 const& pi, Point1 const& pj, Point1 const& /*pk*/,
- Point2 const& qi, Point2 const& qj, Point2 const& /*qk*/,
- bool /*is_p_first*/, bool /*is_p_last*/,
- bool /*is_q_first*/, bool /*is_q_last*/,
- TurnInfo const& ,
- Strategy const& strategy,
- RobustPolicy const& robust_policy,
- OutputIterator out)
- {
- typedef typename TurnInfo::point_type turn_point_type;
-
- typedef policies::relate::segments_intersection_points
- <
- segment_intersection_points
- <
- turn_point_type,
- typename geometry::segment_ratio_type
- <
- turn_point_type, RobustPolicy
- >::type
- >
- > policy_type;
-
- typedef model::referring_segment<Point1 const> segment_type1;
- typedef model::referring_segment<Point2 const> segment_type2;
- segment_type1 p1(pi, pj);
- segment_type2 q1(qi, qj);
-
- typedef typename geometry::robust_point_type
- <
- Point1, RobustPolicy
- >::type robust_point_type;
-
- robust_point_type pi_rob, pj_rob, qi_rob, qj_rob;
- geometry::recalculate(pi_rob, pi, robust_policy);
- geometry::recalculate(pj_rob, pj, robust_policy);
- geometry::recalculate(qi_rob, qi, robust_policy);
- geometry::recalculate(qj_rob, qj, robust_policy);
- typename policy_type::return_type result
- = strategy.apply(p1, q1, policy_type(), robust_policy,
- pi_rob, pj_rob, qi_rob, qj_rob);
-
- for (std::size_t i = 0; i < result.count; i++)
- {
- TurnInfo tp;
- geometry::convert(result.intersections[i], tp.point);
- *out++ = tp;
- }
-
- return out;
- }
-};
-
-}} // namespace detail::get_intersection_points
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename Turns,
- typename Strategy
->
-inline void get_intersection_points(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- Turns& turns,
- Strategy const& strategy)
-{
- concepts::check_concepts_and_equal_dimensions<Geometry1 const, Geometry2 const>();
-
- typedef detail::get_intersection_points::get_turn_without_info
- <
- typename point_type<Geometry1>::type,
- typename point_type<Geometry2>::type,
- typename boost::range_value<Turns>::type
- > TurnPolicy;
-
- detail::get_turns::no_interrupt_policy interrupt_policy;
-
- boost::mpl::if_c
- <
- reverse_dispatch<Geometry1, Geometry2>::type::value,
- dispatch::get_turns_reversed
- <
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
- Geometry1, Geometry2,
- false, false,
- TurnPolicy
- >,
- dispatch::get_turns
- <
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
- Geometry1, Geometry2,
- false, false,
- TurnPolicy
- >
- >::type::apply(
- 0, geometry1,
- 1, geometry2,
- strategy,
- robust_policy,
- turns, interrupt_policy);
-}
-
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_INTERSECTION_POINTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp
deleted file mode 100644
index 2eec6af6650..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RELATIVE_ORDER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RELATIVE_ORDER_HPP
-
-
-#include <boost/geometry/strategies/intersection_strategies.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-/*!
- \brief Get relative order
- \details Can indicate which of two segments R and S,
- both crossing a common segment P, comes first.
- If the two segments cross P very close (e.g. in a spike),
- the distance between the intersection points can be zero,
- but we still need to know which comes first.
- Therefore, it is useful that using sides we are able to discover this.
- */
-struct get_relative_order
-{
- template <typename Point, typename SideStrategy>
- static inline int value_via_product(Point const& ti, Point const& tj,
- Point const& ui, Point const& uj, int factor,
- SideStrategy const& strategy)
- {
- int const side_ti_u = strategy.apply(ti, tj, ui);
- int const side_tj_u = strategy.apply(ti, tj, uj);
-
-#ifdef BOOST_GEOMETRY_DEBUG_RELATIVE_ORDER
- std::cout << (factor == 1 ? " r//s " : " s//r ")
- << side_ti_u << " / " << side_tj_u;
-#endif
-
- return side_ti_u * side_tj_u >= 0
- ? factor * (side_ti_u != 0 ? side_ti_u : side_tj_u)
- : 0;
- }
-
-
- template <typename Point1, typename SideStrategy>
- static inline int apply(
- Point1 const& pi, Point1 const& pj,
- Point1 const& ri, Point1 const& rj,
- Point1 const& si, Point1 const& sj,
- SideStrategy const& strategy)
- {
- int const side_ri_p = strategy.apply(pi, pj, ri);
- int const side_si_p = strategy.apply(pi, pj, si);
-
-#ifdef BOOST_GEOMETRY_DEBUG_RELATIVE_ORDER
- int const side_rj_p = strategy::apply(pi, pj, rj);
- int const side_sj_p = strategy::apply(pi, pj, sj);
- std::cout << "r//p: " << side_ri_p << " / " << side_rj_p;
- std::cout << " s//p: " << side_si_p << " / " << side_sj_p;
-#endif
-
- int value = value_via_product(si, sj, ri, rj, 1, strategy);
- if (value == 0)
- {
- value = value_via_product(ri, rj, si, sj, -1, strategy);
- }
-
- int const order = side_ri_p * side_ri_p * side_si_p * value;
-
-#ifdef BOOST_GEOMETRY_DEBUG_RELATIVE_ORDER
- std::cout
- << " o: " << order
- << std::endl << std::endl;
-#endif
-
- return order;
- }
-};
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RELATIVE_ORDER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp
deleted file mode 100644
index 460c30def3a..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_ring.hpp
+++ /dev/null
@@ -1,123 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP
-
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/algorithms/detail/ring_identifier.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/util/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-template<typename Tag>
-struct get_ring
-{};
-
-// A range of rings (multi-ring but that does not exist)
-// gets the "void" tag and is dispatched here.
-template<>
-struct get_ring<void>
-{
- template<typename Range>
- static inline typename boost::range_value<Range>::type const&
- apply(ring_identifier const& id, Range const& container)
- {
- return range::at(container, id.multi_index);
- }
-};
-
-
-
-
-template<>
-struct get_ring<ring_tag>
-{
- template<typename Ring>
- static inline Ring const& apply(ring_identifier const& , Ring const& ring)
- {
- return ring;
- }
-};
-
-
-template<>
-struct get_ring<box_tag>
-{
- template<typename Box>
- static inline Box const& apply(ring_identifier const& ,
- Box const& box)
- {
- return box;
- }
-};
-
-
-template<>
-struct get_ring<polygon_tag>
-{
- template<typename Polygon>
- static inline typename ring_return_type<Polygon const>::type const apply(
- ring_identifier const& id,
- Polygon const& polygon)
- {
- BOOST_GEOMETRY_ASSERT
- (
- id.ring_index >= -1
- && id.ring_index < int(boost::size(interior_rings(polygon)))
- );
- return id.ring_index < 0
- ? exterior_ring(polygon)
- : range::at(interior_rings(polygon), id.ring_index);
- }
-};
-
-
-template<>
-struct get_ring<multi_polygon_tag>
-{
- template<typename MultiPolygon>
- static inline typename ring_type<MultiPolygon>::type const& apply(
- ring_identifier const& id,
- MultiPolygon const& multi_polygon)
- {
- BOOST_GEOMETRY_ASSERT
- (
- id.multi_index >= 0
- && id.multi_index < int(boost::size(multi_polygon))
- );
- return get_ring<polygon_tag>::apply(id,
- range::at(multi_polygon, id.multi_index));
- }
-};
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp
deleted file mode 100644
index 3e1f3a1b9ab..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp
+++ /dev/null
@@ -1,1143 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2015, 2017.
-// Modifications copyright (c) 2015-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HPP
-
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/throw_exception.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/detail/recalculate.hpp>
-
-#include <boost/geometry/geometries/segment.hpp>
-
-#include <boost/geometry/policies/robustness/robust_point_type.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp>
-
-// Silence warning C4127: conditional expression is constant
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
-class turn_info_exception : public geometry::exception
-{
- std::string message;
-public:
-
- // NOTE: "char" will be replaced by enum in future version
- inline turn_info_exception(char const method)
- {
- message = "Boost.Geometry Turn exception: ";
- message += method;
- }
-
- virtual ~turn_info_exception()
- {}
-
- virtual char const* what() const noexcept
- {
- return message.c_str();
- }
-};
-#endif
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-struct base_turn_handler
-{
- // Returns true if both sides are opposite
- static inline bool opposite(int side1, int side2)
- {
- // We cannot state side1 == -side2, because 0 == -0
- // So either side1*side2==-1 or side1==-side2 && side1 != 0
- return side1 * side2 == -1;
- }
-
- // Same side of a segment (not being 0)
- static inline bool same(int side1, int side2)
- {
- return side1 * side2 == 1;
- }
-
- // Both continue
- template <typename TurnInfo>
- static inline void both(TurnInfo& ti, operation_type const op)
- {
- ti.operations[0].operation = op;
- ti.operations[1].operation = op;
- }
-
- // If condition, first union/second intersection, else vice versa
- template <typename TurnInfo>
- static inline void ui_else_iu(bool condition, TurnInfo& ti)
- {
- ti.operations[0].operation = condition
- ? operation_union : operation_intersection;
- ti.operations[1].operation = condition
- ? operation_intersection : operation_union;
- }
-
- // If condition, both union, else both intersection
- template <typename TurnInfo>
- static inline void uu_else_ii(bool condition, TurnInfo& ti)
- {
- both(ti, condition ? operation_union : operation_intersection);
- }
-
- template <typename TurnInfo, typename IntersectionInfo>
- static inline void assign_point(TurnInfo& ti,
- method_type method,
- IntersectionInfo const& info, unsigned int index)
- {
- ti.method = method;
-
- BOOST_GEOMETRY_ASSERT(index < info.count);
-
- geometry::convert(info.intersections[index], ti.point);
- ti.operations[0].fraction = info.fractions[index].robust_ra;
- ti.operations[1].fraction = info.fractions[index].robust_rb;
- }
-
- template <typename IntersectionInfo>
- static inline unsigned int non_opposite_to_index(IntersectionInfo const& info)
- {
- return info.fractions[0].robust_rb < info.fractions[1].robust_rb
- ? 1 : 0;
- }
-
-};
-
-
-template
-<
- typename TurnInfo
->
-struct touch_interior : public base_turn_handler
-{
- // Index: 0, P is the interior, Q is touching and vice versa
- template
- <
- unsigned int Index,
- typename Point1,
- typename Point2,
- typename IntersectionInfo,
- typename DirInfo,
- typename SidePolicy
- >
- static inline void apply(
- Point1 const& , Point1 const& , Point1 const& ,
- Point2 const& , Point2 const& , Point2 const& ,
- TurnInfo& ti,
- IntersectionInfo const& intersection_info,
- DirInfo const& dir_info,
- SidePolicy const& side)
- {
- assign_point(ti, method_touch_interior, intersection_info, 0);
-
- // Both segments of q touch segment p somewhere in its interior
- // 1) We know: if q comes from LEFT or RIGHT
- // (i.e. dir_info.sides.get<Index,0>() == 1 or -1)
- // 2) Important is: if q_k goes to LEFT, RIGHT, COLLINEAR
- // and, if LEFT/COLL, if it is lying LEFT or RIGHT w.r.t. q_i
-
- BOOST_STATIC_ASSERT(Index <= 1);
- static unsigned int const index_p = Index;
- static unsigned int const index_q = 1 - Index;
-
- int const side_qi_p = dir_info.sides.template get<index_q, 0>();
- int const side_qk_p = side.qk_wrt_p1();
-
- if (side_qi_p == -side_qk_p)
- {
- // Q crosses P from left->right or from right->left (test "ML1")
- // Union: folow P (left->right) or Q (right->left)
- // Intersection: other turn
- unsigned int index = side_qk_p == -1 ? index_p : index_q;
- ti.operations[index].operation = operation_union;
- ti.operations[1 - index].operation = operation_intersection;
- return;
- }
-
- int const side_qk_q = side.qk_wrt_q1();
-
- if (side_qi_p == -1 && side_qk_p == -1 && side_qk_q == 1)
- {
- // Q turns left on the right side of P (test "MR3")
- // Both directions for "intersection"
- both(ti, operation_intersection);
- ti.touch_only = true;
- }
- else if (side_qi_p == 1 && side_qk_p == 1 && side_qk_q == -1)
- {
- // Q turns right on the left side of P (test "ML3")
- // Union: take both operation
- // Intersection: skip
- both(ti, operation_union);
- ti.touch_only = true;
- }
- else if (side_qi_p == side_qk_p && side_qi_p == side_qk_q)
- {
- // Q turns left on the left side of P (test "ML2")
- // or Q turns right on the right side of P (test "MR2")
- // Union: take left turn (Q if Q turns left, P if Q turns right)
- // Intersection: other turn
- unsigned int index = side_qk_q == 1 ? index_q : index_p;
- ti.operations[index].operation = operation_union;
- ti.operations[1 - index].operation = operation_intersection;
- ti.touch_only = true;
- }
- else if (side_qk_p == 0)
- {
- // Q intersects on interior of P and continues collinearly
- if (side_qk_q == side_qi_p)
- {
- // Collinearly in the same direction
- // (Q comes from left of P and turns left,
- // OR Q comes from right of P and turns right)
- // Omit intersection point.
- // Union: just continue
- // Intersection: just continue
- both(ti, operation_continue);
- }
- else
- {
- // Opposite direction, which is never travelled.
- // If Q turns left, P continues for intersection
- // If Q turns right, P continues for union
- ti.operations[index_p].operation = side_qk_q == 1
- ? operation_intersection
- : operation_union;
- ti.operations[index_q].operation = operation_blocked;
- }
- }
- else
- {
- // Should not occur!
- ti.method = method_error;
- }
- }
-};
-
-
-template
-<
- typename TurnInfo
->
-struct touch : public base_turn_handler
-{
- static inline bool between(int side1, int side2, int turn)
- {
- return side1 == side2 && ! opposite(side1, turn);
- }
-
- /*static inline void block_second(bool block, TurnInfo& ti)
- {
- if (block)
- {
- ti.operations[1].operation = operation_blocked;
- }
- }*/
-
-
- template
- <
- typename Point1,
- typename Point2,
- typename IntersectionInfo,
- typename DirInfo,
- typename SidePolicy
- >
- static inline void apply(
- Point1 const& , Point1 const& , Point1 const& ,
- Point2 const& , Point2 const& , Point2 const& ,
- TurnInfo& ti,
- IntersectionInfo const& intersection_info,
- DirInfo const& dir_info,
- SidePolicy const& side)
- {
- assign_point(ti, method_touch, intersection_info, 0);
-
- int const side_qi_p1 = dir_info.sides.template get<1, 0>();
- int const side_qk_p1 = side.qk_wrt_p1();
-
-
- // If Qi and Qk are both at same side of Pi-Pj,
- // or collinear (so: not opposite sides)
- if (! opposite(side_qi_p1, side_qk_p1))
- {
- int const side_pk_q2 = side.pk_wrt_q2();
- int const side_pk_p = side.pk_wrt_p1();
- int const side_qk_q = side.qk_wrt_q1();
-
- bool const q_turns_left = side_qk_q == 1;
- bool const block_q = side_qk_p1 == 0
- && ! same(side_qi_p1, side_qk_q)
- ;
-
- // If Pk at same side as Qi/Qk
- // (the "or" is for collinear case)
- // or Q is fully collinear && P turns not to left
- if (side_pk_p == side_qi_p1
- || side_pk_p == side_qk_p1
- || (side_qi_p1 == 0 && side_qk_p1 == 0 && side_pk_p != -1)
- )
- {
- // Collinear -> lines join, continue
- // (#BRL2)
- if (side_pk_q2 == 0 && ! block_q)
- {
- both(ti, operation_continue);
- return;
- }
-
- int const side_pk_q1 = side.pk_wrt_q1();
-
-
- // Collinear opposite case -> block P
- // (#BRL4, #BLR8)
- if (side_pk_q1 == 0)
- {
- ti.operations[0].operation = operation_blocked;
- // Q turns right -> union (both independent),
- // Q turns left -> intersection
- ti.operations[1].operation = block_q ? operation_blocked
- : q_turns_left ? operation_intersection
- : operation_union;
- return;
- }
-
- // Pk between Qi and Qk
- // (#BRL3, #BRL7)
- if (between(side_pk_q1, side_pk_q2, side_qk_q))
- {
- ui_else_iu(q_turns_left, ti);
- if (block_q)
- {
- ti.operations[1].operation = operation_blocked;
- }
- //block_second(block_q, ti);
- return;
- }
-
- // Pk between Qk and P, so left of Qk (if Q turns right) and vv
- // (#BRL1)
- if (side_pk_q2 == -side_qk_q)
- {
- ui_else_iu(! q_turns_left, ti);
- ti.touch_only = true;
- return;
- }
-
- //
- // (#BRL5, #BRL9)
- if (side_pk_q1 == -side_qk_q)
- {
- uu_else_ii(! q_turns_left, ti);
- if (block_q)
- {
- ti.operations[1].operation = operation_blocked;
- }
- else
- {
- ti.touch_only = true;
- }
- //block_second(block_q, ti);
- return;
- }
- }
- else
- {
- // Pk at other side than Qi/Pk
- ti.operations[0].operation = q_turns_left
- ? operation_intersection
- : operation_union;
- ti.operations[1].operation = block_q
- ? operation_blocked
- : side_qi_p1 == 1 || side_qk_p1 == 1
- ? operation_union
- : operation_intersection;
- if (! block_q)
- {
- ti.touch_only = true;
- }
-
- return;
- }
- }
- else
- {
- // From left to right or from right to left
- int const side_pk_p = side.pk_wrt_p1();
- bool const right_to_left = side_qk_p1 == 1;
-
- // If p turns into direction of qi (1,2)
- if (side_pk_p == side_qi_p1)
- {
- int const side_pk_q1 = side.pk_wrt_q1();
-
- // Collinear opposite case -> block P
- if (side_pk_q1 == 0)
- {
- ti.operations[0].operation = operation_blocked;
- ti.operations[1].operation = right_to_left
- ? operation_union : operation_intersection;
- return;
- }
-
- if (side_pk_q1 == side_qk_p1)
- {
- uu_else_ii(right_to_left, ti);
- ti.touch_only = true;
- return;
- }
- }
-
- // If p turns into direction of qk (4,5)
- if (side_pk_p == side_qk_p1)
- {
- int const side_pk_q2 = side.pk_wrt_q2();
-
- // Collinear case -> lines join, continue
- if (side_pk_q2 == 0)
- {
- both(ti, operation_continue);
- return;
- }
- if (side_pk_q2 == side_qk_p1)
- {
- ui_else_iu(right_to_left, ti);
- ti.touch_only = true;
- return;
- }
- }
- // otherwise (3)
- ui_else_iu(! right_to_left, ti);
- return;
- }
-
-#ifdef BOOST_GEOMETRY_DEBUG_GET_TURNS
- // Normally a robustness issue.
- // TODO: more research if still occuring
- std::cout << "Not yet handled" << std::endl
- << "pi " << get<0>(pi) << " , " << get<1>(pi)
- << " pj " << get<0>(pj) << " , " << get<1>(pj)
- << " pk " << get<0>(pk) << " , " << get<1>(pk)
- << std::endl
- << "qi " << get<0>(qi) << " , " << get<1>(qi)
- << " qj " << get<0>(qj) << " , " << get<1>(qj)
- << " qk " << get<0>(qk) << " , " << get<1>(qk)
- << std::endl;
-#endif
-
- }
-};
-
-
-template
-<
- typename TurnInfo
->
-struct equal : public base_turn_handler
-{
- template
- <
- typename Point1,
- typename Point2,
- typename IntersectionInfo,
- typename DirInfo,
- typename SidePolicy
- >
- static inline void apply(
- Point1 const& , Point1 const& , Point1 const& ,
- Point2 const& , Point2 const& , Point2 const& ,
- TurnInfo& ti,
- IntersectionInfo const& info,
- DirInfo const& ,
- SidePolicy const& side)
- {
- // Copy the intersection point in TO direction
- assign_point(ti, method_equal, info, non_opposite_to_index(info));
-
- int const side_pk_q2 = side.pk_wrt_q2();
- int const side_pk_p = side.pk_wrt_p1();
- int const side_qk_p = side.qk_wrt_p1();
-
-
- // If pk is collinear with qj-qk, they continue collinearly.
- // This can be on either side of p1 (== q1), or collinear
- // The second condition checks if they do not continue
- // oppositely
- if (side_pk_q2 == 0 && side_pk_p == side_qk_p)
- {
- both(ti, operation_continue);
-
- return;
- }
-
-
- // If they turn to same side (not opposite sides)
- if (! opposite(side_pk_p, side_qk_p))
- {
- // If pk is left of q2 or collinear: p: union, q: intersection
- ui_else_iu(side_pk_q2 != -1, ti);
- }
- else
- {
- // They turn opposite sides. If p turns left (or collinear),
- // p: union, q: intersection
- ui_else_iu(side_pk_p != -1, ti);
- }
- }
-};
-
-
-template
-<
- typename TurnInfo,
- typename AssignPolicy
->
-struct equal_opposite : public base_turn_handler
-{
- template
- <
- typename Point1,
- typename Point2,
- typename OutputIterator,
- typename IntersectionInfo
- >
- static inline void apply(Point1 const& pi, Point2 const& qi,
- /* by value: */ TurnInfo tp,
- OutputIterator& out,
- IntersectionInfo const& intersection_info)
- {
- // For equal-opposite segments, normally don't do anything.
- if (AssignPolicy::include_opposite)
- {
- tp.method = method_equal;
- for (unsigned int i = 0; i < 2; i++)
- {
- tp.operations[i].operation = operation_opposite;
- }
- for (unsigned int i = 0; i < intersection_info.i_info().count; i++)
- {
- assign_point(tp, method_none, intersection_info.i_info(), i);
- AssignPolicy::apply(tp, pi, qi, intersection_info);
- *out++ = tp;
- }
- }
- }
-};
-
-template
-<
- typename TurnInfo
->
-struct collinear : public base_turn_handler
-{
- /*
- arrival P pk//p1 qk//q1 product* case result
- 1 1 1 CLL1 ui
- -1 1 -1 CLL2 iu
- 1 1 1 CLR1 ui
- -1 -1 1 CLR2 ui
-
- 1 -1 -1 CRL1 iu
- -1 1 -1 CRL2 iu
- 1 -1 -1 CRR1 iu
- -1 -1 1 CRR2 ui
-
- 1 0 0 CC1 cc
- -1 0 0 CC2 cc
-
- *product = arrival * (pk//p1 or qk//q1)
-
- Stated otherwise:
- - if P arrives: look at turn P
- - if Q arrives: look at turn Q
- - if P arrives and P turns left: union for P
- - if P arrives and P turns right: intersection for P
- - if Q arrives and Q turns left: union for Q (=intersection for P)
- - if Q arrives and Q turns right: intersection for Q (=union for P)
-
- ROBUSTNESS: p and q are collinear, so you would expect
- that side qk//p1 == pk//q1. But that is not always the case
- in near-epsilon ranges. Then decision logic is different.
- If p arrives, q is further, so the angle qk//p1 is (normally)
- more precise than pk//p1
-
- */
- template
- <
- typename Point1,
- typename Point2,
- typename IntersectionInfo,
- typename DirInfo,
- typename SidePolicy
- >
- static inline void apply(
- Point1 const& , Point1 const& pj, Point1 const& pk,
- Point2 const& , Point2 const& qj, Point2 const& qk,
- TurnInfo& ti,
- IntersectionInfo const& info,
- DirInfo const& dir_info,
- SidePolicy const& side)
- {
- // Copy the intersection point in TO direction
- assign_point(ti, method_collinear, info, non_opposite_to_index(info));
-
- int const arrival = dir_info.arrival[0];
- // Should not be 0, this is checked before
- BOOST_GEOMETRY_ASSERT(arrival != 0);
-
- int const side_p = side.pk_wrt_p1();
- int const side_q = side.qk_wrt_q1();
-
- // If p arrives, use p, else use q
- int const side_p_or_q = arrival == 1
- ? side_p
- : side_q
- ;
-
- // See comments above,
- // resulting in a strange sort of mathematic rule here:
- // The arrival-info multiplied by the relevant side
- // delivers a consistent result.
-
- int const product = arrival * side_p_or_q;
-
- if(product == 0)
- {
- both(ti, operation_continue);
- }
- else
- {
- ui_else_iu(product == 1, ti);
- }
-
- // Calculate remaining distance. If it continues collinearly it is
- // measured until the end of the next segment
- ti.operations[0].remaining_distance
- = side_p == 0
- ? distance_measure(ti.point, pk)
- : distance_measure(ti.point, pj);
- ti.operations[1].remaining_distance
- = side_q == 0
- ? distance_measure(ti.point, qk)
- : distance_measure(ti.point, qj);
- }
-
- template <typename Point1, typename Point2>
- static inline typename geometry::coordinate_type<Point1>::type
- distance_measure(Point1 const& a, Point2 const& b)
- {
- // TODO: use comparable distance for point-point instead - but that
- // causes currently cycling include problems
- typedef typename geometry::coordinate_type<Point1>::type ctype;
- ctype const dx = get<0>(a) - get<0>(b);
- ctype const dy = get<1>(a) - get<1>(b);
- return dx * dx + dy * dy;
- }
-};
-
-template
-<
- typename TurnInfo,
- typename AssignPolicy
->
-struct collinear_opposite : public base_turn_handler
-{
-private :
- /*
- arrival P arrival Q pk//p1 qk//q1 case result2 result
- --------------------------------------------------------------
- 1 1 1 -1 CLO1 ix xu
- 1 1 1 0 CLO2 ix (xx)
- 1 1 1 1 CLO3 ix xi
-
- 1 1 0 -1 CCO1 (xx) xu
- 1 1 0 0 CCO2 (xx) (xx)
- 1 1 0 1 CCO3 (xx) xi
-
- 1 1 -1 -1 CRO1 ux xu
- 1 1 -1 0 CRO2 ux (xx)
- 1 1 -1 1 CRO3 ux xi
-
- -1 1 -1 CXO1 xu
- -1 1 0 CXO2 (xx)
- -1 1 1 CXO3 xi
-
- 1 -1 1 CXO1 ix
- 1 -1 0 CXO2 (xx)
- 1 -1 -1 CXO3 ux
- */
-
- template
- <
- unsigned int Index,
- typename Point1,
- typename Point2,
- typename IntersectionInfo
- >
- static inline bool set_tp(Point1 const& , Point1 const& , Point1 const& , int side_rk_r,
- bool const handle_robustness,
- Point2 const& , Point2 const& , int side_rk_s,
- TurnInfo& tp, IntersectionInfo const& intersection_info)
- {
- BOOST_STATIC_ASSERT(Index <= 1);
-
- boost::ignore_unused(handle_robustness, side_rk_s);
-
- operation_type blocked = operation_blocked;
- switch(side_rk_r)
- {
-
- case 1 :
- // Turning left on opposite collinear: intersection
- tp.operations[Index].operation = operation_intersection;
- break;
- case -1 :
- // Turning right on opposite collinear: union
- tp.operations[Index].operation = operation_union;
- break;
- case 0 :
- // No turn on opposite collinear: block, do not traverse
- // But this "xx" is usually ignored, it is useless to include
- // two operations blocked, so the whole point does not need
- // to be generated.
- // So return false to indicate nothing is to be done.
- if (AssignPolicy::include_opposite)
- {
- tp.operations[Index].operation = operation_opposite;
- blocked = operation_opposite;
- }
- else
- {
- return false;
- }
- break;
- }
-
- // The other direction is always blocked when collinear opposite
- tp.operations[1 - Index].operation = blocked;
-
- // If P arrives within Q, set info on P (which is done above, index=0),
- // this turn-info belongs to the second intersection point, index=1
- // (see e.g. figure CLO1)
- assign_point(tp, method_collinear, intersection_info, 1 - Index);
- return true;
- }
-
-public:
- static inline void empty_transformer(TurnInfo &) {}
-
- template
- <
- typename Point1,
- typename Point2,
- typename OutputIterator,
- typename IntersectionInfo,
- typename SidePolicy
- >
- static inline void apply(
- Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
-
- // Opposite collinear can deliver 2 intersection points,
- TurnInfo const& tp_model,
- OutputIterator& out,
-
- IntersectionInfo const& intersection_info,
- SidePolicy const& side)
- {
- apply(pi, pj, pk, qi, qj, qk, tp_model, out, intersection_info, side, empty_transformer);
- }
-
-public:
- template
- <
- typename Point1,
- typename Point2,
- typename OutputIterator,
- typename IntersectionInfo,
- typename SidePolicy,
- typename TurnTransformer
- >
- static inline void apply(
- Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
-
- // Opposite collinear can deliver 2 intersection points,
- TurnInfo const& tp_model,
- OutputIterator& out,
-
- IntersectionInfo const& info,
- SidePolicy const& side,
- TurnTransformer turn_transformer,
- bool const is_pk_valid = true, bool const is_qk_valid = true)
- {
- TurnInfo tp = tp_model;
-
- int const p_arrival = info.d_info().arrival[0];
- int const q_arrival = info.d_info().arrival[1];
-
- // If P arrives within Q, there is a turn dependent on P
- if ( p_arrival == 1
- && is_pk_valid
- && set_tp<0>(pi, pj, pk, side.pk_wrt_p1(), true, qi, qj, side.pk_wrt_q1(), tp, info.i_info()) )
- {
- turn_transformer(tp);
-
- AssignPolicy::apply(tp, pi, qi, info);
- *out++ = tp;
- }
-
- // If Q arrives within P, there is a turn dependent on Q
- if ( q_arrival == 1
- && is_qk_valid
- && set_tp<1>(qi, qj, qk, side.qk_wrt_q1(), false, pi, pj, side.qk_wrt_p1(), tp, info.i_info()) )
- {
- turn_transformer(tp);
-
- AssignPolicy::apply(tp, pi, qi, info);
- *out++ = tp;
- }
-
- if (AssignPolicy::include_opposite)
- {
- // Handle cases not yet handled above
- if ((q_arrival == -1 && p_arrival == 0)
- || (p_arrival == -1 && q_arrival == 0))
- {
- for (unsigned int i = 0; i < 2; i++)
- {
- tp.operations[i].operation = operation_opposite;
- }
- for (unsigned int i = 0; i < info.i_info().count; i++)
- {
- assign_point(tp, method_collinear, info.i_info(), i);
- AssignPolicy::apply(tp, pi, qi, info);
- *out++ = tp;
- }
- }
- }
-
- }
-};
-
-
-template
-<
- typename TurnInfo
->
-struct crosses : public base_turn_handler
-{
- template
- <
- typename Point1,
- typename Point2,
- typename IntersectionInfo,
- typename DirInfo
- >
- static inline void apply(
- Point1 const& , Point1 const& , Point1 const& ,
- Point2 const& , Point2 const& , Point2 const& ,
- TurnInfo& ti,
- IntersectionInfo const& intersection_info,
- DirInfo const& dir_info)
- {
- assign_point(ti, method_crosses, intersection_info, 0);
-
- // In all casees:
- // If Q crosses P from left to right
- // Union: take P
- // Intersection: take Q
- // Otherwise: vice versa
- int const side_qi_p1 = dir_info.sides.template get<1, 0>();
- unsigned int const index = side_qi_p1 == 1 ? 0 : 1;
- ti.operations[index].operation = operation_union;
- ti.operations[1 - index].operation = operation_intersection;
- }
-};
-
-struct only_convert : public base_turn_handler
-{
- template<typename TurnInfo, typename IntersectionInfo>
- static inline void apply(TurnInfo& ti, IntersectionInfo const& intersection_info)
- {
- assign_point(ti, method_none, intersection_info, 0); // was collinear
- ti.operations[0].operation = operation_continue;
- ti.operations[1].operation = operation_continue;
- }
-};
-
-/*!
-\brief Policy doing nothing
-\details get_turn_info can have an optional policy to get/assign some
- extra information. By default it does not, and this class
- is that default.
- */
-struct assign_null_policy
-{
- static bool const include_no_turn = false;
- static bool const include_degenerate = false;
- static bool const include_opposite = false;
-
- template
- <
- typename Info,
- typename Point1,
- typename Point2,
- typename IntersectionInfo
- >
- static inline void apply(Info& , Point1 const& , Point2 const&, IntersectionInfo const&)
- {}
-
-};
-
-
-/*!
- \brief Turn information: intersection point, method, and turn information
- \details Information necessary for traversal phase (a phase
- of the overlay process). The information is gathered during the
- get_turns (segment intersection) phase.
- \tparam Point1 point type of first segment
- \tparam Point2 point type of second segment
- \tparam TurnInfo type of class getting intersection and turn info
- \tparam AssignPolicy policy to assign extra info,
- e.g. to calculate distance from segment's first points
- to intersection points.
- It also defines if a certain class of points
- (degenerate, non-turns) should be included.
- */
-template<typename AssignPolicy>
-struct get_turn_info
-{
- // Intersect pi-pj with qi-qj
- // The points pk and qk are used do determine more information
- // about the turn (turn left/right)
- template
- <
- typename Point1,
- typename Point2,
- typename TurnInfo,
- typename IntersectionStrategy,
- typename RobustPolicy,
- typename OutputIterator
- >
- static inline OutputIterator apply(
- Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
- bool /*is_p_first*/, bool /*is_p_last*/,
- bool /*is_q_first*/, bool /*is_q_last*/,
- TurnInfo const& tp_model,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- OutputIterator out)
- {
- typedef intersection_info
- <
- Point1, Point2,
- typename TurnInfo::point_type,
- IntersectionStrategy,
- RobustPolicy
- > inters_info;
-
- inters_info inters(pi, pj, pk, qi, qj, qk, intersection_strategy, robust_policy);
-
- char const method = inters.d_info().how;
-
- // Copy, to copy possibly extended fields
- TurnInfo tp = tp_model;
-
- // Select method and apply
- switch(method)
- {
- case 'a' : // collinear, "at"
- case 'f' : // collinear, "from"
- case 's' : // starts from the middle
- if (AssignPolicy::include_no_turn
- && inters.i_info().count > 0)
- {
- only_convert::apply(tp, inters.i_info());
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
- }
- break;
-
- case 'd' : // disjoint: never do anything
- break;
-
- case 'm' :
- {
- typedef touch_interior
- <
- TurnInfo
- > policy;
-
- // If Q (1) arrives (1)
- if ( inters.d_info().arrival[1] == 1 )
- {
- policy::template apply<0>(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(),
- inters.sides());
- }
- else
- {
- // Swap p/q
- side_calculator
- <
- typename inters_info::cs_tag,
- typename inters_info::robust_point2_type,
- typename inters_info::robust_point1_type,
- typename inters_info::side_strategy_type
- > swapped_side_calc(inters.rqi(), inters.rqj(), inters.rqk(),
- inters.rpi(), inters.rpj(), inters.rpk(),
- inters.get_side_strategy());
-
- policy::template apply<1>(qi, qj, qk, pi, pj, pk,
- tp, inters.i_info(), inters.d_info(),
- swapped_side_calc);
- }
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
- }
- break;
- case 'i' :
- {
- crosses<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info());
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
- }
- break;
- case 't' :
- {
- // Both touch (both arrive there)
- touch<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(), inters.sides());
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
- }
- break;
- case 'e':
- {
- if ( ! inters.d_info().opposite )
- {
- // Both equal
- // or collinear-and-ending at intersection point
- equal<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(), inters.sides());
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
- }
- else
- {
- equal_opposite
- <
- TurnInfo,
- AssignPolicy
- >::apply(pi, qi,
- tp, out, inters);
- }
- }
- break;
- case 'c' :
- {
- // Collinear
- if ( ! inters.d_info().opposite )
- {
-
- if ( inters.d_info().arrival[0] == 0 )
- {
- // Collinear, but similar thus handled as equal
- equal<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(), inters.sides());
-
- // override assigned method
- tp.method = method_collinear;
- }
- else
- {
- collinear<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(), inters.sides());
- }
-
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
- }
- else
- {
- collinear_opposite
- <
- TurnInfo,
- AssignPolicy
- >::apply(pi, pj, pk, qi, qj, qk,
- tp, out, inters, inters.sides());
- }
- }
- break;
- case '0' :
- {
- // degenerate points
- if (AssignPolicy::include_degenerate)
- {
- only_convert::apply(tp, inters.i_info());
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
- }
- }
- break;
- default :
- {
-#if defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS)
- std::cout << "TURN: Unknown method: " << method << std::endl;
-#endif
-#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
- BOOST_THROW_EXCEPTION(turn_info_exception(method));
-#endif
- }
- break;
- }
-
- return out;
- }
-};
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp
deleted file mode 100644
index 48716634c54..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp
+++ /dev/null
@@ -1,667 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_FOR_ENDPOINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_FOR_ENDPOINT_HPP
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
-#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
-
-namespace boost { namespace geometry {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay {
-
-// SEGMENT_INTERSECTION RESULT
-
-// C H0 H1 A0 A1 O IP1 IP2
-
-// D0 and D1 == 0
-
-// |--------> 2 0 0 0 0 F i/i x/x
-// |-------->
-//
-// |--------> 2 0 0 0 0 T i/x x/i
-// <--------|
-//
-// |-----> 1 0 0 0 0 T x/x
-// <-----|
-//
-
-// |---------> 2 0 0 0 1 T i/x x/i
-// <----|
-//
-// |---------> 2 0 0 0 0 F i/i x/x
-// |---->
-//
-// |---------> 2 0 0 -1 1 F i/i u/x
-// |---->
-//
-// |---------> 2 0 0 -1 0 T i/x u/i
-// <----|
-
-// |-------> 2 0 0 1 -1 F and i/i x/u
-// |-------> 2 0 0 -1 1 F symetric i/i u/x
-// |------->
-//
-// |-------> 2 0 0 -1 -1 T i/u u/i
-// <-------|
-//
-// |-------> 2 0 0 1 1 T i/x x/i
-// <-------|
-//
-// |--------> 2 0 0 -1 1 F i/i u/x
-// |---->
-//
-// |--------> 2 0 0 -1 1 T i/x u/i
-// <----|
-
-// |-----> 1 -1 -1 -1 -1 T u/u
-// <-----|
-//
-// |-----> 1 -1 0 -1 0 F and u/x
-// |-----> 1 0 -1 0 -1 F symetric x/u
-// |----->
-
-// D0 or D1 != 0
-
-// ^
-// |
-// + 1 -1 1 -1 1 F and u/x (P is vertical)
-// |--------> 1 1 -1 1 -1 F symetric x/u (P is horizontal)
-// ^
-// |
-// +
-//
-// +
-// |
-// v
-// |--------> 1 1 1 1 1 F x/x (P is vertical)
-//
-// ^
-// |
-// +
-// |--------> 1 -1 -1 -1 -1 F u/u (P is vertical)
-//
-// ^
-// |
-// +
-// |--------> 1 0 -1 0 -1 F u/u (P is vertical)
-//
-// +
-// |
-// v
-// |--------> 1 0 1 0 1 F u/x (P is vertical)
-//
-
-class linear_intersections
-{
-public:
- template <typename Point1, typename Point2, typename IntersectionResult>
- linear_intersections(Point1 const& pi,
- Point2 const& qi,
- IntersectionResult const& result,
- bool is_p_last, bool is_q_last)
- {
- int arrival_a = result.template get<1>().arrival[0];
- int arrival_b = result.template get<1>().arrival[1];
- bool same_dirs = result.template get<1>().dir_a == 0
- && result.template get<1>().dir_b == 0;
-
- if ( same_dirs )
- {
- if ( result.template get<0>().count == 2 )
- {
- if ( ! result.template get<1>().opposite )
- {
- ips[0].p_operation = operation_intersection;
- ips[0].q_operation = operation_intersection;
- ips[1].p_operation = union_or_blocked_same_dirs(arrival_a, is_p_last);
- ips[1].q_operation = union_or_blocked_same_dirs(arrival_b, is_q_last);
-
- ips[0].is_pi
- = equals::equals_point_point(
- pi, result.template get<0>().intersections[0]);
- ips[0].is_qi
- = equals::equals_point_point(
- qi, result.template get<0>().intersections[0]);
- ips[1].is_pj = arrival_a != -1;
- ips[1].is_qj = arrival_b != -1;
- }
- else
- {
- ips[0].p_operation = operation_intersection;
- ips[0].q_operation = union_or_blocked_same_dirs(arrival_b, is_q_last);
- ips[1].p_operation = union_or_blocked_same_dirs(arrival_a, is_p_last);
- ips[1].q_operation = operation_intersection;
-
- ips[0].is_pi = arrival_b != 1;
- ips[0].is_qj = arrival_b != -1;
- ips[1].is_pj = arrival_a != -1;
- ips[1].is_qi = arrival_a != 1;
- }
- }
- else
- {
- BOOST_GEOMETRY_ASSERT(result.template get<0>().count == 1);
- ips[0].p_operation = union_or_blocked_same_dirs(arrival_a, is_p_last);
- ips[0].q_operation = union_or_blocked_same_dirs(arrival_b, is_q_last);
-
- ips[0].is_pi = arrival_a == -1;
- ips[0].is_qi = arrival_b == -1;
- ips[0].is_pj = arrival_a == 0;
- ips[0].is_qj = arrival_b == 0;
- }
- }
- else
- {
- ips[0].p_operation = union_or_blocked_different_dirs(arrival_a, is_p_last);
- ips[0].q_operation = union_or_blocked_different_dirs(arrival_b, is_q_last);
-
- ips[0].is_pi = arrival_a == -1;
- ips[0].is_qi = arrival_b == -1;
- ips[0].is_pj = arrival_a == 1;
- ips[0].is_qj = arrival_b == 1;
- }
- }
-
- struct ip_info
- {
- inline ip_info()
- : p_operation(operation_none), q_operation(operation_none)
- , is_pi(false), is_pj(false), is_qi(false), is_qj(false)
- {}
-
- operation_type p_operation, q_operation;
- bool is_pi, is_pj, is_qi, is_qj;
- };
-
- template <std::size_t I>
- ip_info const& get() const
- {
- BOOST_STATIC_ASSERT(I < 2);
- return ips[I];
- }
-
-private:
-
- // only if collinear (same_dirs)
- static inline operation_type union_or_blocked_same_dirs(int arrival, bool is_last)
- {
- if ( arrival == 1 )
- return operation_blocked;
- else if ( arrival == -1 )
- return operation_union;
- else
- return is_last ? operation_blocked : operation_union;
- //return operation_blocked;
- }
-
- // only if not collinear (!same_dirs)
- static inline operation_type union_or_blocked_different_dirs(int arrival, bool is_last)
- {
- if ( arrival == 1 )
- //return operation_blocked;
- return is_last ? operation_blocked : operation_union;
- else
- return operation_union;
- }
-
- ip_info ips[2];
-};
-
-template <typename AssignPolicy, bool EnableFirst, bool EnableLast>
-struct get_turn_info_for_endpoint
-{
- BOOST_STATIC_ASSERT(EnableFirst || EnableLast);
-
- template<typename Point1,
- typename Point2,
- typename TurnInfo,
- typename IntersectionInfo,
- typename OutputIterator
- >
- static inline bool apply(Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
- bool is_p_first, bool is_p_last,
- bool is_q_first, bool is_q_last,
- TurnInfo const& tp_model,
- IntersectionInfo const& inters,
- method_type /*method*/,
- OutputIterator out)
- {
- std::size_t ip_count = inters.i_info().count;
- // no intersection points
- if ( ip_count == 0 )
- return false;
-
- if ( !is_p_first && !is_p_last && !is_q_first && !is_q_last )
- return false;
-
- linear_intersections intersections(pi, qi, inters.result(), is_p_last, is_q_last);
-
- bool append0_last
- = analyse_segment_and_assign_ip(pi, pj, pk, qi, qj, qk,
- is_p_first, is_p_last, is_q_first, is_q_last,
- intersections.template get<0>(),
- tp_model, inters, 0, out);
-
- // NOTE: opposite && ip_count == 1 may be true!
- bool opposite = inters.d_info().opposite;
-
- // don't ignore only for collinear opposite
- bool result_ignore_ip0 = append0_last && ( ip_count == 1 || !opposite );
-
- if ( intersections.template get<1>().p_operation == operation_none )
- return result_ignore_ip0;
-
- bool append1_last
- = analyse_segment_and_assign_ip(pi, pj, pk, qi, qj, qk,
- is_p_first, is_p_last, is_q_first, is_q_last,
- intersections.template get<1>(),
- tp_model, inters, 1, out);
-
- // don't ignore only for collinear opposite
- bool result_ignore_ip1 = append1_last && !opposite /*&& ip_count == 2*/;
-
- return result_ignore_ip0 || result_ignore_ip1;
- }
-
- template <typename Point1,
- typename Point2,
- typename TurnInfo,
- typename IntersectionInfo,
- typename OutputIterator>
- static inline
- bool analyse_segment_and_assign_ip(Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
- bool is_p_first, bool is_p_last,
- bool is_q_first, bool is_q_last,
- linear_intersections::ip_info const& ip_info,
- TurnInfo const& tp_model,
- IntersectionInfo const& inters,
- unsigned int ip_index,
- OutputIterator out)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_GET_TURNS_LINEAR_LINEAR
- // may this give false positives for INTs?
- typename IntersectionResult::point_type const&
- inters_pt = result.template get<0>().intersections[ip_index];
- BOOST_GEOMETRY_ASSERT(ip_info.is_pi == equals::equals_point_point(pi, inters_pt));
- BOOST_GEOMETRY_ASSERT(ip_info.is_qi == equals::equals_point_point(qi, inters_pt));
- BOOST_GEOMETRY_ASSERT(ip_info.is_pj == equals::equals_point_point(pj, inters_pt));
- BOOST_GEOMETRY_ASSERT(ip_info.is_qj == equals::equals_point_point(qj, inters_pt));
-#endif
-
- // TODO - calculate first/last only if needed
- bool is_p_first_ip = is_p_first && ip_info.is_pi;
- bool is_p_last_ip = is_p_last && ip_info.is_pj;
- bool is_q_first_ip = is_q_first && ip_info.is_qi;
- bool is_q_last_ip = is_q_last && ip_info.is_qj;
- bool append_first = EnableFirst && (is_p_first_ip || is_q_first_ip);
- bool append_last = EnableLast && (is_p_last_ip || is_q_last_ip);
-
- operation_type p_operation = ip_info.p_operation;
- operation_type q_operation = ip_info.q_operation;
-
- if ( append_first || append_last )
- {
- bool handled = handle_internal<0>(pi, pj, pk, qi, qj, qk,
- inters.rpi(), inters.rpj(), inters.rpk(),
- inters.rqi(), inters.rqj(), inters.rqk(),
- is_p_first_ip, is_p_last_ip,
- is_q_first_ip, is_q_last_ip,
- ip_info.is_qi, ip_info.is_qj,
- tp_model, inters, ip_index,
- p_operation, q_operation);
- if ( !handled )
- {
- handle_internal<1>(qi, qj, qk, pi, pj, pk,
- inters.rqi(), inters.rqj(), inters.rqk(),
- inters.rpi(), inters.rpj(), inters.rpk(),
- is_q_first_ip, is_q_last_ip,
- is_p_first_ip, is_p_last_ip,
- ip_info.is_pi, ip_info.is_pj,
- tp_model, inters, ip_index,
- q_operation, p_operation);
- }
-
- if ( p_operation != operation_none )
- {
- method_type method = endpoint_ip_method(ip_info.is_pi, ip_info.is_pj,
- ip_info.is_qi, ip_info.is_qj);
- turn_position p_pos = ip_position(is_p_first_ip, is_p_last_ip);
- turn_position q_pos = ip_position(is_q_first_ip, is_q_last_ip);
-
- // handle spikes
-
- // P is spike and should be handled
- if ( !is_p_last
- && ip_info.is_pj // this check is redundant (also in is_spike_p) but faster
- && inters.i_info().count == 2
- && inters.is_spike_p() )
- {
- assign(pi, qi, inters.result(), ip_index, method, operation_blocked, q_operation,
- p_pos, q_pos, is_p_first_ip, is_q_first_ip, true, false, tp_model, out);
- assign(pi, qi, inters.result(), ip_index, method, operation_intersection, q_operation,
- p_pos, q_pos, is_p_first_ip, is_q_first_ip, true, false, tp_model, out);
- }
- // Q is spike and should be handled
- else if ( !is_q_last
- && ip_info.is_qj // this check is redundant (also in is_spike_q) but faster
- && inters.i_info().count == 2
- && inters.is_spike_q() )
- {
- assign(pi, qi, inters.result(), ip_index, method, p_operation, operation_blocked,
- p_pos, q_pos, is_p_first_ip, is_q_first_ip, false, true, tp_model, out);
- assign(pi, qi, inters.result(), ip_index, method, p_operation, operation_intersection,
- p_pos, q_pos, is_p_first_ip, is_q_first_ip, false, true, tp_model, out);
- }
- // no spikes
- else
- {
- assign(pi, qi, inters.result(), ip_index, method, p_operation, q_operation,
- p_pos, q_pos, is_p_first_ip, is_q_first_ip, false, false, tp_model, out);
- }
- }
- }
-
- return append_last;
- }
-
- // TODO: IT'S ALSO PROBABLE THAT ALL THIS FUNCTION COULD BE INTEGRATED WITH handle_segment
- // however now it's lazily calculated and then it would be always calculated
-
- template<std::size_t G1Index,
- typename Point1,
- typename Point2,
- typename RobustPoint1,
- typename RobustPoint2,
- typename TurnInfo,
- typename IntersectionInfo
- >
- static inline bool handle_internal(Point1 const& /*i1*/, Point1 const& /*j1*/, Point1 const& /*k1*/,
- Point2 const& i2, Point2 const& j2, Point2 const& /*k2*/,
- RobustPoint1 const& ri1, RobustPoint1 const& rj1, RobustPoint1 const& /*rk1*/,
- RobustPoint2 const& ri2, RobustPoint2 const& rj2, RobustPoint2 const& rk2,
- bool first1, bool last1, bool first2, bool last2,
- bool ip_i2, bool ip_j2, TurnInfo const& tp_model,
- IntersectionInfo const& inters, unsigned int ip_index,
- operation_type & op1, operation_type & op2)
- {
- typedef typename cs_tag<typename TurnInfo::point_type>::type cs_tag;
-
- boost::ignore_unused_variable_warning(i2);
- boost::ignore_unused_variable_warning(j2);
- boost::ignore_unused_variable_warning(ip_index);
- boost::ignore_unused_variable_warning(tp_model);
-
- if ( !first2 && !last2 )
- {
- if ( first1 )
- {
-#ifdef BOOST_GEOMETRY_DEBUG_GET_TURNS_LINEAR_LINEAR
- // may this give false positives for INTs?
- typename IntersectionResult::point_type const&
- inters_pt = inters.i_info().intersections[ip_index];
- BOOST_GEOMETRY_ASSERT(ip_i2 == equals::equals_point_point(i2, inters_pt));
- BOOST_GEOMETRY_ASSERT(ip_j2 == equals::equals_point_point(j2, inters_pt));
-#endif
- if ( ip_i2 )
- {
- // don't output this IP - for the first point of other geometry segment
- op1 = operation_none;
- op2 = operation_none;
- return true;
- }
- else if ( ip_j2 )
- {
- side_calculator<cs_tag,
- RobustPoint1, RobustPoint2,
- typename IntersectionInfo::side_strategy_type,
- RobustPoint2>
- side_calc(ri2, ri1, rj1, ri2, rj2, rk2, inters.get_side_strategy());
-
- std::pair<operation_type, operation_type>
- operations = operations_of_equal(side_calc);
-
-// TODO: must the above be calculated?
-// wouldn't it be enough to check if segments are collinear?
-
- if ( operations_both(operations, operation_continue) )
- {
- if ( op1 != operation_union
- || op2 != operation_union
- || ! ( G1Index == 0 ? inters.is_spike_q() : inters.is_spike_p() ) )
- {
- // THIS IS WRT THE ORIGINAL SEGMENTS! NOT THE ONES ABOVE!
- bool opposite = inters.d_info().opposite;
-
- op1 = operation_intersection;
- op2 = opposite ? operation_union : operation_intersection;
- }
- }
- else
- {
- BOOST_GEOMETRY_ASSERT(operations_combination(operations, operation_intersection, operation_union));
- //op1 = operation_union;
- //op2 = operation_union;
- }
-
- return true;
- }
- // else do nothing - shouldn't be handled this way
- }
- else if ( last1 )
- {
-#ifdef BOOST_GEOMETRY_DEBUG_GET_TURNS_LINEAR_LINEAR
- // may this give false positives for INTs?
- typename IntersectionResult::point_type const&
- inters_pt = inters.i_info().intersections[ip_index];
- BOOST_GEOMETRY_ASSERT(ip_i2 == equals::equals_point_point(i2, inters_pt));
- BOOST_GEOMETRY_ASSERT(ip_j2 == equals::equals_point_point(j2, inters_pt));
-#endif
- if ( ip_i2 )
- {
- // don't output this IP - for the first point of other geometry segment
- op1 = operation_none;
- op2 = operation_none;
- return true;
- }
- else if ( ip_j2 )
- {
- side_calculator<cs_tag, RobustPoint1, RobustPoint2,
- typename IntersectionInfo::side_strategy_type,
- RobustPoint2>
- side_calc(ri2, rj1, ri1, ri2, rj2, rk2, inters.get_side_strategy());
-
- std::pair<operation_type, operation_type>
- operations = operations_of_equal(side_calc);
-
-// TODO: must the above be calculated?
-// wouldn't it be enough to check if segments are collinear?
-
- if ( operations_both(operations, operation_continue) )
- {
- if ( op1 != operation_blocked
- || op2 != operation_union
- || ! ( G1Index == 0 ? inters.is_spike_q() : inters.is_spike_p() ) )
- {
- // THIS IS WRT THE ORIGINAL SEGMENTS! NOT THE ONES ABOVE!
- bool second_going_out = inters.i_info().count > 1;
-
- op1 = operation_blocked;
- op2 = second_going_out ? operation_union : operation_intersection;
- }
- }
- else
- {
- BOOST_GEOMETRY_ASSERT(operations_combination(operations, operation_intersection, operation_union));
- //op1 = operation_blocked;
- //op2 = operation_union;
- }
-
- return true;
- }
- // else do nothing - shouldn't be handled this way
- }
- // else do nothing - shouldn't be handled this way
- }
-
- return false;
- }
-
- static inline method_type endpoint_ip_method(bool ip_pi, bool ip_pj, bool ip_qi, bool ip_qj)
- {
- if ( (ip_pi || ip_pj) && (ip_qi || ip_qj) )
- return method_touch;
- else
- return method_touch_interior;
- }
-
- static inline turn_position ip_position(bool is_ip_first_i, bool is_ip_last_j)
- {
- return is_ip_first_i ? position_front :
- ( is_ip_last_j ? position_back : position_middle );
- }
-
- template <typename Point1,
- typename Point2,
- typename IntersectionResult,
- typename TurnInfo,
- typename OutputIterator>
- static inline void assign(Point1 const& pi, Point2 const& qi,
- IntersectionResult const& result,
- unsigned int ip_index,
- method_type method,
- operation_type op0, operation_type op1,
- turn_position pos0, turn_position pos1,
- bool is_p_first_ip, bool is_q_first_ip,
- bool is_p_spike, bool is_q_spike,
- TurnInfo const& tp_model,
- OutputIterator out)
- {
- TurnInfo tp = tp_model;
-
- //geometry::convert(ip, tp.point);
- //tp.method = method;
- base_turn_handler::assign_point(tp, method, result.template get<0>(), ip_index);
-
- tp.operations[0].operation = op0;
- tp.operations[1].operation = op1;
- tp.operations[0].position = pos0;
- tp.operations[1].position = pos1;
-
- if ( result.template get<0>().count > 1 )
- {
- // NOTE: is_collinear is NOT set for the first endpoint
- // for which there is no preceding segment
-
- //BOOST_GEOMETRY_ASSERT( result.template get<1>().dir_a == 0 && result.template get<1>().dir_b == 0 );
- if ( ! is_p_first_ip )
- {
- tp.operations[0].is_collinear = op0 != operation_intersection
- || is_p_spike;
- }
-
- if ( ! is_q_first_ip )
- {
- tp.operations[1].is_collinear = op1 != operation_intersection
- || is_q_spike;
- }
- }
- else //if ( result.template get<0>().count == 1 )
- {
- if ( op0 == operation_blocked && op1 == operation_intersection )
- {
- tp.operations[0].is_collinear = true;
- }
- else if ( op0 == operation_intersection && op1 == operation_blocked )
- {
- tp.operations[1].is_collinear = true;
- }
- }
-
- // TODO: this should get an intersection_info, which is unavailable here
- // Because the assign_null policy accepts any structure, we pass the result instead for now
- AssignPolicy::apply(tp, pi, qi, result);
- *out++ = tp;
- }
-
- template <typename SidePolicy>
- static inline std::pair<operation_type, operation_type> operations_of_equal(SidePolicy const& side)
- {
- int const side_pk_q2 = side.pk_wrt_q2();
- int const side_pk_p = side.pk_wrt_p1();
- int const side_qk_p = side.qk_wrt_p1();
-
- // If pk is collinear with qj-qk, they continue collinearly.
- // This can be on either side of p1 (== q1), or collinear
- // The second condition checks if they do not continue
- // oppositely
- if ( side_pk_q2 == 0 && side_pk_p == side_qk_p )
- {
- return std::make_pair(operation_continue, operation_continue);
- }
-
- // If they turn to same side (not opposite sides)
- if ( ! base_turn_handler::opposite(side_pk_p, side_qk_p) )
- {
- // If pk is left of q2 or collinear: p: union, q: intersection
- if ( side_pk_q2 != -1 )
- {
- return std::make_pair(operation_union, operation_intersection);
- }
- else
- {
- return std::make_pair(operation_intersection, operation_union);
- }
- }
- else
- {
- // They turn opposite sides. If p turns left (or collinear),
- // p: union, q: intersection
- if ( side_pk_p != -1 )
- {
- return std::make_pair(operation_union, operation_intersection);
- }
- else
- {
- return std::make_pair(operation_intersection, operation_union);
- }
- }
- }
-
- static inline bool operations_both(
- std::pair<operation_type, operation_type> const& operations,
- operation_type const op)
- {
- return operations.first == op && operations.second == op;
- }
-
- static inline bool operations_combination(
- std::pair<operation_type, operation_type> const& operations,
- operation_type const op1, operation_type const op2)
- {
- return ( operations.first == op1 && operations.second == op2 )
- || ( operations.first == op2 && operations.second == op1 );
- }
-};
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_FOR_ENDPOINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp
deleted file mode 100644
index f8247cd2407..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp
+++ /dev/null
@@ -1,388 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HELPERS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HELPERS_HPP
-
-#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
-
-namespace boost { namespace geometry {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay {
-
-enum turn_position { position_middle, position_front, position_back };
-
-template <typename Point, typename SegmentRatio>
-struct turn_operation_linear
- : public turn_operation<Point, SegmentRatio>
-{
- turn_operation_linear()
- : position(position_middle)
- , is_collinear(false)
- {}
-
- turn_position position;
- bool is_collinear; // valid only for Linear geometry
-};
-
-template <typename TurnPointCSTag, typename PointP, typename PointQ,
- typename SideStrategy,
- typename Pi = PointP, typename Pj = PointP, typename Pk = PointP,
- typename Qi = PointQ, typename Qj = PointQ, typename Qk = PointQ
->
-struct side_calculator
-{
- inline side_calculator(Pi const& pi, Pj const& pj, Pk const& pk,
- Qi const& qi, Qj const& qj, Qk const& qk,
- SideStrategy const& side_strategy)
- : m_pi(pi), m_pj(pj), m_pk(pk)
- , m_qi(qi), m_qj(qj), m_qk(qk)
- , m_side_strategy(side_strategy)
- {}
-
- inline int pk_wrt_p1() const { return m_side_strategy.apply(m_pi, m_pj, m_pk); }
- inline int pk_wrt_q1() const { return m_side_strategy.apply(m_qi, m_qj, m_pk); }
- inline int qk_wrt_p1() const { return m_side_strategy.apply(m_pi, m_pj, m_qk); }
- inline int qk_wrt_q1() const { return m_side_strategy.apply(m_qi, m_qj, m_qk); }
-
- inline int pk_wrt_q2() const { return m_side_strategy.apply(m_qj, m_qk, m_pk); }
- inline int qk_wrt_p2() const { return m_side_strategy.apply(m_pj, m_pk, m_qk); }
-
- Pi const& m_pi;
- Pj const& m_pj;
- Pk const& m_pk;
- Qi const& m_qi;
- Qj const& m_qj;
- Qk const& m_qk;
-
- SideStrategy m_side_strategy;
-};
-
-template <typename Point1, typename Point2, typename RobustPolicy>
-struct robust_points
-{
- typedef typename geometry::robust_point_type
- <
- Point1, RobustPolicy
- >::type robust_point1_type;
-
- // TODO: define robust_point2_type using Point2?
- typedef robust_point1_type robust_point2_type;
-
- inline robust_points(Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
- RobustPolicy const& robust_policy)
- {
- geometry::recalculate(m_rpi, pi, robust_policy);
- geometry::recalculate(m_rpj, pj, robust_policy);
- geometry::recalculate(m_rpk, pk, robust_policy);
- geometry::recalculate(m_rqi, qi, robust_policy);
- geometry::recalculate(m_rqj, qj, robust_policy);
- geometry::recalculate(m_rqk, qk, robust_policy);
- }
-
- robust_point1_type m_rpi, m_rpj, m_rpk;
- robust_point2_type m_rqi, m_rqj, m_rqk;
-};
-
-template <typename Point1, typename Point2, typename TurnPoint, typename IntersectionStrategy, typename RobustPolicy>
-class intersection_info_base
- : private robust_points<Point1, Point2, RobustPolicy>
-{
- typedef robust_points<Point1, Point2, RobustPolicy> base;
-
-public:
- typedef Point1 point1_type;
- typedef Point2 point2_type;
-
- typedef typename base::robust_point1_type robust_point1_type;
- typedef typename base::robust_point2_type robust_point2_type;
-
- typedef typename cs_tag<TurnPoint>::type cs_tag;
-
- typedef typename IntersectionStrategy::side_strategy_type side_strategy_type;
- typedef side_calculator<cs_tag, robust_point1_type, robust_point2_type, side_strategy_type> side_calculator_type;
-
- intersection_info_base(Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy)
- : base(pi, pj, pk, qi, qj, qk, robust_policy)
- , m_side_calc(base::m_rpi, base::m_rpj, base::m_rpk,
- base::m_rqi, base::m_rqj, base::m_rqk,
- intersection_strategy.get_side_strategy())
- , m_pi(pi), m_pj(pj), m_pk(pk)
- , m_qi(qi), m_qj(qj), m_qk(qk)
- {}
-
- inline Point1 const& pi() const { return m_pi; }
- inline Point1 const& pj() const { return m_pj; }
- inline Point1 const& pk() const { return m_pk; }
-
- inline Point2 const& qi() const { return m_qi; }
- inline Point2 const& qj() const { return m_qj; }
- inline Point2 const& qk() const { return m_qk; }
-
- inline robust_point1_type const& rpi() const { return base::m_rpi; }
- inline robust_point1_type const& rpj() const { return base::m_rpj; }
- inline robust_point1_type const& rpk() const { return base::m_rpk; }
-
- inline robust_point2_type const& rqi() const { return base::m_rqi; }
- inline robust_point2_type const& rqj() const { return base::m_rqj; }
- inline robust_point2_type const& rqk() const { return base::m_rqk; }
-
- inline side_calculator_type const& sides() const { return m_side_calc; }
-
-private:
- side_calculator_type m_side_calc;
-
- point1_type const& m_pi;
- point1_type const& m_pj;
- point1_type const& m_pk;
- point2_type const& m_qi;
- point2_type const& m_qj;
- point2_type const& m_qk;
-};
-
-template <typename Point1, typename Point2, typename TurnPoint, typename IntersectionStrategy>
-class intersection_info_base<Point1, Point2, TurnPoint, IntersectionStrategy, detail::no_rescale_policy>
-{
-public:
- typedef Point1 point1_type;
- typedef Point2 point2_type;
-
- typedef Point1 robust_point1_type;
- typedef Point2 robust_point2_type;
-
- typedef typename cs_tag<TurnPoint>::type cs_tag;
-
- typedef typename IntersectionStrategy::side_strategy_type side_strategy_type;
- typedef side_calculator<cs_tag, Point1, Point2, side_strategy_type> side_calculator_type;
-
- intersection_info_base(Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
- IntersectionStrategy const& intersection_strategy,
- no_rescale_policy const& /*robust_policy*/)
- : m_side_calc(pi, pj, pk, qi, qj, qk,
- intersection_strategy.get_side_strategy())
- {}
-
- inline Point1 const& pi() const { return m_side_calc.m_pi; }
- inline Point1 const& pj() const { return m_side_calc.m_pj; }
- inline Point1 const& pk() const { return m_side_calc.m_pk; }
-
- inline Point2 const& qi() const { return m_side_calc.m_qi; }
- inline Point2 const& qj() const { return m_side_calc.m_qj; }
- inline Point2 const& qk() const { return m_side_calc.m_qk; }
-
- inline Point1 const& rpi() const { return pi(); }
- inline Point1 const& rpj() const { return pj(); }
- inline Point1 const& rpk() const { return pk(); }
-
- inline Point2 const& rqi() const { return qi(); }
- inline Point2 const& rqj() const { return qj(); }
- inline Point2 const& rqk() const { return qk(); }
-
- inline side_calculator_type const& sides() const { return m_side_calc; }
-
-private:
- side_calculator_type m_side_calc;
-};
-
-
-template
-<
- typename Point1,
- typename Point2,
- typename TurnPoint,
- typename IntersectionStrategy,
- typename RobustPolicy
->
-class intersection_info
- : public intersection_info_base<Point1, Point2, TurnPoint, IntersectionStrategy, RobustPolicy>
-{
- typedef intersection_info_base<Point1, Point2, TurnPoint, IntersectionStrategy, RobustPolicy> base;
-
-public:
- typedef segment_intersection_points
- <
- TurnPoint,
- typename geometry::segment_ratio_type
- <
- TurnPoint, RobustPolicy
- >::type
- > intersection_point_type;
-
- // NOTE: formerly defined in intersection_strategies
- typedef policies::relate::segments_tupled
- <
- policies::relate::segments_intersection_points
- <
- intersection_point_type
- >,
- policies::relate::segments_direction
- > intersection_policy_type;
-
- typedef IntersectionStrategy intersection_strategy_type;
- typedef typename IntersectionStrategy::side_strategy_type side_strategy_type;
-
- typedef model::referring_segment<Point1 const> segment_type1;
- typedef model::referring_segment<Point2 const> segment_type2;
- typedef typename base::side_calculator_type side_calculator_type;
-
- typedef typename intersection_policy_type::return_type result_type;
- typedef typename boost::tuples::element<0, result_type>::type i_info_type; // intersection_info
- typedef typename boost::tuples::element<1, result_type>::type d_info_type; // dir_info
-
- intersection_info(Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy)
- : base(pi, pj, pk, qi, qj, qk, intersection_strategy, robust_policy)
- , m_result(intersection_strategy.apply(
- segment_type1(pi, pj),
- segment_type2(qi, qj),
- intersection_policy_type(),
- robust_policy,
- base::rpi(), base::rpj(),
- base::rqi(), base::rqj()))
- , m_intersection_strategy(intersection_strategy)
- , m_robust_policy(robust_policy)
- {}
-
- inline result_type const& result() const { return m_result; }
- inline i_info_type const& i_info() const { return m_result.template get<0>(); }
- inline d_info_type const& d_info() const { return m_result.template get<1>(); }
-
- inline intersection_strategy_type const& get_intersection_strategy() const
- {
- return m_intersection_strategy;
- }
-
- inline side_strategy_type get_side_strategy() const
- {
- return m_intersection_strategy.get_side_strategy();
- }
-
- // TODO: it's more like is_spike_ip_p
- inline bool is_spike_p() const
- {
- if (base::sides().pk_wrt_p1() == 0)
- {
- if (! is_ip_j<0>())
- {
- return false;
- }
-
- int const qk_p1 = base::sides().qk_wrt_p1();
- int const qk_p2 = base::sides().qk_wrt_p2();
-
- if (qk_p1 == -qk_p2)
- {
- if (qk_p1 == 0)
- {
- return is_spike_of_collinear(base::pi(), base::pj(),
- base::pk());
- }
-
- return true;
- }
- }
-
- return false;
- }
-
- // TODO: it's more like is_spike_ip_q
- inline bool is_spike_q() const
- {
- if (base::sides().qk_wrt_q1() == 0)
- {
- if (! is_ip_j<1>())
- {
- return false;
- }
-
- int const pk_q1 = base::sides().pk_wrt_q1();
- int const pk_q2 = base::sides().pk_wrt_q2();
-
- if (pk_q1 == -pk_q2)
- {
- if (pk_q1 == 0)
- {
- return is_spike_of_collinear(base::qi(), base::qj(),
- base::qk());
- }
-
- return true;
- }
- }
-
- return false;
- }
-
-private:
- template <typename Point>
- inline bool is_spike_of_collinear(Point const& i, Point const& j,
- Point const& k) const
- {
- typedef model::referring_segment<Point const> seg;
-
- // no need to calcualte direction info
- typedef policies::relate::segments_intersection_points
- <
- intersection_point_type
- > policy_type;
-
- typename policy_type::return_type const result
- = m_intersection_strategy.apply(seg(i, j), seg(j, k),
- policy_type(),
- m_robust_policy);
-
- return result.count == 2;
- }
-
- template <std::size_t OpId>
- bool is_ip_j() const
- {
- int arrival = d_info().arrival[OpId];
- bool same_dirs = d_info().dir_a == 0 && d_info().dir_b == 0;
-
- if (same_dirs)
- {
- if (i_info().count == 2)
- {
- return arrival != -1;
- }
- else
- {
- return arrival == 0;
- }
- }
- else
- {
- return arrival == 1;
- }
- }
-
- result_type m_result;
- IntersectionStrategy const& m_intersection_strategy;
- RobustPolicy const& m_robust_policy;
-};
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_HELPERS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp
deleted file mode 100644
index 46c1305cd79..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp
+++ /dev/null
@@ -1,893 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_LA_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_LA_HPP
-
-#include <boost/throw_exception.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp>
-
-// TEMP, for spikes detector
-//#include <boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp>
-
-namespace boost { namespace geometry {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay {
-
-template<typename AssignPolicy>
-struct get_turn_info_linear_areal
-{
- // Currently only Linear spikes are handled
- // Areal spikes are ignored
- static const bool handle_spikes = true;
-
- template
- <
- typename Point1,
- typename Point2,
- typename TurnInfo,
- typename IntersectionStrategy,
- typename RobustPolicy,
- typename OutputIterator
- >
- static inline OutputIterator apply(
- Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
- bool is_p_first, bool is_p_last,
- bool is_q_first, bool is_q_last,
- TurnInfo const& tp_model,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- OutputIterator out)
- {
- typedef intersection_info
- <
- Point1, Point2,
- typename TurnInfo::point_type,
- IntersectionStrategy,
- RobustPolicy
- > inters_info;
-
- inters_info inters(pi, pj, pk, qi, qj, qk, intersection_strategy, robust_policy);
-
- char const method = inters.d_info().how;
-
- // Copy, to copy possibly extended fields
- TurnInfo tp = tp_model;
-
- // Select method and apply
- switch(method)
- {
- case 'a' : // collinear, "at"
- case 'f' : // collinear, "from"
- case 's' : // starts from the middle
- get_turn_info_for_endpoint<true, true>(
- pi, pj, pk, qi, qj, qk,
- is_p_first, is_p_last, is_q_first, is_q_last,
- tp_model, inters, method_none, out);
- break;
-
- case 'd' : // disjoint: never do anything
- break;
-
- case 'm' :
- {
- if ( get_turn_info_for_endpoint<false, true>(
- pi, pj, pk, qi, qj, qk,
- is_p_first, is_p_last, is_q_first, is_q_last,
- tp_model, inters, method_touch_interior, out) )
- {
- // do nothing
- }
- else
- {
- typedef touch_interior
- <
- TurnInfo
- > policy;
-
- // If Q (1) arrives (1)
- if ( inters.d_info().arrival[1] == 1 )
- {
- policy::template apply<0>(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(),
- inters.sides());
- }
- else
- {
- // Swap p/q
- side_calculator
- <
- typename inters_info::cs_tag,
- typename inters_info::robust_point2_type,
- typename inters_info::robust_point1_type,
- typename inters_info::side_strategy_type
- > swapped_side_calc(inters.rqi(), inters.rqj(), inters.rqk(),
- inters.rpi(), inters.rpj(), inters.rpk(),
- inters.get_side_strategy());
- policy::template apply<1>(qi, qj, qk, pi, pj, pk,
- tp, inters.i_info(), inters.d_info(),
- swapped_side_calc);
- }
-
- if ( tp.operations[1].operation == operation_blocked )
- {
- tp.operations[0].is_collinear = true;
- }
-
- replace_method_and_operations_tm(tp.method,
- tp.operations[0].operation,
- tp.operations[1].operation);
-
- // this function assumes that 'u' must be set for a spike
- calculate_spike_operation(tp.operations[0].operation,
- inters, is_p_last);
-
- AssignPolicy::apply(tp, pi, qi, inters);
-
- *out++ = tp;
- }
- }
- break;
- case 'i' :
- {
- crosses<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info());
-
- replace_operations_i(tp.operations[0].operation, tp.operations[1].operation);
-
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
- }
- break;
- case 't' :
- {
- // Both touch (both arrive there)
- if ( get_turn_info_for_endpoint<false, true>(
- pi, pj, pk, qi, qj, qk,
- is_p_first, is_p_last, is_q_first, is_q_last,
- tp_model, inters, method_touch, out) )
- {
- // do nothing
- }
- else
- {
- touch<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(), inters.sides());
-
- if ( tp.operations[1].operation == operation_blocked )
- {
- tp.operations[0].is_collinear = true;
- }
-
- // workarounds for touch<> not taking spikes into account starts here
- // those was discovered empirically
- // touch<> is not symmetrical!
- // P spikes and Q spikes may produce various operations!
- // Only P spikes are valid for L/A
- // TODO: this is not optimal solution - think about rewriting touch<>
-
- if ( tp.operations[0].operation == operation_blocked )
- {
- // a spike on P on the same line with Q1
- if ( inters.is_spike_p() )
- {
- if ( inters.sides().qk_wrt_p1() == 0 )
- {
- tp.operations[0].is_collinear = true;
- }
- else
- {
- tp.operations[0].operation = operation_union;
- }
- }
- }
- else if ( tp.operations[0].operation == operation_continue
- && tp.operations[1].operation == operation_continue )
- {
- // P spike on the same line with Q2 (opposite)
- if ( inters.sides().pk_wrt_q1() == -inters.sides().qk_wrt_q1()
- && inters.is_spike_p() )
- {
- tp.operations[0].operation = operation_union;
- tp.operations[1].operation = operation_union;
- }
- }
- else if ( tp.operations[0].operation == operation_none
- && tp.operations[1].operation == operation_none )
- {
- // spike not handled by touch<>
- if ( inters.is_spike_p() )
- {
- tp.operations[0].operation = operation_intersection;
- tp.operations[1].operation = operation_union;
-
- if ( inters.sides().pk_wrt_q2() == 0 )
- {
- tp.operations[0].operation = operation_continue; // will be converted to i
- tp.operations[0].is_collinear = true;
- }
- }
- }
-
- // workarounds for touch<> not taking spikes into account ends here
-
- replace_method_and_operations_tm(tp.method,
- tp.operations[0].operation,
- tp.operations[1].operation);
-
- bool ignore_spike
- = calculate_spike_operation(tp.operations[0].operation,
- inters, is_p_last);
-
-// TODO: move this into the append_xxx and call for each turn?
- AssignPolicy::apply(tp, pi, qi, inters);
-
- if ( ! BOOST_GEOMETRY_CONDITION(handle_spikes)
- || ignore_spike
- || ! append_opposite_spikes<append_touches>( // for 'i' or 'c' i???
- tp, inters, is_p_last, is_q_last, out) )
- {
- *out++ = tp;
- }
- }
- }
- break;
- case 'e':
- {
- if ( get_turn_info_for_endpoint<true, true>(
- pi, pj, pk, qi, qj, qk,
- is_p_first, is_p_last, is_q_first, is_q_last,
- tp_model, inters, method_equal, out) )
- {
- // do nothing
- }
- else
- {
- tp.operations[0].is_collinear = true;
-
- if ( ! inters.d_info().opposite )
- {
- // Both equal
- // or collinear-and-ending at intersection point
- equal<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(), inters.sides());
-
- turn_transformer_ec<false> transformer(method_touch);
- transformer(tp);
-
-// TODO: move this into the append_xxx and call for each turn?
- AssignPolicy::apply(tp, pi, qi, inters);
-
- // conditionally handle spikes
- if ( ! BOOST_GEOMETRY_CONDITION(handle_spikes)
- || ! append_collinear_spikes(tp, inters, is_p_last, is_q_last,
- method_touch, append_equal, out) )
- {
- *out++ = tp; // no spikes
- }
- }
- else
- {
- equal_opposite
- <
- TurnInfo,
- AssignPolicy
- >::apply(pi, qi,
- tp, out, inters);
- }
- }
- }
- break;
- case 'c' :
- {
- // Collinear
- if ( get_turn_info_for_endpoint<true, true>(
- pi, pj, pk, qi, qj, qk,
- is_p_first, is_p_last, is_q_first, is_q_last,
- tp_model, inters, method_collinear, out) )
- {
- // do nothing
- }
- else
- {
- tp.operations[0].is_collinear = true;
-
- if ( ! inters.d_info().opposite )
- {
- method_type method_replace = method_touch_interior;
- append_version_c version = append_collinear;
-
- if ( inters.d_info().arrival[0] == 0 )
- {
- // Collinear, but similar thus handled as equal
- equal<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(), inters.sides());
-
- method_replace = method_touch;
- version = append_equal;
- }
- else
- {
- collinear<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(), inters.sides());
-
- //method_replace = method_touch_interior;
- //version = append_collinear;
- }
-
- turn_transformer_ec<false> transformer(method_replace);
- transformer(tp);
-
-// TODO: move this into the append_xxx and call for each turn?
- AssignPolicy::apply(tp, pi, qi, inters);
-
- // conditionally handle spikes
- if ( ! BOOST_GEOMETRY_CONDITION(handle_spikes)
- || ! append_collinear_spikes(tp, inters, is_p_last, is_q_last,
- method_replace, version, out) )
- {
- // no spikes
- *out++ = tp;
- }
- }
- else
- {
- // Is this always 'm' ?
- turn_transformer_ec<false> transformer(method_touch_interior);
-
- // conditionally handle spikes
- if ( BOOST_GEOMETRY_CONDITION(handle_spikes) )
- {
- append_opposite_spikes<append_collinear_opposite>(
- tp, inters, is_p_last, is_q_last, out);
- }
-
- // TODO: ignore for spikes?
- // E.g. pass is_p_valid = !is_p_last && !is_pj_spike,
- // the same with is_q_valid
-
- collinear_opposite
- <
- TurnInfo,
- AssignPolicy
- >::apply(pi, pj, pk, qi, qj, qk,
- tp, out, inters,
- inters.sides(), transformer,
- !is_p_last, true); // qk is always valid
- }
- }
- }
- break;
- case '0' :
- {
- // degenerate points
- if ( BOOST_GEOMETRY_CONDITION(AssignPolicy::include_degenerate) )
- {
- only_convert::apply(tp, inters.i_info());
-
- if ( is_p_first
- && equals::equals_point_point(pi, tp.point) )
- {
- tp.operations[0].position = position_front;
- }
- else if ( is_p_last
- && equals::equals_point_point(pj, tp.point) )
- {
- tp.operations[0].position = position_back;
- }
- // tp.operations[1].position = position_middle;
-
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
- }
- }
- break;
- default :
- {
-#if defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS)
- std::cout << "TURN: Unknown method: " << method << std::endl;
-#endif
-#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
- BOOST_THROW_EXCEPTION(turn_info_exception(method));
-#endif
- }
- break;
- }
-
- return out;
- }
-
- template <typename Operation,
- typename IntersectionInfo>
- static inline bool calculate_spike_operation(Operation & op,
- IntersectionInfo const& inters,
- bool is_p_last)
- {
- bool is_p_spike = ( op == operation_union || op == operation_intersection )
- && ! is_p_last
- && inters.is_spike_p();
-
- if ( is_p_spike )
- {
- int const pk_q1 = inters.sides().pk_wrt_q1();
-
- bool going_in = pk_q1 < 0; // Pk on the right
- bool going_out = pk_q1 > 0; // Pk on the left
-
- int const qk_q1 = inters.sides().qk_wrt_q1();
-
- // special cases
- if ( qk_q1 < 0 ) // Q turning R
- {
- // spike on the edge point
- // if it's already known that the spike is going out this musn't be checked
- if ( ! going_out
- && equals::equals_point_point(inters.rpj(), inters.rqj()) )
- {
- int const pk_q2 = inters.sides().pk_wrt_q2();
- going_in = pk_q1 < 0 && pk_q2 < 0; // Pk on the right of both
- going_out = pk_q1 > 0 || pk_q2 > 0; // Pk on the left of one of them
- }
- }
- else if ( qk_q1 > 0 ) // Q turning L
- {
- // spike on the edge point
- // if it's already known that the spike is going in this musn't be checked
- if ( ! going_in
- && equals::equals_point_point(inters.rpj(), inters.rqj()) )
- {
- int const pk_q2 = inters.sides().pk_wrt_q2();
- going_in = pk_q1 < 0 || pk_q2 < 0; // Pk on the right of one of them
- going_out = pk_q1 > 0 && pk_q2 > 0; // Pk on the left of both
- }
- }
-
- if ( going_in )
- {
- op = operation_intersection;
- return true;
- }
- else if ( going_out )
- {
- op = operation_union;
- return true;
- }
- }
-
- return false;
- }
-
- enum append_version_c { append_equal, append_collinear };
-
- template <typename TurnInfo,
- typename IntersectionInfo,
- typename OutIt>
- static inline bool append_collinear_spikes(TurnInfo & tp,
- IntersectionInfo const& inters,
- bool is_p_last, bool /*is_q_last*/,
- method_type method, append_version_c version,
- OutIt out)
- {
- // method == touch || touch_interior
- // both position == middle
-
- bool is_p_spike = ( version == append_equal ?
- ( tp.operations[0].operation == operation_union
- || tp.operations[0].operation == operation_intersection ) :
- tp.operations[0].operation == operation_continue )
- && ! is_p_last
- && inters.is_spike_p();
-
- // TODO: throw an exception for spike in Areal?
- /*bool is_q_spike = tp.operations[1].operation == operation_continue
- && inters.is_spike_q();
-
- // both are collinear spikes on the same IP, we can just follow both
- if ( is_p_spike && is_q_spike )
- {
- return false;
- }
- // spike on Linear - it's turning back on the boundary of Areal
- else*/
- if ( is_p_spike )
- {
- tp.method = method;
- tp.operations[0].operation = operation_blocked;
- tp.operations[1].operation = operation_union;
- *out++ = tp;
- tp.operations[0].operation = operation_continue; // boundary
- //tp.operations[1].operation = operation_union;
- *out++ = tp;
-
- return true;
- }
- // spike on Areal - Linear is going outside
- /*else if ( is_q_spike )
- {
- tp.method = method;
- tp.operations[0].operation = operation_union;
- tp.operations[1].operation = operation_continue;
- *out++ = tp;
- *out++ = tp;
-
- return true;
- }*/
-
- return false;
- }
-
- enum append_version_o { append_touches, append_collinear_opposite };
-
- template <append_version_o Version,
- typename TurnInfo,
- typename IntersectionInfo,
- typename OutIt>
- static inline bool append_opposite_spikes(TurnInfo & tp,
- IntersectionInfo const& inters,
- bool is_p_last, bool /*is_q_last*/,
- OutIt out)
- {
- static const bool is_version_touches = (Version == append_touches);
-
- bool is_p_spike = ( is_version_touches ?
- ( tp.operations[0].operation == operation_continue
- || tp.operations[0].operation == operation_intersection ) : // i ???
- true )
- && ! is_p_last
- && inters.is_spike_p();
-
- // TODO: throw an exception for spike in Areal?
- /*bool is_q_spike = ( ( Version == append_touches
- && tp.operations[1].operation == operation_continue )
- || ( Version == append_collinear_opposite
- && tp.operations[1].operation == operation_none ) )
- && inters.is_spike_q();
-
- if ( is_p_spike && is_q_spike )
- {
- // u/u or nothing?
- return false;
- }
- else*/
- if ( is_p_spike )
- {
- if ( BOOST_GEOMETRY_CONDITION(is_version_touches)
- || inters.d_info().arrival[0] == 1 )
- {
- if ( BOOST_GEOMETRY_CONDITION(is_version_touches) )
- {
- tp.operations[0].is_collinear = true;
- //tp.operations[1].is_collinear = false;
- tp.method = method_touch;
- }
- else
- {
- tp.operations[0].is_collinear = true;
- //tp.operations[1].is_collinear = false;
-
- BOOST_GEOMETRY_ASSERT(inters.i_info().count > 1);
- base_turn_handler::assign_point(tp, method_touch_interior, inters.i_info(), 1);
-
- AssignPolicy::apply(tp, inters.pi(), inters.qi(), inters);
- }
-
- tp.operations[0].operation = operation_blocked;
- tp.operations[1].operation = operation_continue; // boundary
- *out++ = tp;
- tp.operations[0].operation = operation_continue; // boundary
- //tp.operations[1].operation = operation_continue; // boundary
- *out++ = tp;
-
- return true;
- }
- }
- /*else if ( is_q_spike )
- {
- tp.operations[0].is_collinear = true;
- tp.method = is_version_touches ? method_touch : method_touch_interior;
- tp.operations[0].operation = operation_continue;
- tp.operations[1].operation = operation_continue; // boundary
- *out++ = tp;
- *out++ = tp;
-
- return true;
- }*/
-
- return false;
- }
-
- static inline void replace_method_and_operations_tm(method_type & method,
- operation_type & op0,
- operation_type & op1)
- {
- if ( op0 == operation_blocked && op1 == operation_blocked )
- {
- // NOTE: probably only if methods are WRT IPs, not segments!
- method = (method == method_touch ? method_equal : method_collinear);
- }
-
- // Assuming G1 is always Linear
- if ( op0 == operation_blocked )
- {
- op0 = operation_continue;
- }
-
- if ( op1 == operation_blocked )
- {
- op1 = operation_continue;
- }
- else if ( op1 == operation_intersection )
- {
- op1 = operation_union;
- }
-
- // spikes in 'm'
- if ( method == method_error )
- {
- method = method_touch_interior;
- op0 = operation_union;
- op1 = operation_union;
- }
- }
-
- template <bool IsFront>
- class turn_transformer_ec
- {
- public:
- explicit turn_transformer_ec(method_type method_t_or_m)
- : m_method(method_t_or_m)
- {}
-
- template <typename Turn>
- void operator()(Turn & turn) const
- {
- operation_type & op0 = turn.operations[0].operation;
- operation_type & op1 = turn.operations[1].operation;
-
- // NOTE: probably only if methods are WRT IPs, not segments!
- if ( BOOST_GEOMETRY_CONDITION(IsFront)
- || op0 == operation_intersection || op0 == operation_union
- || op1 == operation_intersection || op1 == operation_union )
- {
- turn.method = m_method;
- }
-
- turn.operations[0].is_collinear = op0 != operation_blocked;
-
- // Assuming G1 is always Linear
- if ( op0 == operation_blocked )
- {
- op0 = operation_continue;
- }
-
- if ( op1 == operation_blocked )
- {
- op1 = operation_continue;
- }
- else if ( op1 == operation_intersection )
- {
- op1 = operation_union;
- }
- }
-
- private:
- method_type m_method;
- };
-
- static inline void replace_operations_i(operation_type & /*op0*/, operation_type & op1)
- {
- // assuming Linear is always the first one
- op1 = operation_union;
- }
-
- // NOTE: Spikes may NOT be handled for Linear endpoints because it's not
- // possible to define a spike on an endpoint. Areal geometries must
- // NOT have spikes at all. One thing that could be done is to throw
- // an exception when spike is detected in Areal geometry.
-
- template <bool EnableFirst,
- bool EnableLast,
- typename Point1,
- typename Point2,
- typename TurnInfo,
- typename IntersectionInfo,
- typename OutputIterator>
- static inline bool get_turn_info_for_endpoint(
- Point1 const& pi, Point1 const& /*pj*/, Point1 const& /*pk*/,
- Point2 const& qi, Point2 const& /*qj*/, Point2 const& /*qk*/,
- bool is_p_first, bool is_p_last,
- bool /*is_q_first*/, bool is_q_last,
- TurnInfo const& tp_model,
- IntersectionInfo const& inters,
- method_type /*method*/,
- OutputIterator out)
- {
- namespace ov = overlay;
- typedef ov::get_turn_info_for_endpoint<AssignPolicy, EnableFirst, EnableLast> get_info_e;
-
- const std::size_t ip_count = inters.i_info().count;
- // no intersection points
- if ( ip_count == 0 )
- return false;
-
- if ( !is_p_first && !is_p_last )
- return false;
-
-// TODO: is_q_last could probably be replaced by false and removed from parameters
-
- linear_intersections intersections(pi, qi, inters.result(), is_p_last, is_q_last);
- linear_intersections::ip_info const& ip0 = intersections.template get<0>();
- linear_intersections::ip_info const& ip1 = intersections.template get<1>();
-
- const bool opposite = inters.d_info().opposite;
-
- // ANALYSE AND ASSIGN FIRST
-
- // IP on the first point of Linear Geometry
- bool was_first_point_handled = false;
- if ( BOOST_GEOMETRY_CONDITION(EnableFirst)
- && is_p_first && ip0.is_pi && !ip0.is_qi ) // !q0i prevents duplication
- {
- TurnInfo tp = tp_model;
- tp.operations[0].position = position_front;
- tp.operations[1].position = position_middle;
-
- if ( opposite ) // opposite -> collinear
- {
- tp.operations[0].operation = operation_continue;
- tp.operations[1].operation = operation_union;
- tp.method = ip0.is_qj ? method_touch : method_touch_interior;
- }
- else
- {
- typedef typename IntersectionInfo::robust_point1_type rp1_type;
- typedef typename IntersectionInfo::robust_point2_type rp2_type;
-
- method_type replaced_method = method_touch_interior;
-
- if ( ip0.is_qj )
- {
- side_calculator
- <
- typename IntersectionInfo::cs_tag,
- rp1_type, rp2_type,
- typename IntersectionInfo::side_strategy_type,
- rp2_type
- > side_calc(inters.rqi(), inters.rpi(), inters.rpj(),
- inters.rqi(), inters.rqj(), inters.rqk(),
- inters.get_side_strategy());
-
- std::pair<operation_type, operation_type>
- operations = get_info_e::operations_of_equal(side_calc);
-
- tp.operations[0].operation = operations.first;
- tp.operations[1].operation = operations.second;
-
- replaced_method = method_touch;
- }
- else
- {
- side_calculator
- <
- typename IntersectionInfo::cs_tag,
- rp1_type, rp2_type,
- typename IntersectionInfo::side_strategy_type,
- rp2_type, rp1_type, rp1_type,
- rp2_type, rp1_type, rp2_type
- > side_calc(inters.rqi(), inters.rpi(), inters.rpj(),
- inters.rqi(), inters.rpi(), inters.rqj(),
- inters.get_side_strategy());
-
- std::pair<operation_type, operation_type>
- operations = get_info_e::operations_of_equal(side_calc);
-
- tp.operations[0].operation = operations.first;
- tp.operations[1].operation = operations.second;
- }
-
- turn_transformer_ec<true> transformer(replaced_method);
- transformer(tp);
- }
-
- // equals<> or collinear<> will assign the second point,
- // we'd like to assign the first one
- base_turn_handler::assign_point(tp, tp.method, inters.i_info(), 0);
-
- // NOTE: is_collinear is not set for the first endpoint of L
- // for which there is no preceding segment
- // here is_p_first_ip == true
- tp.operations[0].is_collinear = false;
-
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
-
- was_first_point_handled = true;
- }
-
- // ANALYSE AND ASSIGN LAST
-
- // IP on the last point of Linear Geometry
- if ( BOOST_GEOMETRY_CONDITION(EnableLast)
- && is_p_last
- && ( ip_count > 1 ? (ip1.is_pj && !ip1.is_qi) : (ip0.is_pj && !ip0.is_qi) ) ) // prevents duplication
- {
- TurnInfo tp = tp_model;
-
- if ( inters.i_info().count > 1 )
- {
- //BOOST_GEOMETRY_ASSERT( result.template get<1>().dir_a == 0 && result.template get<1>().dir_b == 0 );
- tp.operations[0].is_collinear = true;
- tp.operations[1].operation = opposite ? operation_continue : operation_union;
- }
- else //if ( result.template get<0>().count == 1 )
- {
- side_calculator
- <
- typename IntersectionInfo::cs_tag,
- typename IntersectionInfo::robust_point1_type,
- typename IntersectionInfo::robust_point2_type,
- typename IntersectionInfo::side_strategy_type,
- typename IntersectionInfo::robust_point2_type
- > side_calc(inters.rqi(), inters.rpj(), inters.rpi(),
- inters.rqi(), inters.rqj(), inters.rqk(),
- inters.get_side_strategy());
-
- std::pair<operation_type, operation_type>
- operations = get_info_e::operations_of_equal(side_calc);
-
- tp.operations[0].operation = operations.first;
- tp.operations[1].operation = operations.second;
-
- turn_transformer_ec<false> transformer(method_none);
- transformer(tp);
-
- tp.operations[0].is_collinear = tp.both(operation_continue);
- }
-
- tp.method = ( ip_count > 1 ? ip1.is_qj : ip0.is_qj ) ? method_touch : method_touch_interior;
- tp.operations[0].operation = operation_blocked;
- tp.operations[0].position = position_back;
- tp.operations[1].position = position_middle;
-
- // equals<> or collinear<> will assign the second point,
- // we'd like to assign the first one
- unsigned int ip_index = ip_count > 1 ? 1 : 0;
- base_turn_handler::assign_point(tp, tp.method, inters.i_info(), ip_index);
-
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
-
- // don't ignore the first IP if the segment is opposite
- return !( opposite && ip_count > 1 ) || was_first_point_handled;
- }
-
- // don't ignore anything for now
- return false;
- }
-};
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_LA_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp
deleted file mode 100644
index 58fd4bb5c78..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp
+++ /dev/null
@@ -1,759 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_LL_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_LL_HPP
-
-#include <boost/throw_exception.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-
-namespace boost { namespace geometry {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay {
-
-template<typename AssignPolicy>
-struct get_turn_info_linear_linear
-{
- static const bool handle_spikes = true;
-
- template
- <
- typename Point1,
- typename Point2,
- typename TurnInfo,
- typename IntersectionStrategy,
- typename RobustPolicy,
- typename OutputIterator
- >
- static inline OutputIterator apply(
- Point1 const& pi, Point1 const& pj, Point1 const& pk,
- Point2 const& qi, Point2 const& qj, Point2 const& qk,
- bool is_p_first, bool is_p_last,
- bool is_q_first, bool is_q_last,
- TurnInfo const& tp_model,
- IntersectionStrategy const& strategy,
- RobustPolicy const& robust_policy,
- OutputIterator out)
- {
- typedef intersection_info
- <
- Point1, Point2,
- typename TurnInfo::point_type,
- IntersectionStrategy,
- RobustPolicy
- > inters_info;
-
- inters_info inters(pi, pj, pk, qi, qj, qk, strategy, robust_policy);
-
- char const method = inters.d_info().how;
-
- // Copy, to copy possibly extended fields
- TurnInfo tp = tp_model;
-
- // Select method and apply
- switch(method)
- {
- case 'a' : // collinear, "at"
- case 'f' : // collinear, "from"
- case 's' : // starts from the middle
- get_turn_info_for_endpoint<AssignPolicy, true, true>
- ::apply(pi, pj, pk, qi, qj, qk,
- is_p_first, is_p_last, is_q_first, is_q_last,
- tp_model, inters, method_none, out);
- break;
-
- case 'd' : // disjoint: never do anything
- break;
-
- case 'm' :
- {
- if ( get_turn_info_for_endpoint<AssignPolicy, false, true>
- ::apply(pi, pj, pk, qi, qj, qk,
- is_p_first, is_p_last, is_q_first, is_q_last,
- tp_model, inters, method_touch_interior, out) )
- {
- // do nothing
- }
- else
- {
- typedef touch_interior
- <
- TurnInfo
- > policy;
-
- // If Q (1) arrives (1)
- if ( inters.d_info().arrival[1] == 1)
- {
- policy::template apply<0>(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(),
- inters.sides());
- }
- else
- {
- // Swap p/q
- side_calculator
- <
- typename inters_info::cs_tag,
- typename inters_info::robust_point2_type,
- typename inters_info::robust_point1_type,
- typename inters_info::side_strategy_type
- > swapped_side_calc(inters.rqi(), inters.rqj(), inters.rqk(),
- inters.rpi(), inters.rpj(), inters.rpk(),
- inters.get_side_strategy());
-
- policy::template apply<1>(qi, qj, qk, pi, pj, pk,
- tp, inters.i_info(), inters.d_info(),
- swapped_side_calc);
- }
-
- if ( tp.operations[0].operation == operation_blocked )
- {
- tp.operations[1].is_collinear = true;
- }
- if ( tp.operations[1].operation == operation_blocked )
- {
- tp.operations[0].is_collinear = true;
- }
-
- replace_method_and_operations_tm(tp.method,
- tp.operations[0].operation,
- tp.operations[1].operation);
-
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
- }
- }
- break;
- case 'i' :
- {
- crosses<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info());
-
- replace_operations_i(tp.operations[0].operation, tp.operations[1].operation);
-
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
- }
- break;
- case 't' :
- {
- // Both touch (both arrive there)
- if ( get_turn_info_for_endpoint<AssignPolicy, false, true>
- ::apply(pi, pj, pk, qi, qj, qk,
- is_p_first, is_p_last, is_q_first, is_q_last,
- tp_model, inters, method_touch, out) )
- {
- // do nothing
- }
- else
- {
- touch<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(), inters.sides());
-
- // workarounds for touch<> not taking spikes into account starts here
- // those was discovered empirically
- // touch<> is not symmetrical!
- // P spikes and Q spikes may produce various operations!
- // TODO: this is not optimal solution - think about rewriting touch<>
-
- if ( tp.operations[0].operation == operation_blocked
- && tp.operations[1].operation == operation_blocked )
- {
- // two touching spikes on the same line
- if ( inters.is_spike_p() && inters.is_spike_q() )
- {
- tp.operations[0].operation = operation_union;
- tp.operations[1].operation = operation_union;
- }
- else
- {
- tp.operations[0].is_collinear = true;
- tp.operations[1].is_collinear = true;
- }
- }
- else if ( tp.operations[0].operation == operation_blocked )
- {
- // a spike on P on the same line with Q1
- if ( inters.is_spike_p() )
- {
- if ( inters.sides().qk_wrt_p1() == 0 )
- {
- tp.operations[0].is_collinear = true;
- }
- else
- {
- tp.operations[0].operation = operation_union;
- }
- }
- else
- {
- tp.operations[1].is_collinear = true;
- }
- }
- else if ( tp.operations[1].operation == operation_blocked )
- {
- // a spike on Q on the same line with P1
- if ( inters.is_spike_q() )
- {
- if ( inters.sides().pk_wrt_q1() == 0 )
- {
- tp.operations[1].is_collinear = true;
- }
- else
- {
- tp.operations[1].operation = operation_union;
- }
- }
- else
- {
- tp.operations[0].is_collinear = true;
- }
- }
- else if ( tp.operations[0].operation == operation_continue
- && tp.operations[1].operation == operation_continue )
- {
- // P spike on the same line with Q2 (opposite)
- if ( inters.sides().pk_wrt_q1() == -inters.sides().qk_wrt_q1()
- && inters.is_spike_p() )
- {
- tp.operations[0].operation = operation_union;
- tp.operations[1].operation = operation_union;
- }
- }
- else if ( tp.operations[0].operation == operation_none
- && tp.operations[1].operation == operation_none )
- {
- // spike not handled by touch<>
- bool const is_p = inters.is_spike_p();
- bool const is_q = inters.is_spike_q();
-
- if ( is_p || is_q )
- {
- tp.operations[0].operation = operation_union;
- tp.operations[1].operation = operation_union;
-
- if ( inters.sides().pk_wrt_q2() == 0 )
- {
- tp.operations[0].operation = operation_continue; // will be converted to i
- if ( is_p )
- {
- tp.operations[0].is_collinear = true;
- }
- }
-
- if ( inters.sides().qk_wrt_p2() == 0 )
- {
- tp.operations[1].operation = operation_continue; // will be converted to i
- if ( is_q )
- {
- tp.operations[1].is_collinear = true;
- }
- }
- }
- }
-
- // workarounds for touch<> not taking spikes into account ends here
-
- replace_method_and_operations_tm(tp.method,
- tp.operations[0].operation,
- tp.operations[1].operation);
-
-// TODO: move this into the append_xxx and call for each turn?
- AssignPolicy::apply(tp, pi, qi, inters);
-
- if ( ! BOOST_GEOMETRY_CONDITION(handle_spikes)
- || ! append_opposite_spikes<append_touches>(tp, inters,
- is_p_last, is_q_last,
- out) )
- {
- *out++ = tp;
- }
- }
- }
- break;
- case 'e':
- {
- if ( get_turn_info_for_endpoint<AssignPolicy, true, true>
- ::apply(pi, pj, pk, qi, qj, qk,
- is_p_first, is_p_last, is_q_first, is_q_last,
- tp_model, inters, method_equal, out) )
- {
- // do nothing
- }
- else
- {
- tp.operations[0].is_collinear = true;
- tp.operations[1].is_collinear = true;
-
- if ( ! inters.d_info().opposite )
- {
- // Both equal
- // or collinear-and-ending at intersection point
- equal<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(), inters.sides());
-
- operation_type spike_op
- = ( tp.operations[0].operation != operation_continue
- || tp.operations[1].operation != operation_continue ) ?
- operation_union :
- operation_continue;
-
- // transform turn
- turn_transformer_ec transformer(method_touch);
- transformer(tp);
-
-// TODO: move this into the append_xxx and call for each turn?
- AssignPolicy::apply(tp, pi, qi, inters);
-
- // conditionally handle spikes
- if ( ! BOOST_GEOMETRY_CONDITION(handle_spikes)
- || ! append_collinear_spikes(tp, inters,
- is_p_last, is_q_last,
- method_touch, spike_op,
- out) )
- {
- *out++ = tp; // no spikes
- }
- }
- else
- {
- // TODO: ignore for spikes or generate something else than opposite?
-
- equal_opposite
- <
- TurnInfo,
- AssignPolicy
- >::apply(pi, qi, tp, out, inters);
- }
- }
- }
- break;
- case 'c' :
- {
- // Collinear
- if ( get_turn_info_for_endpoint<AssignPolicy, true, true>
- ::apply(pi, pj, pk, qi, qj, qk,
- is_p_first, is_p_last, is_q_first, is_q_last,
- tp_model, inters, method_collinear, out) )
- {
- // do nothing
- }
- else
- {
- // NOTE: this is for spikes since those are set in the turn_transformer_ec
- tp.operations[0].is_collinear = true;
- tp.operations[1].is_collinear = true;
-
- if ( ! inters.d_info().opposite )
- {
- method_type method_replace = method_touch_interior;
- operation_type spike_op = operation_continue;
-
- if ( inters.d_info().arrival[0] == 0 )
- {
- // Collinear, but similar thus handled as equal
- equal<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(), inters.sides());
-
- method_replace = method_touch;
- if ( tp.operations[0].operation != operation_continue
- || tp.operations[1].operation != operation_continue )
- {
- spike_op = operation_union;
- }
- }
- else
- {
- collinear<TurnInfo>::apply(pi, pj, pk, qi, qj, qk,
- tp, inters.i_info(), inters.d_info(), inters.sides());
-
- //method_replace = method_touch_interior;
- //spike_op = operation_continue;
- }
-
- // transform turn
- turn_transformer_ec transformer(method_replace);
- transformer(tp);
-
-// TODO: move this into the append_xxx and call for each turn?
- AssignPolicy::apply(tp, pi, qi, inters);
-
- // conditionally handle spikes
- if ( ! BOOST_GEOMETRY_CONDITION(handle_spikes)
- || ! append_collinear_spikes(tp, inters,
- is_p_last, is_q_last,
- method_replace, spike_op,
- out) )
- {
- // no spikes
- *out++ = tp;
- }
- }
- else
- {
- // If this always 'm' ?
- turn_transformer_ec transformer(method_touch_interior);
-
- // conditionally handle spikes
- if ( BOOST_GEOMETRY_CONDITION(handle_spikes) )
- {
- append_opposite_spikes<append_collinear_opposite>(tp, inters,
- is_p_last, is_q_last,
- out);
- }
-
- // TODO: ignore for spikes?
- // E.g. pass is_p_valid = !is_p_last && !is_pj_spike,
- // the same with is_q_valid
-
- collinear_opposite
- <
- TurnInfo,
- AssignPolicy
- >::apply(pi, pj, pk, qi, qj, qk,
- tp, out, inters, inters.sides(),
- transformer, !is_p_last, !is_q_last);
- }
- }
- }
- break;
- case '0' :
- {
- // degenerate points
- if ( BOOST_GEOMETRY_CONDITION(AssignPolicy::include_degenerate) )
- {
- only_convert::apply(tp, inters.i_info());
-
- // if any, only one of those should be true
- if ( is_p_first
- && equals::equals_point_point(pi, tp.point) )
- {
- tp.operations[0].position = position_front;
- }
- else if ( is_p_last
- && equals::equals_point_point(pj, tp.point) )
- {
- tp.operations[0].position = position_back;
- }
- else if ( is_q_first
- && equals::equals_point_point(qi, tp.point) )
- {
- tp.operations[1].position = position_front;
- }
- else if ( is_q_last
- && equals::equals_point_point(qj, tp.point) )
- {
- tp.operations[1].position = position_back;
- }
-
- AssignPolicy::apply(tp, pi, qi, inters);
- *out++ = tp;
- }
- }
- break;
- default :
- {
-#if defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS)
- std::cout << "TURN: Unknown method: " << method << std::endl;
-#endif
-#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
- BOOST_THROW_EXCEPTION(turn_info_exception(method));
-#endif
- }
- break;
- }
-
- return out;
- }
-
- template <typename TurnInfo,
- typename IntersectionInfo,
- typename OutIt>
- static inline bool append_collinear_spikes(TurnInfo & tp,
- IntersectionInfo const& inters_info,
- bool is_p_last, bool is_q_last,
- method_type method, operation_type spike_op,
- OutIt out)
- {
- // method == touch || touch_interior
- // both position == middle
-
- bool is_p_spike = tp.operations[0].operation == spike_op
- && ! is_p_last
- && inters_info.is_spike_p();
- bool is_q_spike = tp.operations[1].operation == spike_op
- && ! is_q_last
- && inters_info.is_spike_q();
-
- if ( is_p_spike && is_q_spike )
- {
- if ( tp.method == method_equal
- && tp.operations[0].operation == operation_continue
- && tp.operations[1].operation == operation_continue )
- {
- // treat both non-opposite collinear spikes as no-spikes
- return false;
- }
-
- tp.method = method;
- tp.operations[0].operation = operation_blocked;
- tp.operations[1].operation = operation_blocked;
- *out++ = tp;
- tp.operations[0].operation = operation_intersection;
- tp.operations[1].operation = operation_intersection;
- *out++ = tp;
-
- return true;
- }
- else if ( is_p_spike )
- {
- tp.method = method;
- tp.operations[0].operation = operation_blocked;
- tp.operations[1].operation = operation_union;
- *out++ = tp;
- tp.operations[0].operation = operation_intersection;
- //tp.operations[1].operation = operation_union;
- *out++ = tp;
-
- return true;
- }
- else if ( is_q_spike )
- {
- tp.method = method;
- tp.operations[0].operation = operation_union;
- tp.operations[1].operation = operation_blocked;
- *out++ = tp;
- //tp.operations[0].operation = operation_union;
- tp.operations[1].operation = operation_intersection;
- *out++ = tp;
-
- return true;
- }
-
- return false;
- }
-
- enum append_version { append_touches, append_collinear_opposite };
-
- template <append_version Version,
- typename TurnInfo,
- typename IntersectionInfo,
- typename OutIt>
- static inline bool append_opposite_spikes(TurnInfo & tp,
- IntersectionInfo const& inters,
- bool is_p_last, bool is_q_last,
- OutIt out)
- {
- static const bool is_version_touches = (Version == append_touches);
-
- bool is_p_spike = ( is_version_touches ?
- ( tp.operations[0].operation == operation_continue
- || tp.operations[0].operation == operation_intersection ) :
- true )
- && ! is_p_last
- && inters.is_spike_p();
- bool is_q_spike = ( is_version_touches ?
- ( tp.operations[1].operation == operation_continue
- || tp.operations[1].operation == operation_intersection ) :
- true )
- && ! is_q_last
- && inters.is_spike_q();
-
- bool res = false;
-
- if ( is_p_spike
- && ( BOOST_GEOMETRY_CONDITION(is_version_touches)
- || inters.d_info().arrival[0] == 1 ) )
- {
- if ( BOOST_GEOMETRY_CONDITION(is_version_touches) )
- {
- tp.operations[0].is_collinear = true;
- tp.operations[1].is_collinear = false;
- tp.method = method_touch;
- }
- else // Version == append_collinear_opposite
- {
- tp.operations[0].is_collinear = true;
- tp.operations[1].is_collinear = false;
-
- BOOST_GEOMETRY_ASSERT(inters.i_info().count > 1);
-
- base_turn_handler::assign_point(tp, method_touch_interior,
- inters.i_info(), 1);
-
- AssignPolicy::apply(tp, inters.pi(), inters.qi(), inters);
- }
-
- tp.operations[0].operation = operation_blocked;
- tp.operations[1].operation = operation_intersection;
- *out++ = tp;
- tp.operations[0].operation = operation_intersection;
- //tp.operations[1].operation = operation_intersection;
- *out++ = tp;
-
- res = true;
- }
-
- if ( is_q_spike
- && ( BOOST_GEOMETRY_CONDITION(is_version_touches)
- || inters.d_info().arrival[1] == 1 ) )
- {
- if ( BOOST_GEOMETRY_CONDITION(is_version_touches) )
- {
- tp.operations[0].is_collinear = false;
- tp.operations[1].is_collinear = true;
- tp.method = method_touch;
- }
- else // Version == append_collinear_opposite
- {
- tp.operations[0].is_collinear = false;
- tp.operations[1].is_collinear = true;
-
- BOOST_GEOMETRY_ASSERT(inters.i_info().count > 0);
-
- base_turn_handler::assign_point(tp, method_touch_interior, inters.i_info(), 0);
-
- AssignPolicy::apply(tp, inters.pi(), inters.qi(), inters);
- }
-
- tp.operations[0].operation = operation_intersection;
- tp.operations[1].operation = operation_blocked;
- *out++ = tp;
- //tp.operations[0].operation = operation_intersection;
- tp.operations[1].operation = operation_intersection;
- *out++ = tp;
-
- res = true;
- }
-
- return res;
- }
-
- static inline void replace_method_and_operations_tm(method_type & method,
- operation_type & op0,
- operation_type & op1)
- {
- if ( op0 == operation_blocked && op1 == operation_blocked )
- {
- // NOTE: probably only if methods are WRT IPs, not segments!
- method = (method == method_touch ? method_equal : method_collinear);
- op0 = operation_continue;
- op1 = operation_continue;
- }
- else
- {
- if ( op0 == operation_continue || op0 == operation_blocked )
- {
- op0 = operation_intersection;
- }
- else if ( op0 == operation_intersection )
- {
- op0 = operation_union;
- }
-
- if ( op1 == operation_continue || op1 == operation_blocked )
- {
- op1 = operation_intersection;
- }
- else if ( op1 == operation_intersection )
- {
- op1 = operation_union;
- }
-
- // spikes in 'm'
- if ( method == method_error )
- {
- method = method_touch_interior;
- op0 = operation_union;
- op1 = operation_union;
- }
- }
- }
-
- class turn_transformer_ec
- {
- public:
- explicit turn_transformer_ec(method_type method_t_or_m)
- : m_method(method_t_or_m)
- {}
-
- template <typename Turn>
- void operator()(Turn & turn) const
- {
- operation_type & op0 = turn.operations[0].operation;
- operation_type & op1 = turn.operations[1].operation;
-
- BOOST_GEOMETRY_ASSERT(op0 != operation_blocked || op1 != operation_blocked );
-
- if ( op0 == operation_blocked )
- {
- op0 = operation_intersection;
- }
- else if ( op0 == operation_intersection )
- {
- op0 = operation_union;
- }
-
- if ( op1 == operation_blocked )
- {
- op1 = operation_intersection;
- }
- else if ( op1 == operation_intersection )
- {
- op1 = operation_union;
- }
-
- if ( op0 == operation_intersection || op0 == operation_union
- || op1 == operation_intersection || op1 == operation_union )
- {
- turn.method = m_method;
- }
-
-// TODO: is this correct?
-// it's equivalent to comparing to operation_blocked at the beginning of the function
- turn.operations[0].is_collinear = op0 != operation_intersection;
- turn.operations[1].is_collinear = op1 != operation_intersection;
- }
-
- private:
- method_type m_method;
- };
-
- static inline void replace_operations_i(operation_type & op0, operation_type & op1)
- {
- if ( op0 == operation_intersection )
- {
- op0 = operation_union;
- }
-
- if ( op1 == operation_intersection )
- {
- op1 = operation_union;
- }
- }
-};
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURN_INFO_LL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp
deleted file mode 100644
index fd1e49ca243..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/get_turns.hpp
+++ /dev/null
@@ -1,1055 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2014-2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014, 2016, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP
-
-
-#include <cstddef>
-#include <map>
-
-#include <boost/array.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/vector_c.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/reverse_dispatch.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/views/closeable_view.hpp>
-#include <boost/geometry/views/reversible_view.hpp>
-#include <boost/geometry/views/detail/range_type.hpp>
-
-#include <boost/geometry/geometries/box.hpp>
-#include <boost/geometry/geometries/segment.hpp>
-
-#include <boost/geometry/iterators/ever_circling_iterator.hpp>
-
-#include <boost/geometry/strategies/intersection_strategies.hpp>
-#include <boost/geometry/strategies/intersection_result.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_point.hpp>
-
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-#include <boost/geometry/algorithms/detail/partition.hpp>
-#include <boost/geometry/algorithms/detail/recalculate.hpp>
-#include <boost/geometry/algorithms/detail/sections/section_box_policies.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp>
-#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
-
-#include <boost/geometry/algorithms/detail/sections/range_by_section.hpp>
-#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
-#include <boost/geometry/algorithms/detail/sections/section_functions.hpp>
-
-#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
-# include <sstream>
-# include <boost/geometry/io/dsv/write.hpp>
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-// Silence warning C4127: conditional expression is constant
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
-#endif
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace get_turns
-{
-
-
-struct no_interrupt_policy
-{
- static bool const enabled = false;
-
- // variable required by self_get_turn_points::get_turns
- static bool const has_intersections = false;
-
- template <typename Range>
- static inline bool apply(Range const&)
- {
- return false;
- }
-};
-
-
-template
-<
- typename Geometry1, typename Geometry2,
- bool Reverse1, bool Reverse2,
- typename Section1, typename Section2,
- typename TurnPolicy
->
-class get_turns_in_sections
-{
- typedef typename closeable_view
- <
- typename range_type<Geometry1>::type const,
- closure<Geometry1>::value
- >::type cview_type1;
- typedef typename closeable_view
- <
- typename range_type<Geometry2>::type const,
- closure<Geometry2>::value
- >::type cview_type2;
-
- typedef typename reversible_view
- <
- cview_type1 const,
- Reverse1 ? iterate_reverse : iterate_forward
- >::type view_type1;
- typedef typename reversible_view
- <
- cview_type2 const,
- Reverse2 ? iterate_reverse : iterate_forward
- >::type view_type2;
-
- typedef typename boost::range_iterator
- <
- view_type1 const
- >::type range1_iterator;
-
- typedef typename boost::range_iterator
- <
- view_type2 const
- >::type range2_iterator;
-
-
- template <typename Geometry, typename Section>
- static inline bool adjacent(Section const& section,
- signed_size_type index1, signed_size_type index2)
- {
- // About n-2:
- // (square: range_count=5, indices 0,1,2,3
- // -> 0-3 are adjacent, don't check on intersections)
- // Also tested for open polygons, and/or duplicates
- // About first condition: will be optimized by compiler (static)
- // It checks if it is areal (box, ring, (multi)polygon)
- signed_size_type const n = static_cast<signed_size_type>(section.range_count);
-
- boost::ignore_unused_variable_warning(n);
- boost::ignore_unused_variable_warning(index1);
- boost::ignore_unused_variable_warning(index2);
-
- return boost::is_same
- <
- typename tag_cast
- <
- typename geometry::tag<Geometry>::type,
- areal_tag
- >::type,
- areal_tag
- >::value
- && index1 == 0
- && index2 >= n - 2
- ;
- }
-
-
-public :
- // Returns true if terminated, false if interrupted
- template <typename IntersectionStrategy, typename RobustPolicy, typename Turns, typename InterruptPolicy>
- static inline bool apply(
- int source_id1, Geometry1 const& geometry1, Section1 const& sec1,
- int source_id2, Geometry2 const& geometry2, Section2 const& sec2,
- bool skip_larger, bool skip_adjacent,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- Turns& turns,
- InterruptPolicy& interrupt_policy)
- {
- boost::ignore_unused_variable_warning(interrupt_policy);
-
- if ((sec1.duplicate && (sec1.count + 1) < sec1.range_count)
- || (sec2.duplicate && (sec2.count + 1) < sec2.range_count))
- {
- // Skip sections containig only duplicates.
- // They are still important (can indicate non-disjointness)
- // but they will be found processing adjacent sections.
- // Do NOT skip if they are the ONLY section
- return true;
- }
-
- cview_type1 cview1(range_by_section(geometry1, sec1));
- cview_type2 cview2(range_by_section(geometry2, sec2));
- view_type1 view1(cview1);
- view_type2 view2(cview2);
-
- range1_iterator begin_range_1 = boost::begin(view1);
- range1_iterator end_range_1 = boost::end(view1);
-
- range2_iterator begin_range_2 = boost::begin(view2);
- range2_iterator end_range_2 = boost::end(view2);
-
- int const dir1 = sec1.directions[0];
- int const dir2 = sec2.directions[0];
- signed_size_type index1 = sec1.begin_index;
- signed_size_type ndi1 = sec1.non_duplicate_index;
-
- range1_iterator prev1, it1, end1;
-
- get_start_point_iterator(sec1, view1, prev1, it1, end1,
- index1, ndi1, dir1, sec2.bounding_box, robust_policy);
-
- // We need a circular iterator because it might run through the closing point.
- // One circle is actually enough but this one is just convenient.
- ever_circling_iterator<range1_iterator> next1(begin_range_1, end_range_1, it1, true);
- next1++;
-
- // Walk through section and stop if we exceed the other box
- // section 2: [--------------]
- // section 1: |----|---|---|---|---|
- for (prev1 = it1++, next1++;
- it1 != end1 && ! detail::section::exceeding<0>(dir1, *prev1, sec1.bounding_box, sec2.bounding_box, robust_policy);
- ++prev1, ++it1, ++index1, ++next1, ++ndi1)
- {
- ever_circling_iterator<range1_iterator> nd_next1(
- begin_range_1, end_range_1, next1, true);
- advance_to_non_duplicate_next(nd_next1, it1, sec1, robust_policy);
-
- signed_size_type index2 = sec2.begin_index;
- signed_size_type ndi2 = sec2.non_duplicate_index;
-
- range2_iterator prev2, it2, end2;
-
- get_start_point_iterator(sec2, view2, prev2, it2, end2,
- index2, ndi2, dir2, sec1.bounding_box, robust_policy);
- ever_circling_iterator<range2_iterator> next2(begin_range_2, end_range_2, it2, true);
- next2++;
-
- for (prev2 = it2++, next2++;
- it2 != end2 && ! detail::section::exceeding<0>(dir2, *prev2, sec2.bounding_box, sec1.bounding_box, robust_policy);
- ++prev2, ++it2, ++index2, ++next2, ++ndi2)
- {
- bool skip = false;
-
- if (source_id1 == source_id2
- && sec1.ring_id.multi_index == sec2.ring_id.multi_index
- && sec1.ring_id.ring_index == sec2.ring_id.ring_index)
- {
- // Sources and rings are the same
-
- if (skip_larger && index1 >= index2)
- {
- // Skip to avoid getting all intersections twice
- skip = true;
- }
- else if (skip_adjacent)
- {
- // In some cases (dissolve, has_self_intersections)
- // neighbouring segments should be checked
- // (for example to detect spikes properly)
-
- // skip if it is a neighbouring segment.
- // (including, for areas, first-last segment
- // and two segments with one or more degenerate/duplicate
- // (zero-length) segments in between)
- skip = ndi2 == ndi1 + 1
- || adjacent<Geometry1>(sec1, index1, index2);
- }
- }
-
- if (! skip)
- {
- // Move to the "non duplicate next"
- ever_circling_iterator<range2_iterator> nd_next2(
- begin_range_2, end_range_2, next2, true);
- advance_to_non_duplicate_next(nd_next2, it2, sec2, robust_policy);
-
- typedef typename boost::range_value<Turns>::type turn_info;
-
- turn_info ti;
- ti.operations[0].seg_id
- = segment_identifier(source_id1, sec1.ring_id.multi_index,
- sec1.ring_id.ring_index, index1);
- ti.operations[1].seg_id
- = segment_identifier(source_id2, sec2.ring_id.multi_index,
- sec2.ring_id.ring_index, index2);
-
- std::size_t const size_before = boost::size(turns);
-
- bool const is_1_first = sec1.is_non_duplicate_first && index1 == sec1.begin_index;
- bool const is_1_last = sec1.is_non_duplicate_last && index1+1 >= sec1.end_index;
- bool const is_2_first = sec2.is_non_duplicate_first && index2 == sec2.begin_index;
- bool const is_2_last = sec2.is_non_duplicate_last && index2+1 >= sec2.end_index;
-
- TurnPolicy::apply(*prev1, *it1, *nd_next1, *prev2, *it2, *nd_next2,
- is_1_first, is_1_last, is_2_first, is_2_last,
- ti, intersection_strategy, robust_policy,
- std::back_inserter(turns));
-
- if (InterruptPolicy::enabled)
- {
- if (interrupt_policy.apply(
- std::make_pair(range::pos(turns, size_before),
- boost::end(turns))))
- {
- return false;
- }
- }
- }
- }
- }
- return true;
- }
-
-
-private :
- typedef typename geometry::point_type<Geometry1>::type point1_type;
- typedef typename geometry::point_type<Geometry2>::type point2_type;
- typedef typename model::referring_segment<point1_type const> segment1_type;
- typedef typename model::referring_segment<point2_type const> segment2_type;
-
- template <typename Iterator, typename RangeIterator, typename Section, typename RobustPolicy>
- static inline void advance_to_non_duplicate_next(Iterator& next,
- RangeIterator const& it, Section const& section, RobustPolicy const& robust_policy)
- {
- typedef typename robust_point_type<point1_type, RobustPolicy>::type robust_point_type;
- robust_point_type robust_point_from_it;
- robust_point_type robust_point_from_next;
- geometry::recalculate(robust_point_from_it, *it, robust_policy);
- geometry::recalculate(robust_point_from_next, *next, robust_policy);
-
- // To see where the next segments bend to, in case of touch/intersections
- // on end points, we need (in case of degenerate/duplicate points) an extra
- // iterator which moves to the REAL next point, so non duplicate.
- // This needs an extra comparison (disjoint).
- // (Note that within sections, non duplicate points are already asserted,
- // by the sectionalize process).
-
- // So advance to the "non duplicate next"
- // (the check is defensive, to avoid endless loops)
- std::size_t check = 0;
- while(! detail::disjoint::disjoint_point_point
- (
- robust_point_from_it, robust_point_from_next
- )
- && check++ < section.range_count)
- {
- next++;
- geometry::recalculate(robust_point_from_next, *next, robust_policy);
- }
- }
-
- // It is NOT possible to have section-iterators here
- // because of the logistics of "index" (the section-iterator automatically
- // skips to the begin-point, we loose the index or have to recalculate it)
- // So we mimic it here
- template <typename Range, typename Section, typename Box, typename RobustPolicy>
- static inline void get_start_point_iterator(Section const& section,
- Range const& range,
- typename boost::range_iterator<Range const>::type& it,
- typename boost::range_iterator<Range const>::type& prev,
- typename boost::range_iterator<Range const>::type& end,
- signed_size_type& index, signed_size_type& ndi,
- int dir, Box const& other_bounding_box, RobustPolicy const& robust_policy)
- {
- it = boost::begin(range) + section.begin_index;
- end = boost::begin(range) + section.end_index + 1;
-
- // Mimic section-iterator:
- // Skip to point such that section interects other box
- prev = it++;
- for(; it != end && detail::section::preceding<0>(dir, *it, section.bounding_box, other_bounding_box, robust_policy);
- prev = it++, index++, ndi++)
- {}
- // Go back one step because we want to start completely preceding
- it = prev;
- }
-};
-
-template
-<
- typename Geometry1, typename Geometry2,
- bool Reverse1, bool Reverse2,
- typename TurnPolicy,
- typename IntersectionStrategy,
- typename RobustPolicy,
- typename Turns,
- typename InterruptPolicy
->
-struct section_visitor
-{
- int m_source_id1;
- Geometry1 const& m_geometry1;
- int m_source_id2;
- Geometry2 const& m_geometry2;
- IntersectionStrategy const& m_intersection_strategy;
- RobustPolicy const& m_rescale_policy;
- Turns& m_turns;
- InterruptPolicy& m_interrupt_policy;
-
- section_visitor(int id1, Geometry1 const& g1,
- int id2, Geometry2 const& g2,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- Turns& turns,
- InterruptPolicy& ip)
- : m_source_id1(id1), m_geometry1(g1)
- , m_source_id2(id2), m_geometry2(g2)
- , m_intersection_strategy(intersection_strategy)
- , m_rescale_policy(robust_policy)
- , m_turns(turns)
- , m_interrupt_policy(ip)
- {}
-
- template <typename Section>
- inline bool apply(Section const& sec1, Section const& sec2)
- {
- if (! detail::disjoint::disjoint_box_box(sec1.bounding_box, sec2.bounding_box))
- {
- // false if interrupted
- return get_turns_in_sections
- <
- Geometry1,
- Geometry2,
- Reverse1, Reverse2,
- Section, Section,
- TurnPolicy
- >::apply(m_source_id1, m_geometry1, sec1,
- m_source_id2, m_geometry2, sec2,
- false, false,
- m_intersection_strategy,
- m_rescale_policy,
- m_turns, m_interrupt_policy);
- }
- return true;
- }
-
-};
-
-template
-<
- typename Geometry1, typename Geometry2,
- bool Reverse1, bool Reverse2,
- typename TurnPolicy
->
-class get_turns_generic
-{
-
-public:
- template <typename IntersectionStrategy, typename RobustPolicy, typename Turns, typename InterruptPolicy>
- static inline void apply(
- int source_id1, Geometry1 const& geometry1,
- int source_id2, Geometry2 const& geometry2,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- Turns& turns,
- InterruptPolicy& interrupt_policy)
- {
- // First create monotonic sections...
- typedef typename boost::range_value<Turns>::type ip_type;
- typedef typename ip_type::point_type point_type;
-
- typedef model::box
- <
- typename geometry::robust_point_type
- <
- point_type, RobustPolicy
- >::type
- > box_type;
- typedef geometry::sections<box_type, 2> sections_type;
-
- sections_type sec1, sec2;
- typedef boost::mpl::vector_c<std::size_t, 0, 1> dimensions;
-
- typename IntersectionStrategy::envelope_strategy_type const
- envelope_strategy = intersection_strategy.get_envelope_strategy();
-
- geometry::sectionalize<Reverse1, dimensions>(geometry1, robust_policy,
- sec1, envelope_strategy, 0);
- geometry::sectionalize<Reverse2, dimensions>(geometry2, robust_policy,
- sec2, envelope_strategy, 1);
-
- // ... and then partition them, intersecting overlapping sections in visitor method
- section_visitor
- <
- Geometry1, Geometry2,
- Reverse1, Reverse2,
- TurnPolicy,
- IntersectionStrategy, RobustPolicy,
- Turns, InterruptPolicy
- > visitor(source_id1, geometry1, source_id2, geometry2,
- intersection_strategy, robust_policy,
- turns, interrupt_policy);
-
- geometry::partition
- <
- box_type
- >::apply(sec1, sec2, visitor,
- detail::section::get_section_box(),
- detail::section::overlaps_section_box());
- }
-};
-
-
-// Get turns for a range with a box, following Cohen-Sutherland (cs) approach
-template
-<
- typename Range, typename Box,
- bool ReverseRange, bool ReverseBox,
- typename TurnPolicy
->
-struct get_turns_cs
-{
- typedef typename geometry::point_type<Range>::type point_type;
- typedef typename geometry::point_type<Box>::type box_point_type;
-
- typedef typename closeable_view
- <
- Range const,
- closure<Range>::value
- >::type cview_type;
-
- typedef typename reversible_view
- <
- cview_type const,
- ReverseRange ? iterate_reverse : iterate_forward
- >::type view_type;
-
- typedef typename boost::range_iterator
- <
- view_type const
- >::type iterator_type;
-
-
- template <typename IntersectionStrategy, typename RobustPolicy, typename Turns, typename InterruptPolicy>
- static inline void apply(
- int source_id1, Range const& range,
- int source_id2, Box const& box,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- Turns& turns,
- InterruptPolicy& interrupt_policy,
- signed_size_type multi_index = -1,
- signed_size_type ring_index = -1)
- {
- if ( boost::size(range) <= 1)
- {
- return;
- }
-
- boost::array<box_point_type,4> bp;
- assign_box_corners_oriented<ReverseBox>(box, bp);
-
- cview_type cview(range);
- view_type view(cview);
-
- typedef typename boost::range_size<view_type>::type size_type;
- size_type segments_count1 = boost::size(view) - 1;
-
- iterator_type it = boost::begin(view);
-
- ever_circling_iterator<iterator_type> next(
- boost::begin(view), boost::end(view), it, true);
- next++;
- next++;
-
- //bool first = true;
-
- //char previous_side[2] = {0, 0};
-
- signed_size_type index = 0;
-
- for (iterator_type prev = it++;
- it != boost::end(view);
- prev = it++, next++, index++)
- {
- segment_identifier seg_id(source_id1,
- multi_index, ring_index, index);
-
- /*if (first)
- {
- previous_side[0] = get_side<0>(box, *prev);
- previous_side[1] = get_side<1>(box, *prev);
- }
-
- char current_side[2];
- current_side[0] = get_side<0>(box, *it);
- current_side[1] = get_side<1>(box, *it);
-
- // There can NOT be intersections if
- // 1) EITHER the two points are lying on one side of the box (! 0 && the same)
- // 2) OR same in Y-direction
- // 3) OR all points are inside the box (0)
- if (! (
- (current_side[0] != 0 && current_side[0] == previous_side[0])
- || (current_side[1] != 0 && current_side[1] == previous_side[1])
- || (current_side[0] == 0
- && current_side[1] == 0
- && previous_side[0] == 0
- && previous_side[1] == 0)
- )
- )*/
- if (true)
- {
- get_turns_with_box(seg_id, source_id2,
- *prev, *it, *next,
- bp[0], bp[1], bp[2], bp[3],
- // NOTE: some dummy values could be passed below since this would be called only for Polygons and Boxes
- index == 0,
- size_type(index) == segments_count1,
- intersection_strategy,
- robust_policy,
- turns,
- interrupt_policy);
- // Future performance enhancement:
- // return if told by the interrupt policy
- }
- }
- }
-
-private:
- template<std::size_t Index, typename Point>
- static inline int get_side(Box const& box, Point const& point)
- {
- // Inside -> 0
- // Outside -> -1 (left/below) or 1 (right/above)
- // On border -> -2 (left/lower) or 2 (right/upper)
- // The only purpose of the value is to not be the same,
- // and to denote if it is inside (0)
-
- typename coordinate_type<Point>::type const& c = get<Index>(point);
- typename coordinate_type<Box>::type const& left = get<min_corner, Index>(box);
- typename coordinate_type<Box>::type const& right = get<max_corner, Index>(box);
-
- if (geometry::math::equals(c, left)) return -2;
- else if (geometry::math::equals(c, right)) return 2;
- else if (c < left) return -1;
- else if (c > right) return 1;
- else return 0;
- }
-
- template <typename IntersectionStrategy, typename RobustPolicy, typename Turns, typename InterruptPolicy>
- static inline void get_turns_with_box(segment_identifier const& seg_id, int source_id2,
- // Points from a range:
- point_type const& rp0,
- point_type const& rp1,
- point_type const& rp2,
- // Points from the box
- box_point_type const& bp0,
- box_point_type const& bp1,
- box_point_type const& bp2,
- box_point_type const& bp3,
- bool const is_range_first,
- bool const is_range_last,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- // Output
- Turns& turns,
- InterruptPolicy& interrupt_policy)
- {
- boost::ignore_unused_variable_warning(interrupt_policy);
-
- // Depending on code some relations can be left out
-
- typedef typename boost::range_value<Turns>::type turn_info;
-
- turn_info ti;
- ti.operations[0].seg_id = seg_id;
-
- ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 0);
- TurnPolicy::apply(rp0, rp1, rp2, bp0, bp1, bp2,
- is_range_first, is_range_last,
- true, false,
- ti, intersection_strategy, robust_policy,
- std::back_inserter(turns));
-
- ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 1);
- TurnPolicy::apply(rp0, rp1, rp2, bp1, bp2, bp3,
- is_range_first, is_range_last,
- false, false,
- ti, intersection_strategy, robust_policy,
- std::back_inserter(turns));
-
- ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 2);
- TurnPolicy::apply(rp0, rp1, rp2, bp2, bp3, bp0,
- is_range_first, is_range_last,
- false, false,
- ti, intersection_strategy, robust_policy,
- std::back_inserter(turns));
-
- ti.operations[1].seg_id = segment_identifier(source_id2, -1, -1, 3);
- TurnPolicy::apply(rp0, rp1, rp2, bp3, bp0, bp1,
- is_range_first, is_range_last,
- false, true,
- ti, intersection_strategy, robust_policy,
- std::back_inserter(turns));
-
- if (InterruptPolicy::enabled)
- {
- interrupt_policy.apply(turns);
- }
-
- }
-
-};
-
-
-template
-<
- typename Polygon, typename Box,
- bool Reverse, bool ReverseBox,
- typename TurnPolicy
->
-struct get_turns_polygon_cs
-{
- template <typename IntersectionStrategy, typename RobustPolicy, typename Turns, typename InterruptPolicy>
- static inline void apply(
- int source_id1, Polygon const& polygon,
- int source_id2, Box const& box,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- Turns& turns,
- InterruptPolicy& interrupt_policy,
- signed_size_type multi_index = -1)
- {
- typedef typename geometry::ring_type<Polygon>::type ring_type;
-
- typedef detail::get_turns::get_turns_cs
- <
- ring_type, Box,
- Reverse, ReverseBox,
- TurnPolicy
- > intersector_type;
-
- intersector_type::apply(
- source_id1, geometry::exterior_ring(polygon),
- source_id2, box,
- intersection_strategy,
- robust_policy,
- turns,
- interrupt_policy,
- multi_index, -1);
-
- signed_size_type i = 0;
-
- typename interior_return_type<Polygon const>::type
- rings = interior_rings(polygon);
- for (typename detail::interior_iterator<Polygon const>::type
- it = boost::begin(rings); it != boost::end(rings); ++it, ++i)
- {
- intersector_type::apply(
- source_id1, *it,
- source_id2, box,
- intersection_strategy,
- robust_policy,
- turns, interrupt_policy,
- multi_index, i);
- }
-
- }
-};
-
-
-template
-<
- typename Multi, typename Box,
- bool Reverse, bool ReverseBox,
- typename TurnPolicy
->
-struct get_turns_multi_polygon_cs
-{
- template <typename IntersectionStrategy, typename RobustPolicy, typename Turns, typename InterruptPolicy>
- static inline void apply(
- int source_id1, Multi const& multi,
- int source_id2, Box const& box,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- Turns& turns,
- InterruptPolicy& interrupt_policy)
- {
- typedef typename boost::range_iterator
- <
- Multi const
- >::type iterator_type;
-
- signed_size_type i = 0;
- for (iterator_type it = boost::begin(multi);
- it != boost::end(multi);
- ++it, ++i)
- {
- // Call its single version
- get_turns_polygon_cs
- <
- typename boost::range_value<Multi>::type, Box,
- Reverse, ReverseBox,
- TurnPolicy
- >::apply(source_id1, *it, source_id2, box,
- intersection_strategy, robust_policy,
- turns, interrupt_policy, i);
- }
- }
-};
-
-
-// GET_TURN_INFO_TYPE
-
-template <typename Geometry>
-struct topological_tag_base
-{
- typedef typename tag_cast<typename tag<Geometry>::type, pointlike_tag, linear_tag, areal_tag>::type type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AssignPolicy,
- typename Tag1 = typename tag<Geometry1>::type, typename Tag2 = typename tag<Geometry2>::type,
- typename TagBase1 = typename topological_tag_base<Geometry1>::type, typename TagBase2 = typename topological_tag_base<Geometry2>::type>
-struct get_turn_info_type
- : overlay::get_turn_info<AssignPolicy>
-{};
-
-template <typename Geometry1, typename Geometry2, typename AssignPolicy, typename Tag1, typename Tag2>
-struct get_turn_info_type<Geometry1, Geometry2, AssignPolicy, Tag1, Tag2, linear_tag, linear_tag>
- : overlay::get_turn_info_linear_linear<AssignPolicy>
-{};
-
-template <typename Geometry1, typename Geometry2, typename AssignPolicy, typename Tag1, typename Tag2>
-struct get_turn_info_type<Geometry1, Geometry2, AssignPolicy, Tag1, Tag2, linear_tag, areal_tag>
- : overlay::get_turn_info_linear_areal<AssignPolicy>
-{};
-
-template <typename Geometry1, typename Geometry2, typename SegmentRatio,
- typename Tag1 = typename tag<Geometry1>::type, typename Tag2 = typename tag<Geometry2>::type,
- typename TagBase1 = typename topological_tag_base<Geometry1>::type, typename TagBase2 = typename topological_tag_base<Geometry2>::type>
-struct turn_operation_type
-{
- typedef overlay::turn_operation<typename point_type<Geometry1>::type, SegmentRatio> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename SegmentRatio, typename Tag1, typename Tag2>
-struct turn_operation_type<Geometry1, Geometry2, SegmentRatio, Tag1, Tag2, linear_tag, linear_tag>
-{
- typedef overlay::turn_operation_linear<typename point_type<Geometry1>::type, SegmentRatio> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename SegmentRatio, typename Tag1, typename Tag2>
-struct turn_operation_type<Geometry1, Geometry2, SegmentRatio, Tag1, Tag2, linear_tag, areal_tag>
-{
- typedef overlay::turn_operation_linear<typename point_type<Geometry1>::type, SegmentRatio> type;
-};
-
-}} // namespace detail::get_turns
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-// Because this is "detail" method, and most implementations will use "generic",
-// we take the freedom to derive it from "generic".
-template
-<
- typename GeometryTag1, typename GeometryTag2,
- typename Geometry1, typename Geometry2,
- bool Reverse1, bool Reverse2,
- typename TurnPolicy
->
-struct get_turns
- : detail::get_turns::get_turns_generic
- <
- Geometry1, Geometry2,
- Reverse1, Reverse2,
- TurnPolicy
- >
-{};
-
-
-template
-<
- typename Polygon, typename Box,
- bool ReversePolygon, bool ReverseBox,
- typename TurnPolicy
->
-struct get_turns
- <
- polygon_tag, box_tag,
- Polygon, Box,
- ReversePolygon, ReverseBox,
- TurnPolicy
- > : detail::get_turns::get_turns_polygon_cs
- <
- Polygon, Box,
- ReversePolygon, ReverseBox,
- TurnPolicy
- >
-{};
-
-
-template
-<
- typename Ring, typename Box,
- bool ReverseRing, bool ReverseBox,
- typename TurnPolicy
->
-struct get_turns
- <
- ring_tag, box_tag,
- Ring, Box,
- ReverseRing, ReverseBox,
- TurnPolicy
- > : detail::get_turns::get_turns_cs
- <
- Ring, Box, ReverseRing, ReverseBox,
- TurnPolicy
- >
-
-{};
-
-
-template
-<
- typename MultiPolygon,
- typename Box,
- bool ReverseMultiPolygon, bool ReverseBox,
- typename TurnPolicy
->
-struct get_turns
- <
- multi_polygon_tag, box_tag,
- MultiPolygon, Box,
- ReverseMultiPolygon, ReverseBox,
- TurnPolicy
- >
- : detail::get_turns::get_turns_multi_polygon_cs
- <
- MultiPolygon, Box,
- ReverseMultiPolygon, ReverseBox,
- TurnPolicy
- >
-{};
-
-
-template
-<
- typename GeometryTag1, typename GeometryTag2,
- typename Geometry1, typename Geometry2,
- bool Reverse1, bool Reverse2,
- typename TurnPolicy
->
-struct get_turns_reversed
-{
- template <typename IntersectionStrategy, typename RobustPolicy, typename Turns, typename InterruptPolicy>
- static inline void apply(int source_id1, Geometry1 const& g1,
- int source_id2, Geometry2 const& g2,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- Turns& turns,
- InterruptPolicy& interrupt_policy)
- {
- get_turns
- <
- GeometryTag2, GeometryTag1,
- Geometry2, Geometry1,
- Reverse2, Reverse1,
- TurnPolicy
- >::apply(source_id2, g2, source_id1, g1,
- intersection_strategy, robust_policy,
- turns, interrupt_policy);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-/*!
-\brief \brief_calc2{turn points}
-\ingroup overlay
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Turns type of turn-container (e.g. vector of "intersection/turn point"'s)
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param intersection_strategy segments intersection strategy
-\param robust_policy policy to handle robustness issues
-\param turns container which will contain turn points
-\param interrupt_policy policy determining if process is stopped
- when intersection is found
- */
-template
-<
- bool Reverse1, bool Reverse2,
- typename AssignPolicy,
- typename Geometry1,
- typename Geometry2,
- typename IntersectionStrategy,
- typename RobustPolicy,
- typename Turns,
- typename InterruptPolicy
->
-inline void get_turns(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- Turns& turns,
- InterruptPolicy& interrupt_policy)
-{
- concepts::check_concepts_and_equal_dimensions<Geometry1 const, Geometry2 const>();
-
- typedef detail::overlay::get_turn_info<AssignPolicy> TurnPolicy;
- //typedef detail::get_turns::get_turn_info_type<Geometry1, Geometry2, AssignPolicy> TurnPolicy;
-
- boost::mpl::if_c
- <
- reverse_dispatch<Geometry1, Geometry2>::type::value,
- dispatch::get_turns_reversed
- <
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
- Geometry1, Geometry2,
- Reverse1, Reverse2,
- TurnPolicy
- >,
- dispatch::get_turns
- <
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
- Geometry1, Geometry2,
- Reverse1, Reverse2,
- TurnPolicy
- >
- >::type::apply(0, geometry1,
- 1, geometry2,
- intersection_strategy,
- robust_policy,
- turns, interrupt_policy);
-}
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/handle_colocations.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/handle_colocations.hpp
deleted file mode 100644
index 6bb30fcce58..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/handle_colocations.hpp
+++ /dev/null
@@ -1,861 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_HANDLE_COLOCATIONS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_HANDLE_COLOCATIONS_HPP
-
-#include <cstddef>
-#include <algorithm>
-#include <map>
-#include <vector>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/algorithms/detail/overlay/cluster_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/do_reverse.hpp>
-#include <boost/geometry/algorithms/detail/overlay/is_self_turn.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
-#include <boost/geometry/algorithms/detail/overlay/sort_by_side.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/detail/ring_identifier.hpp>
-#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
-#include <boost/geometry/util/condition.hpp>
-
-#if defined(BOOST_GEOMETRY_DEBUG_HANDLE_COLOCATIONS)
-# include <iostream>
-# include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
-# include <boost/geometry/io/wkt/wkt.hpp>
-# define BOOST_GEOMETRY_DEBUG_IDENTIFIER
-#endif
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-template <typename SegmentRatio>
-struct segment_fraction
-{
- segment_identifier seg_id;
- SegmentRatio fraction;
-
- segment_fraction(segment_identifier const& id, SegmentRatio const& fr)
- : seg_id(id)
- , fraction(fr)
- {}
-
- segment_fraction()
- {}
-
- bool operator<(segment_fraction<SegmentRatio> const& other) const
- {
- return seg_id == other.seg_id
- ? fraction < other.fraction
- : seg_id < other.seg_id;
- }
-
-};
-
-struct turn_operation_index
-{
- turn_operation_index(signed_size_type ti = -1,
- signed_size_type oi = -1)
- : turn_index(ti)
- , op_index(oi)
- {}
-
- signed_size_type turn_index;
- signed_size_type op_index; // only 0,1
-};
-
-
-template <typename Turns>
-struct less_by_fraction_and_type
-{
- inline less_by_fraction_and_type(Turns const& turns)
- : m_turns(turns)
- {
- }
-
- inline bool operator()(turn_operation_index const& left,
- turn_operation_index const& right) const
- {
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::turn_operation_type turn_operation_type;
-
- turn_type const& left_turn = m_turns[left.turn_index];
- turn_type const& right_turn = m_turns[right.turn_index];
- turn_operation_type const& left_op
- = left_turn.operations[left.op_index];
-
- turn_operation_type const& right_op
- = right_turn.operations[right.op_index];
-
- if (! (left_op.fraction == right_op.fraction))
- {
- return left_op.fraction < right_op.fraction;
- }
-
- // Order xx first - used to discard any following colocated turn
- bool const left_both_xx = left_turn.both(operation_blocked);
- bool const right_both_xx = right_turn.both(operation_blocked);
- if (left_both_xx && ! right_both_xx)
- {
- return true;
- }
- if (! left_both_xx && right_both_xx)
- {
- return false;
- }
-
- bool const left_both_uu = left_turn.both(operation_union);
- bool const right_both_uu = right_turn.both(operation_union);
- if (left_both_uu && ! right_both_uu)
- {
- return true;
- }
- if (! left_both_uu && right_both_uu)
- {
- return false;
- }
-
- turn_operation_type const& left_other_op
- = left_turn.operations[1 - left.op_index];
-
- turn_operation_type const& right_other_op
- = right_turn.operations[1 - right.op_index];
-
- // Fraction is the same, now sort on ring id, first outer ring,
- // then interior rings
- return left_other_op.seg_id < right_other_op.seg_id;
- }
-
-private:
- Turns const& m_turns;
-};
-
-template <typename Operation, typename ClusterPerSegment>
-inline signed_size_type get_cluster_id(Operation const& op, ClusterPerSegment const& cluster_per_segment)
-{
- typedef typename ClusterPerSegment::key_type segment_fraction_type;
-
- segment_fraction_type seg_frac(op.seg_id, op.fraction);
- typename ClusterPerSegment::const_iterator it
- = cluster_per_segment.find(seg_frac);
-
- if (it == cluster_per_segment.end())
- {
- return -1;
- }
- return it->second;
-}
-
-template <typename Operation, typename ClusterPerSegment>
-inline void add_cluster_id(Operation const& op,
- ClusterPerSegment& cluster_per_segment, signed_size_type id)
-{
- typedef typename ClusterPerSegment::key_type segment_fraction_type;
-
- segment_fraction_type seg_frac(op.seg_id, op.fraction);
-
- cluster_per_segment[seg_frac] = id;
-}
-
-template <typename Turn, typename ClusterPerSegment>
-inline signed_size_type add_turn_to_cluster(Turn const& turn,
- ClusterPerSegment& cluster_per_segment, signed_size_type& cluster_id)
-{
- signed_size_type cid0 = get_cluster_id(turn.operations[0], cluster_per_segment);
- signed_size_type cid1 = get_cluster_id(turn.operations[1], cluster_per_segment);
-
- if (cid0 == -1 && cid1 == -1)
- {
- // Because of this, first cluster ID will be 1
- ++cluster_id;
- add_cluster_id(turn.operations[0], cluster_per_segment, cluster_id);
- add_cluster_id(turn.operations[1], cluster_per_segment, cluster_id);
- return cluster_id;
- }
- else if (cid0 == -1 && cid1 != -1)
- {
- add_cluster_id(turn.operations[0], cluster_per_segment, cid1);
- return cid1;
- }
- else if (cid0 != -1 && cid1 == -1)
- {
- add_cluster_id(turn.operations[1], cluster_per_segment, cid0);
- return cid0;
- }
- else if (cid0 == cid1)
- {
- // Both already added to same cluster, no action
- return cid0;
- }
-
- // Both operations.seg_id/fraction were already part of any cluster, and
- // these clusters are not the same. Merge of two clusters is necessary
-#if defined(BOOST_GEOMETRY_DEBUG_HANDLE_COLOCATIONS)
- std::cout << " TODO: merge " << cid0 << " and " << cid1 << std::endl;
-#endif
- return cid0;
-}
-
-template
-<
- typename Turns,
- typename ClusterPerSegment,
- typename Operations,
- typename Geometry1,
- typename Geometry2
->
-inline void handle_colocation_cluster(Turns& turns,
- signed_size_type& cluster_id,
- ClusterPerSegment& cluster_per_segment,
- Operations const& operations,
- Geometry1 const& /*geometry1*/, Geometry2 const& /*geometry2*/)
-{
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::turn_operation_type turn_operation_type;
-
- std::vector<turn_operation_index>::const_iterator vit = operations.begin();
-
- turn_operation_index ref_toi = *vit;
- signed_size_type ref_id = -1;
-
- for (++vit; vit != operations.end(); ++vit)
- {
- turn_type& ref_turn = turns[ref_toi.turn_index];
- turn_operation_type const& ref_op
- = ref_turn.operations[ref_toi.op_index];
-
- turn_operation_index const& toi = *vit;
- turn_type& turn = turns[toi.turn_index];
- turn_operation_type const& op = turn.operations[toi.op_index];
-
- BOOST_ASSERT(ref_op.seg_id == op.seg_id);
-
- if (ref_op.fraction == op.fraction)
- {
- turn_operation_type const& other_op = turn.operations[1 - toi.op_index];
-
- if (ref_id == -1)
- {
- ref_id = add_turn_to_cluster(ref_turn, cluster_per_segment, cluster_id);
- }
- BOOST_ASSERT(ref_id != -1);
-
- // ref_turn (both operations) are already added to cluster,
- // so also "op" is already added to cluster,
- // We only need to add other_op
- signed_size_type id = get_cluster_id(other_op, cluster_per_segment);
- if (id != -1 && id != ref_id)
- {
- }
- else if (id == -1)
- {
- // Add to same cluster
- add_cluster_id(other_op, cluster_per_segment, ref_id);
- id = ref_id;
- }
- }
- else
- {
- // Not on same fraction on this segment
- // assign for next
- ref_toi = toi;
- ref_id = -1;
- }
- }
-}
-
-template
-<
- typename Turns,
- typename Clusters,
- typename ClusterPerSegment
->
-inline void assign_cluster_to_turns(Turns& turns,
- Clusters& clusters,
- ClusterPerSegment const& cluster_per_segment)
-{
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::turn_operation_type turn_operation_type;
- typedef typename ClusterPerSegment::key_type segment_fraction_type;
-
- signed_size_type turn_index = 0;
- for (typename boost::range_iterator<Turns>::type it = turns.begin();
- it != turns.end(); ++it, ++turn_index)
- {
- turn_type& turn = *it;
-
- if (turn.discarded)
- {
- // They were processed (to create proper map) but will not be added
- // This might leave a cluster with only 1 turn, which will be fixed
- // afterwards
- continue;
- }
-
- for (int i = 0; i < 2; i++)
- {
- turn_operation_type const& op = turn.operations[i];
- segment_fraction_type seg_frac(op.seg_id, op.fraction);
- typename ClusterPerSegment::const_iterator cit = cluster_per_segment.find(seg_frac);
- if (cit != cluster_per_segment.end())
- {
-#if defined(BOOST_GEOMETRY_DEBUG_HANDLE_COLOCATIONS)
- if (turn.is_clustered()
- && turn.cluster_id != cit->second)
- {
- std::cout << " CONFLICT " << std::endl;
- }
-#endif
- turn.cluster_id = cit->second;
- clusters[turn.cluster_id].turn_indices.insert(turn_index);
- }
- }
- }
-}
-
-template <typename Turns, typename Clusters>
-inline void remove_clusters(Turns& turns, Clusters& clusters)
-{
- typename Clusters::iterator it = clusters.begin();
- while (it != clusters.end())
- {
- // Hold iterator and increase. We can erase cit, this keeps the
- // iterator valid (cf The standard associative-container erase idiom)
- typename Clusters::iterator current_it = it;
- ++it;
-
- std::set<signed_size_type> const& turn_indices
- = current_it->second.turn_indices;
- if (turn_indices.size() == 1)
- {
- signed_size_type const turn_index = *turn_indices.begin();
- turns[turn_index].cluster_id = -1;
- clusters.erase(current_it);
- }
- }
-}
-
-template <typename Turns, typename Clusters>
-inline void cleanup_clusters(Turns& turns, Clusters& clusters)
-{
- // Removes discarded turns from clusters
- for (typename Clusters::iterator mit = clusters.begin();
- mit != clusters.end(); ++mit)
- {
- cluster_info& cinfo = mit->second;
- std::set<signed_size_type>& ids = cinfo.turn_indices;
- for (std::set<signed_size_type>::iterator sit = ids.begin();
- sit != ids.end(); /* no increment */)
- {
- std::set<signed_size_type>::iterator current_it = sit;
- ++sit;
-
- signed_size_type const turn_index = *current_it;
- if (turns[turn_index].discarded)
- {
- ids.erase(current_it);
- }
- }
- }
-
- remove_clusters(turns, clusters);
-}
-
-template <typename Turn, typename IdSet>
-inline void discard_ie_turn(Turn& turn, IdSet& ids, signed_size_type id)
-{
- turn.discarded = true;
- // Set cluster id to -1, but don't clear colocated flags
- turn.cluster_id = -1;
- // To remove it later from clusters
- ids.insert(id);
-}
-
-template <bool Reverse>
-inline bool is_interior(segment_identifier const& seg_id)
-{
- return Reverse ? seg_id.ring_index == -1 : seg_id.ring_index >= 0;
-}
-
-template <bool Reverse0, bool Reverse1>
-inline bool is_ie_turn(segment_identifier const& ext_seg_0,
- segment_identifier const& ext_seg_1,
- segment_identifier const& int_seg_0,
- segment_identifier const& other_seg_1)
-{
- if (ext_seg_0.source_index == ext_seg_1.source_index)
- {
- // External turn is a self-turn, dont discard internal turn for this
- return false;
- }
-
-
- // Compares two segment identifiers from two turns (external / one internal)
-
- // From first turn [0], both are from same polygon (multi_index),
- // one is exterior (-1), the other is interior (>= 0),
- // and the second turn [1] handles the same ring
-
- // For difference, where the rings are processed in reversal, all interior
- // rings become exterior and vice versa. But also the multi property changes:
- // rings originally from the same multi should now be considered as from
- // different multi polygons.
- // But this is not always the case, and at this point hard to figure out
- // (not yet implemented, TODO)
-
- bool const same_multi0 = ! Reverse0
- && ext_seg_0.multi_index == int_seg_0.multi_index;
-
- bool const same_multi1 = ! Reverse1
- && ext_seg_1.multi_index == other_seg_1.multi_index;
-
- boost::ignore_unused(same_multi1);
-
- return same_multi0
- && same_multi1
- && ! is_interior<Reverse0>(ext_seg_0)
- && is_interior<Reverse0>(int_seg_0)
- && ext_seg_1.ring_index == other_seg_1.ring_index;
-
- // The other way round is tested in another call
-}
-
-template
-<
- bool Reverse0, bool Reverse1, // Reverse interpretation interior/exterior
- typename Turns,
- typename Clusters
->
-inline void discard_interior_exterior_turns(Turns& turns, Clusters& clusters)
-{
- typedef std::set<signed_size_type>::const_iterator set_iterator;
- typedef typename boost::range_value<Turns>::type turn_type;
-
- std::set<signed_size_type> ids_to_remove;
-
- for (typename Clusters::iterator cit = clusters.begin();
- cit != clusters.end(); ++cit)
- {
- cluster_info& cinfo = cit->second;
- std::set<signed_size_type>& ids = cinfo.turn_indices;
-
- ids_to_remove.clear();
-
- for (set_iterator it = ids.begin(); it != ids.end(); ++it)
- {
- turn_type& turn = turns[*it];
- segment_identifier const& seg_0 = turn.operations[0].seg_id;
- segment_identifier const& seg_1 = turn.operations[1].seg_id;
-
- if (! (turn.both(operation_union)
- || turn.combination(operation_union, operation_blocked)))
- {
- // Not a uu/ux, so cannot be colocated with a iu turn
- continue;
- }
-
- for (set_iterator int_it = ids.begin(); int_it != ids.end(); ++int_it)
- {
- if (*it == *int_it)
- {
- continue;
- }
-
- // Turn with, possibly, an interior ring involved
- turn_type& int_turn = turns[*int_it];
- segment_identifier const& int_seg_0 = int_turn.operations[0].seg_id;
- segment_identifier const& int_seg_1 = int_turn.operations[1].seg_id;
-
- if (is_ie_turn<Reverse0, Reverse1>(seg_0, seg_1, int_seg_0, int_seg_1))
- {
- discard_ie_turn(int_turn, ids_to_remove, *int_it);
- }
- if (is_ie_turn<Reverse1, Reverse0>(seg_1, seg_0, int_seg_1, int_seg_0))
- {
- discard_ie_turn(int_turn, ids_to_remove, *int_it);
- }
- }
- }
-
- // Erase from the ids (which cannot be done above)
- for (set_iterator sit = ids_to_remove.begin();
- sit != ids_to_remove.end(); ++sit)
- {
- ids.erase(*sit);
- }
- }
-}
-
-template
-<
- overlay_type OverlayType,
- typename Turns,
- typename Clusters
->
-inline void set_colocation(Turns& turns, Clusters const& clusters)
-{
- typedef std::set<signed_size_type>::const_iterator set_iterator;
- typedef typename boost::range_value<Turns>::type turn_type;
-
- for (typename Clusters::const_iterator cit = clusters.begin();
- cit != clusters.end(); ++cit)
- {
- cluster_info const& cinfo = cit->second;
- std::set<signed_size_type> const& ids = cinfo.turn_indices;
-
- bool both_target = false;
- for (set_iterator it = ids.begin(); it != ids.end(); ++it)
- {
- turn_type const& turn = turns[*it];
- if (turn.both(operation_from_overlay<OverlayType>::value))
- {
- both_target = true;
- break;
- }
- }
-
- if (both_target)
- {
- for (set_iterator it = ids.begin(); it != ids.end(); ++it)
- {
- turn_type& turn = turns[*it];
-
- if (both_target)
- {
- turn.has_colocated_both = true;
- }
- }
- }
- }
-}
-
-template
-<
- typename Turns,
- typename Clusters
->
-inline void check_colocation(bool& has_blocked,
- signed_size_type cluster_id, Turns const& turns, Clusters const& clusters)
-{
- typedef typename boost::range_value<Turns>::type turn_type;
-
- has_blocked = false;
-
- typename Clusters::const_iterator mit = clusters.find(cluster_id);
- if (mit == clusters.end())
- {
- return;
- }
-
- cluster_info const& cinfo = mit->second;
-
- for (std::set<signed_size_type>::const_iterator it
- = cinfo.turn_indices.begin();
- it != cinfo.turn_indices.end(); ++it)
- {
- turn_type const& turn = turns[*it];
- if (turn.any_blocked())
- {
- has_blocked = true;
- }
- }
-}
-
-
-// Checks colocated turns and flags combinations of uu/other, possibly a
-// combination of a ring touching another geometry's interior ring which is
-// tangential to the exterior ring
-
-// This function can be extended to replace handle_tangencies: at each
-// colocation incoming and outgoing vectors should be inspected
-
-template
-<
- bool Reverse1, bool Reverse2,
- overlay_type OverlayType,
- typename Turns,
- typename Clusters,
- typename Geometry1,
- typename Geometry2
->
-inline bool handle_colocations(Turns& turns, Clusters& clusters,
- Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- static const detail::overlay::operation_type target_operation
- = detail::overlay::operation_from_overlay<OverlayType>::value;
- typedef std::map
- <
- segment_identifier,
- std::vector<turn_operation_index>
- > map_type;
-
- // Create and fill map on segment-identifier Map is sorted on seg_id,
- // meaning it is sorted on ring_identifier too. This means that exterior
- // rings are handled first. If there is a colocation on the exterior ring,
- // that information can be used for the interior ring too
- map_type map;
-
- signed_size_type index = 0;
- for (typename boost::range_iterator<Turns>::type
- it = boost::begin(turns);
- it != boost::end(turns);
- ++it, ++index)
- {
- map[it->operations[0].seg_id].push_back(turn_operation_index(index, 0));
- map[it->operations[1].seg_id].push_back(turn_operation_index(index, 1));
- }
-
- // Check if there are multiple turns on one or more segments,
- // if not then nothing is to be done
- bool colocations = 0;
- for (typename map_type::const_iterator it = map.begin();
- it != map.end();
- ++it)
- {
- if (it->second.size() > 1u)
- {
- colocations = true;
- break;
- }
- }
-
- if (! colocations)
- {
- return false;
- }
-
- // Sort all vectors, per same segment
- less_by_fraction_and_type<Turns> less(turns);
- for (typename map_type::iterator it = map.begin();
- it != map.end(); ++it)
- {
- std::sort(it->second.begin(), it->second.end(), less);
- }
-
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::segment_ratio_type segment_ratio_type;
-
- typedef std::map
- <
- segment_fraction<segment_ratio_type>,
- signed_size_type
- > cluster_per_segment_type;
-
- cluster_per_segment_type cluster_per_segment;
-
- // Assign to zero, because of pre-increment later the cluster_id
- // effectively starts with 1
- // (and can later be negated to use uniquely with turn_index)
- signed_size_type cluster_id = 0;
-
- for (typename map_type::const_iterator it = map.begin();
- it != map.end(); ++it)
- {
- if (it->second.size() > 1u)
- {
- handle_colocation_cluster(turns, cluster_id, cluster_per_segment,
- it->second, geometry1, geometry2);
- }
- }
-
- assign_cluster_to_turns(turns, clusters, cluster_per_segment);
- // Get colocated information here and not later, to keep information
- // on turns which are discarded afterwards
- set_colocation<OverlayType>(turns, clusters);
-
- if (BOOST_GEOMETRY_CONDITION(target_operation == operation_intersection))
- {
- discard_interior_exterior_turns
- <
- do_reverse<geometry::point_order<Geometry1>::value>::value != Reverse1,
- do_reverse<geometry::point_order<Geometry2>::value>::value != Reverse2
- >(turns, clusters);
- }
-
-#if defined(BOOST_GEOMETRY_DEBUG_HANDLE_COLOCATIONS)
- std::cout << "*** Colocations " << map.size() << std::endl;
- for (typename map_type::const_iterator it = map.begin();
- it != map.end(); ++it)
- {
- std::cout << it->first << std::endl;
- for (std::vector<turn_operation_index>::const_iterator vit
- = it->second.begin(); vit != it->second.end(); ++vit)
- {
- turn_operation_index const& toi = *vit;
- std::cout << geometry::wkt(turns[toi.turn_index].point)
- << std::boolalpha
- << " discarded=" << turns[toi.turn_index].discarded
- << " colocated(uu)=" << turns[toi.turn_index].colocated_uu
- << " colocated(ii)=" << turns[toi.turn_index].colocated_ii
- << " " << operation_char(turns[toi.turn_index].operations[0].operation)
- << " " << turns[toi.turn_index].operations[0].seg_id
- << " " << turns[toi.turn_index].operations[0].fraction
- << " // " << operation_char(turns[toi.turn_index].operations[1].operation)
- << " " << turns[toi.turn_index].operations[1].seg_id
- << " " << turns[toi.turn_index].operations[1].fraction
- << std::endl;
- }
- }
-#endif // DEBUG
-
- return true;
-}
-
-
-struct is_turn_index
-{
- is_turn_index(signed_size_type index)
- : m_index(index)
- {}
-
- template <typename Indexed>
- inline bool operator()(Indexed const& indexed) const
- {
- // Indexed is a indexed_turn_operation<Operation>
- return indexed.turn_index == m_index;
- }
-
- std::size_t m_index;
-};
-
-
-template
-<
- bool Reverse1, bool Reverse2,
- overlay_type OverlayType,
- typename Turns,
- typename Clusters,
- typename Geometry1,
- typename Geometry2,
- typename SideStrategy
->
-inline void gather_cluster_properties(Clusters& clusters, Turns& turns,
- operation_type for_operation,
- Geometry1 const& geometry1, Geometry2 const& geometry2,
- SideStrategy const& strategy)
-{
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::point_type point_type;
- typedef typename turn_type::turn_operation_type turn_operation_type;
-
- // Define sorter, sorting counter-clockwise such that polygons are on the
- // right side
- typedef sort_by_side::side_sorter
- <
- Reverse1, Reverse2, OverlayType, point_type, SideStrategy, std::less<int>
- > sbs_type;
-
- for (typename Clusters::iterator mit = clusters.begin();
- mit != clusters.end(); ++mit)
- {
- cluster_info& cinfo = mit->second;
- std::set<signed_size_type> const& ids = cinfo.turn_indices;
- if (ids.empty())
- {
- continue;
- }
-
- sbs_type sbs(strategy);
- point_type turn_point; // should be all the same for all turns in cluster
-
- bool first = true;
- for (std::set<signed_size_type>::const_iterator sit = ids.begin();
- sit != ids.end(); ++sit)
- {
- signed_size_type turn_index = *sit;
- turn_type const& turn = turns[turn_index];
- if (first)
- {
- turn_point = turn.point;
- }
- for (int i = 0; i < 2; i++)
- {
- turn_operation_type const& op = turn.operations[i];
- sbs.add(op, turn_index, i, geometry1, geometry2, first);
- first = false;
- }
- }
- sbs.apply(turn_point);
-
- sbs.find_open();
- sbs.assign_zones(for_operation);
-
- cinfo.open_count = sbs.open_count(for_operation);
-
- bool const set_startable = OverlayType != overlay_dissolve;
-
- // Unset the startable flag for all 'closed' zones. This does not
- // apply for self-turns, because those counts are not from both
- // polygons
- for (std::size_t i = 0; i < sbs.m_ranked_points.size(); i++)
- {
- const typename sbs_type::rp& ranked = sbs.m_ranked_points[i];
- turn_type& turn = turns[ranked.turn_index];
- turn_operation_type& op = turn.operations[ranked.operation_index];
-
- if (set_startable
- && for_operation == operation_union && cinfo.open_count == 0)
- {
- op.enriched.startable = false;
- }
-
- if (ranked.direction != sort_by_side::dir_to)
- {
- continue;
- }
-
- op.enriched.count_left = ranked.count_left;
- op.enriched.count_right = ranked.count_right;
- op.enriched.rank = ranked.rank;
- op.enriched.zone = ranked.zone;
-
- if (! set_startable)
- {
- continue;
- }
-
- if (OverlayType != overlay_difference
- && is_self_turn<OverlayType>(turn))
- {
- // Difference needs the self-turns, TODO: investigate
- continue;
- }
-
- if ((for_operation == operation_union
- && ranked.count_left != 0)
- || (for_operation == operation_intersection
- && ranked.count_right != 2))
- {
- op.enriched.startable = false;
- }
- }
-
- }
-}
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_HANDLE_COLOCATIONS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/handle_self_turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/handle_self_turns.hpp
deleted file mode 100644
index 0602a22f8ba..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/handle_self_turns.hpp
+++ /dev/null
@@ -1,223 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// 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)
-
-#ifdef __GNUC__
-#pragma GCC system_header
-#endif
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_HANDLE_SELF_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_HANDLE_SELF_TURNS_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/cluster_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/is_self_turn.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
-#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/algorithms/within.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-template <overlay_type OverlayType>
-struct check_within
-{
- template <typename Turn, typename Geometry0, typename Geometry1>
- static inline
- bool apply(Turn const& turn, Geometry0 const& geometry0,
- Geometry1 const& geometry1)
- {
- // Operations 0 and 1 have the same source index in self-turns
- return turn.operations[0].seg_id.source_index == 0
- ? geometry::within(turn.point, geometry1)
- : geometry::within(turn.point, geometry0);
- }
-
-};
-
-template <>
-struct check_within<overlay_difference>
-{
- template <typename Turn, typename Geometry0, typename Geometry1>
- static inline
- bool apply(Turn const& turn, Geometry0 const& geometry0,
- Geometry1 const& geometry1)
- {
- // difference = intersection(a, reverse(b))
- // therefore we should reverse the meaning of within for geometry1
- return turn.operations[0].seg_id.source_index == 0
- ? ! geometry::covered_by(turn.point, geometry1)
- : geometry::within(turn.point, geometry0);
- }
-};
-
-struct discard_turns
-{
- template <typename Turns, typename Clusters, typename Geometry0, typename Geometry1>
- static inline
- void apply(Turns& , Clusters const& , Geometry0 const& , Geometry1 const& )
- {}
-};
-
-template <overlay_type OverlayType, operation_type OperationType>
-struct discard_closed_turns : discard_turns {};
-
-// It is only implemented for operation_union, not in buffer
-template <>
-struct discard_closed_turns<overlay_union, operation_union>
-{
-
- template <typename Turns, typename Clusters, typename Geometry0, typename Geometry1>
- static inline
- void apply(Turns& turns, Clusters const& /*clusters*/,
- Geometry0 const& geometry0, Geometry1 const& geometry1)
- {
- typedef typename boost::range_value<Turns>::type turn_type;
-
- for (typename boost::range_iterator<Turns>::type
- it = boost::begin(turns);
- it != boost::end(turns);
- ++it)
- {
- turn_type& turn = *it;
-
- if (! turn.discarded
- && is_self_turn<overlay_union>(turn)
- && check_within<overlay_union>::apply(turn,
- geometry0, geometry1))
- {
- // Turn is in the interior of other geometry
- turn.discarded = true;
- }
- }
- }
-};
-
-template <overlay_type OverlayType>
-struct discard_self_intersection_turns
-{
-private :
-
- template <typename Turns, typename Clusters>
- static inline
- bool is_self_cluster(signed_size_type cluster_id,
- const Turns& turns, Clusters const& clusters)
- {
- typename Clusters::const_iterator cit = clusters.find(cluster_id);
- if (cit == clusters.end())
- {
- return false;
- }
-
- cluster_info const& cinfo = cit->second;
- for (std::set<signed_size_type>::const_iterator it
- = cinfo.turn_indices.begin();
- it != cinfo.turn_indices.end(); ++it)
- {
- if (! is_self_turn<OverlayType>(turns[*it]))
- {
- return false;
- }
- }
-
- return true;
- }
-
- template <typename Turns, typename Clusters,
- typename Geometry0, typename Geometry1>
- static inline
- void discard_clusters(Turns& turns, Clusters const& clusters,
- Geometry0 const& geometry0, Geometry1 const& geometry1)
- {
- for (typename Clusters::const_iterator cit = clusters.begin();
- cit != clusters.end(); ++cit)
- {
- signed_size_type const cluster_id = cit->first;
-
- // If there are only self-turns in the cluster, the cluster should
- // be located within the other geometry, for intersection
- if (! cit->second.turn_indices.empty()
- && is_self_cluster(cluster_id, turns, clusters))
- {
- cluster_info const& cinfo = cit->second;
- signed_size_type const index = *cinfo.turn_indices.begin();
- if (! check_within<OverlayType>::apply(turns[index],
- geometry0, geometry1))
- {
- // Discard all turns in cluster
- for (std::set<signed_size_type>::const_iterator sit
- = cinfo.turn_indices.begin();
- sit != cinfo.turn_indices.end(); ++sit)
- {
- turns[*sit].discarded = true;
- }
- }
- }
- }
- }
-
-public :
-
- template <typename Turns, typename Clusters,
- typename Geometry0, typename Geometry1>
- static inline
- void apply(Turns& turns, Clusters const& clusters,
- Geometry0 const& geometry0, Geometry1 const& geometry1)
- {
- discard_clusters(turns, clusters, geometry0, geometry1);
-
- typedef typename boost::range_value<Turns>::type turn_type;
-
- for (typename boost::range_iterator<Turns>::type
- it = boost::begin(turns);
- it != boost::end(turns);
- ++it)
- {
- turn_type& turn = *it;
-
- // It is a ii self-turn
- // Check if it is within the other geometry
- if (! turn.discarded
- && is_self_turn<overlay_intersection>(turn)
- && ! check_within<OverlayType>::apply(turn, geometry0, geometry1))
- {
- // It is not within another geometry, set it as non startable.
- // It still might be traveled (#case_recursive_boxes_70)
- turn.operations[0].enriched.startable = false;
- turn.operations[1].enriched.startable = false;
- }
- }
- }
-};
-
-
-template <overlay_type OverlayType, operation_type OperationType>
-struct discard_open_turns : discard_turns {};
-
-// Handler for intersection
-template <>
-struct discard_open_turns<overlay_intersection, operation_intersection>
- : discard_self_intersection_turns<overlay_intersection> {};
-
-// Handler for difference, with different meaning of 'within'
-template <>
-struct discard_open_turns<overlay_difference, operation_intersection>
- : discard_self_intersection_turns<overlay_difference> {};
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_HANDLE_SELF_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/inconsistent_turns_exception.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/inconsistent_turns_exception.hpp
deleted file mode 100644
index 2782a8bc2c4..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/inconsistent_turns_exception.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INCONSISTENT_TURNS_EXCEPTION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INCONSISTENT_TURNS_EXCEPTION_HPP
-
-#if ! defined(BOOST_GEOMETRY_OVERLAY_NO_THROW)
-#include <boost/geometry/core/exception.hpp>
-
-namespace boost { namespace geometry
-{
-
-class inconsistent_turns_exception : public geometry::exception
-{
-public:
-
- inline inconsistent_turns_exception() {}
-
- virtual ~inconsistent_turns_exception()
- {}
-
- virtual char const* what() const noexcept
- {
- return "Boost.Geometry Inconsistent Turns exception";
- }
-};
-
-}} // boost::geometry
-
-#endif // BOOST_GEOMETRY_OVERLAY_NO_THROW
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INCONSISTENT_TURNS_EXCEPTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp
deleted file mode 100644
index c62b7d2834a..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp
+++ /dev/null
@@ -1,96 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INTERSECTION_BOX_BOX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INTERSECTION_BOX_BOX_HPP
-
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection
-{
-
-template <std::size_t Dimension, std::size_t DimensionCount>
-struct intersection_box_box
-{
- template
- <
- typename Box1, typename Box2,
- typename RobustPolicy,
- typename BoxOut,
- typename Strategy
- >
- static inline bool apply(Box1 const& box1,
- Box2 const& box2,
- RobustPolicy const& robust_policy,
- BoxOut& box_out,
- Strategy const& strategy)
- {
- typedef typename coordinate_type<BoxOut>::type ct;
-
- ct max1 = get<max_corner, Dimension>(box1);
- ct min2 = get<min_corner, Dimension>(box2);
-
- if (max1 < min2)
- {
- return false;
- }
-
- ct max2 = get<max_corner, Dimension>(box2);
- ct min1 = get<min_corner, Dimension>(box1);
-
- if (max2 < min1)
- {
- return false;
- }
-
- // Set dimensions of output coordinate
- set<min_corner, Dimension>(box_out, min1 < min2 ? min2 : min1);
- set<max_corner, Dimension>(box_out, max1 > max2 ? max2 : max1);
-
- return intersection_box_box<Dimension + 1, DimensionCount>
- ::apply(box1, box2, robust_policy, box_out, strategy);
- }
-};
-
-template <std::size_t DimensionCount>
-struct intersection_box_box<DimensionCount, DimensionCount>
-{
- template
- <
- typename Box1, typename Box2,
- typename RobustPolicy,
- typename BoxOut,
- typename Strategy
- >
- static inline bool apply(Box1 const&, Box2 const&,
- RobustPolicy const&, BoxOut&, Strategy const&)
- {
- return true;
- }
-};
-
-
-}} // namespace detail::intersection
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INTERSECTION_BOX_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp
deleted file mode 100644
index 60255cd9538..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp
+++ /dev/null
@@ -1,1353 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014, 2015, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INTERSECTION_INSERT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INTERSECTION_INSERT_HPP
-
-
-#include <cstddef>
-
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/range/metafunctions.hpp>
-
-
-#include <boost/geometry/core/is_areal.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/reverse_dispatch.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-#include <boost/geometry/algorithms/detail/overlay/clip_linestring.hpp>
-#include <boost/geometry/algorithms/detail/overlay/follow.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
-#include <boost/geometry/algorithms/detail/overlay/range_in_geometry.hpp>
-
-#include <boost/geometry/policies/robustness/robust_point_type.hpp>
-#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
-#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
-
-#include <boost/geometry/views/segment_view.hpp>
-#include <boost/geometry/views/detail/boundary_view.hpp>
-
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-#include <boost/geometry/algorithms/detail/overlay/linear_linear.hpp>
-#include <boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp>
-#include <boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp>
-
-#if defined(BOOST_GEOMETRY_DEBUG_FOLLOW)
-#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
-#include <boost/geometry/io/wkt/wkt.hpp>
-#endif
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection
-{
-
-template <typename PointOut>
-struct intersection_segment_segment_point
-{
- template
- <
- typename Segment1, typename Segment2,
- typename RobustPolicy,
- typename OutputIterator, typename Strategy
- >
- static inline OutputIterator apply(Segment1 const& segment1,
- Segment2 const& segment2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- typedef typename point_type<PointOut>::type point_type;
-
- typedef typename geometry::robust_point_type
- <
- typename geometry::point_type<Segment1>::type,
- RobustPolicy
- >::type robust_point_type;
-
- // TODO: rescale segment -> robust points
- robust_point_type pi_rob, pj_rob, qi_rob, qj_rob;
- {
- // Workaround:
- point_type pi, pj, qi, qj;
- assign_point_from_index<0>(segment1, pi);
- assign_point_from_index<1>(segment1, pj);
- assign_point_from_index<0>(segment2, qi);
- assign_point_from_index<1>(segment2, qj);
- geometry::recalculate(pi_rob, pi, robust_policy);
- geometry::recalculate(pj_rob, pj, robust_policy);
- geometry::recalculate(qi_rob, qi, robust_policy);
- geometry::recalculate(qj_rob, qj, robust_policy);
- }
-
- // Get the intersection point (or two points)
- typedef segment_intersection_points
- <
- point_type,
- typename segment_ratio_type
- <
- point_type, RobustPolicy
- >::type
- > intersection_return_type;
-
- typedef policies::relate::segments_intersection_points
- <
- intersection_return_type
- > policy_type;
-
- intersection_return_type
- is = strategy.apply(segment1, segment2,
- policy_type(), robust_policy,
- pi_rob, pj_rob, qi_rob, qj_rob);
-
- for (std::size_t i = 0; i < is.count; i++)
- {
- PointOut p;
- geometry::convert(is.intersections[i], p);
- *out++ = p;
- }
- return out;
- }
-};
-
-template <typename PointOut>
-struct intersection_linestring_linestring_point
-{
- template
- <
- typename Linestring1, typename Linestring2,
- typename RobustPolicy,
- typename OutputIterator,
- typename Strategy
- >
- static inline OutputIterator apply(Linestring1 const& linestring1,
- Linestring2 const& linestring2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- typedef typename point_type<PointOut>::type point_type;
-
- typedef detail::overlay::turn_info
- <
- point_type,
- typename segment_ratio_type<point_type, RobustPolicy>::type
- > turn_info;
- std::deque<turn_info> turns;
-
- geometry::get_intersection_points(linestring1, linestring2,
- robust_policy, turns, strategy);
-
- for (typename boost::range_iterator<std::deque<turn_info> const>::type
- it = boost::begin(turns); it != boost::end(turns); ++it)
- {
- PointOut p;
- geometry::convert(it->point, p);
- *out++ = p;
- }
- return out;
- }
-};
-
-/*!
-\brief Version of linestring with an areal feature (polygon or multipolygon)
-*/
-template
-<
- bool ReverseAreal,
- typename LineStringOut,
- overlay_type OverlayType
->
-struct intersection_of_linestring_with_areal
-{
-#if defined(BOOST_GEOMETRY_DEBUG_FOLLOW)
- template <typename Turn, typename Operation>
- static inline void debug_follow(Turn const& turn, Operation op,
- int index)
- {
- std::cout << index
- << " at " << op.seg_id
- << " meth: " << method_char(turn.method)
- << " op: " << operation_char(op.operation)
- << " vis: " << visited_char(op.visited)
- << " of: " << operation_char(turn.operations[0].operation)
- << operation_char(turn.operations[1].operation)
- << " " << geometry::wkt(turn.point)
- << std::endl;
- }
-
- template <typename Turn>
- static inline void debug_turn(Turn const& t, bool non_crossing)
- {
- std::cout << "checking turn @"
- << geometry::wkt(t.point)
- << "; " << method_char(t.method)
- << ":" << operation_char(t.operations[0].operation)
- << "/" << operation_char(t.operations[1].operation)
- << "; non-crossing? "
- << std::boolalpha << non_crossing << std::noboolalpha
- << std::endl;
- }
-#endif
-
-#ifdef BOOST_GEOMETRY_SETOPS_LA_OLD_BEHAVIOR
-
- class is_crossing_turn
- {
- // return true is the operation is intersection or blocked
- template <std::size_t Index, typename Turn>
- static inline bool has_op_i_or_b(Turn const& t)
- {
- return
- t.operations[Index].operation == overlay::operation_intersection
- ||
- t.operations[Index].operation == overlay::operation_blocked;
- }
-
- template <typename Turn>
- static inline bool has_method_crosses(Turn const& t)
- {
- return t.method == overlay::method_crosses;
- }
-
- template <typename Turn>
- static inline bool is_cc(Turn const& t)
- {
- return
- (t.method == overlay::method_touch_interior
- ||
- t.method == overlay::method_equal
- ||
- t.method == overlay::method_collinear)
- &&
- t.operations[0].operation == t.operations[1].operation
- &&
- t.operations[0].operation == overlay::operation_continue
- ;
- }
-
- template <typename Turn>
- static inline bool has_i_or_b_ops(Turn const& t)
- {
- return
- (t.method == overlay::method_touch
- ||
- t.method == overlay::method_touch_interior
- ||
- t.method == overlay::method_collinear)
- &&
- t.operations[1].operation != t.operations[0].operation
- &&
- (has_op_i_or_b<0>(t) || has_op_i_or_b<1>(t));
- }
-
- public:
- template <typename Turn>
- static inline bool apply(Turn const& t)
- {
- bool const is_crossing
- = has_method_crosses(t) || is_cc(t) || has_i_or_b_ops(t);
-#if defined(BOOST_GEOMETRY_DEBUG_FOLLOW)
- debug_turn(t, ! is_crossing);
-#endif
- return is_crossing;
- }
- };
-
- struct is_non_crossing_turn
- {
- template <typename Turn>
- static inline bool apply(Turn const& t)
- {
- return ! is_crossing_turn::apply(t);
- }
- };
-
- template <typename Turns>
- static inline bool no_crossing_turns_or_empty(Turns const& turns)
- {
- return detail::check_iterator_range
- <
- is_non_crossing_turn,
- true // allow an empty turns range
- >::apply(boost::begin(turns), boost::end(turns));
- }
-
- template <typename Turns>
- static inline int inside_or_outside_turn(Turns const& turns)
- {
- using namespace overlay;
- for (typename Turns::const_iterator it = turns.begin();
- it != turns.end(); ++it)
- {
- operation_type op0 = it->operations[0].operation;
- operation_type op1 = it->operations[1].operation;
- if (op0 == operation_intersection && op1 == operation_intersection)
- {
- return 1; // inside
- }
- else if (op0 == operation_union && op1 == operation_union)
- {
- return -1; // outside
- }
- }
- return 0;
- }
-
-#else // BOOST_GEOMETRY_SETOPS_LA_OLD_BEHAVIOR
-
- template <typename Linestring, typename Areal, typename Strategy, typename Turns>
- static inline bool simple_turns_analysis(Linestring const& linestring,
- Areal const& areal,
- Strategy const& strategy,
- Turns const& turns,
- int & inside_value)
- {
- using namespace overlay;
-
- bool found_continue = false;
- bool found_intersection = false;
- bool found_union = false;
- bool found_front = false;
-
- for (typename Turns::const_iterator it = turns.begin();
- it != turns.end(); ++it)
- {
- method_type const method = it->method;
- operation_type const op = it->operations[0].operation;
-
- if (method == method_crosses)
- {
- return false;
- }
- else if (op == operation_intersection)
- {
- found_intersection = true;
- }
- else if (op == operation_union)
- {
- found_union = true;
- }
- else if (op == operation_continue)
- {
- found_continue = true;
- }
-
- if ((found_intersection || found_continue) && found_union)
- {
- return false;
- }
-
- if (it->operations[0].position == position_front)
- {
- found_front = true;
- }
- }
-
- if (found_front)
- {
- if (found_intersection)
- {
- inside_value = 1; // inside
- }
- else if (found_union)
- {
- inside_value = -1; // outside
- }
- else // continue and blocked
- {
- inside_value = 0;
- }
- return true;
- }
-
- // if needed analyse points of a linestring
- // NOTE: range_in_geometry checks points of a linestring
- // until a point inside/outside areal is found
- // TODO: Could be replaced with point_in_geometry() because found_front is false
- inside_value = range_in_geometry(linestring, areal, strategy);
-
- if ( (found_intersection && inside_value == -1) // going in from outside
- || (found_continue && inside_value == -1) // going on boundary from outside
- || (found_union && inside_value == 1) ) // going out from inside
- {
- return false;
- }
-
- return true;
- }
-
-#endif // BOOST_GEOMETRY_SETOPS_LA_OLD_BEHAVIOR
-
- template
- <
- typename LineString, typename Areal,
- typename RobustPolicy,
- typename OutputIterator, typename Strategy
- >
- static inline OutputIterator apply(LineString const& linestring, Areal const& areal,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- if (boost::size(linestring) == 0)
- {
- return out;
- }
-
- typedef detail::overlay::follow
- <
- LineStringOut,
- LineString,
- Areal,
- OverlayType,
- false // do not remove spikes for linear geometries
- > follower;
-
- typedef typename point_type<LineStringOut>::type point_type;
-#ifdef BOOST_GEOMETRY_SETOPS_LA_OLD_BEHAVIOR
- typedef detail::overlay::traversal_turn_info
- <
- point_type,
- typename geometry::segment_ratio_type<point_type, RobustPolicy>::type
- > turn_info;
-#else
- typedef detail::overlay::turn_info
- <
- point_type,
- typename geometry::segment_ratio_type<point_type, RobustPolicy>::type,
- detail::overlay::turn_operation_linear
- <
- point_type,
- typename geometry::segment_ratio_type<point_type, RobustPolicy>::type
- >
- > turn_info;
-#endif
- std::deque<turn_info> turns;
-
- detail::get_turns::no_interrupt_policy policy;
-
-#ifdef BOOST_GEOMETRY_SETOPS_LA_OLD_BEHAVIOR
-
- geometry::get_turns
- <
- false,
- (OverlayType == overlay_intersection ? ReverseAreal : !ReverseAreal),
- detail::overlay::assign_null_policy
- >(linestring, areal, strategy, robust_policy, turns, policy);
-
- if (no_crossing_turns_or_empty(turns))
- {
- // No intersection points, it is either
- // inside (interior + borders)
- // or outside (exterior + borders)
-
- // analyse the turns
- int inside_value = inside_or_outside_turn(turns);
- if (inside_value == 0)
- {
- // if needed analyse points of a linestring
- // NOTE: range_in_geometry checks points of a linestring
- // until a point inside/outside areal is found
- inside_value = overlay::range_in_geometry(linestring, areal, strategy);
- }
- // add linestring to the output if conditions are met
- if (inside_value != 0 && follower::included(inside_value))
- {
- LineStringOut copy;
- geometry::convert(linestring, copy);
- *out++ = copy;
- }
- return out;
- }
-
-#else // BOOST_GEOMETRY_SETOPS_LA_OLD_BEHAVIOR
-
- typedef detail::overlay::get_turn_info_linear_areal
- <
- detail::overlay::assign_null_policy
- > turn_policy;
-
- dispatch::get_turns
- <
- typename geometry::tag<LineString>::type,
- typename geometry::tag<Areal>::type,
- LineString,
- Areal,
- false,
- (OverlayType == overlay_intersection ? ReverseAreal : !ReverseAreal),
- turn_policy
- >::apply(0, linestring, 1, areal,
- strategy, robust_policy,
- turns, policy);
-
- int inside_value = 0;
- if (simple_turns_analysis(linestring, areal, strategy, turns, inside_value))
- {
- // No crossing the boundary, it is either
- // inside (interior + borders)
- // or outside (exterior + borders)
- // or on boundary
-
- // add linestring to the output if conditions are met
- if (follower::included(inside_value))
- {
- LineStringOut copy;
- geometry::convert(linestring, copy);
- *out++ = copy;
- }
-
- return out;
- }
-
-#endif // BOOST_GEOMETRY_SETOPS_LA_OLD_BEHAVIOR
-
-#if defined(BOOST_GEOMETRY_DEBUG_FOLLOW)
- int index = 0;
- for(typename std::deque<turn_info>::const_iterator
- it = turns.begin(); it != turns.end(); ++it)
- {
- debug_follow(*it, it->operations[0], index++);
- }
-#endif
-
- return follower::apply
- (
- linestring, areal,
- geometry::detail::overlay::operation_intersection,
- turns, robust_policy, out, strategy
- );
- }
-};
-
-
-template <typename Turns, typename OutputIterator>
-inline OutputIterator intersection_output_turn_points(Turns const& turns,
- OutputIterator out)
-{
- for (typename Turns::const_iterator
- it = turns.begin(); it != turns.end(); ++it)
- {
- *out++ = it->point;
- }
-
- return out;
-}
-
-template <typename PointOut>
-struct intersection_areal_areal_point
-{
- template
- <
- typename Geometry1, typename Geometry2,
- typename RobustPolicy,
- typename OutputIterator,
- typename Strategy
- >
- static inline OutputIterator apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- typedef detail::overlay::turn_info
- <
- PointOut,
- typename segment_ratio_type<PointOut, RobustPolicy>::type
- > turn_info;
- std::vector<turn_info> turns;
-
- detail::get_turns::no_interrupt_policy policy;
-
- geometry::get_turns
- <
- false, false, detail::overlay::assign_null_policy
- >(geometry1, geometry2, strategy, robust_policy, turns, policy);
-
- return intersection_output_turn_points(turns, out);
- }
-};
-
-template <typename PointOut>
-struct intersection_linear_areal_point
-{
- template
- <
- typename Geometry1, typename Geometry2,
- typename RobustPolicy,
- typename OutputIterator,
- typename Strategy
- >
- static inline OutputIterator apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- typedef typename geometry::segment_ratio_type
- <
- PointOut, RobustPolicy
- >::type segment_ratio_type;
-
- typedef detail::overlay::turn_info
- <
- PointOut,
- segment_ratio_type,
- detail::overlay::turn_operation_linear
- <
- PointOut,
- segment_ratio_type
- >
- > turn_info;
-
- typedef detail::overlay::get_turn_info_linear_areal
- <
- detail::overlay::assign_null_policy
- > turn_policy;
-
- std::vector<turn_info> turns;
-
- detail::get_turns::no_interrupt_policy interrupt_policy;
-
- dispatch::get_turns
- <
- typename geometry::tag<Geometry1>::type,
- typename geometry::tag<Geometry2>::type,
- Geometry1,
- Geometry2,
- false,
- false,
- turn_policy
- >::apply(0, geometry1, 1, geometry2,
- strategy, robust_policy,
- turns, interrupt_policy);
-
- return intersection_output_turn_points(turns, out);
- }
-};
-
-template <typename PointOut>
-struct intersection_areal_linear_point
-{
- template
- <
- typename Geometry1, typename Geometry2,
- typename RobustPolicy,
- typename OutputIterator,
- typename Strategy
- >
- static inline OutputIterator apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- return intersection_linear_areal_point
- <
- PointOut
- >::apply(geometry2, geometry1, robust_policy, out, strategy);
- }
-};
-
-
-}} // namespace detail::intersection
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- // real types
- typename Geometry1,
- typename Geometry2,
- typename GeometryOut,
- overlay_type OverlayType,
- // orientation
- bool Reverse1 = detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
- bool Reverse2 = detail::overlay::do_reverse<geometry::point_order<Geometry2>::value>::value,
- bool ReverseOut = detail::overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value,
- // tag dispatching:
- typename TagIn1 = typename geometry::tag<Geometry1>::type,
- typename TagIn2 = typename geometry::tag<Geometry2>::type,
- typename TagOut = typename geometry::tag<GeometryOut>::type,
- // metafunction finetuning helpers:
- typename CastedTagIn1 = typename geometry::tag_cast<TagIn1, areal_tag, linear_tag, pointlike_tag>::type,
- typename CastedTagIn2 = typename geometry::tag_cast<TagIn2, areal_tag, linear_tag, pointlike_tag>::type,
- typename CastedTagOut = typename geometry::tag_cast<TagOut, areal_tag, linear_tag, pointlike_tag>::type
->
-struct intersection_insert
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPES_OR_ORIENTATIONS
- , (types<Geometry1, Geometry2, GeometryOut>)
- );
-};
-
-
-template
-<
- typename Geometry1, typename Geometry2,
- typename GeometryOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut,
- typename TagIn1, typename TagIn2, typename TagOut
->
-struct intersection_insert
- <
- Geometry1, Geometry2,
- GeometryOut,
- OverlayType,
- Reverse1, Reverse2, ReverseOut,
- TagIn1, TagIn2, TagOut,
- areal_tag, areal_tag, areal_tag
- > : detail::overlay::overlay
- <Geometry1, Geometry2, Reverse1, Reverse2, ReverseOut, GeometryOut, OverlayType>
-{};
-
-
-// Any areal type with box:
-template
-<
- typename Geometry, typename Box,
- typename GeometryOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut,
- typename TagIn, typename TagOut
->
-struct intersection_insert
- <
- Geometry, Box,
- GeometryOut,
- OverlayType,
- Reverse1, Reverse2, ReverseOut,
- TagIn, box_tag, TagOut,
- areal_tag, areal_tag, areal_tag
- > : detail::overlay::overlay
- <Geometry, Box, Reverse1, Reverse2, ReverseOut, GeometryOut, OverlayType>
-{};
-
-
-template
-<
- typename Segment1, typename Segment2,
- typename GeometryOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert
- <
- Segment1, Segment2,
- GeometryOut,
- OverlayType,
- Reverse1, Reverse2, ReverseOut,
- segment_tag, segment_tag, point_tag,
- linear_tag, linear_tag, pointlike_tag
- > : detail::intersection::intersection_segment_segment_point<GeometryOut>
-{};
-
-
-template
-<
- typename Linestring1, typename Linestring2,
- typename GeometryOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert
- <
- Linestring1, Linestring2,
- GeometryOut,
- OverlayType,
- Reverse1, Reverse2, ReverseOut,
- linestring_tag, linestring_tag, point_tag,
- linear_tag, linear_tag, pointlike_tag
- > : detail::intersection::intersection_linestring_linestring_point<GeometryOut>
-{};
-
-
-template
-<
- typename Linestring, typename Box,
- typename GeometryOut,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert
- <
- Linestring, Box,
- GeometryOut,
- overlay_intersection,
- Reverse1, Reverse2, ReverseOut,
- linestring_tag, box_tag, linestring_tag,
- linear_tag, areal_tag, linear_tag
- >
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(Linestring const& linestring,
- Box const& box,
- RobustPolicy const& robust_policy,
- OutputIterator out, Strategy const& )
- {
- typedef typename point_type<GeometryOut>::type point_type;
- strategy::intersection::liang_barsky<Box, point_type> lb_strategy;
- return detail::intersection::clip_range_with_box
- <GeometryOut>(box, linestring, robust_policy, out, lb_strategy);
- }
-};
-
-
-template
-<
- typename Linestring, typename Polygon,
- typename GeometryOut,
- overlay_type OverlayType,
- bool ReverseLinestring, bool ReversePolygon, bool ReverseOut
->
-struct intersection_insert
- <
- Linestring, Polygon,
- GeometryOut,
- OverlayType,
- ReverseLinestring, ReversePolygon, ReverseOut,
- linestring_tag, polygon_tag, linestring_tag,
- linear_tag, areal_tag, linear_tag
- > : detail::intersection::intersection_of_linestring_with_areal
- <
- ReversePolygon,
- GeometryOut,
- OverlayType
- >
-{};
-
-
-template
-<
- typename Linestring, typename Ring,
- typename GeometryOut,
- overlay_type OverlayType,
- bool ReverseLinestring, bool ReverseRing, bool ReverseOut
->
-struct intersection_insert
- <
- Linestring, Ring,
- GeometryOut,
- OverlayType,
- ReverseLinestring, ReverseRing, ReverseOut,
- linestring_tag, ring_tag, linestring_tag,
- linear_tag, areal_tag, linear_tag
- > : detail::intersection::intersection_of_linestring_with_areal
- <
- ReverseRing,
- GeometryOut,
- OverlayType
- >
-{};
-
-template
-<
- typename Segment, typename Box,
- typename GeometryOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert
- <
- Segment, Box,
- GeometryOut,
- OverlayType,
- Reverse1, Reverse2, ReverseOut,
- segment_tag, box_tag, linestring_tag,
- linear_tag, areal_tag, linear_tag
- >
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(Segment const& segment,
- Box const& box,
- RobustPolicy const& robust_policy,
- OutputIterator out, Strategy const& )
- {
- geometry::segment_view<Segment> range(segment);
-
- typedef typename point_type<GeometryOut>::type point_type;
- strategy::intersection::liang_barsky<Box, point_type> lb_strategy;
- return detail::intersection::clip_range_with_box
- <GeometryOut>(box, range, robust_policy, out, lb_strategy);
- }
-};
-
-template
-<
- typename Geometry1, typename Geometry2,
- typename PointOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut,
- typename Tag1, typename Tag2
->
-struct intersection_insert
- <
- Geometry1, Geometry2,
- PointOut,
- OverlayType,
- Reverse1, Reverse2, ReverseOut,
- Tag1, Tag2, point_tag,
- areal_tag, areal_tag, pointlike_tag
- >
- : public detail::intersection::intersection_areal_areal_point
- <
- PointOut
- >
-{};
-
-template
-<
- typename Geometry1, typename Geometry2,
- typename PointOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut,
- typename Tag1, typename Tag2
->
-struct intersection_insert
- <
- Geometry1, Geometry2,
- PointOut,
- OverlayType,
- Reverse1, Reverse2, ReverseOut,
- Tag1, Tag2, point_tag,
- linear_tag, areal_tag, pointlike_tag
- >
- : public detail::intersection::intersection_linear_areal_point
- <
- PointOut
- >
-{};
-
-template
-<
- typename Geometry1, typename Geometry2,
- typename PointOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut,
- typename Tag1, typename Tag2
->
-struct intersection_insert
- <
- Geometry1, Geometry2,
- PointOut,
- OverlayType,
- Reverse1, Reverse2, ReverseOut,
- Tag1, Tag2, point_tag,
- areal_tag, linear_tag, pointlike_tag
- >
- : public detail::intersection::intersection_areal_linear_point
- <
- PointOut
- >
-{};
-
-template
-<
- typename Geometry1, typename Geometry2, typename GeometryOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert_reversed
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(Geometry1 const& g1,
- Geometry2 const& g2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- return intersection_insert
- <
- Geometry2, Geometry1, GeometryOut,
- OverlayType,
- Reverse2, Reverse1, ReverseOut
- >::apply(g2, g1, robust_policy, out, strategy);
- }
-};
-
-
-// dispatch for intersection(areal, areal, linear)
-template
-<
- typename Geometry1, typename Geometry2,
- typename LinestringOut,
- bool Reverse1, bool Reverse2, bool ReverseOut,
- typename Tag1, typename Tag2
->
-struct intersection_insert
- <
- Geometry1, Geometry2,
- LinestringOut,
- overlay_intersection,
- Reverse1, Reverse2, ReverseOut,
- Tag1, Tag2, linestring_tag,
- areal_tag, areal_tag, linear_tag
- >
-{
- template
- <
- typename RobustPolicy, typename OutputIterator, typename Strategy
- >
- static inline OutputIterator apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- OutputIterator oit,
- Strategy const& strategy)
- {
- detail::boundary_view<Geometry1 const> view1(geometry1);
- detail::boundary_view<Geometry2 const> view2(geometry2);
-
- return detail::overlay::linear_linear_linestring
- <
- detail::boundary_view<Geometry1 const>,
- detail::boundary_view<Geometry2 const>,
- LinestringOut,
- overlay_intersection
- >::apply(view1, view2, robust_policy, oit, strategy);
- }
-};
-
-// dispatch for difference/intersection of linear geometries
-template
-<
- typename Linear1, typename Linear2, typename LineStringOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut,
- typename TagIn1, typename TagIn2
->
-struct intersection_insert
- <
- Linear1, Linear2, LineStringOut, OverlayType,
- Reverse1, Reverse2, ReverseOut,
- TagIn1, TagIn2, linestring_tag,
- linear_tag, linear_tag, linear_tag
- > : detail::overlay::linear_linear_linestring
- <
- Linear1, Linear2, LineStringOut, OverlayType
- >
-{};
-
-
-// dispatch for difference/intersection of point-like geometries
-
-template
-<
- typename Point1, typename Point2, typename PointOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert
- <
- Point1, Point2, PointOut, OverlayType,
- Reverse1, Reverse2, ReverseOut,
- point_tag, point_tag, point_tag,
- pointlike_tag, pointlike_tag, pointlike_tag
- > : detail::overlay::point_point_point
- <
- Point1, Point2, PointOut, OverlayType
- >
-{};
-
-
-template
-<
- typename MultiPoint, typename Point, typename PointOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert
- <
- MultiPoint, Point, PointOut, OverlayType,
- Reverse1, Reverse2, ReverseOut,
- multi_point_tag, point_tag, point_tag,
- pointlike_tag, pointlike_tag, pointlike_tag
- > : detail::overlay::multipoint_point_point
- <
- MultiPoint, Point, PointOut, OverlayType
- >
-{};
-
-
-template
-<
- typename Point, typename MultiPoint, typename PointOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert
- <
- Point, MultiPoint, PointOut, OverlayType,
- Reverse1, Reverse2, ReverseOut,
- point_tag, multi_point_tag, point_tag,
- pointlike_tag, pointlike_tag, pointlike_tag
- > : detail::overlay::point_multipoint_point
- <
- Point, MultiPoint, PointOut, OverlayType
- >
-{};
-
-
-template
-<
- typename MultiPoint1, typename MultiPoint2, typename PointOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert
- <
- MultiPoint1, MultiPoint2, PointOut, OverlayType,
- Reverse1, Reverse2, ReverseOut,
- multi_point_tag, multi_point_tag, point_tag,
- pointlike_tag, pointlike_tag, pointlike_tag
- > : detail::overlay::multipoint_multipoint_point
- <
- MultiPoint1, MultiPoint2, PointOut, OverlayType
- >
-{};
-
-
-// dispatch for difference/intersection of pointlike-linear geometries
-template
-<
- typename Point, typename Linear, typename PointOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut,
- typename Tag
->
-struct intersection_insert
- <
- Point, Linear, PointOut, OverlayType,
- Reverse1, Reverse2, ReverseOut,
- point_tag, Tag, point_tag,
- pointlike_tag, linear_tag, pointlike_tag
- > : detail_dispatch::overlay::pointlike_linear_point
- <
- Point, Linear, PointOut, OverlayType,
- point_tag, typename tag_cast<Tag, segment_tag, linear_tag>::type
- >
-{};
-
-
-template
-<
- typename MultiPoint, typename Linear, typename PointOut,
- overlay_type OverlayType,
- bool Reverse1, bool Reverse2, bool ReverseOut,
- typename Tag
->
-struct intersection_insert
- <
- MultiPoint, Linear, PointOut, OverlayType,
- Reverse1, Reverse2, ReverseOut,
- multi_point_tag, Tag, point_tag,
- pointlike_tag, linear_tag, pointlike_tag
- > : detail_dispatch::overlay::pointlike_linear_point
- <
- MultiPoint, Linear, PointOut, OverlayType,
- multi_point_tag,
- typename tag_cast<Tag, segment_tag, linear_tag>::type
- >
-{};
-
-
-template
-<
- typename Linestring, typename MultiPoint, typename PointOut,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct intersection_insert
- <
- Linestring, MultiPoint, PointOut, overlay_intersection,
- Reverse1, Reverse2, ReverseOut,
- linestring_tag, multi_point_tag, point_tag,
- linear_tag, pointlike_tag, pointlike_tag
- >
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(Linestring const& linestring,
- MultiPoint const& multipoint,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- return detail_dispatch::overlay::pointlike_linear_point
- <
- MultiPoint, Linestring, PointOut, overlay_intersection,
- multi_point_tag, linear_tag
- >::apply(multipoint, linestring, robust_policy, out, strategy);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace intersection
-{
-
-
-template
-<
- typename GeometryOut,
- bool ReverseSecond,
- overlay_type OverlayType,
- typename Geometry1, typename Geometry2,
- typename RobustPolicy,
- typename OutputIterator,
- typename Strategy
->
-inline OutputIterator insert(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy robust_policy,
- OutputIterator out,
- Strategy const& strategy)
-{
- return boost::mpl::if_c
- <
- geometry::reverse_dispatch<Geometry1, Geometry2>::type::value,
- geometry::dispatch::intersection_insert_reversed
- <
- Geometry1, Geometry2,
- GeometryOut,
- OverlayType,
- overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
- overlay::do_reverse<geometry::point_order<Geometry2>::value, ReverseSecond>::value,
- overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value
- >,
- geometry::dispatch::intersection_insert
- <
- Geometry1, Geometry2,
- GeometryOut,
- OverlayType,
- geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
- geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, ReverseSecond>::value
- >
- >::type::apply(geometry1, geometry2, robust_policy, out, strategy);
-}
-
-
-/*!
-\brief \brief_calc2{intersection} \brief_strategy
-\ingroup intersection
-\details \details_calc2{intersection_insert, spatial set theoretic intersection}
- \brief_strategy. \details_insert{intersection}
-\tparam GeometryOut \tparam_geometry{\p_l_or_c}
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam OutputIterator \tparam_out{\p_l_or_c}
-\tparam Strategy \tparam_strategy_overlay
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param out \param_out{intersection}
-\param strategy \param_strategy{intersection}
-\return \return_out
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/intersection.qbk]}
-*/
-template
-<
- typename GeometryOut,
- typename Geometry1,
- typename Geometry2,
- typename OutputIterator,
- typename Strategy
->
-inline OutputIterator intersection_insert(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- OutputIterator out,
- Strategy const& strategy)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- typedef typename geometry::rescale_policy_type
- <
- typename geometry::point_type<Geometry1>::type // TODO from both
- >::type rescale_policy_type;
-
- rescale_policy_type robust_policy
- = geometry::get_rescale_policy<rescale_policy_type>(geometry1, geometry2);
-
- return detail::intersection::insert
- <
- GeometryOut, false, overlay_intersection
- >(geometry1, geometry2, robust_policy, out, strategy);
-}
-
-
-/*!
-\brief \brief_calc2{intersection}
-\ingroup intersection
-\details \details_calc2{intersection_insert, spatial set theoretic intersection}.
- \details_insert{intersection}
-\tparam GeometryOut \tparam_geometry{\p_l_or_c}
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam OutputIterator \tparam_out{\p_l_or_c}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param out \param_out{intersection}
-\return \return_out
-
-\qbk{[include reference/algorithms/intersection.qbk]}
-*/
-template
-<
- typename GeometryOut,
- typename Geometry1,
- typename Geometry2,
- typename OutputIterator
->
-inline OutputIterator intersection_insert(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- OutputIterator out)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- typedef typename strategy::intersection::services::default_strategy
- <
- typename cs_tag<GeometryOut>::type
- >::type strategy_type;
-
- return intersection_insert<GeometryOut>(geometry1, geometry2, out,
- strategy_type());
-}
-
-}} // namespace detail::intersection
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_INTERSECTION_INSERT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/is_self_turn.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/is_self_turn.hpp
deleted file mode 100644
index e2b935e4190..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/is_self_turn.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017-2017 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// 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)
-
-#ifdef __GNUC__
-#pragma GCC system_header
-#endif
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_IS_SELF_TURN_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_IS_SELF_TURN_HPP
-
-#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-template <overlay_type OverlayType>
-struct is_self_turn_check
-{
- template <typename Turn>
- static inline bool apply(Turn const& turn)
- {
- return turn.operations[0].seg_id.source_index
- == turn.operations[1].seg_id.source_index;
- }
-};
-
-template <>
-struct is_self_turn_check<overlay_buffer>
-{
- template <typename Turn>
- static inline bool apply(Turn const& /*turn*/)
- {
- return false;
- }
-};
-
-template <>
-struct is_self_turn_check<overlay_dissolve>
-{
- template <typename Turn>
- static inline bool apply(Turn const& /*turn*/)
- {
- return false;
- }
-};
-
-template <overlay_type OverlayType, typename Turn>
-bool is_self_turn(Turn const& turn)
-{
- return is_self_turn_check<OverlayType>::apply(turn);
-}
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_IS_SELF_TURN_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp
deleted file mode 100644
index 4b8752798a1..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp
+++ /dev/null
@@ -1,204 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SORT_ON_SEGMENT_RATIO_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SORT_ON_SEGMENT_RATIO_HPP
-
-#include <cstddef>
-#include <algorithm>
-#include <map>
-#include <set>
-#include <vector>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp>
-#include <boost/geometry/algorithms/detail/overlay/sort_by_side.hpp>
-#include <boost/geometry/strategies/side.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-// Wraps "turn_operation" from turn_info.hpp,
-// giving it extra information, necessary for sorting
-template <typename TurnOperation>
-struct indexed_turn_operation
-{
- typedef TurnOperation type;
-
- std::size_t turn_index;
- std::size_t operation_index;
- bool skip;
- // use pointers to avoid copies, const& is not possible because of usage in vector
- segment_identifier const* other_seg_id; // segment id of other segment of intersection of two segments
- TurnOperation const* subject;
-
- inline indexed_turn_operation(std::size_t ti, std::size_t oi,
- TurnOperation const& sub,
- segment_identifier const& oid)
- : turn_index(ti)
- , operation_index(oi)
- , skip(false)
- , other_seg_id(&oid)
- , subject(boost::addressof(sub))
- {}
-
-};
-
-template
-<
- typename Turns,
- typename Indexed,
- typename Geometry1, typename Geometry2,
- typename RobustPolicy,
- typename SideStrategy,
- bool Reverse1, bool Reverse2
->
-struct less_by_segment_ratio
-{
- inline less_by_segment_ratio(Turns const& turns
- , Geometry1 const& geometry1
- , Geometry2 const& geometry2
- , RobustPolicy const& robust_policy
- , SideStrategy const& strategy)
- : m_turns(turns)
- , m_geometry1(geometry1)
- , m_geometry2(geometry2)
- , m_robust_policy(robust_policy)
- , m_strategy(strategy)
- {
- }
-
-private :
-
- Turns const& m_turns;
- Geometry1 const& m_geometry1;
- Geometry2 const& m_geometry2;
- RobustPolicy const& m_robust_policy;
- SideStrategy const& m_strategy;
-
- typedef typename geometry::point_type<Geometry1>::type point_type;
-
- inline bool default_order(Indexed const& left, Indexed const& right) const
- {
- // We've nothing to sort on. Take the indexes
- return left.turn_index < right.turn_index;
- }
-
- inline bool consider_relative_order(Indexed const& left,
- Indexed const& right) const
- {
- point_type pi, pj, ri, rj, si, sj;
-
- geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
- left.subject->seg_id,
- pi, pj);
- geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
- *left.other_seg_id,
- ri, rj);
- geometry::copy_segment_points<Reverse1, Reverse2>(m_geometry1, m_geometry2,
- *right.other_seg_id,
- si, sj);
-
- int const side_rj_p = m_strategy.apply(pi, pj, rj);
- int const side_sj_p = m_strategy.apply(pi, pj, sj);
-
- // Put the one turning left (1; right == -1) as last
- if (side_rj_p != side_sj_p)
- {
- return side_rj_p < side_sj_p;
- }
-
- int const side_sj_r = m_strategy.apply(ri, rj, sj);
- int const side_rj_s = m_strategy.apply(si, sj, rj);
-
- // If they both turn left: the most left as last
- // If they both turn right: this is not relevant, but take also here most left
- if (side_rj_s != side_sj_r)
- {
- return side_rj_s < side_sj_r;
- }
-
- return default_order(left, right);
- }
-
-
-public :
-
- // Note that left/right do NOT correspond to m_geometry1/m_geometry2
- // but to the "indexed_turn_operation"
- inline bool operator()(Indexed const& left, Indexed const& right) const
- {
- if (! (left.subject->seg_id == right.subject->seg_id))
- {
- return left.subject->seg_id < right.subject->seg_id;
- }
-
- // Both left and right are located on the SAME segment.
-
- if (! (left.subject->fraction == right.subject->fraction))
- {
- return left.subject->fraction < right.subject->fraction;
- }
-
-
- typedef typename boost::range_value<Turns>::type turn_type;
- turn_type const& left_turn = m_turns[left.turn_index];
- turn_type const& right_turn = m_turns[right.turn_index];
-
- // First check "real" intersection (crosses)
- // -> distance zero due to precision, solve it by sorting
- if (left_turn.method == method_crosses
- && right_turn.method == method_crosses)
- {
- return consider_relative_order(left, right);
- }
-
- bool const left_both_xx = left_turn.both(operation_blocked);
- bool const right_both_xx = right_turn.both(operation_blocked);
- if (left_both_xx && ! right_both_xx)
- {
- return true;
- }
- if (! left_both_xx && right_both_xx)
- {
- return false;
- }
-
- bool const left_both_uu = left_turn.both(operation_union);
- bool const right_both_uu = right_turn.both(operation_union);
- if (left_both_uu && ! right_both_uu)
- {
- return true;
- }
- if (! left_both_uu && right_both_uu)
- {
- return false;
- }
-
- return default_order(left, right);
- }
-};
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SORT_ON_SEGMENT_RATIO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/linear_linear.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/linear_linear.hpp
deleted file mode 100644
index 21d079d95c9..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/linear_linear.hpp
+++ /dev/null
@@ -1,344 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_LINEAR_LINEAR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_LINEAR_LINEAR_HPP
-
-#include <algorithm>
-#include <vector>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/detail/relate/turns.hpp>
-
-#include <boost/geometry/algorithms/detail/turns/compare_turns.hpp>
-#include <boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp>
-#include <boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
-#include <boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp>
-
-#include <boost/geometry/algorithms/convert.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-template
-<
- typename LineStringOut,
- overlay_type OverlayType,
- typename Geometry,
- typename GeometryTag
->
-struct linear_linear_no_intersections;
-
-
-template <typename LineStringOut, typename LineString>
-struct linear_linear_no_intersections
- <
- LineStringOut, overlay_difference, LineString, linestring_tag
- >
-{
- template <typename OutputIterator>
- static inline OutputIterator apply(LineString const& linestring,
- OutputIterator oit)
- {
- LineStringOut ls_out;
- geometry::convert(linestring, ls_out);
- *oit++ = ls_out;
- return oit;
- }
-};
-
-
-template <typename LineStringOut, typename MultiLineString>
-struct linear_linear_no_intersections
- <
- LineStringOut,
- overlay_difference,
- MultiLineString,
- multi_linestring_tag
- >
-{
- template <typename OutputIterator>
- static inline OutputIterator apply(MultiLineString const& multilinestring,
- OutputIterator oit)
- {
- for (typename boost::range_iterator<MultiLineString const>::type
- it = boost::begin(multilinestring);
- it != boost::end(multilinestring); ++it)
- {
- LineStringOut ls_out;
- geometry::convert(*it, ls_out);
- *oit++ = ls_out;
- }
- return oit;
- }
-};
-
-
-template <typename LineStringOut, typename Geometry, typename GeometryTag>
-struct linear_linear_no_intersections
- <
- LineStringOut, overlay_intersection, Geometry, GeometryTag
- >
-{
- template <typename OutputIterator>
- static inline OutputIterator apply(Geometry const&,
- OutputIterator oit)
- {
- return oit;
- }
-};
-
-
-
-
-
-
-
-template
-<
- typename Linear1,
- typename Linear2,
- typename LinestringOut,
- overlay_type OverlayType,
- bool EnableFilterContinueTurns = false,
- bool EnableRemoveDuplicateTurns = false,
- bool EnableDegenerateTurns = true,
-#ifdef BOOST_GEOMETRY_INTERSECTION_DO_NOT_INCLUDE_ISOLATED_POINTS
- bool EnableFollowIsolatedPoints = false
-#else
- bool EnableFollowIsolatedPoints = true
-#endif
->
-class linear_linear_linestring
-{
-protected:
- struct assign_policy
- {
- static bool const include_no_turn = false;
- static bool const include_degenerate = EnableDegenerateTurns;
- static bool const include_opposite = false;
-
- template
- <
- typename Info,
- typename Point1,
- typename Point2,
- typename IntersectionInfo
- >
- static inline void apply(Info& , Point1 const& , Point2 const& ,
- IntersectionInfo const& )
- {
- }
- };
-
-
- template
- <
- typename Turns,
- typename LinearGeometry1,
- typename LinearGeometry2,
- typename IntersectionStrategy,
- typename RobustPolicy
- >
- static inline void compute_turns(Turns& turns,
- LinearGeometry1 const& linear1,
- LinearGeometry2 const& linear2,
- IntersectionStrategy const& strategy,
- RobustPolicy const& robust_policy)
- {
- turns.clear();
-
- detail::get_turns::no_interrupt_policy interrupt_policy;
-
- geometry::detail::relate::turns::get_turns
- <
- LinearGeometry1,
- LinearGeometry2,
- detail::get_turns::get_turn_info_type
- <
- LinearGeometry1,
- LinearGeometry2,
- assign_policy
- >,
- RobustPolicy
- >::apply(turns, linear1, linear2, interrupt_policy, strategy, robust_policy);
- }
-
-
- template
- <
- overlay_type OverlayTypeForFollow,
- bool FollowIsolatedPoints,
- typename Turns,
- typename LinearGeometry1,
- typename LinearGeometry2,
- typename OutputIterator,
- typename IntersectionStrategy
- >
- static inline OutputIterator
- sort_and_follow_turns(Turns& turns,
- LinearGeometry1 const& linear1,
- LinearGeometry2 const& linear2,
- OutputIterator oit,
- IntersectionStrategy const& strategy)
- {
- // remove turns that have no added value
- turns::filter_continue_turns
- <
- Turns,
- EnableFilterContinueTurns && OverlayType != overlay_intersection
- >::apply(turns);
-
- // sort by seg_id, distance, and operation
- std::sort(boost::begin(turns), boost::end(turns),
- detail::turns::less_seg_fraction_other_op<>());
-
- // remove duplicate turns
- turns::remove_duplicate_turns
- <
- Turns, EnableRemoveDuplicateTurns
- >::apply(turns);
-
- return detail::overlay::following::linear::follow
- <
- LinestringOut,
- LinearGeometry1,
- LinearGeometry2,
- OverlayTypeForFollow,
- FollowIsolatedPoints,
- !EnableFilterContinueTurns || OverlayType == overlay_intersection
- >::apply(linear1, linear2, boost::begin(turns), boost::end(turns),
- oit, strategy.get_side_strategy());
- }
-
-public:
- template
- <
- typename RobustPolicy, typename OutputIterator, typename Strategy
- >
- static inline OutputIterator apply(Linear1 const& linear1,
- Linear2 const& linear2,
- RobustPolicy const& robust_policy,
- OutputIterator oit,
- Strategy const& strategy)
- {
- typedef typename detail::relate::turns::get_turns
- <
- Linear1,
- Linear2,
- detail::get_turns::get_turn_info_type
- <
- Linear1,
- Linear2,
- assign_policy
- >,
- RobustPolicy
- >::turn_info turn_info;
-
- typedef std::vector<turn_info> turns_container;
-
- turns_container turns;
- compute_turns(turns, linear1, linear2, strategy, robust_policy);
-
- if ( turns.empty() )
- {
- // the two linear geometries are disjoint
- return linear_linear_no_intersections
- <
- LinestringOut,
- OverlayType,
- Linear1,
- typename tag<Linear1>::type
- >::apply(linear1, oit);
- }
-
- return sort_and_follow_turns
- <
- OverlayType,
- EnableFollowIsolatedPoints
- && OverlayType == overlay_intersection
- >(turns, linear1, linear2, oit, strategy);
- }
-};
-
-
-
-
-template
-<
- typename Linear1,
- typename Linear2,
- typename LinestringOut,
- bool EnableFilterContinueTurns,
- bool EnableRemoveDuplicateTurns,
- bool EnableDegenerateTurns,
- bool EnableFollowIsolatedPoints
->
-struct linear_linear_linestring
- <
- Linear1, Linear2, LinestringOut, overlay_union,
- EnableFilterContinueTurns, EnableRemoveDuplicateTurns,
- EnableDegenerateTurns, EnableFollowIsolatedPoints
- >
-{
- template
- <
- typename RobustPolicy, typename OutputIterator, typename Strategy
- >
- static inline OutputIterator apply(Linear1 const& linear1,
- Linear2 const& linear2,
- RobustPolicy const& robust_policy,
- OutputIterator oit,
- Strategy const& strategy)
- {
- oit = linear_linear_no_intersections
- <
- LinestringOut,
- overlay_difference,
- Linear1,
- typename tag<Linear1>::type
- >::apply(linear1, oit);
-
- return linear_linear_linestring
- <
- Linear2, Linear1, LinestringOut, overlay_difference,
- EnableFilterContinueTurns, EnableRemoveDuplicateTurns,
- EnableDegenerateTurns, EnableFollowIsolatedPoints
- >::apply(linear2, linear1, robust_policy, oit, strategy);
- }
-};
-
-
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_LINEAR_LINEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/needs_self_turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/needs_self_turns.hpp
deleted file mode 100644
index 87fdd00d584..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/needs_self_turns.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017-2017 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_NEEDS_SELF_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_NEEDS_SELF_TURNS_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type
->
-struct needs_self_turns
-{
-};
-
-template <typename Geometry>
-struct needs_self_turns<Geometry, box_tag>
-{
- static inline bool apply(Geometry const&)
- {
- return false;
- }
-};
-
-template <typename Geometry>
-struct needs_self_turns<Geometry, ring_tag>
-{
- static inline bool apply(Geometry const&)
- {
- return false;
- }
-};
-
-template <typename Geometry>
-struct needs_self_turns<Geometry, polygon_tag>
-{
- static inline bool apply(Geometry const& polygon)
- {
- return geometry::num_interior_rings(polygon) > 0;
- }
-};
-
-template <typename Geometry>
-struct needs_self_turns<Geometry, multi_polygon_tag>
-{
- static inline bool apply(Geometry const& multi)
- {
- typedef typename boost::range_value<Geometry>::type polygon_type;
- std::size_t const n = boost::size(multi);
- return n > 1 || (n == 1
- && needs_self_turns<polygon_type>
- ::apply(*boost::begin(multi)));
- }
-};
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_NEEDS_SELF_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp
deleted file mode 100644
index 5094c6c96c1..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/overlay.hpp
+++ /dev/null
@@ -1,436 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2013-2017 Adam Wulkiewicz, Lodz, Poland
-
-// This file was modified by Oracle on 2015, 2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_HPP
-
-
-#include <deque>
-#include <map>
-
-#include <boost/range.hpp>
-#include <boost/mpl/assert.hpp>
-
-
-#include <boost/geometry/algorithms/detail/overlay/cluster_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp>
-#include <boost/geometry/algorithms/detail/overlay/enrichment_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
-#include <boost/geometry/algorithms/detail/overlay/is_self_turn.hpp>
-#include <boost/geometry/algorithms/detail/overlay/needs_self_turns.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
-#include <boost/geometry/algorithms/detail/overlay/traverse.hpp>
-#include <boost/geometry/algorithms/detail/overlay/traversal_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-
-#include <boost/geometry/algorithms/detail/recalculate.hpp>
-
-#include <boost/geometry/algorithms/is_empty.hpp>
-#include <boost/geometry/algorithms/reverse.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/add_rings.hpp>
-#include <boost/geometry/algorithms/detail/overlay/assign_parents.hpp>
-#include <boost/geometry/algorithms/detail/overlay/ring_properties.hpp>
-#include <boost/geometry/algorithms/detail/overlay/select_rings.hpp>
-#include <boost/geometry/algorithms/detail/overlay/do_reverse.hpp>
-
-#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-
-#ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE
-# include <boost/geometry/io/dsv/write.hpp>
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-//! Default visitor for overlay, doing nothing
-struct overlay_null_visitor
-{
- void print(char const* ) {}
-
- template <typename Turns>
- void print(char const* , Turns const& , int) {}
-
- template <typename Turns>
- void print(char const* , Turns const& , int , int ) {}
-
- template <typename Turns>
- void visit_turns(int , Turns const& ) {}
-
- template <typename Clusters, typename Turns>
- void visit_clusters(Clusters const& , Turns const& ) {}
-
- template <typename Turns, typename Turn, typename Operation>
- void visit_traverse(Turns const& , Turn const& , Operation const& , char const*)
- {}
-
- template <typename Turns, typename Turn, typename Operation>
- void visit_traverse_reject(Turns const& , Turn const& , Operation const& , traverse_error_type )
- {}
-
- template <typename Rings>
- void visit_generated_rings(Rings const& )
- {}
-};
-
-template
-<
- overlay_type OverlayType,
- typename TurnInfoMap,
- typename Turns,
- typename Clusters
->
-inline void get_ring_turn_info(TurnInfoMap& turn_info_map, Turns const& turns, Clusters const& clusters)
-{
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::turn_operation_type turn_operation_type;
- typedef typename turn_type::container_type container_type;
-
- static const operation_type target_operation
- = operation_from_overlay<OverlayType>::value;
- static const operation_type opposite_operation
- = target_operation == operation_union
- ? operation_intersection
- : operation_union;
-
- for (typename boost::range_iterator<Turns const>::type
- it = boost::begin(turns);
- it != boost::end(turns);
- ++it)
- {
- turn_type const& turn = *it;
-
- bool cluster_checked = false;
- bool has_blocked = false;
-
- for (typename boost::range_iterator<container_type const>::type
- op_it = boost::begin(turn.operations);
- op_it != boost::end(turn.operations);
- ++op_it)
- {
- turn_operation_type const& op = *op_it;
- ring_identifier const ring_id
- (
- op.seg_id.source_index,
- op.seg_id.multi_index,
- op.seg_id.ring_index
- );
-
- if (! is_self_turn<OverlayType>(turn)
- && (
- (BOOST_GEOMETRY_CONDITION(target_operation == operation_union)
- && op.enriched.count_left > 0)
- || (BOOST_GEOMETRY_CONDITION(target_operation == operation_intersection)
- && op.enriched.count_right <= 2)))
- {
- // Avoid including untraversed rings which have polygons on
- // their left side (union) or not two on their right side (int)
- // This can only be done for non-self-turns because of count
- // information
- turn_info_map[ring_id].has_blocked_turn = true;
- continue;
- }
-
- if (turn.any_blocked())
- {
- turn_info_map[ring_id].has_blocked_turn = true;
- }
- if (turn_info_map[ring_id].has_traversed_turn
- || turn_info_map[ring_id].has_blocked_turn)
- {
- continue;
- }
-
- // Check information in colocated turns
- if (! cluster_checked && turn.is_clustered())
- {
- check_colocation(has_blocked, turn.cluster_id, turns, clusters);
- cluster_checked = true;
- }
-
- // Block rings where any other turn is blocked,
- // and (with exceptions): i for union and u for intersection
- // Exceptions: don't block self-uu for intersection
- // don't block self-ii for union
- // don't block (for union) i/u if there is an self-ii too
- if (has_blocked
- || (op.operation == opposite_operation
- && ! turn.has_colocated_both
- && ! (turn.both(opposite_operation)
- && is_self_turn<OverlayType>(turn))))
- {
- turn_info_map[ring_id].has_blocked_turn = true;
- }
- }
- }
-}
-
-template
-<
- typename GeometryOut, overlay_type OverlayType, bool ReverseOut,
- typename Geometry1, typename Geometry2,
- typename OutputIterator, typename Strategy
->
-inline OutputIterator return_if_one_input_is_empty(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- OutputIterator out, Strategy const& strategy)
-{
- typedef std::deque
- <
- typename geometry::ring_type<GeometryOut>::type
- > ring_container_type;
-
- typedef typename geometry::point_type<Geometry1>::type point_type1;
-
- typedef ring_properties
- <
- point_type1,
- typename Strategy::template area_strategy
- <
- point_type1
- >::type::template result_type<point_type1>::type
- > properties;
-
-// Silence warning C4127: conditional expression is constant
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
-#endif
-
- // Union: return either of them
- // Intersection: return nothing
- // Difference: return first of them
- if (OverlayType == overlay_intersection
- || (OverlayType == overlay_difference && geometry::is_empty(geometry1)))
- {
- return out;
- }
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-
- std::map<ring_identifier, ring_turn_info> empty;
- std::map<ring_identifier, properties> all_of_one_of_them;
-
- select_rings<OverlayType>(geometry1, geometry2, empty, all_of_one_of_them, strategy);
- ring_container_type rings;
- assign_parents<OverlayType>(geometry1, geometry2, rings, all_of_one_of_them, strategy);
- return add_rings<GeometryOut>(all_of_one_of_them, geometry1, geometry2, rings, out,
- strategy.template get_area_strategy<point_type1>());
-}
-
-
-template
-<
- typename Geometry1, typename Geometry2,
- bool Reverse1, bool Reverse2, bool ReverseOut,
- typename GeometryOut,
- overlay_type OverlayType
->
-struct overlay
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy, typename Visitor>
- static inline OutputIterator apply(
- Geometry1 const& geometry1, Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy,
- Visitor& visitor)
- {
- bool const is_empty1 = geometry::is_empty(geometry1);
- bool const is_empty2 = geometry::is_empty(geometry2);
-
- if (is_empty1 && is_empty2)
- {
- return out;
- }
-
- if (is_empty1 || is_empty2)
- {
- return return_if_one_input_is_empty
- <
- GeometryOut, OverlayType, ReverseOut
- >(geometry1, geometry2, out, strategy);
- }
-
- typedef typename geometry::point_type<GeometryOut>::type point_type;
- typedef detail::overlay::traversal_turn_info
- <
- point_type,
- typename geometry::segment_ratio_type<point_type, RobustPolicy>::type
- > turn_info;
- typedef std::deque<turn_info> turn_container_type;
-
- typedef std::deque
- <
- typename geometry::ring_type<GeometryOut>::type
- > ring_container_type;
-
- // Define the clusters, mapping cluster_id -> turns
- typedef std::map
- <
- signed_size_type,
- cluster_info
- > cluster_type;
-
- turn_container_type turns;
-
-#ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE
-std::cout << "get turns" << std::endl;
-#endif
- detail::get_turns::no_interrupt_policy policy;
- geometry::get_turns
- <
- Reverse1, Reverse2,
- detail::overlay::assign_null_policy
- >(geometry1, geometry2, strategy, robust_policy, turns, policy);
-
- visitor.visit_turns(1, turns);
-
-#if ! defined(BOOST_GEOMETRY_NO_SELF_TURNS)
- if (needs_self_turns<Geometry1>::apply(geometry1))
- {
- self_get_turn_points::self_turns<Reverse1, assign_null_policy>(geometry1,
- strategy, robust_policy, turns, policy, 0);
- }
- if (needs_self_turns<Geometry2>::apply(geometry2))
- {
- self_get_turn_points::self_turns<Reverse2, assign_null_policy>(geometry2,
- strategy, robust_policy, turns, policy, 1);
- }
-#endif
-
-
-#ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE
-std::cout << "enrich" << std::endl;
-#endif
- typename Strategy::side_strategy_type side_strategy = strategy.get_side_strategy();
- cluster_type clusters;
- std::map<ring_identifier, ring_turn_info> turn_info_per_ring;
-
- geometry::enrich_intersection_points<Reverse1, Reverse2, OverlayType>(turns,
- clusters, geometry1, geometry2,
- robust_policy,
- side_strategy);
-
- visitor.visit_turns(2, turns);
-
- visitor.visit_clusters(clusters, turns);
-
-#ifdef BOOST_GEOMETRY_DEBUG_ASSEMBLE
-std::cout << "traverse" << std::endl;
-#endif
- // Traverse through intersection/turn points and create rings of them.
- // Note that these rings are always in clockwise order, even in CCW polygons,
- // and are marked as "to be reversed" below
- ring_container_type rings;
- traverse<Reverse1, Reverse2, Geometry1, Geometry2, OverlayType>::apply
- (
- geometry1, geometry2,
- strategy,
- robust_policy,
- turns, rings,
- turn_info_per_ring,
- clusters,
- visitor
- );
- visitor.visit_turns(3, turns);
-
- get_ring_turn_info<OverlayType>(turn_info_per_ring, turns, clusters);
-
- typedef typename Strategy::template area_strategy<point_type>::type area_strategy_type;
-
- typedef ring_properties
- <
- point_type,
- typename area_strategy_type::template result_type<point_type>::type
- > properties;
-
- // Select all rings which are NOT touched by any intersection point
- std::map<ring_identifier, properties> selected_ring_properties;
- select_rings<OverlayType>(geometry1, geometry2, turn_info_per_ring,
- selected_ring_properties, strategy);
-
- // Add rings created during traversal
- area_strategy_type const area_strategy = strategy.template get_area_strategy<point_type>();
- {
- ring_identifier id(2, 0, -1);
- for (typename boost::range_iterator<ring_container_type>::type
- it = boost::begin(rings);
- it != boost::end(rings);
- ++it)
- {
- selected_ring_properties[id] = properties(*it, area_strategy);
- selected_ring_properties[id].reversed = ReverseOut;
- id.multi_index++;
- }
- }
-
- assign_parents<OverlayType>(geometry1, geometry2,
- rings, selected_ring_properties, strategy);
-
- // NOTE: There is no need to check result area for union because
- // as long as the polygons in the input are valid the resulting
- // polygons should be valid as well.
- // By default the area is checked (this is old behavior) however this
- // can be changed with #define. This may be important in non-cartesian CSes.
- // The result may be too big, so the area is negative. In this case either
- // it can be returned or an exception can be thrown.
- return add_rings<GeometryOut>(selected_ring_properties, geometry1, geometry2, rings, out,
- area_strategy,
- OverlayType == overlay_union ?
-#if defined(BOOST_GEOMETRY_UNION_THROW_INVALID_OUTPUT_EXCEPTION)
- add_rings_throw_if_reversed
-#elif defined(BOOST_GEOMETRY_UNION_RETURN_INVALID)
- add_rings_add_unordered
-#else
- add_rings_ignore_unordered
-#endif
- : add_rings_ignore_unordered);
- }
-
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(
- Geometry1 const& geometry1, Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- overlay_null_visitor visitor;
- return apply(geometry1, geometry2, robust_policy, out, strategy, visitor);
- }
-};
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/overlay_type.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/overlay_type.hpp
deleted file mode 100644
index c76d440f91b..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/overlay_type.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_TYPE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_TYPE_HPP
-
-
-
-namespace boost { namespace geometry
-{
-
-// TODO: move to detail
-enum overlay_type
-{
- overlay_union,
- overlay_intersection,
- overlay_difference,
- overlay_buffer,
- overlay_dissolve
-};
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-enum operation_type
-{
- operation_none,
- operation_union,
- operation_intersection,
- operation_blocked,
- operation_continue,
- operation_opposite
-};
-
-
-template <overlay_type OverlayType>
-struct operation_from_overlay
-{
-};
-
-template <>
-struct operation_from_overlay<overlay_union>
-{
- static const operation_type value = operation_union;
-};
-
-template <>
-struct operation_from_overlay<overlay_buffer>
-{
- static const operation_type value = operation_union;
-};
-
-template <>
-struct operation_from_overlay<overlay_intersection>
-{
- static const operation_type value = operation_intersection;
-};
-
-template <>
-struct operation_from_overlay<overlay_difference>
-{
- static const operation_type value = operation_intersection;
-};
-
-template <>
-struct operation_from_overlay<overlay_dissolve>
-{
- static const operation_type value = operation_union;
-};
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_OVERLAY_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp
deleted file mode 100644
index 6f8fdd32b84..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp
+++ /dev/null
@@ -1,393 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_POINTLIKE_LINEAR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_POINTLIKE_LINEAR_HPP
-
-#include <iterator>
-#include <vector>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/box.hpp>
-
-#include <boost/geometry/iterators/segment_iterator.hpp>
-
-#include <boost/geometry/algorithms/disjoint.hpp>
-#include <boost/geometry/algorithms/envelope.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/algorithms/detail/not.hpp>
-#include <boost/geometry/algorithms/detail/partition.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_geometry.hpp>
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
-#include <boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-// action struct for pointlike-linear difference/intersection
-// it works the same as its pointlike-pointlike counterpart, hence the
-// derivation
-template <typename PointOut, overlay_type OverlayType>
-struct action_selector_pl_l
- : action_selector_pl_pl<PointOut, OverlayType>
-{};
-
-// difference/intersection of point-linear
-template
-<
- typename Point,
- typename Linear,
- typename PointOut,
- overlay_type OverlayType,
- typename Policy
->
-struct point_linear_point
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(Point const& point,
- Linear const& linear,
- RobustPolicy const&,
- OutputIterator oit,
- Strategy const& strategy)
- {
- action_selector_pl_l
- <
- PointOut, OverlayType
- >::apply(point, Policy::apply(point, linear, strategy), oit);
- return oit;
- }
-};
-
-// difference/intersection of multipoint-segment
-template
-<
- typename MultiPoint,
- typename Segment,
- typename PointOut,
- overlay_type OverlayType,
- typename Policy
->
-struct multipoint_segment_point
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(MultiPoint const& multipoint,
- Segment const& segment,
- RobustPolicy const&,
- OutputIterator oit,
- Strategy const& strategy)
- {
- for (typename boost::range_iterator<MultiPoint const>::type
- it = boost::begin(multipoint);
- it != boost::end(multipoint);
- ++it)
- {
- action_selector_pl_l
- <
- PointOut, OverlayType
- >::apply(*it, Policy::apply(*it, segment, strategy), oit);
- }
-
- return oit;
- }
-};
-
-
-// difference/intersection of multipoint-linear
-template
-<
- typename MultiPoint,
- typename Linear,
- typename PointOut,
- overlay_type OverlayType,
- typename Policy
->
-class multipoint_linear_point
-{
-private:
- // structs for partition -- start
- struct expand_box_point
- {
- template <typename Box, typename Point>
- static inline void apply(Box& total, Point const& point)
- {
- geometry::expand(total, point);
- }
- };
-
- template <typename EnvelopeStrategy>
- struct expand_box_segment
- {
- explicit expand_box_segment(EnvelopeStrategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Box, typename Segment>
- inline void apply(Box& total, Segment const& segment) const
- {
- geometry::expand(total,
- geometry::return_envelope<Box>(segment, m_strategy));
- }
-
- EnvelopeStrategy const& m_strategy;
- };
-
- struct overlaps_box_point
- {
- template <typename Box, typename Point>
- static inline bool apply(Box const& box, Point const& point)
- {
- return ! geometry::disjoint(point, box);
- }
- };
-
- template <typename DisjointStrategy>
- struct overlaps_box_segment
- {
- explicit overlaps_box_segment(DisjointStrategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Box, typename Segment>
- inline bool apply(Box const& box, Segment const& segment) const
- {
- return ! geometry::disjoint(segment, box, m_strategy);
- }
-
- DisjointStrategy const& m_strategy;
- };
-
- template <typename OutputIterator, typename Strategy>
- class item_visitor_type
- {
- public:
- item_visitor_type(OutputIterator& oit, Strategy const& strategy)
- : m_oit(oit)
- , m_strategy(strategy)
- {}
-
- template <typename Item1, typename Item2>
- inline bool apply(Item1 const& item1, Item2 const& item2)
- {
- action_selector_pl_l
- <
- PointOut, overlay_intersection
- >::apply(item1, Policy::apply(item1, item2, m_strategy), m_oit);
-
- return true;
- }
-
- private:
- OutputIterator& m_oit;
- Strategy const& m_strategy;
- };
- // structs for partition -- end
-
- class segment_range
- {
- public:
- typedef geometry::segment_iterator<Linear const> const_iterator;
- typedef const_iterator iterator;
-
- segment_range(Linear const& linear)
- : m_linear(linear)
- {}
-
- const_iterator begin() const
- {
- return geometry::segments_begin(m_linear);
- }
-
- const_iterator end() const
- {
- return geometry::segments_end(m_linear);
- }
-
- private:
- Linear const& m_linear;
- };
-
- template <typename OutputIterator, typename Strategy>
- static inline OutputIterator get_common_points(MultiPoint const& multipoint,
- Linear const& linear,
- OutputIterator oit,
- Strategy const& strategy)
- {
- item_visitor_type<OutputIterator, Strategy> item_visitor(oit, strategy);
-
- typedef typename Strategy::envelope_strategy_type envelope_strategy_type;
- typedef typename Strategy::disjoint_strategy_type disjoint_strategy_type;
-
- // TODO: disjoint Segment/Box may be called in partition multiple times
- // possibly for non-cartesian segments which could be slow. We should consider
- // passing a range of bounding boxes of segments after calculating them once.
- // Alternatively instead of a range of segments a range of Segment/Envelope pairs
- // should be passed, where envelope would be lazily calculated when needed the first time
- geometry::partition
- <
- geometry::model::box
- <
- typename boost::range_value<MultiPoint>::type
- >
- >::apply(multipoint, segment_range(linear), item_visitor,
- expand_box_point(),
- overlaps_box_point(),
- expand_box_segment<envelope_strategy_type>(strategy.get_envelope_strategy()),
- overlaps_box_segment<disjoint_strategy_type>(strategy.get_disjoint_strategy()));
-
- return oit;
- }
-
-public:
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(MultiPoint const& multipoint,
- Linear const& linear,
- RobustPolicy const& robust_policy,
- OutputIterator oit,
- Strategy const& strategy)
- {
- typedef std::vector
- <
- typename boost::range_value<MultiPoint>::type
- > point_vector_type;
-
- point_vector_type common_points;
-
- // compute the common points
- get_common_points(multipoint, linear,
- std::back_inserter(common_points),
- strategy);
-
- return multipoint_multipoint_point
- <
- MultiPoint, point_vector_type, PointOut, OverlayType
- >::apply(multipoint, common_points, robust_policy, oit, strategy);
- }
-};
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace detail_dispatch { namespace overlay
-{
-
-// dispatch struct for pointlike-linear difference/intersection computation
-template
-<
- typename PointLike,
- typename Linear,
- typename PointOut,
- overlay_type OverlayType,
- typename Tag1,
- typename Tag2
->
-struct pointlike_linear_point
- : not_implemented<PointLike, Linear, PointOut>
-{};
-
-
-template
-<
- typename Point,
- typename Linear,
- typename PointOut,
- overlay_type OverlayType
->
-struct pointlike_linear_point
- <
- Point, Linear, PointOut, OverlayType, point_tag, linear_tag
- > : detail::overlay::point_linear_point
- <
- Point, Linear, PointOut, OverlayType,
- detail::not_<detail::disjoint::reverse_covered_by>
- >
-{};
-
-
-template
-<
- typename Point,
- typename Segment,
- typename PointOut,
- overlay_type OverlayType
->
-struct pointlike_linear_point
- <
- Point, Segment, PointOut, OverlayType, point_tag, segment_tag
- > : detail::overlay::point_linear_point
- <
- Point, Segment, PointOut, OverlayType,
- detail::not_<detail::disjoint::reverse_covered_by>
- >
-{};
-
-
-template
-<
- typename MultiPoint,
- typename Linear,
- typename PointOut,
- overlay_type OverlayType
->
-struct pointlike_linear_point
- <
- MultiPoint, Linear, PointOut, OverlayType, multi_point_tag, linear_tag
- > : detail::overlay::multipoint_linear_point
- <
- MultiPoint, Linear, PointOut, OverlayType,
- detail::not_<detail::disjoint::reverse_covered_by>
- >
-{};
-
-
-template
-<
- typename MultiPoint,
- typename Segment,
- typename PointOut,
- overlay_type OverlayType
->
-struct pointlike_linear_point
- <
- MultiPoint, Segment, PointOut, OverlayType, multi_point_tag, segment_tag
- > : detail::overlay::multipoint_segment_point
- <
- MultiPoint, Segment, PointOut, OverlayType,
- detail::not_<detail::disjoint::reverse_covered_by>
- >
-{};
-
-
-}} // namespace detail_dispatch::overlay
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_POINTLIKE_LINEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp
deleted file mode 100644
index 88aedecf864..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp
+++ /dev/null
@@ -1,440 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_POINTLIKE_POINTLIKE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_POINTLIKE_POINTLIKE_HPP
-
-#include <algorithm>
-#include <vector>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
-
-#include <boost/geometry/policies/compare.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-// struct for copying points of the pointlike geometries to output
-template
-<
- typename PointOut,
- typename GeometryIn,
- typename TagIn = typename tag<GeometryIn>::type
->
-struct copy_points
- : not_implemented<PointOut, GeometryIn>
-{};
-
-template <typename PointOut, typename PointIn>
-struct copy_points<PointOut, PointIn, point_tag>
-{
- template <typename OutputIterator>
- static inline void apply(PointIn const& point_in,
- OutputIterator& oit)
- {
- PointOut point_out;
- geometry::convert(point_in, point_out);
- *oit++ = point_out;
- }
-};
-
-
-template <typename PointOut, typename MultiPointIn>
-struct copy_points<PointOut, MultiPointIn, multi_point_tag>
-{
- template <typename OutputIterator>
- static inline void apply(MultiPointIn const& multi_point_in,
- OutputIterator& oit)
- {
- for (typename boost::range_iterator<MultiPointIn const>::type
- it = boost::begin(multi_point_in);
- it != boost::end(multi_point_in); ++it)
- {
- PointOut point_out;
- geometry::convert(*it, point_out);
- *oit++ = point_out;
- }
- }
-};
-
-
-
-// action struct for difference/intersection
-template <typename PointOut, overlay_type OverlayType>
-struct action_selector_pl_pl
-{};
-
-template <typename PointOut>
-struct action_selector_pl_pl<PointOut, overlay_intersection>
-{
- template
- <
- typename Point,
- typename OutputIterator
- >
- static inline void apply(Point const& point,
- bool is_common,
- OutputIterator& oit)
- {
- if ( is_common )
- {
- copy_points<PointOut, Point>::apply(point, oit);
- }
- }
-};
-
-
-
-template <typename PointOut>
-struct action_selector_pl_pl<PointOut, overlay_difference>
-{
- template
- <
- typename Point,
- typename OutputIterator
- >
- static inline void apply(Point const& point,
- bool is_common,
- OutputIterator& oit)
- {
- if ( !is_common )
- {
- copy_points<PointOut, Point>::apply(point, oit);
- }
- }
-};
-
-
-//===========================================================================
-
-// difference/intersection of point-point
-template
-<
- typename Point1,
- typename Point2,
- typename PointOut,
- overlay_type OverlayType
->
-struct point_point_point
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(Point1 const& point1,
- Point2 const& point2,
- RobustPolicy const& ,
- OutputIterator oit,
- Strategy const&)
- {
- action_selector_pl_pl
- <
- PointOut, OverlayType
- >::apply(point1,
- detail::equals::equals_point_point(point1, point2),
- oit);
-
- return oit;
- }
-};
-
-
-
-// difference of multipoint-point
-//
-// the apply method in the following struct is called only for
-// difference; for intersection the reversal will
-// always call the point-multipoint version
-template
-<
- typename MultiPoint,
- typename Point,
- typename PointOut,
- overlay_type OverlayType
->
-struct multipoint_point_point
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(MultiPoint const& multipoint,
- Point const& point,
- RobustPolicy const& ,
- OutputIterator oit,
- Strategy const&)
- {
- BOOST_GEOMETRY_ASSERT( OverlayType == overlay_difference );
-
- for (typename boost::range_iterator<MultiPoint const>::type
- it = boost::begin(multipoint);
- it != boost::end(multipoint); ++it)
- {
- action_selector_pl_pl
- <
- PointOut, OverlayType
- >::apply(*it,
- detail::equals::equals_point_point(*it, point),
- oit);
- }
-
- return oit;
- }
-};
-
-
-// difference/intersection of point-multipoint
-template
-<
- typename Point,
- typename MultiPoint,
- typename PointOut,
- overlay_type OverlayType
->
-struct point_multipoint_point
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(Point const& point,
- MultiPoint const& multipoint,
- RobustPolicy const& ,
- OutputIterator oit,
- Strategy const&)
- {
- typedef action_selector_pl_pl<PointOut, OverlayType> action;
-
- for (typename boost::range_iterator<MultiPoint const>::type
- it = boost::begin(multipoint);
- it != boost::end(multipoint); ++it)
- {
- if ( detail::equals::equals_point_point(*it, point) )
- {
- action::apply(point, true, oit);
- return oit;
- }
- }
-
- action::apply(point, false, oit);
- return oit;
- }
-};
-
-
-
-// difference/intersection of multipoint-multipoint
-template
-<
- typename MultiPoint1,
- typename MultiPoint2,
- typename PointOut,
- overlay_type OverlayType
->
-struct multipoint_multipoint_point
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(MultiPoint1 const& multipoint1,
- MultiPoint2 const& multipoint2,
- RobustPolicy const& robust_policy,
- OutputIterator oit,
- Strategy const& strategy)
- {
- if ( OverlayType != overlay_difference
- && boost::size(multipoint1) > boost::size(multipoint2) )
- {
- return multipoint_multipoint_point
- <
- MultiPoint2, MultiPoint1, PointOut, OverlayType
- >::apply(multipoint2, multipoint1, robust_policy, oit, strategy);
- }
-
- typedef typename boost::range_value<MultiPoint2>::type point2_type;
-
- std::vector<point2_type> points2(boost::begin(multipoint2),
- boost::end(multipoint2));
-
- geometry::less<> const less = geometry::less<>();
- std::sort(points2.begin(), points2.end(), less);
-
- for (typename boost::range_iterator<MultiPoint1 const>::type
- it1 = boost::begin(multipoint1);
- it1 != boost::end(multipoint1); ++it1)
- {
- bool found = std::binary_search(points2.begin(), points2.end(),
- *it1, less);
-
- action_selector_pl_pl
- <
- PointOut, OverlayType
- >::apply(*it1, found, oit);
- }
- return oit;
- }
-};
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-//===========================================================================
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace detail_dispatch { namespace overlay
-{
-
-// dispatch struct for pointlike-pointlike difference/intersection
-// computation
-template
-<
- typename PointLike1,
- typename PointLike2,
- typename PointOut,
- overlay_type OverlayType,
- typename Tag1,
- typename Tag2
->
-struct pointlike_pointlike_point
- : not_implemented<PointLike1, PointLike2, PointOut>
-{};
-
-
-template
-<
- typename Point1,
- typename Point2,
- typename PointOut,
- overlay_type OverlayType
->
-struct pointlike_pointlike_point
- <
- Point1, Point2, PointOut, OverlayType,
- point_tag, point_tag
- > : detail::overlay::point_point_point
- <
- Point1, Point2, PointOut, OverlayType
- >
-{};
-
-
-template
-<
- typename Point,
- typename MultiPoint,
- typename PointOut,
- overlay_type OverlayType
->
-struct pointlike_pointlike_point
- <
- Point, MultiPoint, PointOut, OverlayType,
- point_tag, multi_point_tag
- > : detail::overlay::point_multipoint_point
- <
- Point, MultiPoint, PointOut, OverlayType
- >
-{};
-
-
-template
-<
- typename MultiPoint,
- typename Point,
- typename PointOut,
- overlay_type OverlayType
->
-struct pointlike_pointlike_point
- <
- MultiPoint, Point, PointOut, OverlayType,
- multi_point_tag, point_tag
- > : detail::overlay::multipoint_point_point
- <
- MultiPoint, Point, PointOut, OverlayType
- >
-{};
-
-
-template
-<
- typename MultiPoint1,
- typename MultiPoint2,
- typename PointOut,
- overlay_type OverlayType
->
-struct pointlike_pointlike_point
- <
- MultiPoint1, MultiPoint2, PointOut, OverlayType,
- multi_point_tag, multi_point_tag
- > : detail::overlay::multipoint_multipoint_point
- <
- MultiPoint1, MultiPoint2, PointOut, OverlayType
- >
-{};
-
-
-}} // namespace detail_dispatch::overlay
-#endif // DOXYGEN_NO_DISPATCH
-
-
-//===========================================================================
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-// generic pointlike-pointlike union implementation
-template
-<
- typename PointLike1,
- typename PointLike2,
- typename PointOut
->
-struct union_pointlike_pointlike_point
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(PointLike1 const& pointlike1,
- PointLike2 const& pointlike2,
- RobustPolicy const& robust_policy,
- OutputIterator oit,
- Strategy const& strategy)
- {
- copy_points<PointOut, PointLike1>::apply(pointlike1, oit);
-
- return detail_dispatch::overlay::pointlike_pointlike_point
- <
- PointLike2, PointLike1, PointOut, overlay_difference,
- typename tag<PointLike2>::type,
- typename tag<PointLike1>::type
- >::apply(pointlike2, pointlike1, robust_policy, oit, strategy);
- }
-
-};
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_POINTLIKE_POINTLIKE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/range_in_geometry.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/range_in_geometry.hpp
deleted file mode 100644
index d4a47abecf9..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/range_in_geometry.hpp
+++ /dev/null
@@ -1,178 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_RANGE_IN_GEOMETRY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_RANGE_IN_GEOMETRY_HPP
-
-
-#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/iterators/point_iterator.hpp>
-
-#include <boost/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-template
-<
- typename Geometry,
- typename Tag = typename geometry::tag<Geometry>::type
->
-struct points_range
-{
- typedef geometry::point_iterator<Geometry const> iterator_type;
-
- explicit points_range(Geometry const& geometry)
- : m_geometry(geometry)
- {}
-
- iterator_type begin() const
- {
- return geometry::points_begin(m_geometry);
- }
-
- iterator_type end() const
- {
- return geometry::points_end(m_geometry);
- }
-
- Geometry const& m_geometry;
-};
-// Specialized because point_iterator doesn't support boxes
-template <typename Box>
-struct points_range<Box, box_tag>
-{
- typedef typename geometry::point_type<Box>::type point_type;
- typedef const point_type * iterator_type;
-
- explicit points_range(Box const& box)
- {
- detail::assign_box_corners(box,
- m_corners[0], m_corners[1], m_corners[2], m_corners[3]);
- }
-
- iterator_type begin() const
- {
- return m_corners;
- }
-
- iterator_type end() const
- {
- return m_corners + 4;
- }
-
- point_type m_corners[4];
-};
-
-template
-<
- typename Geometry,
- typename Tag = typename geometry::tag<Geometry>::type
->
-struct point_in_geometry_helper
-{
- template <typename Point, typename Strategy>
- static inline int apply(Point const& point, Geometry const& geometry,
- Strategy const& strategy)
- {
- return detail::within::point_in_geometry(point, geometry, strategy);
- }
-};
-// Specialized because point_in_geometry doesn't support Boxes
-template <typename Box>
-struct point_in_geometry_helper<Box, box_tag>
-{
- template <typename Point, typename Strategy>
- static inline int apply(Point const& point, Box const& box,
- Strategy const&)
- {
- return geometry::covered_by(point, box) ? 1 : -1;
- }
-};
-
-// This function returns
-// when it finds a point of geometry1 inside or outside geometry2
-template <typename Geometry1, typename Geometry2, typename Strategy>
-static inline int range_in_geometry(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy,
- bool skip_first = false)
-{
- int result = 0;
- points_range<Geometry1> points(geometry1);
- typedef typename points_range<Geometry1>::iterator_type iterator_type;
- iterator_type const end = points.end();
- iterator_type it = points.begin();
- if (it == end)
- {
- return result;
- }
- else if (skip_first)
- {
- ++it;
- }
-
- typename Strategy::template point_in_geometry_strategy
- <
- Geometry1, Geometry2
- >::type const in_strategy
- = strategy.template get_point_in_geometry_strategy<Geometry1, Geometry2>();
-
- for ( ; it != end; ++it)
- {
- result = point_in_geometry_helper<Geometry2>::apply(*it, geometry2, in_strategy);
- if (result != 0)
- {
- return result;
- }
- }
- // all points contained entirely by the boundary
- return result;
-}
-
-// This function returns if first_point1 is inside or outside geometry2 or
-// when it finds a point of geometry1 inside or outside geometry2
-template <typename Point1, typename Geometry1, typename Geometry2, typename Strategy>
-inline int range_in_geometry(Point1 const& first_point1,
- Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- // check a point on border of geometry1 first
- int result = point_in_geometry_helper<Geometry2>::apply(first_point1, geometry2,
- strategy.template get_point_in_geometry_strategy<Point1, Geometry2>());
- if (result == 0)
- {
- // if a point is on boundary of geometry2
- // check points of geometry1 until point inside/outside is found
- // NOTE: skip first point because it should be already tested above
- result = range_in_geometry(geometry1, geometry2, strategy, true);
- }
- return result;
-}
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_RANGE_IN_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/ring_properties.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/ring_properties.hpp
deleted file mode 100644
index 7dbc5d5fabe..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/ring_properties.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_RING_PROPERTIES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_RING_PROPERTIES_HPP
-
-
-#include <boost/geometry/algorithms/area.hpp>
-#include <boost/geometry/algorithms/within.hpp>
-#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-template <typename Point, typename AreaType>
-struct ring_properties
-{
- typedef Point point_type;
- typedef AreaType area_type;
-
- bool valid;
-
- // Filled by "select_rings"
- Point point;
- area_type area;
-
- // Filled by "update_ring_selection"
- bool reversed;
-
- // Filled/used by "assign_rings"
- bool discarded;
- ring_identifier parent;
- area_type parent_area;
- std::vector<ring_identifier> children;
-
- inline ring_properties()
- : valid(false)
- , area(area_type())
- , reversed(false)
- , discarded(false)
- , parent_area(-1)
- {}
-
- template <typename RingOrBox, typename AreaStrategy>
- inline ring_properties(RingOrBox const& ring_or_box, AreaStrategy const& strategy)
- : reversed(false)
- , discarded(false)
- , parent_area(-1)
- {
- this->area = geometry::area(ring_or_box, strategy);
- valid = geometry::point_on_border(this->point, ring_or_box);
- }
-
- inline area_type get_area() const
- {
- return reversed ? -area : area;
- }
-};
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_RING_PROPERTIES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/segment_identifier.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/segment_identifier.hpp
deleted file mode 100644
index 14e84c94960..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/segment_identifier.hpp
+++ /dev/null
@@ -1,102 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SEGMENT_IDENTIFIER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SEGMENT_IDENTIFIER_HPP
-
-
-#if defined(BOOST_GEOMETRY_DEBUG_OVERLAY)
-# define BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER
-#endif
-
-#if defined(BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER)
-#include <iostream>
-#endif
-
-
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-
-// Internal struct to uniquely identify a segment
-// on a linestring,ring
-// or polygon (needs ring_index)
-// or multi-geometry (needs multi_index)
-struct segment_identifier
-{
- inline segment_identifier()
- : source_index(-1)
- , multi_index(-1)
- , ring_index(-1)
- , segment_index(-1)
- , piece_index(-1)
- {}
-
- inline segment_identifier(signed_size_type src,
- signed_size_type mul,
- signed_size_type rin,
- signed_size_type seg)
- : source_index(src)
- , multi_index(mul)
- , ring_index(rin)
- , segment_index(seg)
- , piece_index(-1)
- {}
-
- inline bool operator<(segment_identifier const& other) const
- {
- return source_index != other.source_index ? source_index < other.source_index
- : multi_index !=other.multi_index ? multi_index < other.multi_index
- : ring_index != other.ring_index ? ring_index < other.ring_index
- : piece_index != other.piece_index ? piece_index < other.piece_index
- : segment_index < other.segment_index
- ;
- }
-
- inline bool operator==(segment_identifier const& other) const
- {
- return source_index == other.source_index
- && segment_index == other.segment_index
- && ring_index == other.ring_index
- && piece_index == other.piece_index
- && multi_index == other.multi_index
- ;
- }
-
-#if defined(BOOST_GEOMETRY_DEBUG_SEGMENT_IDENTIFIER)
- friend std::ostream& operator<<(std::ostream &os, segment_identifier const& seg_id)
- {
- os
- << "s:" << seg_id.source_index
- << ", v:" << seg_id.segment_index // v:vertex because s is used for source
- ;
- if (seg_id.ring_index >= 0) os << ", r:" << seg_id.ring_index;
- if (seg_id.multi_index >= 0) os << ", m:" << seg_id.multi_index;
- if (seg_id.piece_index >= 0) os << ", p:" << seg_id.piece_index;
- return os;
- }
-#endif
-
- signed_size_type source_index;
- signed_size_type multi_index;
- signed_size_type ring_index;
- signed_size_type segment_index;
-
- // For buffer - todo: move this to buffer-only
- signed_size_type piece_index;
-};
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SEGMENT_IDENTIFIER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp
deleted file mode 100644
index 262ba748abf..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/select_rings.hpp
+++ /dev/null
@@ -1,373 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP
-
-
-#include <map>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/area.hpp>
-#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-#include <boost/geometry/algorithms/detail/ring_identifier.hpp>
-#include <boost/geometry/algorithms/detail/overlay/range_in_geometry.hpp>
-#include <boost/geometry/algorithms/detail/overlay/ring_properties.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-struct ring_turn_info
-{
- bool has_traversed_turn;
- bool has_blocked_turn;
- bool within_other;
-
- ring_turn_info()
- : has_traversed_turn(false)
- , has_blocked_turn(false)
- , within_other(false)
- {}
-};
-
-namespace dispatch
-{
-
- template <typename Tag, typename Geometry>
- struct select_rings
- {};
-
- template <typename Box>
- struct select_rings<box_tag, Box>
- {
- template <typename Geometry, typename RingPropertyMap, typename AreaStrategy>
- static inline void apply(Box const& box, Geometry const& ,
- ring_identifier const& id, RingPropertyMap& ring_properties,
- AreaStrategy const& strategy)
- {
- ring_properties[id] = typename RingPropertyMap::mapped_type(box, strategy);
- }
-
- template <typename RingPropertyMap, typename AreaStrategy>
- static inline void apply(Box const& box,
- ring_identifier const& id, RingPropertyMap& ring_properties,
- AreaStrategy const& strategy)
- {
- ring_properties[id] = typename RingPropertyMap::mapped_type(box, strategy);
- }
- };
-
- template <typename Ring>
- struct select_rings<ring_tag, Ring>
- {
- template <typename Geometry, typename RingPropertyMap, typename AreaStrategy>
- static inline void apply(Ring const& ring, Geometry const& ,
- ring_identifier const& id, RingPropertyMap& ring_properties,
- AreaStrategy const& strategy)
- {
- if (boost::size(ring) > 0)
- {
- ring_properties[id] = typename RingPropertyMap::mapped_type(ring, strategy);
- }
- }
-
- template <typename RingPropertyMap, typename AreaStrategy>
- static inline void apply(Ring const& ring,
- ring_identifier const& id, RingPropertyMap& ring_properties,
- AreaStrategy const& strategy)
- {
- if (boost::size(ring) > 0)
- {
- ring_properties[id] = typename RingPropertyMap::mapped_type(ring, strategy);
- }
- }
- };
-
-
- template <typename Polygon>
- struct select_rings<polygon_tag, Polygon>
- {
- template <typename Geometry, typename RingPropertyMap, typename AreaStrategy>
- static inline void apply(Polygon const& polygon, Geometry const& geometry,
- ring_identifier id, RingPropertyMap& ring_properties,
- AreaStrategy const& strategy)
- {
- typedef typename geometry::ring_type<Polygon>::type ring_type;
- typedef select_rings<ring_tag, ring_type> per_ring;
-
- per_ring::apply(exterior_ring(polygon), geometry, id, ring_properties, strategy);
-
- typename interior_return_type<Polygon const>::type
- rings = interior_rings(polygon);
- for (typename detail::interior_iterator<Polygon const>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- id.ring_index++;
- per_ring::apply(*it, geometry, id, ring_properties, strategy);
- }
- }
-
- template <typename RingPropertyMap, typename AreaStrategy>
- static inline void apply(Polygon const& polygon,
- ring_identifier id, RingPropertyMap& ring_properties,
- AreaStrategy const& strategy)
- {
- typedef typename geometry::ring_type<Polygon>::type ring_type;
- typedef select_rings<ring_tag, ring_type> per_ring;
-
- per_ring::apply(exterior_ring(polygon), id, ring_properties, strategy);
-
- typename interior_return_type<Polygon const>::type
- rings = interior_rings(polygon);
- for (typename detail::interior_iterator<Polygon const>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- id.ring_index++;
- per_ring::apply(*it, id, ring_properties, strategy);
- }
- }
- };
-
- template <typename Multi>
- struct select_rings<multi_polygon_tag, Multi>
- {
- template <typename Geometry, typename RingPropertyMap, typename AreaStrategy>
- static inline void apply(Multi const& multi, Geometry const& geometry,
- ring_identifier id, RingPropertyMap& ring_properties,
- AreaStrategy const& strategy)
- {
- typedef typename boost::range_iterator
- <
- Multi const
- >::type iterator_type;
-
- typedef select_rings<polygon_tag, typename boost::range_value<Multi>::type> per_polygon;
-
- id.multi_index = 0;
- for (iterator_type it = boost::begin(multi); it != boost::end(multi); ++it)
- {
- id.ring_index = -1;
- per_polygon::apply(*it, geometry, id, ring_properties, strategy);
- id.multi_index++;
- }
- }
- };
-
-} // namespace dispatch
-
-
-template<overlay_type OverlayType>
-struct decide
-{
- // Default implementation (union, inflate, deflate, dissolve)
- static bool include(ring_identifier const& , ring_turn_info const& info)
- {
- return ! info.within_other;
- }
-
- static bool reversed(ring_identifier const& , ring_turn_info const& )
- {
- return false;
- }
-
-};
-
-template<>
-struct decide<overlay_difference>
-{
- static bool include(ring_identifier const& id, ring_turn_info const& info)
- {
- // Difference: A - B
-
- // If this is A (source_index=0), then the ring is inside B
- // If this is B (source_index=1), then the ring is NOT inside A
-
- // If this is A and the ring is within the other geometry,
- // then we should NOT include it.
- // If this is B then we SHOULD include it.
-
- return id.source_index == 0
- ? ! info.within_other
- : info.within_other;
- }
-
- static bool reversed(ring_identifier const& id, ring_turn_info const& info)
- {
- // Difference: A - B
- // If this is B, and the ring is included, it should be reversed afterwards
-
- return id.source_index == 1 && include(id, info);
- }
-};
-
-template<>
-struct decide<overlay_intersection>
-{
- static bool include(ring_identifier const& , ring_turn_info const& info)
- {
- return info.within_other;
- }
-
- static bool reversed(ring_identifier const& , ring_turn_info const& )
- {
- return false;
- }
-};
-
-template
-<
- overlay_type OverlayType,
- typename Geometry1,
- typename Geometry2,
- typename TurnInfoMap,
- typename RingPropertyMap,
- typename Strategy
->
-inline void update_ring_selection(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- TurnInfoMap const& turn_info_map,
- RingPropertyMap const& all_ring_properties,
- RingPropertyMap& selected_ring_properties,
- Strategy const& strategy)
-{
- selected_ring_properties.clear();
-
- for (typename RingPropertyMap::const_iterator it = boost::begin(all_ring_properties);
- it != boost::end(all_ring_properties);
- ++it)
- {
- ring_identifier const& id = it->first;
-
- ring_turn_info info;
-
- typename TurnInfoMap::const_iterator tcit = turn_info_map.find(id);
- if (tcit != turn_info_map.end())
- {
- info = tcit->second; // Copy by value
- }
-
- if (info.has_traversed_turn || info.has_blocked_turn)
- {
- // This turn is traversed or blocked,
- // don't include the original ring
- continue;
- }
-
- // Check if the ring is within the other geometry, by taking
- // a point lying on the ring
- switch(id.source_index)
- {
- // within
- case 0 :
- info.within_other = range_in_geometry(it->second.point,
- geometry1, geometry2,
- strategy) > 0;
- break;
- case 1 :
- info.within_other = range_in_geometry(it->second.point,
- geometry2, geometry1,
- strategy) > 0;
- break;
- }
-
- if (decide<OverlayType>::include(id, info))
- {
- typename RingPropertyMap::mapped_type properties = it->second; // Copy by value
- properties.reversed = decide<OverlayType>::reversed(id, info);
- selected_ring_properties[id] = properties;
- }
- }
-}
-
-
-/*!
-\brief The function select_rings select rings based on the overlay-type (union,intersection)
-*/
-template
-<
- overlay_type OverlayType,
- typename Geometry1,
- typename Geometry2,
- typename RingTurnInfoMap,
- typename RingPropertyMap,
- typename Strategy
->
-inline void select_rings(Geometry1 const& geometry1, Geometry2 const& geometry2,
- RingTurnInfoMap const& turn_info_per_ring,
- RingPropertyMap& selected_ring_properties,
- Strategy const& strategy)
-{
- typedef typename geometry::tag<Geometry1>::type tag1;
- typedef typename geometry::tag<Geometry2>::type tag2;
- typedef typename geometry::point_type<Geometry1>::type point1_type;
- typedef typename geometry::point_type<Geometry2>::type point2_type;
-
- RingPropertyMap all_ring_properties;
- dispatch::select_rings<tag1, Geometry1>::apply(geometry1, geometry2,
- ring_identifier(0, -1, -1), all_ring_properties,
- strategy.template get_area_strategy<point1_type>());
- dispatch::select_rings<tag2, Geometry2>::apply(geometry2, geometry1,
- ring_identifier(1, -1, -1), all_ring_properties,
- strategy.template get_area_strategy<point2_type>());
-
- update_ring_selection<OverlayType>(geometry1, geometry2, turn_info_per_ring,
- all_ring_properties, selected_ring_properties,
- strategy);
-}
-
-template
-<
- overlay_type OverlayType,
- typename Geometry,
- typename RingTurnInfoMap,
- typename RingPropertyMap,
- typename Strategy
->
-inline void select_rings(Geometry const& geometry,
- RingTurnInfoMap const& turn_info_per_ring,
- RingPropertyMap& selected_ring_properties,
- Strategy const& strategy)
-{
- typedef typename geometry::tag<Geometry>::type tag;
- typedef typename geometry::point_type<Geometry>::type point_type;
-
- RingPropertyMap all_ring_properties;
- dispatch::select_rings<tag, Geometry>::apply(geometry,
- ring_identifier(0, -1, -1), all_ring_properties,
- strategy.template get_area_strategy<point_type>());
-
- update_ring_selection<OverlayType>(geometry, geometry, turn_info_per_ring,
- all_ring_properties, selected_ring_properties,
- strategy);
-}
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELECT_RINGS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp
deleted file mode 100644
index 3cc98d3b7ee..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp
+++ /dev/null
@@ -1,364 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP
-
-
-#include <cstddef>
-
-#include <boost/mpl/vector_c.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
-#include <boost/geometry/algorithms/detail/partition.hpp>
-#include <boost/geometry/algorithms/detail/overlay/do_reverse.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
-#include <boost/geometry/algorithms/detail/sections/section_box_policies.hpp>
-
-#include <boost/geometry/geometries/box.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace self_get_turn_points
-{
-
-struct no_interrupt_policy
-{
- static bool const enabled = false;
- static bool const has_intersections = false;
-
-
- template <typename Range>
- static inline bool apply(Range const&)
- {
- return false;
- }
-};
-
-
-template
-<
- bool Reverse,
- typename Geometry,
- typename Turns,
- typename TurnPolicy,
- typename IntersectionStrategy,
- typename RobustPolicy,
- typename InterruptPolicy
->
-struct self_section_visitor
-{
- Geometry const& m_geometry;
- IntersectionStrategy const& m_intersection_strategy;
- RobustPolicy const& m_rescale_policy;
- Turns& m_turns;
- InterruptPolicy& m_interrupt_policy;
- int m_source_index;
- bool m_skip_adjacent;
-
- inline self_section_visitor(Geometry const& g,
- IntersectionStrategy const& is,
- RobustPolicy const& rp,
- Turns& turns,
- InterruptPolicy& ip,
- int source_index,
- bool skip_adjacent)
- : m_geometry(g)
- , m_intersection_strategy(is)
- , m_rescale_policy(rp)
- , m_turns(turns)
- , m_interrupt_policy(ip)
- , m_source_index(source_index)
- , m_skip_adjacent(skip_adjacent)
- {}
-
- template <typename Section>
- inline bool apply(Section const& sec1, Section const& sec2)
- {
- if (! detail::disjoint::disjoint_box_box(sec1.bounding_box, sec2.bounding_box)
- && ! sec1.duplicate
- && ! sec2.duplicate)
- {
- // false if interrupted
- return detail::get_turns::get_turns_in_sections
- <
- Geometry, Geometry,
- Reverse, Reverse,
- Section, Section,
- TurnPolicy
- >::apply(m_source_index, m_geometry, sec1,
- m_source_index, m_geometry, sec2,
- false, m_skip_adjacent,
- m_intersection_strategy,
- m_rescale_policy,
- m_turns, m_interrupt_policy);
- }
-
- return true;
- }
-
-};
-
-
-
-template <bool Reverse, typename TurnPolicy>
-struct get_turns
-{
- template <typename Geometry, typename IntersectionStrategy, typename RobustPolicy, typename Turns, typename InterruptPolicy>
- static inline bool apply(
- Geometry const& geometry,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- Turns& turns,
- InterruptPolicy& interrupt_policy,
- int source_index, bool skip_adjacent)
- {
- typedef model::box
- <
- typename geometry::robust_point_type
- <
- typename geometry::point_type<Geometry>::type,
- RobustPolicy
- >::type
- > box_type;
-
- // sectionalize in two dimensions to detect
- // all potential spikes correctly
- typedef geometry::sections<box_type, 2> sections_type;
-
- typedef boost::mpl::vector_c<std::size_t, 0, 1> dimensions;
-
- sections_type sec;
- geometry::sectionalize<Reverse, dimensions>(geometry, robust_policy, sec,
- intersection_strategy.get_envelope_strategy());
-
- self_section_visitor
- <
- Reverse, Geometry,
- Turns, TurnPolicy, IntersectionStrategy, RobustPolicy, InterruptPolicy
- > visitor(geometry, intersection_strategy, robust_policy, turns, interrupt_policy, source_index, skip_adjacent);
-
- // false if interrupted
- geometry::partition
- <
- box_type
- >::apply(sec, visitor,
- detail::section::get_section_box(),
- detail::section::overlaps_section_box());
-
- return ! interrupt_policy.has_intersections;
- }
-};
-
-
-}} // namespace detail::self_get_turn_points
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- bool Reverse,
- typename GeometryTag,
- typename Geometry,
- typename TurnPolicy
->
-struct self_get_turn_points
-{
-};
-
-
-template
-<
- bool Reverse,
- typename Ring,
- typename TurnPolicy
->
-struct self_get_turn_points
- <
- Reverse, ring_tag, Ring,
- TurnPolicy
- >
- : detail::self_get_turn_points::get_turns<Reverse, TurnPolicy>
-{};
-
-
-template
-<
- bool Reverse,
- typename Box,
- typename TurnPolicy
->
-struct self_get_turn_points
- <
- Reverse, box_tag, Box,
- TurnPolicy
- >
-{
- template <typename Strategy, typename RobustPolicy, typename Turns, typename InterruptPolicy>
- static inline bool apply(
- Box const& ,
- Strategy const& ,
- RobustPolicy const& ,
- Turns& ,
- InterruptPolicy& ,
- int /*source_index*/,
- bool /*skip_adjacent*/)
- {
- return true;
- }
-};
-
-
-template
-<
- bool Reverse,
- typename Polygon,
- typename TurnPolicy
->
-struct self_get_turn_points
- <
- Reverse, polygon_tag, Polygon,
- TurnPolicy
- >
- : detail::self_get_turn_points::get_turns<Reverse, TurnPolicy>
-{};
-
-
-template
-<
- bool Reverse,
- typename MultiPolygon,
- typename TurnPolicy
->
-struct self_get_turn_points
- <
- Reverse, multi_polygon_tag, MultiPolygon,
- TurnPolicy
- >
- : detail::self_get_turn_points::get_turns<Reverse, TurnPolicy>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace self_get_turn_points
-{
-
-// Version where Reverse can be specified manually. TODO:
-// can most probably be merged with self_get_turn_points::get_turn
-template
-<
- bool Reverse,
- typename AssignPolicy,
- typename Geometry,
- typename IntersectionStrategy,
- typename RobustPolicy,
- typename Turns,
- typename InterruptPolicy
->
-inline void self_turns(Geometry const& geometry,
- IntersectionStrategy const& strategy,
- RobustPolicy const& robust_policy,
- Turns& turns,
- InterruptPolicy& interrupt_policy,
- int source_index = 0,
- bool skip_adjacent = false)
-{
- concepts::check<Geometry const>();
-
- typedef detail::overlay::get_turn_info<detail::overlay::assign_null_policy> turn_policy;
-
- dispatch::self_get_turn_points
- <
- Reverse,
- typename tag<Geometry>::type,
- Geometry,
- turn_policy
- >::apply(geometry, strategy, robust_policy, turns, interrupt_policy,
- source_index, skip_adjacent);
-}
-
-}} // namespace detail::self_get_turn_points
-#endif // DOXYGEN_NO_DETAIL
-
-/*!
- \brief Calculate self intersections of a geometry
- \ingroup overlay
- \tparam Geometry geometry type
- \tparam Turns type of intersection container
- (e.g. vector of "intersection/turn point"'s)
- \param geometry geometry
- \param strategy strategy to be used
- \param robust_policy policy to handle robustness issues
- \param turns container which will contain intersection points
- \param interrupt_policy policy determining if process is stopped
- when intersection is found
- */
-template
-<
- typename AssignPolicy,
- typename Geometry,
- typename IntersectionStrategy,
- typename RobustPolicy,
- typename Turns,
- typename InterruptPolicy
->
-inline void self_turns(Geometry const& geometry,
- IntersectionStrategy const& strategy,
- RobustPolicy const& robust_policy,
- Turns& turns,
- InterruptPolicy& interrupt_policy,
- int source_index = 0,
- bool skip_adjacent = false)
-{
- concepts::check<Geometry const>();
-
- static bool const reverse = detail::overlay::do_reverse
- <
- geometry::point_order<Geometry>::value
- >::value;
-
- detail::self_get_turn_points::self_turns
- <
- reverse,
- AssignPolicy
- >(geometry, strategy, robust_policy, turns, interrupt_policy,
- source_index, skip_adjacent);
-}
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/sort_by_side.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/sort_by_side.hpp
deleted file mode 100644
index 6b929373b47..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/sort_by_side.hpp
+++ /dev/null
@@ -1,645 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SORT_BY_SIDE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SORT_BY_SIDE_HPP
-
-#include <algorithm>
-#include <map>
-#include <vector>
-
-#include <boost/geometry/algorithms/num_points.hpp>
-#include <boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_ring.hpp>
-#include <boost/geometry/algorithms/detail/direction_code.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay { namespace sort_by_side
-{
-
-enum direction_type { dir_unknown = -1, dir_from = 0, dir_to = 1 };
-
-// Point-wrapper, adding some properties
-template <typename Point>
-struct ranked_point
-{
- ranked_point()
- : rank(0)
- , turn_index(-1)
- , operation_index(-1)
- , direction(dir_unknown)
- , count_left(0)
- , count_right(0)
- , operation(operation_none)
- {}
-
- template <typename Op>
- ranked_point(const Point& p, signed_size_type ti, int oi,
- direction_type d, Op op)
- : point(p)
- , rank(0)
- , zone(-1)
- , turn_index(ti)
- , operation_index(oi)
- , direction(d)
- , count_left(0)
- , count_right(0)
- , operation(op.operation)
- , seg_id(op.seg_id)
- {}
-
- Point point;
- std::size_t rank;
- signed_size_type zone; // index of closed zone, in uu turn there would be 2 zones
- signed_size_type turn_index;
- int operation_index; // 0,1
- direction_type direction;
- std::size_t count_left;
- std::size_t count_right;
- operation_type operation;
- segment_identifier seg_id;
-};
-
-struct less_by_turn_index
-{
- template <typename T>
- inline bool operator()(const T& first, const T& second) const
- {
- return first.turn_index == second.turn_index
- ? first.index < second.index
- : first.turn_index < second.turn_index
- ;
- }
-};
-
-struct less_by_index
-{
- template <typename T>
- inline bool operator()(const T& first, const T& second) const
- {
- // Length might be considered too
- // First order by from/to
- if (first.direction != second.direction)
- {
- return first.direction < second.direction;
- }
- // Then by turn index
- if (first.turn_index != second.turn_index)
- {
- return first.turn_index < second.turn_index;
- }
- // This can also be the same (for example in buffer), but seg_id is
- // never the same
- return first.seg_id < second.seg_id;
- }
-};
-
-struct less_false
-{
- template <typename T>
- inline bool operator()(const T&, const T& ) const
- {
- return false;
- }
-};
-
-template <typename Point, typename SideStrategy, typename LessOnSame, typename Compare>
-struct less_by_side
-{
- less_by_side(const Point& p1, const Point& p2, SideStrategy const& strategy)
- : m_p1(p1)
- , m_p2(p2)
- , m_strategy(strategy)
- {}
-
- template <typename T>
- inline bool operator()(const T& first, const T& second) const
- {
- LessOnSame on_same;
- Compare compare;
-
- int const side_first = m_strategy.apply(m_p1, m_p2, first.point);
- int const side_second = m_strategy.apply(m_p1, m_p2, second.point);
-
- if (side_first == 0 && side_second == 0)
- {
- // Both collinear. They might point into different directions: <------*------>
- // If so, order the one going backwards as the very first.
-
- int const first_code = direction_code(m_p1, m_p2, first.point);
- int const second_code = direction_code(m_p1, m_p2, second.point);
-
- // Order by code, backwards first, then forward.
- return first_code != second_code
- ? first_code < second_code
- : on_same(first, second)
- ;
- }
- else if (side_first == 0
- && direction_code(m_p1, m_p2, first.point) == -1)
- {
- // First collinear and going backwards.
- // Order as the very first, so return always true
- return true;
- }
- else if (side_second == 0
- && direction_code(m_p1, m_p2, second.point) == -1)
- {
- // Second is collinear and going backwards
- // Order as very last, so return always false
- return false;
- }
-
- // They are not both collinear
-
- if (side_first != side_second)
- {
- return compare(side_first, side_second);
- }
-
- // They are both left, both right, and/or both collinear (with each other and/or with p1,p2)
- // Check mutual side
- int const side_second_wrt_first = m_strategy.apply(m_p2, first.point, second.point);
-
- if (side_second_wrt_first == 0)
- {
- return on_same(first, second);
- }
-
- int const side_first_wrt_second = -side_second_wrt_first;
-
- // Both are on same side, and not collinear
- // Union: return true if second is right w.r.t. first, so -1,
- // so other is 1. union has greater as compare functor
- // Intersection: v.v.
- return compare(side_first_wrt_second, side_second_wrt_first);
- }
-
-private :
- Point m_p1, m_p2;
- SideStrategy const& m_strategy;
-};
-
-// Sorts vectors in counter clockwise order (by default)
-template
-<
- bool Reverse1,
- bool Reverse2,
- overlay_type OverlayType,
- typename Point,
- typename SideStrategy,
- typename Compare
->
-struct side_sorter
-{
- typedef ranked_point<Point> rp;
-
-private :
- struct include_union
- {
- inline bool operator()(rp const& ranked_point) const
- {
- // New candidate if there are no polygons on left side,
- // but there are on right side
- return ranked_point.count_left == 0
- && ranked_point.count_right > 0;
- }
- };
-
- struct include_intersection
- {
- inline bool operator()(rp const& ranked_point) const
- {
- // New candidate if there are two polygons on right side,
- // and less on the left side
- return ranked_point.count_left < 2
- && ranked_point.count_right >= 2;
- }
- };
-
-public :
- side_sorter(SideStrategy const& strategy)
- : m_origin_count(0)
- , m_origin_segment_distance(0)
- , m_strategy(strategy)
- {}
-
- template <typename Operation, typename Geometry1, typename Geometry2>
- Point add(Operation const& op, signed_size_type turn_index, int op_index,
- Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- bool is_origin)
- {
- Point point1, point2, point3;
- geometry::copy_segment_points<Reverse1, Reverse2>(geometry1, geometry2,
- op.seg_id, point1, point2, point3);
- Point const& point_to = op.fraction.is_one() ? point3 : point2;
-
- m_ranked_points.push_back(rp(point1, turn_index, op_index, dir_from, op));
- m_ranked_points.push_back(rp(point_to, turn_index, op_index, dir_to, op));
- if (is_origin)
- {
- m_origin = point1;
- m_origin_count++;
- }
- return point1;
- }
-
- template <typename Operation, typename Geometry1, typename Geometry2>
- void add(Operation const& op, signed_size_type turn_index, int op_index,
- segment_identifier const& departure_seg_id,
- Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- bool check_origin)
- {
- Point const point1 = add(op, turn_index, op_index, geometry1, geometry2, false);
-
- if (check_origin)
- {
- bool const is_origin
- = op.seg_id.source_index == departure_seg_id.source_index
- && op.seg_id.ring_index == departure_seg_id.ring_index
- && op.seg_id.multi_index == departure_seg_id.multi_index;
-
- if (is_origin)
- {
- signed_size_type const segment_distance = calculate_segment_distance(op, departure_seg_id, geometry1, geometry2);
- if (m_origin_count == 0 ||
- segment_distance < m_origin_segment_distance)
- {
- m_origin = point1;
- m_origin_segment_distance = segment_distance;
- }
- m_origin_count++;
- }
- }
- }
-
- template <typename Operation, typename Geometry1, typename Geometry2>
- static signed_size_type calculate_segment_distance(Operation const& op,
- segment_identifier const& departure_seg_id,
- Geometry1 const& geometry1,
- Geometry2 const& geometry2)
- {
- if (op.seg_id.segment_index >= departure_seg_id.segment_index)
- {
- return op.seg_id.segment_index - departure_seg_id.segment_index;
- }
- // Take wrap into account
- // Suppose ring_count=10 (10 points, 9 segments), dep.seg_id=7, op.seg_id=2, then distance=10-9+2
- // Generic function (is this used somewhere else too?)
- ring_identifier const rid(op.seg_id.source_index, op.seg_id.multi_index, op.seg_id.ring_index);
- signed_size_type const segment_count
- (op.seg_id.source_index == 0
- ? geometry::num_points(detail::overlay::get_ring<typename geometry::tag<Geometry1>::type>::apply(rid, geometry1))
- : geometry::num_points(detail::overlay::get_ring<typename geometry::tag<Geometry2>::type>::apply(rid, geometry2)));
- return ((segment_count - 1) - departure_seg_id.segment_index) + op.seg_id.segment_index;
- }
-
- void apply(Point const& turn_point)
- {
- // We need three compare functors:
- // 1) to order clockwise (union) or counter clockwise (intersection)
- // 2) to order by side, resulting in unique ranks for all points
- // 3) to order by side, resulting in non-unique ranks
- // to give colinear points
-
- // Sort by side and assign rank
- less_by_side<Point, SideStrategy, less_by_index, Compare> less_unique(m_origin, turn_point, m_strategy);
- less_by_side<Point, SideStrategy, less_false, Compare> less_non_unique(m_origin, turn_point, m_strategy);
-
- std::sort(m_ranked_points.begin(), m_ranked_points.end(), less_unique);
-
- std::size_t colinear_rank = 0;
- for (std::size_t i = 0; i < m_ranked_points.size(); i++)
- {
- if (i > 0
- && less_non_unique(m_ranked_points[i - 1], m_ranked_points[i]))
- {
- // It is not collinear
- colinear_rank++;
- }
-
- m_ranked_points[i].rank = colinear_rank;
- }
- }
-
- template <signed_size_type segment_identifier::*Member, typename Map>
- void find_open_generic(Map& handled, bool check)
- {
- for (std::size_t i = 0; i < m_ranked_points.size(); i++)
- {
- const rp& ranked = m_ranked_points[i];
- if (ranked.direction != dir_from)
- {
- continue;
- }
-
- signed_size_type const& index = ranked.seg_id.*Member;
- if (check && (index < 0 || index > 1))
- {
- // Should not occur
- continue;
- }
- if (! handled[index])
- {
- find_polygons_for_source<Member>(index, i);
- handled[index] = true;
- }
- }
- }
-
- void find_open()
- {
- if (OverlayType == overlay_buffer)
- {
- // For buffers, use piece index
- std::map<signed_size_type, bool> handled;
- find_open_generic
- <
- &segment_identifier::piece_index
- >(handled, false);
- }
- else
- {
- // For other operations, by source (there should only source 0,1)
- bool handled[2] = {false, false};
- find_open_generic
- <
- &segment_identifier::source_index
- >(handled, true);
- }
- }
-
- void reverse()
- {
- if (m_ranked_points.empty())
- {
- return;
- }
-
- std::size_t const last = 1 + m_ranked_points.back().rank;
-
- // Move iterator after rank==0
- bool has_first = false;
- typename container_type::iterator it = m_ranked_points.begin() + 1;
- for (; it != m_ranked_points.end() && it->rank == 0; ++it)
- {
- has_first = true;
- }
-
- if (has_first)
- {
- // Reverse first part (having rank == 0), if any,
- // but skip the very first row
- std::reverse(m_ranked_points.begin() + 1, it);
- for (typename container_type::iterator fit = m_ranked_points.begin();
- fit != it; ++fit)
- {
- BOOST_ASSERT(fit->rank == 0);
- }
- }
-
- // Reverse the rest (main rank > 0)
- std::reverse(it, m_ranked_points.end());
- for (; it != m_ranked_points.end(); ++it)
- {
- BOOST_ASSERT(it->rank > 0);
- it->rank = last - it->rank;
- }
- }
-
- bool has_origin() const
- {
- return m_origin_count > 0;
- }
-
-//private :
-
- typedef std::vector<rp> container_type;
- container_type m_ranked_points;
- Point m_origin;
- std::size_t m_origin_count;
- signed_size_type m_origin_segment_distance;
- SideStrategy m_strategy;
-
-private :
-
- //! Check how many open spaces there are
- template <typename Include>
- inline std::size_t open_count(Include const& include_functor) const
- {
- std::size_t result = 0;
- std::size_t last_rank = 0;
- for (std::size_t i = 0; i < m_ranked_points.size(); i++)
- {
- rp const& ranked_point = m_ranked_points[i];
-
- if (ranked_point.rank > last_rank
- && ranked_point.direction == sort_by_side::dir_to
- && include_functor(ranked_point))
- {
- result++;
- last_rank = ranked_point.rank;
- }
- }
- return result;
- }
-
- std::size_t move(std::size_t index) const
- {
- std::size_t const result = index + 1;
- return result >= m_ranked_points.size() ? 0 : result;
- }
-
- //! member is pointer to member (source_index or multi_index)
- template <signed_size_type segment_identifier::*Member>
- std::size_t move(signed_size_type member_index, std::size_t index) const
- {
- std::size_t result = move(index);
- while (m_ranked_points[result].seg_id.*Member != member_index)
- {
- result = move(result);
- }
- return result;
- }
-
- void assign_ranks(std::size_t min_rank, std::size_t max_rank, int side_index)
- {
- for (std::size_t i = 0; i < m_ranked_points.size(); i++)
- {
- rp& ranked = m_ranked_points[i];
- // Suppose there are 8 ranks, if min=4,max=6: assign 4,5,6
- // if min=5,max=2: assign from 5,6,7,1,2
- bool const in_range
- = max_rank >= min_rank
- ? ranked.rank >= min_rank && ranked.rank <= max_rank
- : ranked.rank >= min_rank || ranked.rank <= max_rank
- ;
-
- if (in_range)
- {
- if (side_index == 1)
- {
- ranked.count_left++;
- }
- else if (side_index == 2)
- {
- ranked.count_right++;
- }
- }
- }
- }
-
- template <signed_size_type segment_identifier::*Member>
- void find_polygons_for_source(signed_size_type the_index,
- std::size_t start_index)
- {
- bool in_polygon = true; // Because start_index is "from", arrives at the turn
- rp const& start_rp = m_ranked_points[start_index];
- std::size_t last_from_rank = start_rp.rank;
- std::size_t previous_rank = start_rp.rank;
-
- for (std::size_t index = move<Member>(the_index, start_index);
- ;
- index = move<Member>(the_index, index))
- {
- rp& ranked = m_ranked_points[index];
-
- if (ranked.rank != previous_rank && ! in_polygon)
- {
- assign_ranks(last_from_rank, previous_rank - 1, 1);
- assign_ranks(last_from_rank + 1, previous_rank, 2);
- }
-
- if (index == start_index)
- {
- return;
- }
-
- if (ranked.direction == dir_from)
- {
- last_from_rank = ranked.rank;
- in_polygon = true;
- }
- else if (ranked.direction == dir_to)
- {
- in_polygon = false;
- }
-
- previous_rank = ranked.rank;
- }
- }
-
- //! Find closed zones and assign it
- template <typename Include>
- std::size_t assign_zones(Include const& include_functor)
- {
- // Find a starting point (the first rank after an outgoing rank
- // with no polygons on the left side)
- std::size_t start_rank = m_ranked_points.size() + 1;
- std::size_t start_index = 0;
- std::size_t max_rank = 0;
- for (std::size_t i = 0; i < m_ranked_points.size(); i++)
- {
- rp const& ranked_point = m_ranked_points[i];
- if (ranked_point.rank > max_rank)
- {
- max_rank = ranked_point.rank;
- }
- if (ranked_point.direction == sort_by_side::dir_to
- && include_functor(ranked_point))
- {
- start_rank = ranked_point.rank + 1;
- }
- if (ranked_point.rank == start_rank && start_index == 0)
- {
- start_index = i;
- }
- }
-
- // Assign the zones
- std::size_t const undefined_rank = max_rank + 1;
- std::size_t zone_id = 0;
- std::size_t last_rank = 0;
- std::size_t rank_at_next_zone = undefined_rank;
- std::size_t index = start_index;
- for (std::size_t i = 0; i < m_ranked_points.size(); i++)
- {
- rp& ranked_point = m_ranked_points[index];
-
- // Implement cyclic behavior
- index++;
- if (index == m_ranked_points.size())
- {
- index = 0;
- }
-
- if (ranked_point.rank != last_rank)
- {
- if (ranked_point.rank == rank_at_next_zone)
- {
- zone_id++;
- rank_at_next_zone = undefined_rank;
- }
-
- if (ranked_point.direction == sort_by_side::dir_to
- && include_functor(ranked_point))
- {
- rank_at_next_zone = ranked_point.rank + 1;
- if (rank_at_next_zone > max_rank)
- {
- rank_at_next_zone = 0;
- }
- }
-
- last_rank = ranked_point.rank;
- }
-
- ranked_point.zone = zone_id;
- }
- return zone_id;
- }
-
-public :
- inline std::size_t open_count(operation_type for_operation) const
- {
- return for_operation == operation_union
- ? open_count(include_union())
- : open_count(include_intersection())
- ;
- }
-
- inline std::size_t assign_zones(operation_type for_operation)
- {
- return for_operation == operation_union
- ? assign_zones(include_union())
- : assign_zones(include_intersection())
- ;
- }
-
-};
-
-
-}}} // namespace detail::overlay::sort_by_side
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_SORT_BY_SIDE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp
deleted file mode 100644
index 51fd1b3dca6..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/stream_info.hpp
+++ /dev/null
@@ -1,74 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_STREAM_INFO_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_STREAM_INFO_HPP
-
-
-#include <string>
-
-#include <boost/array.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
- static inline std::string dir(int d)
- {
- return d == 0 ? "-" : (d == 1 ? "L" : d == -1 ? "R" : "#");
- }
- static inline std::string how_str(int h)
- {
- return h == 0 ? "-" : (h == 1 ? "A" : "D");
- }
-
- template <typename P>
- std::ostream& operator<<(std::ostream &os, turn_info<P> const& info)
- {
- os << "\t"
- << " src " << info.seg_id.source_index
- << " seg " << info.seg_id.segment_index
- << " (// " << info.other_id.source_index
- << "." << info.other_id.segment_index << ")"
- << " how " << info.how
- << "[" << how_str(info.arrival)
- << " " << dir(info.direction)
- << (info.opposite ? " o" : "")
- << "]"
- << " sd "
- << dir(info.sides.get<0,0>())
- << dir(info.sides.get<0,1>())
- << dir(info.sides.get<1,0>())
- << dir(info.sides.get<1,1>())
- << " nxt seg " << info.travels_to_vertex_index
- << " , ip " << info.travels_to_ip_index
- << " , or " << info.next_ip_index
- << " frac " << info.fraction
- << info.visit_state;
- if (info.flagged)
- {
- os << " FLAGGED";
- }
- return os;
- }
-
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_STREAM_INFO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal.hpp
deleted file mode 100644
index 5c547c32787..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal.hpp
+++ /dev/null
@@ -1,984 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_HPP
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/is_self_turn.hpp>
-#include <boost/geometry/algorithms/detail/overlay/sort_by_side.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/util/condition.hpp>
-
-#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) \
- || defined(BOOST_GEOMETRY_OVERLAY_REPORT_WKT) \
- || defined(BOOST_GEOMETRY_DEBUG_TRAVERSE)
-# include <string>
-# include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
-# include <boost/geometry/io/wkt/wkt.hpp>
-#endif
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-template <typename Turn, typename Operation>
-#ifdef BOOST_GEOMETRY_DEBUG_TRAVERSE
-inline void debug_traverse(Turn const& turn, Operation op,
- std::string const& header, bool condition = true)
-{
- if (! condition)
- {
- return;
- }
- std::cout << " " << header
- << " at " << op.seg_id
- << " meth: " << method_char(turn.method)
- << " op: " << operation_char(op.operation)
- << " vis: " << visited_char(op.visited)
- << " of: " << operation_char(turn.operations[0].operation)
- << operation_char(turn.operations[1].operation)
- << " " << geometry::wkt(turn.point)
- << std::endl;
-
- if (boost::contains(header, "Finished"))
- {
- std::cout << std::endl;
- }
-}
-#else
-inline void debug_traverse(Turn const& , Operation, const char*, bool = true)
-{
-}
-#endif
-
-
-//! Metafunction to define side_order (clockwise, ccw) by operation_type
-template <operation_type OpType>
-struct side_compare {};
-
-template <>
-struct side_compare<operation_union>
-{
- typedef std::greater<int> type;
-};
-
-template <>
-struct side_compare<operation_intersection>
-{
- typedef std::less<int> type;
-};
-
-
-template
-<
- bool Reverse1,
- bool Reverse2,
- overlay_type OverlayType,
- typename Geometry1,
- typename Geometry2,
- typename Turns,
- typename Clusters,
- typename RobustPolicy,
- typename SideStrategy,
- typename Visitor
->
-struct traversal
-{
- static const operation_type target_operation = operation_from_overlay<OverlayType>::value;
-
- typedef typename side_compare<target_operation>::type side_compare_type;
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::turn_operation_type turn_operation_type;
-
- typedef typename geometry::point_type<Geometry1>::type point_type;
- typedef sort_by_side::side_sorter
- <
- Reverse1, Reverse2, OverlayType,
- point_type, SideStrategy, side_compare_type
- > sbs_type;
-
- inline traversal(Geometry1 const& geometry1, Geometry2 const& geometry2,
- Turns& turns, Clusters const& clusters,
- RobustPolicy const& robust_policy, SideStrategy const& strategy,
- Visitor& visitor)
- : m_geometry1(geometry1)
- , m_geometry2(geometry2)
- , m_turns(turns)
- , m_clusters(clusters)
- , m_robust_policy(robust_policy)
- , m_strategy(strategy)
- , m_visitor(visitor)
- {
- }
-
- template <typename TurnInfoMap>
- inline void finalize_visit_info(TurnInfoMap& turn_info_map)
- {
- for (typename boost::range_iterator<Turns>::type
- it = boost::begin(m_turns);
- it != boost::end(m_turns);
- ++it)
- {
- turn_type& turn = *it;
- for (int i = 0; i < 2; i++)
- {
- turn_operation_type& op = turn.operations[i];
- if (op.visited.visited()
- || op.visited.started()
- || op.visited.finished() )
- {
- ring_identifier const ring_id
- (
- op.seg_id.source_index,
- op.seg_id.multi_index,
- op.seg_id.ring_index
- );
- turn_info_map[ring_id].has_traversed_turn = true;
-
- if (op.operation == operation_continue)
- {
- // Continue operations should mark the other operation
- // as traversed too
- turn_operation_type& other_op = turn.operations[1 - i];
- ring_identifier const other_ring_id
- (
- other_op.seg_id.source_index,
- other_op.seg_id.multi_index,
- other_op.seg_id.ring_index
- );
- turn_info_map[other_ring_id].has_traversed_turn = true;
- }
- }
- op.visited.finalize();
- }
- }
- }
-
- //! Sets visited for ALL turns traveling to the same turn
- inline void set_visited_in_cluster(signed_size_type cluster_id,
- signed_size_type rank)
- {
- typename Clusters::const_iterator mit = m_clusters.find(cluster_id);
- BOOST_ASSERT(mit != m_clusters.end());
-
- cluster_info const& cinfo = mit->second;
- std::set<signed_size_type> const& ids = cinfo.turn_indices;
-
- for (typename std::set<signed_size_type>::const_iterator it = ids.begin();
- it != ids.end(); ++it)
- {
- signed_size_type const turn_index = *it;
- turn_type& turn = m_turns[turn_index];
-
- for (int i = 0; i < 2; i++)
- {
- turn_operation_type& op = turn.operations[i];
- if (op.visited.none()
- && op.enriched.rank == rank)
- {
- op.visited.set_visited();
- }
- }
- }
- }
- inline void set_visited(turn_type& turn, turn_operation_type& op)
- {
- if (op.operation == detail::overlay::operation_continue)
- {
- // On "continue", all go in same direction so set "visited" for ALL
- for (int i = 0; i < 2; i++)
- {
- turn_operation_type& turn_op = turn.operations[i];
- if (turn_op.visited.none())
- {
- turn_op.visited.set_visited();
- }
- }
- }
- else
- {
- op.visited.set_visited();
- }
- if (turn.is_clustered())
- {
- set_visited_in_cluster(turn.cluster_id, op.enriched.rank);
- }
- }
-
- inline bool is_visited(turn_type const& , turn_operation_type const& op,
- signed_size_type , int) const
- {
- return op.visited.visited();
- }
-
- template <signed_size_type segment_identifier::*Member>
- inline bool select_source_generic(turn_type const& turn,
- segment_identifier const& current,
- segment_identifier const& previous) const
- {
- turn_operation_type const& op0 = turn.operations[0];
- turn_operation_type const& op1 = turn.operations[1];
-
- bool const switch_source = op0.enriched.region_id != -1
- && op0.enriched.region_id == op1.enriched.region_id;
-
-#if defined(BOOST_GEOMETRY_DEBUG_TRAVERSAL_SWITCH_DETECTOR)
- if (switch_source)
- {
- std::cout << "Switch source at " << &turn << std::endl;
- }
- else
- {
- std::cout << "DON'T SWITCH SOURCES at " << &turn << std::endl;
- }
-#endif
- return switch_source
- ? current.*Member != previous.*Member
- : current.*Member == previous.*Member;
- }
-
- inline bool select_source(turn_type const& turn,
- segment_identifier const& candidate_seg_id,
- segment_identifier const& previous_seg_id) const
- {
- // For uu/ii, only switch sources if indicated
-
- if (OverlayType == overlay_buffer)
- {
- // Buffer does not use source_index (always 0).
- return select_source_generic<&segment_identifier::multi_index>(
- turn, candidate_seg_id, previous_seg_id);
- }
-
- if (is_self_turn<OverlayType>(turn))
- {
- // Also, if it is a self-turn, stay on same ring (multi/ring)
- return select_source_generic<&segment_identifier::multi_index>(
- turn, candidate_seg_id, previous_seg_id);
- }
-
- // Use source_index
- return select_source_generic<&segment_identifier::source_index>(
- turn, candidate_seg_id, previous_seg_id);
- }
-
- inline bool traverse_possible(signed_size_type turn_index) const
- {
- if (turn_index == -1)
- {
- return false;
- }
-
- turn_type const& turn = m_turns[turn_index];
-
- // It is not a dead end if there is an operation to continue, or of
- // there is a cluster (assuming for now we can get out of the cluster)
- return turn.is_clustered()
- || turn.has(target_operation)
- || turn.has(operation_continue);
- }
-
- inline std::size_t get_shortcut_level(turn_operation_type const& op,
- signed_size_type start_turn_index,
- signed_size_type origin_turn_index,
- std::size_t level = 1) const
- {
- signed_size_type next_turn_index = op.enriched.get_next_turn_index();
- if (next_turn_index == -1)
- {
- return 0;
- }
- if (next_turn_index == start_turn_index)
- {
- // This operation finishes the ring
- return 0;
- }
- if (next_turn_index == origin_turn_index)
- {
- // This operation travels to itself
- return level;
- }
- if (level > 10)
- {
- // Avoid infinite recursion
- return 0;
- }
-
- turn_type const& next_turn = m_turns[next_turn_index];
- for (int i = 0; i < 2; i++)
- {
- turn_operation_type const& next_op = next_turn.operations[i];
- if (next_op.operation == target_operation
- && ! next_op.visited.finished()
- && ! next_op.visited.visited())
- {
- // Recursively continue verifying
- if (get_shortcut_level(next_op, start_turn_index,
- origin_turn_index, level + 1))
- {
- return level + 1;
- }
- }
- }
- return 0;
- }
-
- inline
- bool select_cc_operation(turn_type const& turn,
- signed_size_type start_turn_index,
- int& selected_op_index) const
- {
- // For "cc", take either one, but if there is a starting one,
- // take that one. If next is dead end, skip that one.
- // If both are valid candidates, take the one with minimal remaining
- // distance (important for #mysql_23023665 in buffer).
-
- // Initialize with 0, automatically assigned on first result
- typename turn_operation_type::comparable_distance_type
- min_remaining_distance = 0;
-
- bool result = false;
-
- for (int i = 0; i < 2; i++)
- {
- turn_operation_type const& op = turn.operations[i];
-
- signed_size_type const next_turn_index = op.enriched.get_next_turn_index();
-
- if (! traverse_possible(next_turn_index))
- {
- continue;
- }
-
- if (! result
- || next_turn_index == start_turn_index
- || op.remaining_distance < min_remaining_distance)
- {
- debug_traverse(turn, op, "First candidate cc", ! result);
- debug_traverse(turn, op, "Candidate cc override (start)",
- result && next_turn_index == start_turn_index);
- debug_traverse(turn, op, "Candidate cc override (remaining)",
- result && op.remaining_distance < min_remaining_distance);
-
- selected_op_index = i;
- min_remaining_distance = op.remaining_distance;
- result = true;
- }
- }
-
- return result;
- }
-
- inline
- bool select_noncc_operation(turn_type const& turn,
- segment_identifier const& previous_seg_id,
- int& selected_op_index) const
- {
- bool result = false;
-
- for (int i = 0; i < 2; i++)
- {
- turn_operation_type const& op = turn.operations[i];
-
- if (op.operation == target_operation
- && ! op.visited.finished()
- && ! op.visited.visited()
- && (! result || select_source(turn, op.seg_id, previous_seg_id)))
- {
- selected_op_index = i;
- debug_traverse(turn, op, "Candidate");
- result = true;
- }
- }
-
- return result;
- }
-
- inline
- bool select_preferred_operation(turn_type const& turn,
- signed_size_type turn_index,
- signed_size_type start_turn_index,
- int& selected_op_index) const
- {
- bool option[2] = {0};
- bool finishing[2] = {0};
- bool preferred[2] = {0};
- std::size_t shortcut_level[2] = {0};
- for (int i = 0; i < 2; i++)
- {
- turn_operation_type const& op = turn.operations[i];
-
- if (op.operation == target_operation
- && ! op.visited.finished()
- && ! op.visited.visited())
- {
- option[i] = true;
- if (op.enriched.get_next_turn_index() == start_turn_index)
- {
- finishing[i] = true;
- }
- else
- {
- shortcut_level[i] = get_shortcut_level(op, start_turn_index,
- turn_index);
- }
-
- if (op.enriched.prefer_start)
- {
- preferred[i] = true;
- }
- }
- }
-
- if (option[0] != option[1])
- {
- // Only one operation is acceptable, take that one
- selected_op_index = option[0] ? 0 : 1;
- return true;
- }
-
- if (option[0] && option[1])
- {
- // Both operations are acceptable
- if (finishing[0] != finishing[1])
- {
- // Prefer operation finishing the ring
- selected_op_index = finishing[0] ? 0 : 1;
- return true;
- }
-
- if (shortcut_level[0] != shortcut_level[1])
- {
- // If a turn can travel to itself again (without closing the
- // ring), take the shortest one
- selected_op_index = shortcut_level[0] < shortcut_level[1] ? 0 : 1;
- return true;
- }
-
- if (preferred[0] != preferred[1])
- {
- // Only one operation is preferred (== was not intersection)
- selected_op_index = preferred[0] ? 0 : 1;
- return true;
- }
- }
-
- for (int i = 0; i < 2; i++)
- {
- if (option[i])
- {
- selected_op_index = 0;
- return true;
- }
- }
-
- return false;
- }
-
- inline
- bool select_operation(const turn_type& turn,
- signed_size_type turn_index,
- signed_size_type start_turn_index,
- segment_identifier const& previous_seg_id,
- int& selected_op_index) const
- {
- bool result = false;
- selected_op_index = -1;
- if (turn.both(operation_continue))
- {
- result = select_cc_operation(turn, start_turn_index,
- selected_op_index);
- }
- else if (OverlayType == overlay_dissolve)
- {
- result = select_preferred_operation(turn, turn_index,
- start_turn_index, selected_op_index);
- }
- else
- {
- result = select_noncc_operation(turn, previous_seg_id,
- selected_op_index);
- }
- if (result)
- {
- debug_traverse(turn, turn.operations[selected_op_index], "Accepted");
- }
-
- return result;
- }
-
- inline int starting_operation_index(const turn_type& turn) const
- {
- for (int i = 0; i < 2; i++)
- {
- if (turn.operations[i].visited.started())
- {
- return i;
- }
- }
- return -1;
- }
-
- inline bool both_finished(const turn_type& turn) const
- {
- for (int i = 0; i < 2; i++)
- {
- if (! turn.operations[i].visited.finished())
- {
- return false;
- }
- }
- return true;
- }
-
-
- template <typename RankedPoint>
- inline turn_operation_type const& operation_from_rank(RankedPoint const& rp) const
- {
- return m_turns[rp.turn_index].operations[rp.operation_index];
- }
-
- inline int select_turn_in_cluster_union(std::size_t selected_rank,
- typename sbs_type::rp const& ranked_point,
- signed_size_type start_turn_index, int start_op_index) const
- {
- // Returns 0 if it not OK
- // Returns 1 if it OK
- // Returns 2 if it OK and start turn matches
- // Returns 3 if it OK and start turn and start op both match
- if (ranked_point.rank != selected_rank
- || ranked_point.direction != sort_by_side::dir_to)
- {
- return 0;
- }
-
- turn_operation_type const& op = operation_from_rank(ranked_point);
-
- // Check finalized: TODO: this should be finetuned, it is not necessary
- if (op.visited.finalized())
- {
- return 0;
- }
-
- if (OverlayType != overlay_dissolve
- && (op.enriched.count_left != 0 || op.enriched.count_right == 0))
- {
- // Check counts: in some cases interior rings might be generated with
- // polygons on both sides. For dissolve it can be anything.
- return 0;
- }
-
- return ranked_point.turn_index == start_turn_index
- && ranked_point.operation_index == start_op_index ? 3
- : ranked_point.turn_index == start_turn_index ? 2
- : 1
- ;
- }
-
- inline signed_size_type select_rank(sbs_type const& sbs,
- bool skip_isolated) const
- {
- // Take the first outgoing rank corresponding to incoming region,
- // or take another region if it is not isolated
- turn_operation_type const& incoming_op
- = operation_from_rank(sbs.m_ranked_points.front());
-
- for (std::size_t i = 0; i < sbs.m_ranked_points.size(); i++)
- {
- typename sbs_type::rp const& rp = sbs.m_ranked_points[i];
- if (rp.rank == 0 || rp.direction == sort_by_side::dir_from)
- {
- continue;
- }
- turn_operation_type const& op = operation_from_rank(rp);
-
- if (op.operation != target_operation
- && op.operation != operation_continue)
- {
- continue;
- }
-
- if (op.enriched.region_id == incoming_op.enriched.region_id
- || (skip_isolated && ! op.enriched.isolated))
- {
- // Region corresponds to incoming region, or (for intersection)
- // there is a non-isolated other region which should be taken
- return rp.rank;
- }
- }
- return -1;
- }
-
- inline bool select_from_cluster_union(signed_size_type& turn_index,
- int& op_index, sbs_type const& sbs,
- signed_size_type start_turn_index, int start_op_index) const
- {
- std::size_t const selected_rank = select_rank(sbs, false);
-
- int best_code = 0;
- bool result = false;
- for (std::size_t i = 1; i < sbs.m_ranked_points.size(); i++)
- {
- typename sbs_type::rp const& ranked_point = sbs.m_ranked_points[i];
-
- if (ranked_point.rank > selected_rank)
- {
- // Sorted on rank, so it makes no sense to continue
- break;
- }
-
- int const code
- = select_turn_in_cluster_union(selected_rank, ranked_point,
- start_turn_index, start_op_index);
-
- if (code > best_code)
- {
- // It is 1 or higher and matching better than previous
- best_code = code;
- turn_index = ranked_point.turn_index;
- op_index = ranked_point.operation_index;
- result = true;
- }
- }
- return result;
- }
-
- inline bool analyze_cluster_intersection(signed_size_type& turn_index,
- int& op_index, sbs_type const& sbs) const
- {
- std::size_t const selected_rank = select_rank(sbs, true);
-
- if (selected_rank > 0)
- {
- typename turn_operation_type::comparable_distance_type
- min_remaining_distance = 0;
-
- std::size_t selected_index = sbs.m_ranked_points.size();
- for (std::size_t i = 0; i < sbs.m_ranked_points.size(); i++)
- {
- typename sbs_type::rp const& ranked_point = sbs.m_ranked_points[i];
-
- if (ranked_point.rank == selected_rank)
- {
- turn_operation_type const& op = operation_from_rank(ranked_point);
-
- if (op.visited.finalized())
- {
- // This direction is already traveled before, the same
- // cannot be traveled again
- continue;
- }
-
- // Take turn with the smallest remaining distance
- if (selected_index == sbs.m_ranked_points.size()
- || op.remaining_distance < min_remaining_distance)
- {
- selected_index = i;
- min_remaining_distance = op.remaining_distance;
- }
- }
- }
-
- if (selected_index < sbs.m_ranked_points.size())
- {
- typename sbs_type::rp const& ranked_point = sbs.m_ranked_points[selected_index];
- turn_index = ranked_point.turn_index;
- op_index = ranked_point.operation_index;
- return true;
- }
- }
-
- return false;
- }
-
- inline bool select_turn_from_cluster(signed_size_type& turn_index,
- int& op_index,
- signed_size_type start_turn_index, int start_op_index,
- segment_identifier const& previous_seg_id) const
- {
- bool const is_union = target_operation == operation_union;
-
- turn_type const& turn = m_turns[turn_index];
- BOOST_ASSERT(turn.is_clustered());
-
- typename Clusters::const_iterator mit = m_clusters.find(turn.cluster_id);
- BOOST_ASSERT(mit != m_clusters.end());
-
- cluster_info const& cinfo = mit->second;
- std::set<signed_size_type> const& ids = cinfo.turn_indices;
-
- sbs_type sbs(m_strategy);
-
- for (typename std::set<signed_size_type>::const_iterator sit = ids.begin();
- sit != ids.end(); ++sit)
- {
- signed_size_type cluster_turn_index = *sit;
- turn_type const& cluster_turn = m_turns[cluster_turn_index];
- bool const departure_turn = cluster_turn_index == turn_index;
- if (cluster_turn.discarded)
- {
- // Defensive check, discarded turns should not be in cluster
- continue;
- }
-
- for (int i = 0; i < 2; i++)
- {
- sbs.add(cluster_turn.operations[i],
- cluster_turn_index, i, previous_seg_id,
- m_geometry1, m_geometry2,
- departure_turn);
- }
- }
-
- if (! sbs.has_origin())
- {
- return false;
- }
- sbs.apply(turn.point);
-
- bool result = false;
-
- if (is_union)
- {
- result = select_from_cluster_union(turn_index, op_index, sbs,
- start_turn_index, start_op_index);
- }
- else
- {
- result = analyze_cluster_intersection(turn_index, op_index, sbs);
- }
- return result;
- }
-
- inline bool analyze_ii_intersection(signed_size_type& turn_index, int& op_index,
- turn_type const& current_turn,
- segment_identifier const& previous_seg_id)
- {
- sbs_type sbs(m_strategy);
-
- // Add this turn to the sort-by-side sorter
- for (int i = 0; i < 2; i++)
- {
- sbs.add(current_turn.operations[i],
- turn_index, i, previous_seg_id,
- m_geometry1, m_geometry2,
- true);
- }
-
- if (! sbs.has_origin())
- {
- return false;
- }
-
- sbs.apply(current_turn.point);
-
- bool result = analyze_cluster_intersection(turn_index, op_index, sbs);
-
- return result;
- }
-
- inline void change_index_for_self_turn(signed_size_type& to_vertex_index,
- turn_type const& start_turn,
- turn_operation_type const& start_op,
- int start_op_index) const
- {
- if (OverlayType != overlay_buffer && OverlayType != overlay_dissolve)
- {
- return;
- }
-
- const bool allow_uu = OverlayType != overlay_buffer;
-
- // It travels to itself, can happen. If this is a buffer, it can
- // sometimes travel to itself in the following configuration:
- //
- // +---->--+
- // | |
- // | +---*----+ *: one turn, with segment index 2/7
- // | | | |
- // | +---C | C: closing point (start/end)
- // | |
- // +------------+
- //
- // If it starts on segment 2 and travels to itself on segment 2, that
- // should be corrected to 7 because that is the shortest path
- //
- // Also a uu turn (touching with another buffered ring) might have this
- // apparent configuration, but there it should
- // always travel the whole ring
-
- turn_operation_type const& other_op
- = start_turn.operations[1 - start_op_index];
-
- bool const correct
- = (allow_uu || ! start_turn.both(operation_union))
- && start_op.seg_id.source_index == other_op.seg_id.source_index
- && start_op.seg_id.multi_index == other_op.seg_id.multi_index
- && start_op.seg_id.ring_index == other_op.seg_id.ring_index
- && start_op.seg_id.segment_index == to_vertex_index;
-
-#if defined(BOOST_GEOMETRY_DEBUG_TRAVERSE)
- std::cout << " WARNING: self-buffer "
- << " correct=" << correct
- << " turn=" << operation_char(start_turn.operations[0].operation)
- << operation_char(start_turn.operations[1].operation)
- << " start=" << start_op.seg_id.segment_index
- << " from=" << to_vertex_index
- << " to=" << other_op.enriched.travels_to_vertex_index
- << std::endl;
-#endif
-
- if (correct)
- {
- to_vertex_index = other_op.enriched.travels_to_vertex_index;
- }
- }
-
- bool select_turn_from_enriched(signed_size_type& turn_index,
- segment_identifier& previous_seg_id,
- signed_size_type& to_vertex_index,
- signed_size_type start_turn_index,
- int start_op_index,
- turn_type const& previous_turn,
- turn_operation_type const& previous_op,
- bool is_start) const
- {
- to_vertex_index = -1;
-
- if (previous_op.enriched.next_ip_index < 0)
- {
- // There is no next IP on this segment
- if (previous_op.enriched.travels_to_vertex_index < 0
- || previous_op.enriched.travels_to_ip_index < 0)
- {
- return false;
- }
-
- to_vertex_index = previous_op.enriched.travels_to_vertex_index;
-
- if (is_start &&
- previous_op.enriched.travels_to_ip_index == start_turn_index)
- {
- change_index_for_self_turn(to_vertex_index, previous_turn,
- previous_op, start_op_index);
- }
-
- turn_index = previous_op.enriched.travels_to_ip_index;
- previous_seg_id = previous_op.seg_id;
- }
- else
- {
- // Take the next IP on this segment
- turn_index = previous_op.enriched.next_ip_index;
- previous_seg_id = previous_op.seg_id;
- }
- return true;
- }
-
- bool select_turn(signed_size_type start_turn_index, int start_op_index,
- signed_size_type& turn_index,
- int& op_index,
- int previous_op_index,
- signed_size_type previous_turn_index,
- segment_identifier const& previous_seg_id,
- bool is_start)
- {
- turn_type const& current_turn = m_turns[turn_index];
-
- if (BOOST_GEOMETRY_CONDITION(target_operation == operation_intersection))
- {
- bool const back_at_start_cluster
- = current_turn.is_clustered()
- && m_turns[start_turn_index].cluster_id == current_turn.cluster_id;
-
- if (turn_index == start_turn_index || back_at_start_cluster)
- {
- // Intersection can always be finished if returning
- turn_index = start_turn_index;
- op_index = start_op_index;
- return true;
- }
-
- if (! current_turn.is_clustered()
- && current_turn.both(operation_intersection))
- {
- if (analyze_ii_intersection(turn_index, op_index,
- current_turn, previous_seg_id))
- {
- return true;
- }
- }
- }
-
- if (current_turn.is_clustered())
- {
- if (! select_turn_from_cluster(turn_index, op_index,
- start_turn_index, start_op_index, previous_seg_id))
- {
- return false;
- }
-
- if (is_start && turn_index == previous_turn_index)
- {
- op_index = previous_op_index;
- }
- }
- else
- {
- op_index = starting_operation_index(current_turn);
- if (op_index == -1)
- {
- if (both_finished(current_turn))
- {
- return false;
- }
-
- if (! select_operation(current_turn, turn_index,
- start_turn_index,
- previous_seg_id,
- op_index))
- {
- return false;
- }
- }
- }
- return true;
- }
-
-private :
- Geometry1 const& m_geometry1;
- Geometry2 const& m_geometry2;
- Turns& m_turns;
- Clusters const& m_clusters;
- RobustPolicy const& m_robust_policy;
- SideStrategy m_strategy;
- Visitor& m_visitor;
-};
-
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp
deleted file mode 100644
index 8cabfb0d8db..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal_info.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_INFO_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_INFO_HPP
-
-
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/enrichment_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/visit_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-template <typename Point, typename SegmentRatio>
-struct traversal_turn_operation : public turn_operation<Point, SegmentRatio>
-{
- enrichment_info<Point> enriched;
- visit_info visited;
-};
-
-template <typename Point, typename SegmentRatio>
-struct traversal_turn_info
- : public turn_info
- <
- Point,
- SegmentRatio,
- traversal_turn_operation<Point, SegmentRatio>
- >
-{};
-
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_INFO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp
deleted file mode 100644
index 7f80c8313a0..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp
+++ /dev/null
@@ -1,419 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_RING_CREATOR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_RING_CREATOR_HPP
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/traversal.hpp>
-#include <boost/geometry/algorithms/num_points.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/closure.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-template
-<
- bool Reverse1,
- bool Reverse2,
- overlay_type OverlayType,
- typename Geometry1,
- typename Geometry2,
- typename Turns,
- typename TurnInfoMap,
- typename Clusters,
- typename IntersectionStrategy,
- typename RobustPolicy,
- typename Visitor,
- typename Backtrack
->
-struct traversal_ring_creator
-{
- typedef traversal
- <
- Reverse1, Reverse2, OverlayType,
- Geometry1, Geometry2, Turns, Clusters,
- RobustPolicy, typename IntersectionStrategy::side_strategy_type,
- Visitor
- > traversal_type;
-
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::turn_operation_type turn_operation_type;
-
- static const operation_type target_operation
- = operation_from_overlay<OverlayType>::value;
-
- inline traversal_ring_creator(Geometry1 const& geometry1, Geometry2 const& geometry2,
- Turns& turns, TurnInfoMap& turn_info_map,
- Clusters const& clusters,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy, Visitor& visitor)
- : m_trav(geometry1, geometry2, turns, clusters,
- robust_policy, intersection_strategy.get_side_strategy(),
- visitor)
- , m_geometry1(geometry1)
- , m_geometry2(geometry2)
- , m_turns(turns)
- , m_turn_info_map(turn_info_map)
- , m_clusters(clusters)
- , m_intersection_strategy(intersection_strategy)
- , m_robust_policy(robust_policy)
- , m_visitor(visitor)
- {
- }
-
- template <typename Ring>
- inline traverse_error_type travel_to_next_turn(signed_size_type start_turn_index,
- int start_op_index,
- signed_size_type& turn_index,
- int& op_index,
- Ring& current_ring,
- bool is_start)
- {
- int const previous_op_index = op_index;
- signed_size_type const previous_turn_index = turn_index;
- turn_type& previous_turn = m_turns[turn_index];
- turn_operation_type& previous_op = previous_turn.operations[op_index];
- segment_identifier previous_seg_id;
-
- signed_size_type to_vertex_index = -1;
- if (! m_trav.select_turn_from_enriched(turn_index, previous_seg_id,
- to_vertex_index, start_turn_index, start_op_index,
- previous_turn, previous_op, is_start))
- {
- return is_start
- ? traverse_error_no_next_ip_at_start
- : traverse_error_no_next_ip;
- }
- if (to_vertex_index >= 0)
- {
- if (previous_op.seg_id.source_index == 0)
- {
- geometry::copy_segments<Reverse1>(m_geometry1,
- previous_op.seg_id, to_vertex_index,
- m_intersection_strategy.get_side_strategy(),
- m_robust_policy, current_ring);
- }
- else
- {
- geometry::copy_segments<Reverse2>(m_geometry2,
- previous_op.seg_id, to_vertex_index,
- m_intersection_strategy.get_side_strategy(),
- m_robust_policy, current_ring);
- }
- }
-
- if (m_turns[turn_index].discarded)
- {
- return is_start
- ? traverse_error_dead_end_at_start
- : traverse_error_dead_end;
- }
-
- if (is_start)
- {
- // Register the start
- previous_op.visited.set_started();
- m_visitor.visit_traverse(m_turns, previous_turn, previous_op, "Start");
- }
-
- if (! m_trav.select_turn(start_turn_index, start_op_index,
- turn_index, op_index,
- previous_op_index, previous_turn_index, previous_seg_id,
- is_start))
- {
- return is_start
- ? traverse_error_no_next_ip_at_start
- : traverse_error_no_next_ip;
- }
-
- {
- // Check operation (TODO: this might be redundant or should be catched before)
- const turn_type& current_turn = m_turns[turn_index];
- const turn_operation_type& op = current_turn.operations[op_index];
- if (op.visited.finalized()
- || m_trav.is_visited(current_turn, op, turn_index, op_index))
- {
- return traverse_error_visit_again;
- }
- }
-
- // Update registration and append point
- turn_type& current_turn = m_turns[turn_index];
- turn_operation_type& op = current_turn.operations[op_index];
- detail::overlay::append_no_collinear(current_ring, current_turn.point,
- m_intersection_strategy.get_side_strategy(),
- m_robust_policy);
-
- // Register the visit
- m_trav.set_visited(current_turn, op);
- m_visitor.visit_traverse(m_turns, current_turn, op, "Visit");
-
- return traverse_error_none;
- }
-
- template <typename Ring>
- inline traverse_error_type traverse(Ring& ring,
- signed_size_type start_turn_index, int start_op_index)
- {
- turn_type const& start_turn = m_turns[start_turn_index];
- turn_operation_type& start_op = m_turns[start_turn_index].operations[start_op_index];
-
- detail::overlay::append_no_collinear(ring, start_turn.point,
- m_intersection_strategy.get_side_strategy(),
- m_robust_policy);
-
- signed_size_type current_turn_index = start_turn_index;
- int current_op_index = start_op_index;
-
- traverse_error_type error = travel_to_next_turn(start_turn_index,
- start_op_index,
- current_turn_index, current_op_index,
- ring, true);
-
- if (error != traverse_error_none)
- {
- // This is not necessarily a problem, it happens for clustered turns
- // which are "build in" or otherwise point inwards
- return error;
- }
-
- if (current_turn_index == start_turn_index)
- {
- start_op.visited.set_finished();
- m_visitor.visit_traverse(m_turns, m_turns[current_turn_index], start_op, "Early finish");
- return traverse_error_none;
- }
-
- if (start_turn.is_clustered())
- {
- turn_type const& turn = m_turns[current_turn_index];
- if (turn.cluster_id == start_turn.cluster_id)
- {
- turn_operation_type& op = m_turns[start_turn_index].operations[current_op_index];
- op.visited.set_finished();
- m_visitor.visit_traverse(m_turns, m_turns[current_turn_index], start_op, "Early finish (cluster)");
- return traverse_error_none;
- }
- }
-
- std::size_t const max_iterations = 2 + 2 * m_turns.size();
- for (std::size_t i = 0; i <= max_iterations; i++)
- {
- // We assume clockwise polygons only, non self-intersecting, closed.
- // However, the input might be different, and checking validity
- // is up to the library user.
-
- // Therefore we make here some sanity checks. If the input
- // violates the assumptions, the output polygon will not be correct
- // but the routine will stop and output the current polygon, and
- // will continue with the next one.
-
- // Below three reasons to stop.
- error = travel_to_next_turn(start_turn_index, start_op_index,
- current_turn_index, current_op_index,
- ring, false);
-
- if (error != traverse_error_none)
- {
- return error;
- }
-
- if (current_turn_index == start_turn_index
- && current_op_index == start_op_index)
- {
- start_op.visited.set_finished();
- m_visitor.visit_traverse(m_turns, start_turn, start_op, "Finish");
- return traverse_error_none;
- }
- }
-
- return traverse_error_endless_loop;
- }
-
- template <typename Rings>
- void traverse_with_operation(turn_type const& start_turn,
- std::size_t turn_index, int op_index,
- Rings& rings, std::size_t& finalized_ring_size,
- typename Backtrack::state_type& state)
- {
- typedef typename boost::range_value<Rings>::type ring_type;
-
- turn_operation_type const& start_op = start_turn.operations[op_index];
-
- if (! start_op.visited.none()
- || ! start_op.enriched.startable
- || start_op.visited.rejected()
- || ! (start_op.operation == target_operation
- || start_op.operation == detail::overlay::operation_continue))
- {
- return;
- }
-
- ring_type ring;
- traverse_error_type traverse_error = traverse(ring, turn_index, op_index);
-
- if (traverse_error == traverse_error_none)
- {
- std::size_t const min_num_points
- = core_detail::closure::minimum_ring_size
- <
- geometry::closure<ring_type>::value
- >::value;
-
- if (geometry::num_points(ring) >= min_num_points)
- {
- clean_closing_dups_and_spikes(ring,
- m_intersection_strategy.get_side_strategy(),
- m_robust_policy);
- rings.push_back(ring);
-
- m_trav.finalize_visit_info(m_turn_info_map);
- finalized_ring_size++;
- }
- }
- else
- {
- Backtrack::apply(
- finalized_ring_size,
- rings, ring, m_turns, start_turn,
- m_turns[turn_index].operations[op_index],
- traverse_error,
- m_geometry1, m_geometry2,
- m_intersection_strategy, m_robust_policy,
- state, m_visitor);
- }
- }
-
- template <typename Rings>
- void iterate(Rings& rings, std::size_t& finalized_ring_size,
- typename Backtrack::state_type& state)
- {
- for (std::size_t turn_index = 0; turn_index < m_turns.size(); ++turn_index)
- {
- turn_type const& turn = m_turns[turn_index];
-
- if (turn.discarded || turn.blocked())
- {
- // Skip discarded and blocked turns
- continue;
- }
-
- if (turn.both(operation_continue))
- {
- // Traverse only one turn, the one with the SMALLEST remaining distance
- // to avoid skipping a turn in between, which can happen in rare cases
- // (e.g. #130)
- turn_operation_type const& op0 = turn.operations[0];
- turn_operation_type const& op1 = turn.operations[1];
- int const op_index
- = op0.remaining_distance <= op1.remaining_distance ? 0 : 1;
-
- traverse_with_operation(turn, turn_index, op_index,
- rings, finalized_ring_size, state);
- }
- else
- {
- for (int op_index = 0; op_index < 2; op_index++)
- {
- traverse_with_operation(turn, turn_index, op_index,
- rings, finalized_ring_size, state);
- }
- }
- }
- }
-
- template <typename Rings>
- void iterate_with_preference(std::size_t phase,
- Rings& rings, std::size_t& finalized_ring_size,
- typename Backtrack::state_type& state)
- {
- for (std::size_t turn_index = 0; turn_index < m_turns.size(); ++turn_index)
- {
- turn_type const& turn = m_turns[turn_index];
-
- if (turn.discarded || turn.blocked())
- {
- // Skip discarded and blocked turns
- continue;
- }
-
- turn_operation_type const& op0 = turn.operations[0];
- turn_operation_type const& op1 = turn.operations[1];
-
- if (phase == 0)
- {
- if (! op0.enriched.prefer_start && ! op1.enriched.prefer_start)
- {
- // Not preferred, take next one
- continue;
- }
- }
-
- if (turn.both(operation_continue))
- {
- // Traverse only one turn, the one with the SMALLEST remaining distance
- // to avoid skipping a turn in between, which can happen in rare cases
- // (e.g. #130)
- int const op_index
- = op0.remaining_distance <= op1.remaining_distance ? 0 : 1;
-
- traverse_with_operation(turn, turn_index, op_index,
- rings, finalized_ring_size, state);
- }
- else
- {
- bool const forward = op0.enriched.prefer_start;
-
- int op_index = forward ? 0 : 1;
- int const increment = forward ? 1 : -1;
-
- for (int i = 0; i < 2; i++, op_index += increment)
- {
- traverse_with_operation(turn, turn_index, op_index,
- rings, finalized_ring_size, state);
- }
- }
- }
- }
-
-private:
- traversal_type m_trav;
-
- Geometry1 const& m_geometry1;
- Geometry2 const& m_geometry2;
- Turns& m_turns;
- TurnInfoMap& m_turn_info_map; // contains turn-info information per ring
- Clusters const& m_clusters;
- IntersectionStrategy const& m_intersection_strategy;
- RobustPolicy const& m_robust_policy;
- Visitor& m_visitor;
-};
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_RING_CREATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp
deleted file mode 100644
index 8bdb03df5df..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp
+++ /dev/null
@@ -1,668 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015-2016 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_SWITCH_DETECTOR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_SWITCH_DETECTOR_HPP
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/ring_identifier.hpp>
-#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
-#include <boost/geometry/algorithms/detail/overlay/cluster_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/is_self_turn.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/util/condition.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-// Generic function (is this used somewhere else too?)
-inline ring_identifier ring_id_by_seg_id(segment_identifier const& seg_id)
-{
- return ring_identifier(seg_id.source_index, seg_id.multi_index, seg_id.ring_index);
-}
-
-template
-<
- bool Reverse1,
- bool Reverse2,
- overlay_type OverlayType,
- typename Geometry1,
- typename Geometry2,
- typename Turns,
- typename Clusters,
- typename RobustPolicy,
- typename Visitor
->
-struct traversal_switch_detector
-{
- static const operation_type target_operation
- = operation_from_overlay<OverlayType>::value;
- static const operation_type opposite_operation
- = target_operation == operation_union
- ? operation_intersection
- : operation_union;
-
- enum isolation_type
- {
- isolation_unknown = -1,
- isolation_no = 0,
- isolation_yes = 1,
- isolation_multiple = 2
- };
-
- typedef typename boost::range_value<Turns>::type turn_type;
- typedef typename turn_type::turn_operation_type turn_operation_type;
- typedef std::set<signed_size_type> set_type;
-
- // Per ring, first turns are collected (in turn_indices), and later
- // a region_id is assigned
- struct merged_ring_properties
- {
- signed_size_type region_id;
- set_type turn_indices;
-
- merged_ring_properties()
- : region_id(-1)
- {}
- };
-
- struct connection_properties
- {
- std::size_t count;
- // Contains turn-index OR, if clustered, minus-cluster_id
- set_type unique_turn_ids;
- connection_properties()
- : count(0)
- {}
- };
-
- typedef std::map<signed_size_type, connection_properties> connection_map;
-
- // Per region, a set of properties is maintained, including its connections
- // to other regions
- struct region_properties
- {
- signed_size_type region_id;
- isolation_type isolated;
- set_type unique_turn_ids;
-
- // Maps from connected region_id to their properties
- connection_map connected_region_counts;
-
- region_properties()
- : region_id(-1)
- , isolated(isolation_unknown)
- {}
- };
-
- // Keeps turn indices per ring
- typedef std::map<ring_identifier, merged_ring_properties > merge_map;
- typedef std::map<signed_size_type, region_properties> region_connection_map;
-
- typedef set_type::const_iterator set_iterator;
-
- inline traversal_switch_detector(Geometry1 const& geometry1, Geometry2 const& geometry2,
- Turns& turns, Clusters& clusters,
- RobustPolicy const& robust_policy, Visitor& visitor)
- : m_geometry1(geometry1)
- , m_geometry2(geometry2)
- , m_turns(turns)
- , m_clusters(clusters)
- , m_robust_policy(robust_policy)
- , m_visitor(visitor)
- {
- }
-
- bool one_connection_to_another_region(region_properties const& region) const
- {
- // For example:
- // +----------------------+
- // | __ |
- // | / \|
- // | | x
- // | \__/|
- // | |
- // +----------------------+
-
- if (region.connected_region_counts.size() == 1)
- {
- connection_properties const& cprop = region.connected_region_counts.begin()->second;
- return cprop.count <= 1;
- }
- return region.connected_region_counts.empty();
- }
-
- // TODO: might be combined with previous
- bool multiple_connections_to_one_region(region_properties const& region) const
- {
- // For example:
- // +----------------------+
- // | __ |
- // | / \|
- // | | x
- // | \ /|
- // | / \|
- // | | x
- // | \__/|
- // | |
- // +----------------------+
-
- if (region.connected_region_counts.size() == 1)
- {
- connection_properties const& cprop = region.connected_region_counts.begin()->second;
- return cprop.count > 1;
- }
- return false;
- }
-
- bool one_connection_to_multiple_regions(region_properties const& region) const
- {
- // For example:
- // +----------------------+
- // | __ | __
- // | / \|/ |
- // | | x |
- // | \__/|\__|
- // | |
- // +----------------------+
-
- bool first = true;
- signed_size_type first_turn_id = 0;
- for (typename connection_map::const_iterator it = region.connected_region_counts.begin();
- it != region.connected_region_counts.end(); ++it)
- {
- connection_properties const& cprop = it->second;
-
- if (cprop.count != 1)
- {
- return false;
- }
- signed_size_type const unique_turn_id = *cprop.unique_turn_ids.begin();
- if (first)
- {
- first_turn_id = unique_turn_id;
- first = false;
- }
- else if (first_turn_id != unique_turn_id)
- {
- return false;
- }
- }
- return true;
- }
-
- bool ii_turn_connects_two_regions(region_properties const& region,
- region_properties const& connected_region,
- signed_size_type turn_index) const
- {
- turn_type const& turn = m_turns[turn_index];
- if (! turn.both(operation_intersection))
- {
- return false;
- }
-
- signed_size_type const id0 = turn.operations[0].enriched.region_id;
- signed_size_type const id1 = turn.operations[1].enriched.region_id;
-
- return (id0 == region.region_id && id1 == connected_region.region_id)
- || (id1 == region.region_id && id0 == connected_region.region_id);
- }
-
-
- bool isolated_multiple_connection(region_properties const& region,
- region_properties const& connected_region) const
- {
- if (connected_region.isolated != isolation_multiple)
- {
- return false;
- }
-
- // First step: compare turns of regions with turns of connected region
- set_type turn_ids = region.unique_turn_ids;
- for (set_iterator sit = connected_region.unique_turn_ids.begin();
- sit != connected_region.unique_turn_ids.end(); ++sit)
- {
- turn_ids.erase(*sit);
- }
-
- // There should be one connection (turn or cluster) left
- if (turn_ids.size() != 1)
- {
- return false;
- }
-
- for (set_iterator sit = connected_region.unique_turn_ids.begin();
- sit != connected_region.unique_turn_ids.end(); ++sit)
- {
- signed_size_type const id_or_index = *sit;
- if (id_or_index >= 0)
- {
- if (! ii_turn_connects_two_regions(region, connected_region, id_or_index))
- {
- return false;
- }
- }
- else
- {
- signed_size_type const cluster_id = -id_or_index;
- typename Clusters::const_iterator it = m_clusters.find(cluster_id);
- if (it != m_clusters.end())
- {
- cluster_info const& cinfo = it->second;
- for (set_iterator cit = cinfo.turn_indices.begin();
- cit != cinfo.turn_indices.end(); ++cit)
- {
- if (! ii_turn_connects_two_regions(region, connected_region, *cit))
- {
- return false;
- }
- }
- }
- }
- }
-
- return true;
- }
-
- bool has_only_isolated_children(region_properties const& region) const
- {
- bool first_with_turn = true;
- signed_size_type first_turn_id = 0;
-
- for (typename connection_map::const_iterator it = region.connected_region_counts.begin();
- it != region.connected_region_counts.end(); ++it)
- {
- signed_size_type const region_id = it->first;
- connection_properties const& cprop = it->second;
-
- typename region_connection_map::const_iterator mit = m_connected_regions.find(region_id);
- if (mit == m_connected_regions.end())
- {
- // Should not occur
- return false;
- }
-
- region_properties const& connected_region = mit->second;
-
- if (cprop.count != 1)
- {
- // If there are more connections, check their isolation
- if (! isolated_multiple_connection(region, connected_region))
- {
- return false;
- }
- }
-
- if (connected_region.isolated != isolation_yes
- && connected_region.isolated != isolation_multiple)
- {
- signed_size_type const unique_turn_id = *cprop.unique_turn_ids.begin();
- if (first_with_turn)
- {
- first_turn_id = unique_turn_id;
- first_with_turn = false;
- }
- else if (first_turn_id != unique_turn_id)
- {
- return false;
- }
- }
- }
-
- // If there is only one connection (with a 'parent'), and all other
- // connections are itself isolated, it is isolated
- return true;
- }
-
- void get_isolated_regions()
- {
- typedef typename region_connection_map::iterator it_type;
-
- // First time: check regions isolated (one connection only),
- // semi-isolated (multiple connections between same region),
- // and complex isolated (connection with multiple rings but all
- // at same point)
- for (it_type it = m_connected_regions.begin();
- it != m_connected_regions.end(); ++it)
- {
- region_properties& properties = it->second;
- if (one_connection_to_another_region(properties))
- {
- properties.isolated = isolation_yes;
- }
- else if (multiple_connections_to_one_region(properties))
- {
- properties.isolated = isolation_multiple;
- }
- else if (one_connection_to_multiple_regions(properties))
- {
- properties.isolated = isolation_yes;
- }
- }
-
- // Propagate isolation to next level
- // TODO: should be optimized
- std::size_t defensive_check = 0;
- bool changed = true;
- while (changed && defensive_check++ < m_connected_regions.size())
- {
- changed = false;
- for (it_type it = m_connected_regions.begin();
- it != m_connected_regions.end(); ++it)
- {
- region_properties& properties = it->second;
-
- if (properties.isolated == isolation_unknown
- && has_only_isolated_children(properties))
- {
- properties.isolated = isolation_yes;
- changed = true;
- }
- }
- }
- }
-
- void assign_isolation()
- {
- for (std::size_t turn_index = 0; turn_index < m_turns.size(); ++turn_index)
- {
- turn_type& turn = m_turns[turn_index];
-
- for (int op_index = 0; op_index < 2; op_index++)
- {
- turn_operation_type& op = turn.operations[op_index];
- typename region_connection_map::const_iterator mit = m_connected_regions.find(op.enriched.region_id);
- if (mit != m_connected_regions.end())
- {
- region_properties const& prop = mit->second;
- op.enriched.isolated = prop.isolated == isolation_yes;
- }
- }
- }
- }
-
- void assign_region_ids()
- {
- for (typename merge_map::const_iterator it
- = m_turns_per_ring.begin(); it != m_turns_per_ring.end(); ++it)
- {
- ring_identifier const& ring_id = it->first;
- merged_ring_properties const& properties = it->second;
-
- for (set_iterator sit = properties.turn_indices.begin();
- sit != properties.turn_indices.end(); ++sit)
- {
- turn_type& turn = m_turns[*sit];
-
- if (! acceptable(turn))
- {
- // No assignment necessary
- continue;
- }
-
- for (int i = 0; i < 2; i++)
- {
- turn_operation_type& op = turn.operations[i];
- if (ring_id_by_seg_id(op.seg_id) == ring_id)
- {
- op.enriched.region_id = properties.region_id;
- }
- }
- }
- }
- }
-
- void assign_connected_regions()
- {
- for (std::size_t turn_index = 0; turn_index < m_turns.size(); ++turn_index)
- {
- turn_type const& turn = m_turns[turn_index];
-
- signed_size_type const unique_turn_id
- = turn.is_clustered() ? -turn.cluster_id : turn_index;
-
- turn_operation_type op0 = turn.operations[0];
- turn_operation_type op1 = turn.operations[1];
-
- signed_size_type const& id0 = op0.enriched.region_id;
- signed_size_type const& id1 = op1.enriched.region_id;
-
- // Add region (by assigning) and add involved turns
- if (id0 != -1)
- {
- m_connected_regions[id0].region_id = id0;
- m_connected_regions[id0].unique_turn_ids.insert(unique_turn_id);
- }
- if (id1 != -1 && id0 != id1)
- {
- m_connected_regions[id1].region_id = id1;
- m_connected_regions[id1].unique_turn_ids.insert(unique_turn_id);
- }
-
- if (id0 != id1 && id0 != -1 && id1 != -1)
- {
- // Assign connections
- connection_properties& prop0 = m_connected_regions[id0].connected_region_counts[id1];
- connection_properties& prop1 = m_connected_regions[id1].connected_region_counts[id0];
-
- // Reference this turn or cluster to later check uniqueness on ring
- if (prop0.unique_turn_ids.count(unique_turn_id) == 0)
- {
- prop0.count++;
- prop0.unique_turn_ids.insert(unique_turn_id);
- }
- if (prop1.unique_turn_ids.count(unique_turn_id) == 0)
- {
- prop1.count++;
- prop1.unique_turn_ids.insert(unique_turn_id);
- }
- }
- }
- }
-
- inline bool acceptable(turn_type const& turn) const
- {
- // Discarded turns don't connect rings to the same region
- // Also xx are not relevant
- // (otherwise discarded colocated uu turn could make a connection)
- return ! turn.discarded
- && ! turn.both(operation_blocked);
- }
-
- inline bool connects_same_region(turn_type const& turn) const
- {
- if (! acceptable(turn))
- {
- return false;
- }
-
- if (! turn.is_clustered())
- {
- // If it is a uu/ii-turn (non clustered), it is never same region
- return ! (turn.both(operation_union) || turn.both(operation_intersection));
- }
-
- if (BOOST_GEOMETRY_CONDITION(target_operation == operation_union))
- {
- // It is a cluster, check zones
- // (assigned by sort_by_side/handle colocations) of both operations
- return turn.operations[0].enriched.zone
- == turn.operations[1].enriched.zone;
- }
-
- // For an intersection, two regions connect if they are not ii
- // (ii-regions are isolated) or, in some cases, not iu (for example
- // when a multi-polygon is inside an interior ring and connecting it)
- return ! (turn.both(operation_intersection)
- || turn.combination(operation_intersection, operation_union));
- }
-
-
- inline signed_size_type get_region_id(turn_operation_type const& op) const
- {
- return op.enriched.region_id;
- }
-
-
- void create_region(signed_size_type& new_region_id, ring_identifier const& ring_id,
- merged_ring_properties& properties, signed_size_type region_id = -1)
- {
- if (properties.region_id > 0)
- {
- // Already handled
- return;
- }
-
- // Assign new id if this is a new region
- if (region_id == -1)
- {
- region_id = new_region_id++;
- }
-
- // Assign this ring to specified region
- properties.region_id = region_id;
-
-#if defined(BOOST_GEOMETRY_DEBUG_TRAVERSAL_SWITCH_DETECTOR)
- std::cout << " ADD " << ring_id << " TO REGION " << region_id << std::endl;
-#endif
-
- // Find connecting rings, recursively
- for (set_iterator sit = properties.turn_indices.begin();
- sit != properties.turn_indices.end(); ++sit)
- {
- signed_size_type const turn_index = *sit;
- turn_type const& turn = m_turns[turn_index];
- if (! connects_same_region(turn))
- {
- // This is a non clustered uu/ii-turn, or a cluster connecting different 'zones'
- continue;
- }
-
- // Union: This turn connects two rings (interior connected), create the region
- // Intersection: This turn connects two rings, set same regions for these two rings
- for (int op_index = 0; op_index < 2; op_index++)
- {
- turn_operation_type const& op = turn.operations[op_index];
- ring_identifier connected_ring_id = ring_id_by_seg_id(op.seg_id);
- if (connected_ring_id != ring_id)
- {
- propagate_region(new_region_id, connected_ring_id, region_id);
- }
- }
- }
- }
-
- void propagate_region(signed_size_type& new_region_id,
- ring_identifier const& ring_id, signed_size_type region_id)
- {
- typename merge_map::iterator it = m_turns_per_ring.find(ring_id);
- if (it != m_turns_per_ring.end())
- {
- create_region(new_region_id, ring_id, it->second, region_id);
- }
- }
-
-
- void iterate()
- {
-#if defined(BOOST_GEOMETRY_DEBUG_TRAVERSAL_SWITCH_DETECTOR)
- std::cout << "BEGIN ITERATION GETTING REGION_IDS" << std::endl;
-#endif
-
- // Collect turns per ring
- m_turns_per_ring.clear();
- m_connected_regions.clear();
-
- for (std::size_t turn_index = 0; turn_index < m_turns.size(); ++turn_index)
- {
- turn_type const& turn = m_turns[turn_index];
-
- if (turn.discarded
- && BOOST_GEOMETRY_CONDITION(target_operation == operation_intersection))
- {
- // Discarded turn (union currently still needs it to determine regions)
- continue;
- }
-
- for (int op_index = 0; op_index < 2; op_index++)
- {
- turn_operation_type const& op = turn.operations[op_index];
- m_turns_per_ring[ring_id_by_seg_id(op.seg_id)].turn_indices.insert(turn_index);
- }
- }
-
- // All rings having turns are in turns/ring map. Process them.
- {
- signed_size_type new_region_id = 1;
- for (typename merge_map::iterator it
- = m_turns_per_ring.begin(); it != m_turns_per_ring.end(); ++it)
- {
- create_region(new_region_id, it->first, it->second);
- }
-
- assign_region_ids();
- assign_connected_regions();
- get_isolated_regions();
- assign_isolation();
- }
-
-#if defined(BOOST_GEOMETRY_DEBUG_TRAVERSAL_SWITCH_DETECTOR)
- std::cout << "END ITERATION GETTIN REGION_IDS" << std::endl;
-
- for (std::size_t turn_index = 0; turn_index < m_turns.size(); ++turn_index)
- {
- turn_type const& turn = m_turns[turn_index];
-
- if ((turn.both(operation_union) || turn.both(operation_intersection))
- && ! turn.is_clustered())
- {
- std::cout << "UU/II RESULT "
- << turn_index << " -> "
- << turn.operations[0].enriched.region_id
- << " " << turn.operations[1].enriched.region_id
- << std::endl;
- }
- }
-
- for (typename Clusters::const_iterator it = m_clusters.begin(); it != m_clusters.end(); ++it)
- {
- cluster_info const& cinfo = it->second;
- std::cout << "CL RESULT " << it->first
- << " -> " << cinfo.open_count << std::endl;
- }
-#endif
-
- }
-
-private:
-
- Geometry1 const& m_geometry1;
- Geometry2 const& m_geometry2;
- Turns& m_turns;
- Clusters& m_clusters;
- merge_map m_turns_per_ring;
- region_connection_map m_connected_regions;
- RobustPolicy const& m_robust_policy;
- Visitor& m_visitor;
-};
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSAL_SWITCH_DETECTOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp
deleted file mode 100644
index b9cbea3127c..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/traverse.hpp
+++ /dev/null
@@ -1,114 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSE_HPP
-
-#include <cstddef>
-
-#include <boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp>
-#include <boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp>
-#include <boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-/*!
- \brief Traverses through intersection points / geometries
- \ingroup overlay
- */
-template
-<
- bool Reverse1, bool Reverse2,
- typename Geometry1,
- typename Geometry2,
- overlay_type OverlayType,
- typename Backtrack = backtrack_check_self_intersections<Geometry1, Geometry2>
->
-class traverse
-{
-
- template <typename Turns>
- static void reset_visits(Turns& turns)
- {
- for (typename boost::range_iterator<Turns>::type
- it = boost::begin(turns);
- it != boost::end(turns);
- ++it)
- {
- for (int i = 0; i < 2; i++)
- {
- it->operations[i].visited.reset();
- }
- }
- }
-
-
-public :
- template
- <
- typename IntersectionStrategy,
- typename RobustPolicy,
- typename Turns,
- typename Rings,
- typename TurnInfoMap,
- typename Clusters,
- typename Visitor
- >
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy,
- Turns& turns, Rings& rings,
- TurnInfoMap& turn_info_map,
- Clusters& clusters,
- Visitor& visitor)
- {
- traversal_switch_detector
- <
- Reverse1, Reverse2, OverlayType,
- Geometry1, Geometry2,
- Turns, Clusters,
- RobustPolicy, Visitor
- > switch_detector(geometry1, geometry2, turns, clusters,
- robust_policy, visitor);
-
- switch_detector.iterate();
- reset_visits(turns);
-
- traversal_ring_creator
- <
- Reverse1, Reverse2, OverlayType,
- Geometry1, Geometry2,
- Turns, TurnInfoMap, Clusters,
- IntersectionStrategy,
- RobustPolicy, Visitor,
- Backtrack
- > trav(geometry1, geometry2, turns, turn_info_map, clusters,
- intersection_strategy, robust_policy, visitor);
-
- std::size_t finalized_ring_size = boost::size(rings);
-
- typename Backtrack::state_type state;
-
- trav.iterate(rings, finalized_ring_size, state);
- }
-};
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TRAVERSE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp
deleted file mode 100644
index 545b5e902c2..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/turn_info.hpp
+++ /dev/null
@@ -1,159 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TURN_INFO_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TURN_INFO_HPP
-
-
-#include <boost/array.hpp>
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-#include <boost/geometry/algorithms/detail/overlay/segment_identifier.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay_type.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-enum method_type
-{
- method_none,
- method_disjoint,
- method_crosses,
- method_touch,
- method_touch_interior,
- method_collinear,
- method_equal,
- method_error
-};
-
-
-/*!
- \brief Turn operation: operation
- \details Information necessary for traversal phase (a phase
- of the overlay process). The information is gathered during the
- get_turns (segment intersection) phase.
- The class is to be included in the turn_info class, either direct
- or a derived or similar class with more (e.g. enrichment) information.
- */
-template <typename Point, typename SegmentRatio>
-struct turn_operation
-{
- typedef SegmentRatio segment_ratio_type;
-
- operation_type operation;
- segment_identifier seg_id;
- SegmentRatio fraction;
-
- typedef typename coordinate_type<Point>::type comparable_distance_type;
- comparable_distance_type remaining_distance;
-
- inline turn_operation()
- : operation(operation_none)
- , remaining_distance(0)
- {}
-};
-
-
-/*!
- \brief Turn information: intersection point, method, and turn information
- \details Information necessary for traversal phase (a phase
- of the overlay process). The information is gathered during the
- get_turns (segment intersection) phase.
- \tparam Point point type of intersection point
- \tparam Operation gives classes opportunity to add additional info
- \tparam Container gives classes opportunity to define how operations are stored
- */
-template
-<
- typename Point,
- typename SegmentRatio,
- typename Operation = turn_operation<Point, SegmentRatio>,
- typename Container = boost::array<Operation, 2>
->
-struct turn_info
-{
- typedef Point point_type;
- typedef SegmentRatio segment_ratio_type;
- typedef Operation turn_operation_type;
- typedef Container container_type;
-
- Point point;
- method_type method;
- bool touch_only; // True in case of method touch(interior) and lines do not cross
- signed_size_type cluster_id; // For multiple turns on same location, > 0. Else -1. 0 is unused.
- bool discarded;
-
- bool has_colocated_both; // Colocated with a uu turn (for union) or ii (other)
-
- Container operations;
-
- inline turn_info()
- : method(method_none)
- , touch_only(false)
- , cluster_id(-1)
- , discarded(false)
- , has_colocated_both(false)
- {}
-
- inline bool both(operation_type type) const
- {
- return has12(type, type);
- }
-
- inline bool has(operation_type type) const
- {
- return this->operations[0].operation == type
- || this->operations[1].operation == type;
- }
-
- inline bool combination(operation_type type1, operation_type type2) const
- {
- return has12(type1, type2) || has12(type2, type1);
- }
-
- inline bool blocked() const
- {
- return both(operation_blocked);
- }
- inline bool opposite() const
- {
- return both(operation_opposite);
- }
- inline bool any_blocked() const
- {
- return has(operation_blocked);
- }
- inline bool is_clustered() const
- {
- return cluster_id > 0;
- }
-
-private :
- inline bool has12(operation_type type1, operation_type type2) const
- {
- return this->operations[0].operation == type1
- && this->operations[1].operation == type2
- ;
- }
-
-};
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_TURN_INFO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp
deleted file mode 100644
index e401fbbb497..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/overlay/visit_info.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_VISIT_INFO_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_VISIT_INFO_HPP
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-class visit_info
-{
-private :
- static const int NONE = 0;
- static const int STARTED = 1;
- static const int VISITED = 2;
- static const int FINISHED = 3;
- static const int REJECTED = 4;
-
- int m_visit_code;
- bool m_rejected;
- bool m_final;
-
-public:
- inline visit_info()
- : m_visit_code(0)
- , m_rejected(false)
- , m_final(false)
- {}
-
- inline void set_visited() { m_visit_code = VISITED; }
- inline void set_started() { m_visit_code = STARTED; }
- inline void set_finished() { m_visit_code = FINISHED; }
- inline void set_rejected()
- {
- m_visit_code = REJECTED;
- m_rejected = true;
- }
-
- inline bool none() const { return m_visit_code == NONE; }
- inline bool visited() const { return m_visit_code == VISITED; }
- inline bool started() const { return m_visit_code == STARTED; }
- inline bool finished() const { return m_visit_code == FINISHED; }
- inline bool rejected() const { return m_rejected; }
- inline bool finalized() const { return m_final; }
-
- inline void clear()
- {
- if (! m_rejected && ! m_final)
- {
- m_visit_code = NONE;
- }
- }
-
- inline void reset()
- {
- *this = visit_info();
- }
-
- inline void finalize()
- {
- if (visited() || started() || finished() )
- {
- m_final = true;
- }
- }
-
-#ifdef BOOST_GEOMETRY_DEBUG_INTERSECTION
- friend std::ostream& operator<<(std::ostream &os, visit_info const& v)
- {
- if (v.m_visit_code != 0)
- {
- os << " VIS: " << int(v.m_visit_code);
- }
- return os;
- }
-#endif
-
-};
-
-
-}} // namespace detail::overlay
-#endif //DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_VISIT_INFO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/partition.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/partition.hpp
deleted file mode 100644
index 7c60203283b..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/partition.hpp
+++ /dev/null
@@ -1,852 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2011-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2015, 2017.
-// Modifications copyright (c) 2015-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-#ifdef __GNUC__
-#pragma GCC system_header
-#endif
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_PARTITION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_PARTITION_HPP
-
-#include <cstddef>
-#include <vector>
-#include <boost/range.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/algorithms/assign.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace partition
-{
-
-template <int Dimension, typename Box>
-inline void divide_box(Box const& box, Box& lower_box, Box& upper_box)
-{
- typedef typename coordinate_type<Box>::type ctype;
-
- // Divide input box into two parts, e.g. left/right
- ctype two = 2;
- ctype mid = (geometry::get<min_corner, Dimension>(box)
- + geometry::get<max_corner, Dimension>(box)) / two;
-
- lower_box = box;
- upper_box = box;
- geometry::set<max_corner, Dimension>(lower_box, mid);
- geometry::set<min_corner, Dimension>(upper_box, mid);
-}
-
-// Divide forward_range into three subsets: lower, upper and oversized
-// (not-fitting)
-// (lower == left or bottom, upper == right or top)
-template <typename Box, typename IteratorVector, typename OverlapsPolicy>
-inline void divide_into_subsets(Box const& lower_box,
- Box const& upper_box,
- IteratorVector const& input,
- IteratorVector& lower,
- IteratorVector& upper,
- IteratorVector& exceeding,
- OverlapsPolicy const& overlaps_policy)
-{
- typedef typename boost::range_iterator
- <
- IteratorVector const
- >::type it_type;
-
- for(it_type it = boost::begin(input); it != boost::end(input); ++it)
- {
- bool const lower_overlapping = overlaps_policy.apply(lower_box, **it);
- bool const upper_overlapping = overlaps_policy.apply(upper_box, **it);
-
- if (lower_overlapping && upper_overlapping)
- {
- exceeding.push_back(*it);
- }
- else if (lower_overlapping)
- {
- lower.push_back(*it);
- }
- else if (upper_overlapping)
- {
- upper.push_back(*it);
- }
- else
- {
- // Is nowhere. That is (since 1.58) possible, it might be
- // skipped by the OverlapsPolicy to enhance performance
- }
- }
-}
-
-template
-<
- typename Box,
- typename IteratorVector,
- typename ExpandPolicy
->
-inline void expand_with_elements(Box& total, IteratorVector const& input,
- ExpandPolicy const& expand_policy)
-{
- typedef typename boost::range_iterator<IteratorVector const>::type it_type;
- for(it_type it = boost::begin(input); it != boost::end(input); ++it)
- {
- expand_policy.apply(total, **it);
- }
-}
-
-
-// Match forward_range with itself
-template <typename IteratorVector, typename VisitPolicy>
-inline bool handle_one(IteratorVector const& input, VisitPolicy& visitor)
-{
- if (boost::empty(input))
- {
- return true;
- }
-
- typedef typename boost::range_iterator<IteratorVector const>::type it_type;
-
- // Quadratic behaviour at lowest level (lowest quad, or all exceeding)
- for (it_type it1 = boost::begin(input); it1 != boost::end(input); ++it1)
- {
- it_type it2 = it1;
- for (++it2; it2 != boost::end(input); ++it2)
- {
- if (! visitor.apply(**it1, **it2))
- {
- return false; // interrupt
- }
- }
- }
-
- return true;
-}
-
-// Match forward range 1 with forward range 2
-template
-<
- typename IteratorVector1,
- typename IteratorVector2,
- typename VisitPolicy
->
-inline bool handle_two(IteratorVector1 const& input1,
- IteratorVector2 const& input2,
- VisitPolicy& visitor)
-{
- typedef typename boost::range_iterator
- <
- IteratorVector1 const
- >::type iterator_type1;
-
- typedef typename boost::range_iterator
- <
- IteratorVector2 const
- >::type iterator_type2;
-
- if (boost::empty(input1) || boost::empty(input2))
- {
- return true;
- }
-
- for(iterator_type1 it1 = boost::begin(input1);
- it1 != boost::end(input1);
- ++it1)
- {
- for(iterator_type2 it2 = boost::begin(input2);
- it2 != boost::end(input2);
- ++it2)
- {
- if (! visitor.apply(**it1, **it2))
- {
- return false; // interrupt
- }
- }
- }
-
- return true;
-}
-
-template <typename IteratorVector>
-inline bool recurse_ok(IteratorVector const& input,
- std::size_t min_elements, std::size_t level)
-{
- return boost::size(input) >= min_elements
- && level < 100;
-}
-
-template <typename IteratorVector1, typename IteratorVector2>
-inline bool recurse_ok(IteratorVector1 const& input1,
- IteratorVector2 const& input2,
- std::size_t min_elements, std::size_t level)
-{
- return boost::size(input1) >= min_elements
- && recurse_ok(input2, min_elements, level);
-}
-
-template
-<
- typename IteratorVector1,
- typename IteratorVector2,
- typename IteratorVector3
->
-inline bool recurse_ok(IteratorVector1 const& input1,
- IteratorVector2 const& input2,
- IteratorVector3 const& input3,
- std::size_t min_elements, std::size_t level)
-{
- return boost::size(input1) >= min_elements
- && recurse_ok(input2, input3, min_elements, level);
-}
-
-
-template <int Dimension, typename Box>
-class partition_two_ranges;
-
-
-template <int Dimension, typename Box>
-class partition_one_range
-{
- template <typename IteratorVector, typename ExpandPolicy>
- static inline Box get_new_box(IteratorVector const& input,
- ExpandPolicy const& expand_policy)
- {
- Box box;
- geometry::assign_inverse(box);
- expand_with_elements(box, input, expand_policy);
- return box;
- }
-
- template
- <
- typename IteratorVector,
- typename VisitPolicy,
- typename ExpandPolicy,
- typename OverlapsPolicy,
- typename VisitBoxPolicy
- >
- static inline bool next_level(Box const& box,
- IteratorVector const& input,
- std::size_t level, std::size_t min_elements,
- VisitPolicy& visitor,
- ExpandPolicy const& expand_policy,
- OverlapsPolicy const& overlaps_policy,
- VisitBoxPolicy& box_policy)
- {
- if (recurse_ok(input, min_elements, level))
- {
- return partition_one_range
- <
- 1 - Dimension,
- Box
- >::apply(box, input, level + 1, min_elements,
- visitor, expand_policy, overlaps_policy, box_policy);
- }
- else
- {
- return handle_one(input, visitor);
- }
- }
-
- // Function to switch to two forward ranges if there are
- // geometries exceeding the separation line
- template
- <
- typename IteratorVector,
- typename VisitPolicy,
- typename ExpandPolicy,
- typename OverlapsPolicy,
- typename VisitBoxPolicy
- >
- static inline bool next_level2(Box const& box,
- IteratorVector const& input1,
- IteratorVector const& input2,
- std::size_t level, std::size_t min_elements,
- VisitPolicy& visitor,
- ExpandPolicy const& expand_policy,
- OverlapsPolicy const& overlaps_policy,
- VisitBoxPolicy& box_policy)
- {
- if (recurse_ok(input1, input2, min_elements, level))
- {
- return partition_two_ranges
- <
- 1 - Dimension, Box
- >::apply(box, input1, input2, level + 1, min_elements,
- visitor, expand_policy, overlaps_policy,
- expand_policy, overlaps_policy, box_policy);
- }
- else
- {
- return handle_two(input1, input2, visitor);
- }
- }
-
-public :
- template
- <
- typename IteratorVector,
- typename VisitPolicy,
- typename ExpandPolicy,
- typename OverlapsPolicy,
- typename VisitBoxPolicy
- >
- static inline bool apply(Box const& box,
- IteratorVector const& input,
- std::size_t level,
- std::size_t min_elements,
- VisitPolicy& visitor,
- ExpandPolicy const& expand_policy,
- OverlapsPolicy const& overlaps_policy,
- VisitBoxPolicy& box_policy)
- {
- box_policy.apply(box, level);
-
- Box lower_box, upper_box;
- divide_box<Dimension>(box, lower_box, upper_box);
-
- IteratorVector lower, upper, exceeding;
- divide_into_subsets(lower_box, upper_box,
- input, lower, upper, exceeding,
- overlaps_policy);
-
- if (! boost::empty(exceeding))
- {
- // Get the box of exceeding-only
- Box exceeding_box = get_new_box(exceeding, expand_policy);
-
- // Recursively do exceeding elements only, in next dimension they
- // will probably be less exceeding within the new box
- if (! (next_level(exceeding_box, exceeding, level, min_elements,
- visitor, expand_policy, overlaps_policy, box_policy)
- // Switch to two forward ranges, combine exceeding with
- // lower resp upper, but not lower/lower, upper/upper
- && next_level2(exceeding_box, exceeding, lower, level, min_elements,
- visitor, expand_policy, overlaps_policy, box_policy)
- && next_level2(exceeding_box, exceeding, upper, level, min_elements,
- visitor, expand_policy, overlaps_policy, box_policy)) )
- {
- return false; // interrupt
- }
- }
-
- // Recursively call operation both parts
- return next_level(lower_box, lower, level, min_elements,
- visitor, expand_policy, overlaps_policy, box_policy)
- && next_level(upper_box, upper, level, min_elements,
- visitor, expand_policy, overlaps_policy, box_policy);
- }
-};
-
-template
-<
- int Dimension,
- typename Box
->
-class partition_two_ranges
-{
- template
- <
- typename IteratorVector1,
- typename IteratorVector2,
- typename VisitPolicy,
- typename ExpandPolicy1,
- typename OverlapsPolicy1,
- typename ExpandPolicy2,
- typename OverlapsPolicy2,
- typename VisitBoxPolicy
- >
- static inline bool next_level(Box const& box,
- IteratorVector1 const& input1,
- IteratorVector2 const& input2,
- std::size_t level, std::size_t min_elements,
- VisitPolicy& visitor,
- ExpandPolicy1 const& expand_policy1,
- OverlapsPolicy1 const& overlaps_policy1,
- ExpandPolicy2 const& expand_policy2,
- OverlapsPolicy2 const& overlaps_policy2,
- VisitBoxPolicy& box_policy)
- {
- return partition_two_ranges
- <
- 1 - Dimension, Box
- >::apply(box, input1, input2, level + 1, min_elements,
- visitor, expand_policy1, overlaps_policy1,
- expand_policy2, overlaps_policy2, box_policy);
- }
-
- template <typename IteratorVector, typename ExpandPolicy>
- static inline Box get_new_box(IteratorVector const& input,
- ExpandPolicy const& expand_policy)
- {
- Box box;
- geometry::assign_inverse(box);
- expand_with_elements(box, input, expand_policy);
- return box;
- }
-
- template
- <
- typename IteratorVector1, typename IteratorVector2,
- typename ExpandPolicy1, typename ExpandPolicy2
- >
- static inline Box get_new_box(IteratorVector1 const& input1,
- IteratorVector2 const& input2,
- ExpandPolicy1 const& expand_policy1,
- ExpandPolicy2 const& expand_policy2)
- {
- Box box = get_new_box(input1, expand_policy1);
- expand_with_elements(box, input2, expand_policy2);
- return box;
- }
-
-public :
- template
- <
- typename IteratorVector1,
- typename IteratorVector2,
- typename VisitPolicy,
- typename ExpandPolicy1,
- typename OverlapsPolicy1,
- typename ExpandPolicy2,
- typename OverlapsPolicy2,
- typename VisitBoxPolicy
- >
- static inline bool apply(Box const& box,
- IteratorVector1 const& input1,
- IteratorVector2 const& input2,
- std::size_t level,
- std::size_t min_elements,
- VisitPolicy& visitor,
- ExpandPolicy1 const& expand_policy1,
- OverlapsPolicy1 const& overlaps_policy1,
- ExpandPolicy2 const& expand_policy2,
- OverlapsPolicy2 const& overlaps_policy2,
- VisitBoxPolicy& box_policy)
- {
- box_policy.apply(box, level);
-
- Box lower_box, upper_box;
- divide_box<Dimension>(box, lower_box, upper_box);
-
- IteratorVector1 lower1, upper1, exceeding1;
- IteratorVector2 lower2, upper2, exceeding2;
- divide_into_subsets(lower_box, upper_box,
- input1, lower1, upper1, exceeding1,
- overlaps_policy1);
- divide_into_subsets(lower_box, upper_box,
- input2, lower2, upper2, exceeding2,
- overlaps_policy2);
-
- if (! boost::empty(exceeding1))
- {
- // All exceeding from 1 with 2:
-
- if (recurse_ok(exceeding1, exceeding2, min_elements, level))
- {
- Box exceeding_box = get_new_box(exceeding1, exceeding2,
- expand_policy1, expand_policy2);
- if (! next_level(exceeding_box, exceeding1, exceeding2, level,
- min_elements, visitor, expand_policy1, overlaps_policy1,
- expand_policy2, overlaps_policy2, box_policy))
- {
- return false; // interrupt
- }
- }
- else
- {
- if (! handle_two(exceeding1, exceeding2, visitor))
- {
- return false; // interrupt
- }
- }
-
- // All exceeding from 1 with lower and upper of 2:
-
- // (Check sizes of all three forward ranges to avoid recurse into
- // the same combinations again and again)
- if (recurse_ok(lower2, upper2, exceeding1, min_elements, level))
- {
- Box exceeding_box = get_new_box(exceeding1, expand_policy1);
- if (! (next_level(exceeding_box, exceeding1, lower2, level,
- min_elements, visitor, expand_policy1, overlaps_policy1,
- expand_policy2, overlaps_policy2, box_policy)
- && next_level(exceeding_box, exceeding1, upper2, level,
- min_elements, visitor, expand_policy1, overlaps_policy1,
- expand_policy2, overlaps_policy2, box_policy)) )
- {
- return false; // interrupt
- }
- }
- else
- {
- if (! (handle_two(exceeding1, lower2, visitor)
- && handle_two(exceeding1, upper2, visitor)) )
- {
- return false; // interrupt
- }
- }
- }
-
- if (! boost::empty(exceeding2))
- {
- // All exceeding from 2 with lower and upper of 1:
- if (recurse_ok(lower1, upper1, exceeding2, min_elements, level))
- {
- Box exceeding_box = get_new_box(exceeding2, expand_policy2);
- if (! (next_level(exceeding_box, lower1, exceeding2, level,
- min_elements, visitor, expand_policy1, overlaps_policy1,
- expand_policy2, overlaps_policy2, box_policy)
- && next_level(exceeding_box, upper1, exceeding2, level,
- min_elements, visitor, expand_policy1, overlaps_policy1,
- expand_policy2, overlaps_policy2, box_policy)) )
- {
- return false; // interrupt
- }
- }
- else
- {
- if (! (handle_two(lower1, exceeding2, visitor)
- && handle_two(upper1, exceeding2, visitor)) )
- {
- return false; // interrupt
- }
- }
- }
-
- if (recurse_ok(lower1, lower2, min_elements, level))
- {
- if (! next_level(lower_box, lower1, lower2, level,
- min_elements, visitor, expand_policy1, overlaps_policy1,
- expand_policy2, overlaps_policy2, box_policy) )
- {
- return false; // interrupt
- }
- }
- else
- {
- if (! handle_two(lower1, lower2, visitor))
- {
- return false; // interrupt
- }
- }
-
- if (recurse_ok(upper1, upper2, min_elements, level))
- {
- if (! next_level(upper_box, upper1, upper2, level,
- min_elements, visitor, expand_policy1, overlaps_policy1,
- expand_policy2, overlaps_policy2, box_policy) )
- {
- return false; // interrupt
- }
- }
- else
- {
- if (! handle_two(upper1, upper2, visitor))
- {
- return false; // interrupt
- }
- }
-
- return true;
- }
-};
-
-struct visit_no_policy
-{
- template <typename Box>
- static inline void apply(Box const&, std::size_t )
- {}
-};
-
-struct include_all_policy
-{
- template <typename Item>
- static inline bool apply(Item const&)
- {
- return true;
- }
-};
-
-
-}} // namespace detail::partition
-
-template
-<
- typename Box,
- typename IncludePolicy1 = detail::partition::include_all_policy,
- typename IncludePolicy2 = detail::partition::include_all_policy
->
-class partition
-{
- static const std::size_t default_min_elements = 16;
-
- template
- <
- typename IncludePolicy,
- typename ForwardRange,
- typename IteratorVector,
- typename ExpandPolicy
- >
- static inline void expand_to_range(ForwardRange const& forward_range,
- Box& total,
- IteratorVector& iterator_vector,
- ExpandPolicy const& expand_policy)
- {
- for(typename boost::range_iterator<ForwardRange const>::type
- it = boost::begin(forward_range);
- it != boost::end(forward_range);
- ++it)
- {
- if (IncludePolicy::apply(*it))
- {
- expand_policy.apply(total, *it);
- iterator_vector.push_back(it);
- }
- }
- }
-
-public:
- template
- <
- typename ForwardRange,
- typename VisitPolicy,
- typename ExpandPolicy,
- typename OverlapsPolicy
- >
- static inline bool apply(ForwardRange const& forward_range,
- VisitPolicy& visitor,
- ExpandPolicy const& expand_policy,
- OverlapsPolicy const& overlaps_policy)
- {
- return apply(forward_range, visitor, expand_policy, overlaps_policy,
- default_min_elements, detail::partition::visit_no_policy());
- }
-
- template
- <
- typename ForwardRange,
- typename VisitPolicy,
- typename ExpandPolicy,
- typename OverlapsPolicy
- >
- static inline bool apply(ForwardRange const& forward_range,
- VisitPolicy& visitor,
- ExpandPolicy const& expand_policy,
- OverlapsPolicy const& overlaps_policy,
- std::size_t min_elements)
- {
- return apply(forward_range, visitor, expand_policy, overlaps_policy,
- min_elements, detail::partition::visit_no_policy());
- }
-
- template
- <
- typename ForwardRange,
- typename VisitPolicy,
- typename ExpandPolicy,
- typename OverlapsPolicy,
- typename VisitBoxPolicy
- >
- static inline bool apply(ForwardRange const& forward_range,
- VisitPolicy& visitor,
- ExpandPolicy const& expand_policy,
- OverlapsPolicy const& overlaps_policy,
- std::size_t min_elements,
- VisitBoxPolicy box_visitor)
- {
- typedef typename boost::range_iterator
- <
- ForwardRange const
- >::type iterator_type;
-
- if (std::size_t(boost::size(forward_range)) > min_elements)
- {
- std::vector<iterator_type> iterator_vector;
- Box total;
- assign_inverse(total);
- expand_to_range<IncludePolicy1>(forward_range, total,
- iterator_vector, expand_policy);
-
- return detail::partition::partition_one_range
- <
- 0, Box
- >::apply(total, iterator_vector, 0, min_elements,
- visitor, expand_policy, overlaps_policy, box_visitor);
- }
- else
- {
- for(iterator_type it1 = boost::begin(forward_range);
- it1 != boost::end(forward_range);
- ++it1)
- {
- iterator_type it2 = it1;
- for(++it2; it2 != boost::end(forward_range); ++it2)
- {
- if (! visitor.apply(*it1, *it2))
- {
- return false; // interrupt
- }
- }
- }
- }
-
- return true;
- }
-
- template
- <
- typename ForwardRange1,
- typename ForwardRange2,
- typename VisitPolicy,
- typename ExpandPolicy1,
- typename OverlapsPolicy1
- >
- static inline bool apply(ForwardRange1 const& forward_range1,
- ForwardRange2 const& forward_range2,
- VisitPolicy& visitor,
- ExpandPolicy1 const& expand_policy1,
- OverlapsPolicy1 const& overlaps_policy1)
- {
- return apply(forward_range1, forward_range2, visitor,
- expand_policy1, overlaps_policy1, expand_policy1, overlaps_policy1,
- default_min_elements, detail::partition::visit_no_policy());
- }
-
- template
- <
- typename ForwardRange1,
- typename ForwardRange2,
- typename VisitPolicy,
- typename ExpandPolicy1,
- typename OverlapsPolicy1,
- typename ExpandPolicy2,
- typename OverlapsPolicy2
- >
- static inline bool apply(ForwardRange1 const& forward_range1,
- ForwardRange2 const& forward_range2,
- VisitPolicy& visitor,
- ExpandPolicy1 const& expand_policy1,
- OverlapsPolicy1 const& overlaps_policy1,
- ExpandPolicy2 const& expand_policy2,
- OverlapsPolicy2 const& overlaps_policy2)
- {
- return apply(forward_range1, forward_range2, visitor,
- expand_policy1, overlaps_policy1, expand_policy2, overlaps_policy2,
- default_min_elements, detail::partition::visit_no_policy());
- }
-
- template
- <
- typename ForwardRange1,
- typename ForwardRange2,
- typename VisitPolicy,
- typename ExpandPolicy1,
- typename OverlapsPolicy1,
- typename ExpandPolicy2,
- typename OverlapsPolicy2
- >
- static inline bool apply(ForwardRange1 const& forward_range1,
- ForwardRange2 const& forward_range2,
- VisitPolicy& visitor,
- ExpandPolicy1 const& expand_policy1,
- OverlapsPolicy1 const& overlaps_policy1,
- ExpandPolicy2 const& expand_policy2,
- OverlapsPolicy2 const& overlaps_policy2,
- std::size_t min_elements)
- {
- return apply(forward_range1, forward_range2, visitor,
- expand_policy1, overlaps_policy1, expand_policy2, overlaps_policy2,
- min_elements, detail::partition::visit_no_policy());
- }
-
- template
- <
- typename ForwardRange1,
- typename ForwardRange2,
- typename VisitPolicy,
- typename ExpandPolicy1,
- typename OverlapsPolicy1,
- typename ExpandPolicy2,
- typename OverlapsPolicy2,
- typename VisitBoxPolicy
- >
- static inline bool apply(ForwardRange1 const& forward_range1,
- ForwardRange2 const& forward_range2,
- VisitPolicy& visitor,
- ExpandPolicy1 const& expand_policy1,
- OverlapsPolicy1 const& overlaps_policy1,
- ExpandPolicy2 const& expand_policy2,
- OverlapsPolicy2 const& overlaps_policy2,
- std::size_t min_elements,
- VisitBoxPolicy box_visitor)
- {
- typedef typename boost::range_iterator
- <
- ForwardRange1 const
- >::type iterator_type1;
-
- typedef typename boost::range_iterator
- <
- ForwardRange2 const
- >::type iterator_type2;
-
- if (std::size_t(boost::size(forward_range1)) > min_elements
- && std::size_t(boost::size(forward_range2)) > min_elements)
- {
- std::vector<iterator_type1> iterator_vector1;
- std::vector<iterator_type2> iterator_vector2;
- Box total;
- assign_inverse(total);
- expand_to_range<IncludePolicy1>(forward_range1, total,
- iterator_vector1, expand_policy1);
- expand_to_range<IncludePolicy2>(forward_range2, total,
- iterator_vector2, expand_policy2);
-
- return detail::partition::partition_two_ranges
- <
- 0, Box
- >::apply(total, iterator_vector1, iterator_vector2,
- 0, min_elements, visitor, expand_policy1,
- overlaps_policy1, expand_policy2, overlaps_policy2,
- box_visitor);
- }
- else
- {
- for(iterator_type1 it1 = boost::begin(forward_range1);
- it1 != boost::end(forward_range1);
- ++it1)
- {
- for(iterator_type2 it2 = boost::begin(forward_range2);
- it2 != boost::end(forward_range2);
- ++it2)
- {
- if (! visitor.apply(*it1, *it2))
- {
- return false; // interrupt
- }
- }
- }
- }
-
- return true;
- }
-};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_PARTITION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp
deleted file mode 100644
index ccd3af92d5b..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp
+++ /dev/null
@@ -1,189 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2015, 2017.
-// Modifications copyright (c) 2015-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_IS_EQUAL_OR_SPIKE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_IS_EQUAL_OR_SPIKE_HPP
-
-#include <boost/geometry/algorithms/detail/direction_code.hpp>
-#include <boost/geometry/algorithms/detail/recalculate.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/policies/robustness/robust_point_type.hpp>
-#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Point1, typename Point2, typename Point3>
-inline bool collinear_point_is_spike_or_equal(Point1 const& last_point,
- Point2 const& segment_a,
- Point3 const& segment_b)
-{
- // Check if segment is equal
- int const sgn_x1 = sign_of_difference<0>(last_point, segment_b);
- int const sgn_y1 = sign_of_difference<1>(last_point, segment_b);
- if (sgn_x1 == 0 && sgn_y1 == 0)
- {
- return true;
- }
-
- // Check if segment moves forward
- int const sgn_x2 = sign_of_difference<0>(segment_b, segment_a);
- int const sgn_y2 = sign_of_difference<1>(segment_b, segment_a);
-
- return sgn_x1 != sgn_x2 || sgn_y1 != sgn_y2;
-}
-
-// Checks if a point ("last_point") causes a spike w.r.t.
-// the specified two other points (segment_a, segment_b)
-//
-// x-------x------x
-// a lp b
-//
-// Above, lp generates a spike w.r.t. segment(a,b)
-// So specify last point first, then (a,b)
-// The segment's orientation does matter: if lp is to the right of b
-// no spike is reported
-template
-<
- typename Point1, typename Point2, typename Point3,
- typename SideStrategy
->
-inline bool point_is_spike_or_equal(Point1 const& last_point, // prev | back
- Point2 const& segment_a, // next | back - 2
- Point3 const& segment_b, // curr | back - 1 | spike's vertex
- SideStrategy const& strategy)
-{
- int const side = strategy.apply(segment_a, segment_b, last_point);
- if (side == 0)
- {
- // Last point is collinear w.r.t previous segment.
-#ifdef BOOST_GEOMETRY_ENABLE_POINT_IS_SPIKE_OR_EQUAL_TEST
- bool r1 = collinear_point_is_spike_or_equal(last_point, segment_a, segment_b);
- bool r2 = direction_code(segment_a, segment_b, last_point) < 1;
- if (r1 != r2)
- std::cout << "spike detection failure with: " << r1 << " " << r2 << std::endl;
- return r2;
-#else
- return direction_code(segment_a, segment_b, last_point) < 1;
-#endif
- }
- return false;
-}
-
-template
-<
- typename Point1,
- typename Point2,
- typename Point3,
- typename SideStrategy,
- typename RobustPolicy
->
-inline bool point_is_spike_or_equal(Point1 const& last_point,
- Point2 const& segment_a,
- Point3 const& segment_b,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy)
-{
- if (point_is_spike_or_equal(last_point, segment_a, segment_b, strategy))
- {
- return true;
- }
-
- if (BOOST_GEOMETRY_CONDITION(! RobustPolicy::enabled))
- {
- return false;
- }
-
- // Try using specified robust policy
- typedef typename geometry::robust_point_type
- <
- Point1,
- RobustPolicy
- >::type robust_point_type;
-
- robust_point_type last_point_rob, segment_a_rob, segment_b_rob;
- geometry::recalculate(last_point_rob, last_point, robust_policy);
- geometry::recalculate(segment_a_rob, segment_a, robust_policy);
- geometry::recalculate(segment_b_rob, segment_b, robust_policy);
-
- return point_is_spike_or_equal
- (
- last_point_rob,
- segment_a_rob,
- segment_b_rob,
- strategy
- );
-}
-
-template
-<
- typename Point1,
- typename Point2,
- typename Point3,
- typename SideStrategy,
- typename RobustPolicy
->
-inline bool point_is_collinear(Point1 const& last_point,
- Point2 const& segment_a,
- Point3 const& segment_b,
- SideStrategy const& strategy,
- RobustPolicy const& robust_policy)
-{
- int const side = strategy.apply(segment_a, segment_b, last_point);
- if (side == 0)
- {
- return true;
- }
-
- // This part (or whole method, because it is then trivial)
- // will be removed after rescaling
- if (BOOST_GEOMETRY_CONDITION(! RobustPolicy::enabled))
- {
- return false;
- }
-
- // Redo, using specified robust policy
- typedef typename geometry::robust_point_type
- <
- Point1,
- RobustPolicy
- >::type robust_point_type;
-
- robust_point_type last_point_rob, segment_a_rob, segment_b_rob;
- geometry::recalculate(last_point_rob, last_point, robust_policy);
- geometry::recalculate(segment_a_rob, segment_a, robust_policy);
- geometry::recalculate(segment_b_rob, segment_b, robust_policy);
-
- int const side_rob = strategy.apply(segment_a_rob, segment_b_rob, last_point_rob);
- return side_rob == 0;
-}
-
-} // namespace detail
-#endif
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_IS_EQUAL_OR_SPIKE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/point_on_border.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/point_on_border.hpp
deleted file mode 100644
index 831081aa695..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/point_on_border.hpp
+++ /dev/null
@@ -1,319 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Use, modification and distribution is subject to the Boost Software License,
-// Version 1.Dimension. (See accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP
-
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-#include <boost/static_assert.hpp>
-
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace point_on_border
-{
-
-
-struct get_point
-{
- template <typename Point>
- static inline bool apply(Point& destination, Point const& source)
- {
- destination = source;
- return true;
- }
-};
-
-template<typename Point, std::size_t Dimension, std::size_t DimensionCount>
-struct midpoint_helper
-{
- template <typename InputPoint>
- static inline bool apply(Point& p, InputPoint const& p1, InputPoint const& p2)
- {
- typename coordinate_type<Point>::type const two = 2;
- set<Dimension>(p,
- (get<Dimension>(p1) + get<Dimension>(p2)) / two);
- return midpoint_helper<Point, Dimension + 1, DimensionCount>::apply(p, p1, p2);
- }
-};
-
-
-template <typename Point, std::size_t DimensionCount>
-struct midpoint_helper<Point, DimensionCount, DimensionCount>
-{
- template <typename InputPoint>
- static inline bool apply(Point& , InputPoint const& , InputPoint const& )
- {
- return true;
- }
-};
-
-
-template <bool Midpoint>
-struct point_on_range
-{
- // Version with iterator
- template<typename Point, typename Iterator>
- static inline bool apply(Point& point, Iterator begin, Iterator end)
- {
- Iterator it = begin;
- if (it == end)
- {
- return false;
- }
-
- if (! Midpoint)
- {
- geometry::detail::conversion::convert_point_to_point(*it, point);
- return true;
- }
-
- Iterator prev = it++;
-
- // Go to next non-duplicate point
- while (it != end
- && detail::equals::equals_point_point(*it, *prev))
- {
- prev = it++;
- }
- if (it != end)
- {
- return midpoint_helper
- <
- Point,
- 0, dimension<Point>::value
- >::apply(point, *prev, *it);
- }
- return false;
- }
-
- // Version with range
- template<typename Point, typename Range>
- static inline bool apply(Point& point, Range const& range)
- {
- typedef typename geometry::cs_tag<Point>::type cs_tag;
- BOOST_STATIC_ASSERT((! Midpoint || boost::is_same<cs_tag, cartesian_tag>::value));
-
- return apply(point, boost::begin(range), boost::end(range));
- }
-};
-
-
-template <bool Midpoint>
-struct point_on_polygon
-{
- template<typename Point, typename Polygon>
- static inline bool apply(Point& point, Polygon const& polygon)
- {
- return point_on_range
- <
- Midpoint
- >::apply(point, exterior_ring(polygon));
- }
-};
-
-
-template <bool Midpoint>
-struct point_on_box
-{
- template<typename Point, typename Box>
- static inline bool apply(Point& point, Box const& box)
- {
- if (BOOST_GEOMETRY_CONDITION(Midpoint))
- {
- Point p1, p2;
- detail::assign::assign_box_2d_corner<min_corner, min_corner>(box, p1);
- detail::assign::assign_box_2d_corner<max_corner, min_corner>(box, p2);
- midpoint_helper
- <
- Point,
- 0, dimension<Point>::value
- >::apply(point, p1, p2);
- }
- else
- {
- detail::assign::assign_box_2d_corner<min_corner, min_corner>(box, point);
- }
-
- return true;
- }
-};
-
-
-template <typename Policy>
-struct point_on_multi
-{
- template<typename Point, typename MultiGeometry>
- static inline bool apply(Point& point, MultiGeometry const& multi)
- {
- // Take a point on the first multi-geometry
- // (i.e. the first that is not empty)
- for (typename boost::range_iterator
- <
- MultiGeometry const
- >::type it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- if (Policy::apply(point, *it))
- {
- return true;
- }
- }
- return false;
- }
-};
-
-
-}} // namespace detail::point_on_border
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename GeometryTag,
- bool Midpoint
-
->
-struct point_on_border
-{};
-
-
-template <bool Midpoint>
-struct point_on_border<point_tag, Midpoint>
- : detail::point_on_border::get_point
-{};
-
-
-template <bool Midpoint>
-struct point_on_border<linestring_tag, Midpoint>
- : detail::point_on_border::point_on_range<Midpoint>
-{};
-
-
-template <bool Midpoint>
-struct point_on_border<ring_tag, Midpoint>
- : detail::point_on_border::point_on_range<Midpoint>
-{};
-
-
-template <bool Midpoint>
-struct point_on_border<polygon_tag, Midpoint>
- : detail::point_on_border::point_on_polygon<Midpoint>
-{};
-
-
-template <bool Midpoint>
-struct point_on_border<box_tag, Midpoint>
- : detail::point_on_border::point_on_box<Midpoint>
-{};
-
-
-template <bool Midpoint>
-struct point_on_border<multi_polygon_tag, Midpoint>
- : detail::point_on_border::point_on_multi
- <
- detail::point_on_border::point_on_polygon<Midpoint>
- >
-{};
-
-
-template <bool Midpoint>
-struct point_on_border<multi_linestring_tag, Midpoint>
- : detail::point_on_border::point_on_multi
- <
- detail::point_on_border::point_on_range<Midpoint>
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief Take point on a border
-\ingroup overlay
-\tparam Geometry geometry type. This also defines the type of the output point
-\param point to assign
-\param geometry geometry to take point from
-\return TRUE if successful, else false.
- It is only false if polygon/line have no points
-\note for a polygon, it is always a point on the exterior ring
- */
-template <typename Point, typename Geometry>
-inline bool point_on_border(Point& point, Geometry const& geometry)
-{
- concepts::check<Point>();
- concepts::check<Geometry const>();
-
- return dispatch::point_on_border
- <
- typename tag<Geometry>::type,
- false
- >::apply(point, geometry);
-}
-
-
-/*!
-\tparam Midpoint boolean flag, true if the point should not be a vertex, but some point
- in between of two vertices
-\note for Midpoint, it is not taken from two consecutive duplicate vertices,
- (unless there are no other).
- */
-/*
-template <bool Midpoint, typename Point, typename Geometry>
-inline bool point_on_border(Point& point, Geometry const& geometry)
-{
- concepts::check<Point>();
- concepts::check<Geometry const>();
-
- return dispatch::point_on_border
- <
- typename tag<Geometry>::type,
- Midpoint
- >::apply(point, geometry);
-}
-*/
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/recalculate.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/recalculate.hpp
deleted file mode 100644
index b75dd135e0d..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/recalculate.hpp
+++ /dev/null
@@ -1,234 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2013 Bruno Lalande, Paris, France.
-// Copyright (c) 2013 Mateusz Loskot, London, UK.
-// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RECALCULATE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RECALCULATE_HPP
-
-
-#include <cstddef>
-
-#include <boost/concept/requires.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/numeric/conversion/bounds.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/range/begin.hpp>
-#include <boost/range/end.hpp>
-#include <boost/range/iterator.hpp>
-#include <boost/range/size.hpp>
-
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/algorithms/append.hpp>
-#include <boost/geometry/algorithms/clear.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace recalculate
-{
-
-template <std::size_t Dimension>
-struct recalculate_point
-{
- template <typename Point1, typename Point2, typename Strategy>
- static inline void apply(Point1& point1, Point2 const& point2, Strategy const& strategy)
- {
- std::size_t const dim = Dimension - 1;
- geometry::set<dim>(point1, strategy.template apply<dim>(geometry::get<dim>(point2)));
- recalculate_point<dim>::apply(point1, point2, strategy);
- }
-};
-
-template <>
-struct recalculate_point<0>
-{
- template <typename Point1, typename Point2, typename Strategy>
- static inline void apply(Point1&, Point2 const&, Strategy const&)
- {
- }
-};
-
-
-template <std::size_t Dimension>
-struct recalculate_indexed
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline void apply(Geometry1& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- // Do it for both indices in one dimension
- static std::size_t const dim = Dimension - 1;
- geometry::set<0, dim>(geometry1, strategy.template apply<dim>(geometry::get<0, dim>(geometry2)));
- geometry::set<1, dim>(geometry1, strategy.template apply<dim>(geometry::get<1, dim>(geometry2)));
- recalculate_indexed<dim>::apply(geometry1, geometry2, strategy);
- }
-};
-
-template <>
-struct recalculate_indexed<0>
-{
-
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline void apply(Geometry1& , Geometry2 const& , Strategy const& )
- {
- }
-};
-
-struct range_to_range
-{
- template
- <
- typename Range1,
- typename Range2,
- typename Strategy
- >
- static inline void apply(Range1& destination, Range2 const& source,
- Strategy const& strategy)
- {
- typedef typename geometry::point_type<Range2>::type point_type;
- typedef recalculate_point<geometry::dimension<point_type>::value> per_point;
- geometry::clear(destination);
-
- for (typename boost::range_iterator<Range2 const>::type it
- = boost::begin(source);
- it != boost::end(source);
- ++it)
- {
- point_type p;
- per_point::apply(p, *it, strategy);
- geometry::append(destination, p);
- }
- }
-};
-
-struct polygon_to_polygon
-{
-private:
- template
- <
- typename IteratorIn,
- typename IteratorOut,
- typename Strategy
- >
- static inline void iterate(IteratorIn begin, IteratorIn end,
- IteratorOut it_out,
- Strategy const& strategy)
- {
- for (IteratorIn it_in = begin; it_in != end; ++it_in, ++it_out)
- {
- range_to_range::apply(*it_out, *it_in, strategy);
- }
- }
-
- template
- <
- typename InteriorRingsOut,
- typename InteriorRingsIn,
- typename Strategy
- >
- static inline void apply_interior_rings(
- InteriorRingsOut& interior_rings_out,
- InteriorRingsIn const& interior_rings_in,
- Strategy const& strategy)
- {
- traits::resize<InteriorRingsOut>::apply(interior_rings_out,
- boost::size(interior_rings_in));
-
- iterate(
- boost::begin(interior_rings_in), boost::end(interior_rings_in),
- boost::begin(interior_rings_out),
- strategy);
- }
-
-public:
- template
- <
- typename Polygon1,
- typename Polygon2,
- typename Strategy
- >
- static inline void apply(Polygon1& destination, Polygon2 const& source,
- Strategy const& strategy)
- {
- range_to_range::apply(geometry::exterior_ring(destination),
- geometry::exterior_ring(source), strategy);
-
- apply_interior_rings(geometry::interior_rings(destination),
- geometry::interior_rings(source), strategy);
- }
-};
-
-}} // namespace detail::recalculate
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename geometry::tag<Geometry1>::type,
- typename Tag2 = typename geometry::tag<Geometry2>::type
->
-struct recalculate : not_implemented<Tag1, Tag2>
-{};
-
-template <typename Point1, typename Point2>
-struct recalculate<Point1, Point2, point_tag, point_tag>
- : detail::recalculate::recalculate_point<geometry::dimension<Point1>::value>
-{};
-
-template <typename Box1, typename Box2>
-struct recalculate<Box1, Box2, box_tag, box_tag>
- : detail::recalculate::recalculate_indexed<geometry::dimension<Box1>::value>
-{};
-
-template <typename Segment1, typename Segment2>
-struct recalculate<Segment1, Segment2, segment_tag, segment_tag>
- : detail::recalculate::recalculate_indexed<geometry::dimension<Segment1>::value>
-{};
-
-template <typename Polygon1, typename Polygon2>
-struct recalculate<Polygon1, Polygon2, polygon_tag, polygon_tag>
- : detail::recalculate::polygon_to_polygon
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline void recalculate(Geometry1& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
-{
- concepts::check<Geometry1>();
- concepts::check<Geometry2 const>();
-
- // static assert dimensions (/types) are the same
-
- dispatch::recalculate<Geometry1, Geometry2>::apply(geometry1, geometry2, strategy);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RECALCULATE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/areal_areal.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/areal_areal.hpp
deleted file mode 100644
index 800fbb2e96f..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/areal_areal.hpp
+++ /dev/null
@@ -1,878 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_AREAL_AREAL_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_AREAL_AREAL_HPP
-
-#include <boost/geometry/core/topological_dimension.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
-#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-#include <boost/geometry/algorithms/detail/sub_range.hpp>
-#include <boost/geometry/algorithms/detail/single_geometry.hpp>
-
-#include <boost/geometry/algorithms/detail/relate/point_geometry.hpp>
-#include <boost/geometry/algorithms/detail/relate/turns.hpp>
-#include <boost/geometry/algorithms/detail/relate/boundary_checker.hpp>
-#include <boost/geometry/algorithms/detail/relate/follow_helpers.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate {
-
-// WARNING!
-// TODO: In the worst case calling this Pred in a loop for MultiPolygon/MultiPolygon may take O(NM)
-// Use the rtree in this case!
-
-// may be used to set EI and EB for an Areal geometry for which no turns were generated
-template
-<
- typename OtherAreal,
- typename Result,
- typename PointInArealStrategy,
- bool TransposeResult
->
-class no_turns_aa_pred
-{
-public:
- no_turns_aa_pred(OtherAreal const& other_areal,
- Result & res,
- PointInArealStrategy const& point_in_areal_strategy)
- : m_result(res)
- , m_point_in_areal_strategy(point_in_areal_strategy)
- , m_other_areal(other_areal)
- , m_flags(0)
- {
- // check which relations must be analysed
-
- if ( ! may_update<interior, interior, '2', TransposeResult>(m_result)
- && ! may_update<boundary, interior, '1', TransposeResult>(m_result)
- && ! may_update<exterior, interior, '2', TransposeResult>(m_result) )
- {
- m_flags |= 1;
- }
-
- if ( ! may_update<interior, exterior, '2', TransposeResult>(m_result)
- && ! may_update<boundary, exterior, '1', TransposeResult>(m_result) )
- {
- m_flags |= 2;
- }
- }
-
- template <typename Areal>
- bool operator()(Areal const& areal)
- {
- using detail::within::point_in_geometry;
-
- // if those flags are set nothing will change
- if ( m_flags == 3 )
- {
- return false;
- }
-
- typedef typename geometry::point_type<Areal>::type point_type;
- point_type pt;
- bool const ok = boost::geometry::point_on_border(pt, areal);
-
- // TODO: for now ignore, later throw an exception?
- if ( !ok )
- {
- return true;
- }
-
- // check if the areal is inside the other_areal
- // TODO: This is O(N)
- // Run in a loop O(NM) - optimize!
- int const pig = point_in_geometry(pt,
- m_other_areal,
- m_point_in_areal_strategy);
- //BOOST_GEOMETRY_ASSERT( pig != 0 );
-
- // inside
- if ( pig > 0 )
- {
- update<interior, interior, '2', TransposeResult>(m_result);
- update<boundary, interior, '1', TransposeResult>(m_result);
- update<exterior, interior, '2', TransposeResult>(m_result);
- m_flags |= 1;
-
- // TODO: OPTIMIZE!
- // Only the interior rings of other ONE single geometry must be checked
- // NOT all geometries
-
- // Check if any interior ring is outside
- ring_identifier ring_id(0, -1, 0);
- std::size_t const irings_count = geometry::num_interior_rings(areal);
- for ( ; static_cast<std::size_t>(ring_id.ring_index) < irings_count ;
- ++ring_id.ring_index )
- {
- typename detail::sub_range_return_type<Areal const>::type
- range_ref = detail::sub_range(areal, ring_id);
-
- if ( boost::empty(range_ref) )
- {
- // TODO: throw exception?
- continue; // ignore
- }
-
- // TODO: O(N)
- // Optimize!
- int const hpig = point_in_geometry(range::front(range_ref),
- m_other_areal,
- m_point_in_areal_strategy);
-
- // hole outside
- if ( hpig < 0 )
- {
- update<interior, exterior, '2', TransposeResult>(m_result);
- update<boundary, exterior, '1', TransposeResult>(m_result);
- m_flags |= 2;
- break;
- }
- }
- }
- // outside
- else
- {
- update<interior, exterior, '2', TransposeResult>(m_result);
- update<boundary, exterior, '1', TransposeResult>(m_result);
- m_flags |= 2;
-
- // Check if any interior ring is inside
- ring_identifier ring_id(0, -1, 0);
- std::size_t const irings_count = geometry::num_interior_rings(areal);
- for ( ; static_cast<std::size_t>(ring_id.ring_index) < irings_count ;
- ++ring_id.ring_index )
- {
- typename detail::sub_range_return_type<Areal const>::type
- range_ref = detail::sub_range(areal, ring_id);
-
- if ( boost::empty(range_ref) )
- {
- // TODO: throw exception?
- continue; // ignore
- }
-
- // TODO: O(N)
- // Optimize!
- int const hpig = point_in_geometry(range::front(range_ref),
- m_other_areal,
- m_point_in_areal_strategy);
-
- // hole inside
- if ( hpig > 0 )
- {
- update<interior, interior, '2', TransposeResult>(m_result);
- update<boundary, interior, '1', TransposeResult>(m_result);
- update<exterior, interior, '2', TransposeResult>(m_result);
- m_flags |= 1;
- break;
- }
- }
- }
-
- return m_flags != 3 && !m_result.interrupt;
- }
-
-private:
- Result & m_result;
- PointInArealStrategy const& m_point_in_areal_strategy;
- OtherAreal const& m_other_areal;
- int m_flags;
-};
-
-// The implementation of an algorithm calculating relate() for A/A
-template <typename Geometry1, typename Geometry2>
-struct areal_areal
-{
- // check Linear / Areal
- BOOST_STATIC_ASSERT(topological_dimension<Geometry1>::value == 2
- && topological_dimension<Geometry2>::value == 2);
-
- static const bool interruption_enabled = true;
-
- typedef typename geometry::point_type<Geometry1>::type point1_type;
- typedef typename geometry::point_type<Geometry2>::type point2_type;
-
- template <typename Result, typename IntersectionStrategy>
- static inline void apply(Geometry1 const& geometry1, Geometry2 const& geometry2,
- Result & result,
- IntersectionStrategy const& intersection_strategy)
- {
-// TODO: If Areal geometry may have infinite size, change the following line:
-
- // The result should be FFFFFFFFF
- relate::set<exterior, exterior, result_dimension<Geometry2>::value>(result);// FFFFFFFFd, d in [1,9] or T
-
- if ( BOOST_GEOMETRY_CONDITION(result.interrupt) )
- return;
-
- // get and analyse turns
- typedef typename turns::get_turns<Geometry1, Geometry2>::turn_info turn_type;
- std::vector<turn_type> turns;
-
- interrupt_policy_areal_areal<Result> interrupt_policy(geometry1, geometry2, result);
-
- turns::get_turns<Geometry1, Geometry2>::apply(turns, geometry1, geometry2, interrupt_policy, intersection_strategy);
- if ( BOOST_GEOMETRY_CONDITION(result.interrupt) )
- return;
-
- typedef typename IntersectionStrategy::template point_in_geometry_strategy
- <
- Geometry1, Geometry2
- >::type point_in_areal_strategy12_type;
- point_in_areal_strategy12_type point_in_areal_strategy12
- = intersection_strategy.template get_point_in_geometry_strategy<Geometry1, Geometry2>();
- typedef typename IntersectionStrategy::template point_in_geometry_strategy
- <
- Geometry2, Geometry1
- >::type point_in_areal_strategy21_type;
- point_in_areal_strategy21_type point_in_areal_strategy21
- = intersection_strategy.template get_point_in_geometry_strategy<Geometry2, Geometry1>();
-
- no_turns_aa_pred<Geometry2, Result, point_in_areal_strategy12_type, false>
- pred1(geometry2, result, point_in_areal_strategy12);
- for_each_disjoint_geometry_if<0, Geometry1>::apply(turns.begin(), turns.end(), geometry1, pred1);
- if ( BOOST_GEOMETRY_CONDITION(result.interrupt) )
- return;
-
- no_turns_aa_pred<Geometry1, Result, point_in_areal_strategy21_type, true>
- pred2(geometry1, result, point_in_areal_strategy21);
- for_each_disjoint_geometry_if<1, Geometry2>::apply(turns.begin(), turns.end(), geometry2, pred2);
- if ( BOOST_GEOMETRY_CONDITION(result.interrupt) )
- return;
-
- if ( turns.empty() )
- return;
-
- if ( may_update<interior, interior, '2'>(result)
- || may_update<interior, exterior, '2'>(result)
- || may_update<boundary, interior, '1'>(result)
- || may_update<boundary, exterior, '1'>(result)
- || may_update<exterior, interior, '2'>(result) )
- {
- // sort turns
- typedef turns::less<0, turns::less_op_areal_areal<0> > less;
- std::sort(turns.begin(), turns.end(), less());
-
- /*if ( may_update<interior, exterior, '2'>(result)
- || may_update<boundary, exterior, '1'>(result)
- || may_update<boundary, interior, '1'>(result)
- || may_update<exterior, interior, '2'>(result) )*/
- {
- // analyse sorted turns
- turns_analyser<turn_type, 0> analyser;
- analyse_each_turn(result, analyser, turns.begin(), turns.end());
-
- if ( BOOST_GEOMETRY_CONDITION(result.interrupt) )
- return;
- }
-
- if ( may_update<interior, interior, '2'>(result)
- || may_update<interior, exterior, '2'>(result)
- || may_update<boundary, interior, '1'>(result)
- || may_update<boundary, exterior, '1'>(result)
- || may_update<exterior, interior, '2'>(result) )
- {
- // analyse rings for which turns were not generated
- // or only i/i or u/u was generated
- uncertain_rings_analyser<0, Result, Geometry1, Geometry2, point_in_areal_strategy12_type>
- rings_analyser(result, geometry1, geometry2, point_in_areal_strategy12);
- analyse_uncertain_rings<0>::apply(rings_analyser, turns.begin(), turns.end());
-
- if ( BOOST_GEOMETRY_CONDITION(result.interrupt) )
- return;
- }
- }
-
- if ( may_update<interior, interior, '2', true>(result)
- || may_update<interior, exterior, '2', true>(result)
- || may_update<boundary, interior, '1', true>(result)
- || may_update<boundary, exterior, '1', true>(result)
- || may_update<exterior, interior, '2', true>(result) )
- {
- // sort turns
- typedef turns::less<1, turns::less_op_areal_areal<1> > less;
- std::sort(turns.begin(), turns.end(), less());
-
- /*if ( may_update<interior, exterior, '2', true>(result)
- || may_update<boundary, exterior, '1', true>(result)
- || may_update<boundary, interior, '1', true>(result)
- || may_update<exterior, interior, '2', true>(result) )*/
- {
- // analyse sorted turns
- turns_analyser<turn_type, 1> analyser;
- analyse_each_turn(result, analyser, turns.begin(), turns.end());
-
- if ( BOOST_GEOMETRY_CONDITION(result.interrupt) )
- return;
- }
-
- if ( may_update<interior, interior, '2', true>(result)
- || may_update<interior, exterior, '2', true>(result)
- || may_update<boundary, interior, '1', true>(result)
- || may_update<boundary, exterior, '1', true>(result)
- || may_update<exterior, interior, '2', true>(result) )
- {
- // analyse rings for which turns were not generated
- // or only i/i or u/u was generated
- uncertain_rings_analyser<1, Result, Geometry2, Geometry1, point_in_areal_strategy21_type>
- rings_analyser(result, geometry2, geometry1, point_in_areal_strategy21);
- analyse_uncertain_rings<1>::apply(rings_analyser, turns.begin(), turns.end());
-
- //if ( result.interrupt )
- // return;
- }
- }
- }
-
- // interrupt policy which may be passed to get_turns to interrupt the analysis
- // based on the info in the passed result/mask
- template <typename Result>
- class interrupt_policy_areal_areal
- {
- public:
- static bool const enabled = true;
-
- interrupt_policy_areal_areal(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Result & result)
- : m_result(result)
- , m_geometry1(geometry1)
- , m_geometry2(geometry2)
- {}
-
- template <typename Range>
- inline bool apply(Range const& turns)
- {
- typedef typename boost::range_iterator<Range const>::type iterator;
-
- for (iterator it = boost::begin(turns) ; it != boost::end(turns) ; ++it)
- {
- per_turn<0>(*it);
- per_turn<1>(*it);
- }
-
- return m_result.interrupt;
- }
-
- private:
- template <std::size_t OpId, typename Turn>
- inline void per_turn(Turn const& turn)
- {
- //static const std::size_t other_op_id = (OpId + 1) % 2;
- static const bool transpose_result = OpId != 0;
-
- overlay::operation_type const op = turn.operations[OpId].operation;
-
- if ( op == overlay::operation_union )
- {
- // ignore u/u
- /*if ( turn.operations[other_op_id].operation != overlay::operation_union )
- {
- update<interior, exterior, '2', transpose_result>(m_result);
- update<boundary, exterior, '1', transpose_result>(m_result);
- }*/
-
- update<boundary, boundary, '0', transpose_result>(m_result);
- }
- else if ( op == overlay::operation_intersection )
- {
- // ignore i/i
- /*if ( turn.operations[other_op_id].operation != overlay::operation_intersection )
- {
- // not correct e.g. for G1 touching G2 in a point where a hole is touching the exterior ring
- // in this case 2 turns i/... and u/u will be generated for this IP
- //update<interior, interior, '2', transpose_result>(m_result);
-
- //update<boundary, interior, '1', transpose_result>(m_result);
- }*/
-
- update<boundary, boundary, '0', transpose_result>(m_result);
- }
- else if ( op == overlay::operation_continue )
- {
- update<boundary, boundary, '1', transpose_result>(m_result);
- update<interior, interior, '2', transpose_result>(m_result);
- }
- else if ( op == overlay::operation_blocked )
- {
- update<boundary, boundary, '1', transpose_result>(m_result);
- update<interior, exterior, '2', transpose_result>(m_result);
- }
- }
-
- Result & m_result;
- Geometry1 const& m_geometry1;
- Geometry2 const& m_geometry2;
- };
-
- // This analyser should be used like Input or SinglePass Iterator
- // IMPORTANT! It should be called also for the end iterator - last
- template <typename TurnInfo, std::size_t OpId>
- class turns_analyser
- {
- typedef typename TurnInfo::point_type turn_point_type;
-
- static const std::size_t op_id = OpId;
- static const std::size_t other_op_id = (OpId + 1) % 2;
- static const bool transpose_result = OpId != 0;
-
- public:
- turns_analyser()
- : m_previous_turn_ptr(0)
- , m_previous_operation(overlay::operation_none)
- , m_enter_detected(false)
- , m_exit_detected(false)
- {}
-
- template <typename Result,
- typename TurnIt>
- void apply(Result & result, TurnIt it)
- {
- //BOOST_GEOMETRY_ASSERT( it != last );
-
- overlay::operation_type const op = it->operations[op_id].operation;
-
- if ( op != overlay::operation_union
- && op != overlay::operation_intersection
- && op != overlay::operation_blocked
- && op != overlay::operation_continue )
- {
- return;
- }
-
- segment_identifier const& seg_id = it->operations[op_id].seg_id;
- //segment_identifier const& other_id = it->operations[other_op_id].seg_id;
-
- const bool first_in_range = m_seg_watcher.update(seg_id);
-
- if ( m_previous_turn_ptr )
- {
- if ( m_exit_detected /*m_previous_operation == overlay::operation_union*/ )
- {
- // real exit point - may be multiple
- if ( first_in_range
- || ! turn_on_the_same_ip<op_id>(*m_previous_turn_ptr, *it) )
- {
- update_exit(result);
- m_exit_detected = false;
- }
- // fake exit point, reset state
- else if ( op != overlay::operation_union )
- {
- m_exit_detected = false;
- }
- }
- /*else*/
- if ( m_enter_detected /*m_previous_operation == overlay::operation_intersection*/ )
- {
- // real entry point
- if ( first_in_range
- || ! turn_on_the_same_ip<op_id>(*m_previous_turn_ptr, *it) )
- {
- update_enter(result);
- m_enter_detected = false;
- }
- // fake entry point, reset state
- else if ( op != overlay::operation_intersection )
- {
- m_enter_detected = false;
- }
- }
- }
-
- if ( op == overlay::operation_union )
- {
- // already set in interrupt policy
- //update<boundary, boundary, '0', transpose_result>(m_result);
-
- // ignore u/u
- //if ( it->operations[other_op_id].operation != overlay::operation_union )
- {
- m_exit_detected = true;
- }
- }
- else if ( op == overlay::operation_intersection )
- {
- // ignore i/i
- if ( it->operations[other_op_id].operation != overlay::operation_intersection )
- {
- // this was set in the interrupt policy but it was wrong
- // also here it's wrong since it may be a fake entry point
- //update<interior, interior, '2', transpose_result>(result);
-
- // already set in interrupt policy
- //update<boundary, boundary, '0', transpose_result>(result);
- m_enter_detected = true;
- }
- }
- else if ( op == overlay::operation_blocked )
- {
- // already set in interrupt policy
- }
- else // if ( op == overlay::operation_continue )
- {
- // already set in interrupt policy
- }
-
- // store ref to previously analysed (valid) turn
- m_previous_turn_ptr = boost::addressof(*it);
- // and previously analysed (valid) operation
- m_previous_operation = op;
- }
-
- // it == last
- template <typename Result>
- void apply(Result & result)
- {
- //BOOST_GEOMETRY_ASSERT( first != last );
-
- if ( m_exit_detected /*m_previous_operation == overlay::operation_union*/ )
- {
- update_exit(result);
- m_exit_detected = false;
- }
-
- if ( m_enter_detected /*m_previous_operation == overlay::operation_intersection*/ )
- {
- update_enter(result);
- m_enter_detected = false;
- }
- }
-
- template <typename Result>
- static inline void update_exit(Result & result)
- {
- update<interior, exterior, '2', transpose_result>(result);
- update<boundary, exterior, '1', transpose_result>(result);
- }
-
- template <typename Result>
- static inline void update_enter(Result & result)
- {
- update<interior, interior, '2', transpose_result>(result);
- update<boundary, interior, '1', transpose_result>(result);
- update<exterior, interior, '2', transpose_result>(result);
- }
-
- private:
- segment_watcher<same_ring> m_seg_watcher;
- TurnInfo * m_previous_turn_ptr;
- overlay::operation_type m_previous_operation;
- bool m_enter_detected;
- bool m_exit_detected;
- };
-
- // call analyser.apply() for each turn in range
- // IMPORTANT! The analyser is also called for the end iterator - last
- template <typename Result,
- typename Analyser,
- typename TurnIt>
- static inline void analyse_each_turn(Result & res,
- Analyser & analyser,
- TurnIt first, TurnIt last)
- {
- if ( first == last )
- return;
-
- for ( TurnIt it = first ; it != last ; ++it )
- {
- analyser.apply(res, it);
-
- if ( BOOST_GEOMETRY_CONDITION(res.interrupt) )
- return;
- }
-
- analyser.apply(res);
- }
-
- template
- <
- std::size_t OpId,
- typename Result,
- typename Geometry,
- typename OtherGeometry,
- typename PointInArealStrategy
- >
- class uncertain_rings_analyser
- {
- static const bool transpose_result = OpId != 0;
- static const int other_id = (OpId + 1) % 2;
-
- public:
- inline uncertain_rings_analyser(Result & result,
- Geometry const& geom,
- OtherGeometry const& other_geom,
- PointInArealStrategy const& point_in_areal_strategy)
- : geometry(geom)
- , other_geometry(other_geom)
- , interrupt(result.interrupt) // just in case, could be false as well
- , m_result(result)
- , m_point_in_areal_strategy(point_in_areal_strategy)
- , m_flags(0)
- {
- // check which relations must be analysed
- // NOTE: 1 and 4 could probably be connected
-
- if ( ! may_update<interior, interior, '2', transpose_result>(m_result) )
- {
- m_flags |= 1;
- }
-
- if ( ! may_update<interior, exterior, '2', transpose_result>(m_result)
- && ! may_update<boundary, exterior, '1', transpose_result>(m_result) )
- {
- m_flags |= 2;
- }
-
- if ( ! may_update<boundary, interior, '1', transpose_result>(m_result)
- && ! may_update<exterior, interior, '2', transpose_result>(m_result) )
- {
- m_flags |= 4;
- }
- }
-
- inline void no_turns(segment_identifier const& seg_id)
- {
- // if those flags are set nothing will change
- if ( m_flags == 7 )
- {
- return;
- }
-
- typename detail::sub_range_return_type<Geometry const>::type
- range_ref = detail::sub_range(geometry, seg_id);
-
- if ( boost::empty(range_ref) )
- {
- // TODO: throw an exception?
- return; // ignore
- }
-
- // TODO: possible optimization
- // if the range is an interior ring we may use other IPs generated for this single geometry
- // to know which other single geometries should be checked
-
- // TODO: optimize! e.g. use spatial index
- // O(N) - running it in a loop gives O(NM)
- using detail::within::point_in_geometry;
- int const pig = point_in_geometry(range::front(range_ref),
- other_geometry,
- m_point_in_areal_strategy);
-
- //BOOST_GEOMETRY_ASSERT(pig != 0);
- if ( pig > 0 )
- {
- update<interior, interior, '2', transpose_result>(m_result);
- m_flags |= 1;
-
- update<boundary, interior, '1', transpose_result>(m_result);
- update<exterior, interior, '2', transpose_result>(m_result);
- m_flags |= 4;
- }
- else
- {
- update<boundary, exterior, '1', transpose_result>(m_result);
- update<interior, exterior, '2', transpose_result>(m_result);
- m_flags |= 2;
- }
-
-// TODO: break if all things are set
-// also some of them could be checked outside, before the analysis
-// In this case we shouldn't relay just on dummy flags
-// Flags should be initialized with proper values
-// or the result should be checked directly
-// THIS IS ALSO TRUE FOR OTHER ANALYSERS! in L/L and L/A
-
- interrupt = m_flags == 7 || m_result.interrupt;
- }
-
- template <typename TurnIt>
- inline void turns(TurnIt first, TurnIt last)
- {
- // if those flags are set nothing will change
- if ( (m_flags & 6) == 6 )
- {
- return;
- }
-
- bool found_ii = false;
- bool found_uu = false;
-
- for ( TurnIt it = first ; it != last ; ++it )
- {
- if ( it->operations[0].operation == overlay::operation_intersection
- && it->operations[1].operation == overlay::operation_intersection )
- {
- found_ii = true;
- }
- else if ( it->operations[0].operation == overlay::operation_union
- && it->operations[1].operation == overlay::operation_union )
- {
- found_uu = true;
- }
- else // ignore
- {
- return; // don't interrupt
- }
- }
-
- // only i/i was generated for this ring
- if ( found_ii )
- {
- update<interior, interior, '2', transpose_result>(m_result);
- m_flags |= 1;
-
- //update<boundary, boundary, '0', transpose_result>(m_result);
-
- update<boundary, interior, '1', transpose_result>(m_result);
- update<exterior, interior, '2', transpose_result>(m_result);
- m_flags |= 4;
- }
-
- // only u/u was generated for this ring
- if ( found_uu )
- {
- update<boundary, exterior, '1', transpose_result>(m_result);
- update<interior, exterior, '2', transpose_result>(m_result);
- m_flags |= 2;
- }
-
- interrupt = m_flags == 7 || m_result.interrupt; // interrupt if the result won't be changed in the future
- }
-
- Geometry const& geometry;
- OtherGeometry const& other_geometry;
- bool interrupt;
-
- private:
- Result & m_result;
- PointInArealStrategy const& m_point_in_areal_strategy;
- int m_flags;
- };
-
- template <std::size_t OpId>
- class analyse_uncertain_rings
- {
- public:
- template <typename Analyser, typename TurnIt>
- static inline void apply(Analyser & analyser, TurnIt first, TurnIt last)
- {
- if ( first == last )
- return;
-
- for_preceding_rings(analyser, *first);
- //analyser.per_turn(*first);
-
- TurnIt prev = first;
- for ( ++first ; first != last ; ++first, ++prev )
- {
- // same multi
- if ( prev->operations[OpId].seg_id.multi_index
- == first->operations[OpId].seg_id.multi_index )
- {
- // same ring
- if ( prev->operations[OpId].seg_id.ring_index
- == first->operations[OpId].seg_id.ring_index )
- {
- //analyser.per_turn(*first);
- }
- // same multi, next ring
- else
- {
- //analyser.end_ring(*prev);
- analyser.turns(prev, first);
-
- //if ( prev->operations[OpId].seg_id.ring_index + 1
- // < first->operations[OpId].seg_id.ring_index)
- {
- for_no_turns_rings(analyser,
- *first,
- prev->operations[OpId].seg_id.ring_index + 1,
- first->operations[OpId].seg_id.ring_index);
- }
-
- //analyser.per_turn(*first);
- }
- }
- // next multi
- else
- {
- //analyser.end_ring(*prev);
- analyser.turns(prev, first);
- for_following_rings(analyser, *prev);
- for_preceding_rings(analyser, *first);
- //analyser.per_turn(*first);
- }
-
- if ( analyser.interrupt )
- {
- return;
- }
- }
-
- //analyser.end_ring(*prev);
- analyser.turns(prev, first); // first == last
- for_following_rings(analyser, *prev);
- }
-
- private:
- template <typename Analyser, typename Turn>
- static inline void for_preceding_rings(Analyser & analyser, Turn const& turn)
- {
- segment_identifier const& seg_id = turn.operations[OpId].seg_id;
-
- for_no_turns_rings(analyser, turn, -1, seg_id.ring_index);
- }
-
- template <typename Analyser, typename Turn>
- static inline void for_following_rings(Analyser & analyser, Turn const& turn)
- {
- segment_identifier const& seg_id = turn.operations[OpId].seg_id;
-
- signed_size_type
- count = boost::numeric_cast<signed_size_type>(
- geometry::num_interior_rings(
- detail::single_geometry(analyser.geometry, seg_id)));
-
- for_no_turns_rings(analyser, turn, seg_id.ring_index + 1, count);
- }
-
- template <typename Analyser, typename Turn>
- static inline void for_no_turns_rings(Analyser & analyser,
- Turn const& turn,
- signed_size_type first,
- signed_size_type last)
- {
- segment_identifier seg_id = turn.operations[OpId].seg_id;
-
- for ( seg_id.ring_index = first ; seg_id.ring_index < last ; ++seg_id.ring_index )
- {
- analyser.no_turns(seg_id);
- }
- }
- };
-};
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_AREAL_AREAL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/boundary_checker.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/boundary_checker.hpp
deleted file mode 100644
index 1a9a5a8fd73..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/boundary_checker.hpp
+++ /dev/null
@@ -1,160 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014 Oracle and/or its affiliates.
-
-// 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)
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_BOUNDARY_CHECKER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_BOUNDARY_CHECKER_HPP
-
-#include <boost/geometry/util/range.hpp>
-#include <boost/geometry/algorithms/num_points.hpp>
-#include <boost/geometry/algorithms/detail/sub_range.hpp>
-
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-
-#include <boost/geometry/util/has_nan_coordinate.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate {
-
-enum boundary_query { boundary_front, boundary_back, boundary_any };
-
-template <typename Geometry,
- typename Tag = typename geometry::tag<Geometry>::type>
-class boundary_checker {};
-
-template <typename Geometry>
-class boundary_checker<Geometry, linestring_tag>
-{
- typedef typename point_type<Geometry>::type point_type;
-
-public:
- boundary_checker(Geometry const& g)
- : has_boundary( boost::size(g) >= 2
- && !detail::equals::equals_point_point(range::front(g), range::back(g)) )
- , geometry(g)
- {}
-
- template <boundary_query BoundaryQuery>
- bool is_endpoint_boundary(point_type const& pt) const
- {
- boost::ignore_unused_variable_warning(pt);
-#ifdef BOOST_GEOMETRY_DEBUG_RELATE_BOUNDARY_CHECKER
- // may give false positives for INT
- BOOST_GEOMETRY_ASSERT( (BoundaryQuery == boundary_front || BoundaryQuery == boundary_any)
- && detail::equals::equals_point_point(pt, range::front(geometry))
- || (BoundaryQuery == boundary_back || BoundaryQuery == boundary_any)
- && detail::equals::equals_point_point(pt, range::back(geometry)) );
-#endif
- return has_boundary;
- }
-
-private:
- bool has_boundary;
- Geometry const& geometry;
-};
-
-template <typename Geometry>
-class boundary_checker<Geometry, multi_linestring_tag>
-{
- typedef typename point_type<Geometry>::type point_type;
-
-public:
- boundary_checker(Geometry const& g)
- : is_filled(false), geometry(g)
- {}
-
- // First call O(NlogN)
- // Each next call O(logN)
- template <boundary_query BoundaryQuery>
- bool is_endpoint_boundary(point_type const& pt) const
- {
- typedef typename boost::range_size<Geometry>::type size_type;
- size_type multi_count = boost::size(geometry);
-
- if ( multi_count < 1 )
- return false;
-
- if ( ! is_filled )
- {
- //boundary_points.clear();
- boundary_points.reserve(multi_count * 2);
-
- typedef typename boost::range_iterator<Geometry const>::type multi_iterator;
- for ( multi_iterator it = boost::begin(geometry) ;
- it != boost::end(geometry) ; ++ it )
- {
- typename boost::range_reference<Geometry const>::type
- ls = *it;
-
- // empty or point - no boundary
- if (boost::size(ls) < 2)
- {
- continue;
- }
-
- typedef typename boost::range_reference
- <
- typename boost::range_value<Geometry const>::type const
- >::type point_reference;
-
- point_reference front_pt = range::front(ls);
- point_reference back_pt = range::back(ls);
-
- // linear ring or point - no boundary
- if (! equals::equals_point_point(front_pt, back_pt))
- {
- // do not add points containing NaN coordinates
- // because they cannot be reasonably compared, e.g. with MSVC
- // an assertion failure is reported in std::equal_range()
- if (! geometry::has_nan_coordinate(front_pt))
- {
- boundary_points.push_back(front_pt);
- }
- if (! geometry::has_nan_coordinate(back_pt))
- {
- boundary_points.push_back(back_pt);
- }
- }
- }
-
- std::sort(boundary_points.begin(),
- boundary_points.end(),
- geometry::less<point_type>());
-
- is_filled = true;
- }
-
- std::size_t equal_points_count
- = boost::size(
- std::equal_range(boundary_points.begin(),
- boundary_points.end(),
- pt,
- geometry::less<point_type>())
- );
-
- return equal_points_count % 2 != 0;// && equal_points_count > 0; // the number is odd and > 0
- }
-
-private:
- mutable bool is_filled;
- // TODO: store references/pointers instead of points?
- mutable std::vector<point_type> boundary_points;
-
- Geometry const& geometry;
-};
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_BOUNDARY_CHECKER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/de9im.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/de9im.hpp
deleted file mode 100644
index 713a3fc8f01..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/de9im.hpp
+++ /dev/null
@@ -1,439 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2015.
-// Modifications copyright (c) 2013-2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_DE9IM_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_DE9IM_HPP
-
-#include <boost/mpl/is_sequence.hpp>
-#include <boost/mpl/push_back.hpp>
-#include <boost/mpl/vector.hpp>
-#include <boost/mpl/vector_c.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/tuple/tuple.hpp>
-
-#include <boost/geometry/algorithms/detail/relate/result.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/core/topological_dimension.hpp>
-#include <boost/geometry/core/tag.hpp>
-
-// TEMP - move this header to geometry/detail
-#include <boost/geometry/index/detail/tuples.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace de9im
-{
-
-/*!
-\brief DE-9IM model intersection matrix.
-\ingroup de9im
-\details This matrix can be used to express spatial relations as defined in
- Dimensionally Extended 9-Intersection Model.
-
-\qbk{[heading See also]}
-\qbk{* [link geometry.reference.algorithms.relation relation]}
- */
-class matrix
- : public detail::relate::matrix<3, 3>
-{
-#ifdef DOXYGEN_INVOKED
-public:
- /*!
- \brief Initializes all of the matrix elements to F
- */
- matrix();
- /*!
- \brief Subscript operator
- \param index The index of the element
- \return The element
- */
- char operator[](std::size_t index) const;
- /*!
- \brief Returns the iterator to the first element
- \return const RandomAccessIterator
- */
- const_iterator begin() const;
- /*!
- \brief Returns the iterator past the last element
- \return const RandomAccessIterator
- */
- const_iterator end() const;
- /*!
- \brief Returns the number of elements
- \return 9
- */
- static std::size_t size();
- /*!
- \brief Returns raw pointer to elements
- \return const pointer to array of elements
- */
- inline const char * data() const;
- /*!
- \brief Returns std::string containing elements
- \return string containing elements
- */
- inline std::string str() const;
-#endif
-};
-
-/*!
-\brief DE-9IM model intersection mask.
-\ingroup de9im
-\details This mask can be used to check spatial relations as defined in
- Dimensionally Extended 9-Intersection Model.
-
-\qbk{[heading See also]}
-\qbk{* [link geometry.reference.algorithms.relate relate]}
- */
-class mask
- : public detail::relate::mask<3, 3>
-{
- typedef detail::relate::mask<3, 3> base_type;
-
-public:
- /*!
- \brief The constructor.
- \param code The mask pattern.
- */
- inline explicit mask(const char* code)
- : base_type(code)
- {}
-
- /*!
- \brief The constructor.
- \param code The mask pattern.
- */
- inline explicit mask(std::string const& code)
- : base_type(code.c_str(), code.size())
- {}
-};
-
-// static_mask
-
-/*!
-\brief DE-9IM model intersection mask (static version).
-\ingroup de9im
-\details This mask can be used to check spatial relations as defined in
- Dimensionally Extended 9-Intersection Model.
-\tparam II Interior/Interior intersection mask element
-\tparam IB Interior/Boundary intersection mask element
-\tparam IE Interior/Exterior intersection mask element
-\tparam BI Boundary/Interior intersection mask element
-\tparam BB Boundary/Boundary intersection mask element
-\tparam BE Boundary/Exterior intersection mask element
-\tparam EI Exterior/Interior intersection mask element
-\tparam EB Exterior/Boundary intersection mask element
-\tparam EE Exterior/Exterior intersection mask element
-
-\qbk{[heading See also]}
-\qbk{* [link geometry.reference.algorithms.relate relate]}
- */
-template
-<
- char II = '*', char IB = '*', char IE = '*',
- char BI = '*', char BB = '*', char BE = '*',
- char EI = '*', char EB = '*', char EE = '*'
->
-class static_mask
- : public detail::relate::static_mask
- <
- boost::mpl::vector_c
- <
- char, II, IB, IE, BI, BB, BE, EI, EB, EE
- >,
- 3, 3
- >
-{};
-
-} // namespace de9im
-
-namespace detail { namespace de9im
-{
-
-// a small helper util for ORing static masks
-
-template
-<
- typename Seq,
- typename T,
- bool IsSeq = boost::mpl::is_sequence<Seq>::value
->
-struct push_back
-{
- typedef typename boost::mpl::push_back
- <
- Seq,
- T
- >::type type;
-};
-
-template <typename Seq, typename T>
-struct push_back<Seq, T, false>
-{};
-
-}} // namespace detail::de9im
-
-namespace de9im
-{
-
-inline
-boost::tuples::cons
- <
- mask,
- boost::tuples::cons<mask, boost::tuples::null_type>
- >
-operator||(mask const& m1, mask const& m2)
-{
- namespace bt = boost::tuples;
-
- return bt::cons<mask, bt::cons<mask, bt::null_type> >
- ( m1, bt::cons<mask, bt::null_type>(m2, bt::null_type()) );
-}
-
-template <typename Tail>
-inline
-typename index::detail::tuples::push_back
- <
- boost::tuples::cons<mask, Tail>,
- mask
- >::type
-operator||(boost::tuples::cons<mask, Tail> const& t, mask const& m)
-{
- namespace bt = boost::tuples;
-
- return index::detail::tuples::push_back
- <
- bt::cons<mask, Tail>,
- mask
- >::apply(t, m);
-}
-
-template
-<
- char II1, char IB1, char IE1,
- char BI1, char BB1, char BE1,
- char EI1, char EB1, char EE1,
- char II2, char IB2, char IE2,
- char BI2, char BB2, char BE2,
- char EI2, char EB2, char EE2
->
-inline
-boost::mpl::vector<
- static_mask<II1, IB1, IE1, BI1, BB1, BE1, EI1, EB1, EE1>,
- static_mask<II2, IB2, IE2, BI2, BB2, BE2, EI2, EB2, EE2>
->
-operator||(static_mask<II1, IB1, IE1, BI1, BB1, BE1, EI1, EB1, EE1> const& ,
- static_mask<II2, IB2, IE2, BI2, BB2, BE2, EI2, EB2, EE2> const& )
-{
- return boost::mpl::vector
- <
- static_mask<II1, IB1, IE1, BI1, BB1, BE1, EI1, EB1, EE1>,
- static_mask<II2, IB2, IE2, BI2, BB2, BE2, EI2, EB2, EE2>
- >();
-}
-
-template
-<
- typename Seq,
- char II, char IB, char IE,
- char BI, char BB, char BE,
- char EI, char EB, char EE
->
-inline
-typename detail::de9im::push_back
- <
- Seq,
- static_mask<II, IB, IE, BI, BB, BE, EI, EB, EE>
- >::type
-operator||(Seq const& ,
- static_mask<II, IB, IE, BI, BB, BE, EI, EB, EE> const& )
-{
- return typename detail::de9im::push_back
- <
- Seq,
- static_mask<II, IB, IE, BI, BB, BE, EI, EB, EE>
- >::type();
-}
-
-} // namespace de9im
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace de9im
-{
-
-// PREDEFINED MASKS
-
-// TODO:
-// 1. specialize for simplified masks if available
-// e.g. for TOUCHES use 1 mask for A/A
-// 2. Think about dimensions > 2 e.g. should TOUCHES be true
-// if the interior of the Areal overlaps the boundary of the Volumetric
-// like it's true for Linear/Areal
-
-// EQUALS
-template <typename Geometry1, typename Geometry2>
-struct static_mask_equals_type
-{
- typedef geometry::de9im::static_mask<'T', '*', 'F', '*', '*', 'F', 'F', 'F', '*'> type; // wikipedia
- //typedef geometry::de9im::static_mask<'T', 'F', 'F', 'F', 'T', 'F', 'F', 'F', 'T'> type; // OGC
-};
-
-// DISJOINT
-template <typename Geometry1, typename Geometry2>
-struct static_mask_disjoint_type
-{
- typedef geometry::de9im::static_mask<'F', 'F', '*', 'F', 'F', '*', '*', '*', '*'> type;
-};
-
-// TOUCHES - NOT P/P
-template
-<
- typename Geometry1,
- typename Geometry2,
- std::size_t Dim1 = geometry::topological_dimension<Geometry1>::value,
- std::size_t Dim2 = geometry::topological_dimension<Geometry2>::value
->
-struct static_mask_touches_impl
-{
- typedef boost::mpl::vector
- <
- geometry::de9im::static_mask<'F', 'T', '*', '*', '*', '*', '*', '*', '*'>,
- geometry::de9im::static_mask<'F', '*', '*', 'T', '*', '*', '*', '*', '*'>,
- geometry::de9im::static_mask<'F', '*', '*', '*', 'T', '*', '*', '*', '*'>
- > type;
-};
-// According to OGC, doesn't apply to P/P
-// Using the above mask the result would be always false
-template <typename Geometry1, typename Geometry2>
-struct static_mask_touches_impl<Geometry1, Geometry2, 0, 0>
- : not_implemented<typename geometry::tag<Geometry1>::type,
- typename geometry::tag<Geometry2>::type>
-{};
-
-template <typename Geometry1, typename Geometry2>
-struct static_mask_touches_type
- : static_mask_touches_impl<Geometry1, Geometry2>
-{};
-
-// WITHIN
-template <typename Geometry1, typename Geometry2>
-struct static_mask_within_type
-{
- typedef geometry::de9im::static_mask<'T', '*', 'F', '*', '*', 'F', '*', '*', '*'> type;
-};
-
-// COVERED_BY (non OGC)
-template <typename Geometry1, typename Geometry2>
-struct static_mask_covered_by_type
-{
- typedef boost::mpl::vector
- <
- geometry::de9im::static_mask<'T', '*', 'F', '*', '*', 'F', '*', '*', '*'>,
- geometry::de9im::static_mask<'*', 'T', 'F', '*', '*', 'F', '*', '*', '*'>,
- geometry::de9im::static_mask<'*', '*', 'F', 'T', '*', 'F', '*', '*', '*'>,
- geometry::de9im::static_mask<'*', '*', 'F', '*', 'T', 'F', '*', '*', '*'>
- > type;
-};
-
-// CROSSES
-// dim(G1) < dim(G2) - P/L P/A L/A
-template
-<
- typename Geometry1,
- typename Geometry2,
- std::size_t Dim1 = geometry::topological_dimension<Geometry1>::value,
- std::size_t Dim2 = geometry::topological_dimension<Geometry2>::value,
- bool D1LessD2 = (Dim1 < Dim2)
->
-struct static_mask_crosses_impl
-{
- typedef geometry::de9im::static_mask<'T', '*', 'T', '*', '*', '*', '*', '*', '*'> type;
-};
-// TODO: I'm not sure if this one below should be available!
-// dim(G1) > dim(G2) - L/P A/P A/L
-template
-<
- typename Geometry1, typename Geometry2, std::size_t Dim1, std::size_t Dim2
->
-struct static_mask_crosses_impl<Geometry1, Geometry2, Dim1, Dim2, false>
-{
- typedef geometry::de9im::static_mask<'T', '*', '*', '*', '*', '*', 'T', '*', '*'> type;
-};
-// dim(G1) == dim(G2) - P/P A/A
-template
-<
- typename Geometry1, typename Geometry2, std::size_t Dim
->
-struct static_mask_crosses_impl<Geometry1, Geometry2, Dim, Dim, false>
- : not_implemented
- <
- typename geometry::tag<Geometry1>::type,
- typename geometry::tag<Geometry2>::type
- >
-{};
-// dim(G1) == 1 && dim(G2) == 1 - L/L
-template <typename Geometry1, typename Geometry2>
-struct static_mask_crosses_impl<Geometry1, Geometry2, 1, 1, false>
-{
- typedef geometry::de9im::static_mask<'0', '*', '*', '*', '*', '*', '*', '*', '*'> type;
-};
-
-template <typename Geometry1, typename Geometry2>
-struct static_mask_crosses_type
- : static_mask_crosses_impl<Geometry1, Geometry2>
-{};
-
-// OVERLAPS
-
-// dim(G1) != dim(G2) - NOT P/P, L/L, A/A
-template
-<
- typename Geometry1,
- typename Geometry2,
- std::size_t Dim1 = geometry::topological_dimension<Geometry1>::value,
- std::size_t Dim2 = geometry::topological_dimension<Geometry2>::value
->
-struct static_mask_overlaps_impl
- : not_implemented
- <
- typename geometry::tag<Geometry1>::type,
- typename geometry::tag<Geometry2>::type
- >
-{};
-// dim(G1) == D && dim(G2) == D - P/P A/A
-template <typename Geometry1, typename Geometry2, std::size_t Dim>
-struct static_mask_overlaps_impl<Geometry1, Geometry2, Dim, Dim>
-{
- typedef geometry::de9im::static_mask<'T', '*', 'T', '*', '*', '*', 'T', '*', '*'> type;
-};
-// dim(G1) == 1 && dim(G2) == 1 - L/L
-template <typename Geometry1, typename Geometry2>
-struct static_mask_overlaps_impl<Geometry1, Geometry2, 1, 1>
-{
- typedef geometry::de9im::static_mask<'1', '*', 'T', '*', '*', '*', 'T', '*', '*'> type;
-};
-
-template <typename Geometry1, typename Geometry2>
-struct static_mask_overlaps_type
- : static_mask_overlaps_impl<Geometry1, Geometry2>
-{};
-
-}} // namespace detail::de9im
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_DE9IM_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/follow_helpers.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/follow_helpers.hpp
deleted file mode 100644
index 20122471e5e..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/follow_helpers.hpp
+++ /dev/null
@@ -1,404 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014.
-// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
-
-// 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)
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_FOLLOW_HELPERS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_FOLLOW_HELPERS_HPP
-
-#include <boost/geometry/core/assert.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/range.hpp>
-//#include <boost/geometry/algorithms/detail/sub_range.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate {
-
-// NOTE: This iterates through single geometries for which turns were not generated.
-// It doesn't mean that the geometry is disjoint, only that no turns were detected.
-
-template <std::size_t OpId,
- typename Geometry,
- typename Tag = typename geometry::tag<Geometry>::type,
- bool IsMulti = boost::is_base_of<multi_tag, Tag>::value
->
-struct for_each_disjoint_geometry_if
- : public not_implemented<Tag>
-{};
-
-template <std::size_t OpId, typename Geometry, typename Tag>
-struct for_each_disjoint_geometry_if<OpId, Geometry, Tag, false>
-{
- template <typename TurnIt, typename Pred>
- static inline bool apply(TurnIt first, TurnIt last,
- Geometry const& geometry,
- Pred & pred)
- {
- if ( first != last )
- return false;
- pred(geometry);
- return true;
- }
-};
-
-template <std::size_t OpId, typename Geometry, typename Tag>
-struct for_each_disjoint_geometry_if<OpId, Geometry, Tag, true>
-{
- template <typename TurnIt, typename Pred>
- static inline bool apply(TurnIt first, TurnIt last,
- Geometry const& geometry,
- Pred & pred)
- {
- if ( first != last )
- return for_turns(first, last, geometry, pred);
- else
- return for_empty(geometry, pred);
- }
-
- template <typename Pred>
- static inline bool for_empty(Geometry const& geometry,
- Pred & pred)
- {
- typedef typename boost::range_iterator<Geometry const>::type iterator;
-
- // O(N)
- // check predicate for each contained geometry without generated turn
- for ( iterator it = boost::begin(geometry) ;
- it != boost::end(geometry) ; ++it )
- {
- bool cont = pred(*it);
- if ( !cont )
- break;
- }
-
- return !boost::empty(geometry);
- }
-
- template <typename TurnIt, typename Pred>
- static inline bool for_turns(TurnIt first, TurnIt last,
- Geometry const& geometry,
- Pred & pred)
- {
- BOOST_GEOMETRY_ASSERT(first != last);
-
- const std::size_t count = boost::size(geometry);
- boost::ignore_unused_variable_warning(count);
-
- // O(I)
- // gather info about turns generated for contained geometries
- std::vector<bool> detected_intersections(count, false);
- for ( TurnIt it = first ; it != last ; ++it )
- {
- signed_size_type multi_index = it->operations[OpId].seg_id.multi_index;
- BOOST_GEOMETRY_ASSERT(multi_index >= 0);
- std::size_t const index = static_cast<std::size_t>(multi_index);
- BOOST_GEOMETRY_ASSERT(index < count);
- detected_intersections[index] = true;
- }
-
- bool found = false;
-
- // O(N)
- // check predicate for each contained geometry without generated turn
- for ( std::vector<bool>::iterator it = detected_intersections.begin() ;
- it != detected_intersections.end() ; ++it )
- {
- // if there were no intersections for this multi_index
- if ( *it == false )
- {
- found = true;
- std::size_t const index = std::size_t(std::distance(detected_intersections.begin(), it));
- bool cont = pred(range::at(geometry, index));
- if ( !cont )
- break;
- }
- }
-
- return found;
- }
-};
-
-// WARNING! This class stores pointers!
-// Passing a reference to local variable will result in undefined behavior!
-template <typename Point>
-class point_info
-{
-public:
- point_info() : sid_ptr(NULL), pt_ptr(NULL) {}
- point_info(Point const& pt, segment_identifier const& sid)
- : sid_ptr(boost::addressof(sid))
- , pt_ptr(boost::addressof(pt))
- {}
- segment_identifier const& seg_id() const
- {
- BOOST_GEOMETRY_ASSERT(sid_ptr);
- return *sid_ptr;
- }
- Point const& point() const
- {
- BOOST_GEOMETRY_ASSERT(pt_ptr);
- return *pt_ptr;
- }
-
- //friend bool operator==(point_identifier const& l, point_identifier const& r)
- //{
- // return l.seg_id() == r.seg_id()
- // && detail::equals::equals_point_point(l.point(), r.point());
- //}
-
-private:
- const segment_identifier * sid_ptr;
- const Point * pt_ptr;
-};
-
-// WARNING! This class stores pointers!
-// Passing a reference to local variable will result in undefined behavior!
-class same_single
-{
-public:
- same_single(segment_identifier const& sid)
- : sid_ptr(boost::addressof(sid))
- {}
-
- bool operator()(segment_identifier const& sid) const
- {
- return sid.multi_index == sid_ptr->multi_index;
- }
-
- template <typename Point>
- bool operator()(point_info<Point> const& pid) const
- {
- return operator()(pid.seg_id());
- }
-
-private:
- const segment_identifier * sid_ptr;
-};
-
-class same_ring
-{
-public:
- same_ring(segment_identifier const& sid)
- : sid_ptr(boost::addressof(sid))
- {}
-
- bool operator()(segment_identifier const& sid) const
- {
- return sid.multi_index == sid_ptr->multi_index
- && sid.ring_index == sid_ptr->ring_index;
- }
-
-private:
- const segment_identifier * sid_ptr;
-};
-
-// WARNING! This class stores pointers!
-// Passing a reference to local variable will result in undefined behavior!
-template <typename SameRange = same_single>
-class segment_watcher
-{
-public:
- segment_watcher()
- : m_seg_id_ptr(NULL)
- {}
-
- bool update(segment_identifier const& seg_id)
- {
- bool result = m_seg_id_ptr == 0 || !SameRange(*m_seg_id_ptr)(seg_id);
- m_seg_id_ptr = boost::addressof(seg_id);
- return result;
- }
-
-private:
- const segment_identifier * m_seg_id_ptr;
-};
-
-// WARNING! This class stores pointers!
-// Passing a reference to local variable will result in undefined behavior!
-template <typename TurnInfo, std::size_t OpId>
-class exit_watcher
-{
- static const std::size_t op_id = OpId;
- static const std::size_t other_op_id = (OpId + 1) % 2;
-
- typedef typename TurnInfo::point_type point_type;
- typedef detail::relate::point_info<point_type> point_info;
-
-public:
- exit_watcher()
- : m_exit_operation(overlay::operation_none)
- , m_exit_turn_ptr(NULL)
- {}
-
- void enter(TurnInfo const& turn)
- {
- m_other_entry_points.push_back(
- point_info(turn.point, turn.operations[other_op_id].seg_id) );
- }
-
- // TODO: exit_per_geometry parameter looks not very safe
- // wrong value may be easily passed
-
- void exit(TurnInfo const& turn, bool exit_per_geometry = true)
- {
- //segment_identifier const& seg_id = turn.operations[op_id].seg_id;
- segment_identifier const& other_id = turn.operations[other_op_id].seg_id;
- overlay::operation_type exit_op = turn.operations[op_id].operation;
-
- typedef typename std::vector<point_info>::iterator point_iterator;
- // search for the entry point in the same range of other geometry
- point_iterator entry_it = std::find_if(m_other_entry_points.begin(),
- m_other_entry_points.end(),
- same_single(other_id));
-
- // this end point has corresponding entry point
- if ( entry_it != m_other_entry_points.end() )
- {
- // erase the corresponding entry point
- m_other_entry_points.erase(entry_it);
-
- if ( exit_per_geometry || m_other_entry_points.empty() )
- {
- // here we know that we possibly left LS
- // we must still check if we didn't get back on the same point
- m_exit_operation = exit_op;
- m_exit_turn_ptr = boost::addressof(turn);
- }
- }
- }
-
- bool is_outside() const
- {
- // if we didn't entered anything in the past, we're outside
- return m_other_entry_points.empty();
- }
-
- bool is_outside(TurnInfo const& turn) const
- {
- return m_other_entry_points.empty()
- || std::find_if(m_other_entry_points.begin(),
- m_other_entry_points.end(),
- same_single(
- turn.operations[other_op_id].seg_id))
- == m_other_entry_points.end();
- }
-
- overlay::operation_type get_exit_operation() const
- {
- return m_exit_operation;
- }
-
- point_type const& get_exit_point() const
- {
- BOOST_GEOMETRY_ASSERT(m_exit_operation != overlay::operation_none);
- BOOST_GEOMETRY_ASSERT(m_exit_turn_ptr);
- return m_exit_turn_ptr->point;
- }
-
- TurnInfo const& get_exit_turn() const
- {
- BOOST_GEOMETRY_ASSERT(m_exit_operation != overlay::operation_none);
- BOOST_GEOMETRY_ASSERT(m_exit_turn_ptr);
- return *m_exit_turn_ptr;
- }
-
- void reset_detected_exit()
- {
- m_exit_operation = overlay::operation_none;
- }
-
- void reset()
- {
- m_exit_operation = overlay::operation_none;
- m_other_entry_points.clear();
- }
-
-private:
- overlay::operation_type m_exit_operation;
- const TurnInfo * m_exit_turn_ptr;
- std::vector<point_info> m_other_entry_points; // TODO: use map here or sorted vector?
-};
-
-template <std::size_t OpId, typename Turn>
-inline bool turn_on_the_same_ip(Turn const& prev_turn, Turn const& curr_turn)
-{
- segment_identifier const& prev_seg_id = prev_turn.operations[OpId].seg_id;
- segment_identifier const& curr_seg_id = curr_turn.operations[OpId].seg_id;
-
- if ( prev_seg_id.multi_index != curr_seg_id.multi_index
- || prev_seg_id.ring_index != curr_seg_id.ring_index )
- {
- return false;
- }
-
- // TODO: will this work if between segments there will be some number of degenerated ones?
-
- if ( prev_seg_id.segment_index != curr_seg_id.segment_index
- && ( ! curr_turn.operations[OpId].fraction.is_zero()
- || prev_seg_id.segment_index + 1 != curr_seg_id.segment_index ) )
- {
- return false;
- }
-
- return detail::equals::equals_point_point(prev_turn.point, curr_turn.point);
-}
-
-template <boundary_query BoundaryQuery,
- typename Point,
- typename BoundaryChecker>
-static inline bool is_endpoint_on_boundary(Point const& pt,
- BoundaryChecker & boundary_checker)
-{
- return boundary_checker.template is_endpoint_boundary<BoundaryQuery>(pt);
-}
-
-template <boundary_query BoundaryQuery,
- typename IntersectionPoint,
- typename OperationInfo,
- typename BoundaryChecker>
-static inline bool is_ip_on_boundary(IntersectionPoint const& ip,
- OperationInfo const& operation_info,
- BoundaryChecker & boundary_checker,
- segment_identifier const& seg_id)
-{
- boost::ignore_unused_variable_warning(seg_id);
-
- bool res = false;
-
- // IP on the last point of the linestring
- if ( BOOST_GEOMETRY_CONDITION(BoundaryQuery == boundary_back || BoundaryQuery == boundary_any)
- && operation_info.position == overlay::position_back )
- {
- // check if this point is a boundary
- res = boundary_checker.template is_endpoint_boundary<boundary_back>(ip);
- }
- // IP on the last point of the linestring
- else if ( BOOST_GEOMETRY_CONDITION(BoundaryQuery == boundary_front || BoundaryQuery == boundary_any)
- && operation_info.position == overlay::position_front )
- {
- // check if this point is a boundary
- res = boundary_checker.template is_endpoint_boundary<boundary_front>(ip);
- }
-
- return res;
-}
-
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_FOLLOW_HELPERS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/implementation.hpp
deleted file mode 100644
index 8f7942d46ea..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/implementation.hpp
+++ /dev/null
@@ -1,124 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_IMPLEMENTATION_HPP
-
-
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/detail/relate/interface.hpp>
-
-#include <boost/geometry/algorithms/detail/relate/point_point.hpp>
-#include <boost/geometry/algorithms/detail/relate/point_geometry.hpp>
-#include <boost/geometry/algorithms/detail/relate/linear_linear.hpp>
-#include <boost/geometry/algorithms/detail/relate/linear_areal.hpp>
-#include <boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp>
-#include <boost/geometry/algorithms/detail/relate/areal_areal.hpp>
-
-#include <boost/geometry/strategies/intersection.hpp>
-#include <boost/geometry/strategies/within.hpp>
-
-
-namespace boost { namespace geometry {
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-template <typename Point1, typename Point2>
-struct relate<Point1, Point2, point_tag, point_tag, 0, 0, false>
- : detail::relate::point_point<Point1, Point2>
-{};
-
-template <typename Point, typename MultiPoint>
-struct relate<Point, MultiPoint, point_tag, multi_point_tag, 0, 0, false>
- : detail::relate::point_multipoint<Point, MultiPoint>
-{};
-
-template <typename MultiPoint, typename Point>
-struct relate<MultiPoint, Point, multi_point_tag, point_tag, 0, 0, false>
- : detail::relate::multipoint_point<MultiPoint, Point>
-{};
-
-template <typename MultiPoint1, typename MultiPoint2>
-struct relate<MultiPoint1, MultiPoint2, multi_point_tag, multi_point_tag, 0, 0, false>
- : detail::relate::multipoint_multipoint<MultiPoint1, MultiPoint2>
-{};
-
-// TODO - for now commented out because before implementing it we must consider:
-// 1. how the Box degenerated to a Point should be treated
-// 2. what should be the definition of a Box degenerated to a Point
-// 3. what fields should the matrix/mask contain for dimension > 2 and dimension > 9
-//
-//template <typename Point, typename Box, int TopDim2>
-//struct relate<Point, Box, point_tag, box_tag, 0, TopDim2, false>
-// : detail::relate::point_box<Point, Box>
-//{};
-//
-//template <typename Box, typename Point, int TopDim1>
-//struct relate<Box, Point, box_tag, point_tag, TopDim1, 0, false>
-// : detail::relate::box_point<Box, Point>
-//{};
-
-
-template <typename Point, typename Geometry, typename Tag2, int TopDim2>
-struct relate<Point, Geometry, point_tag, Tag2, 0, TopDim2, true>
- : detail::relate::point_geometry<Point, Geometry>
-{};
-
-template <typename Geometry, typename Point, typename Tag1, int TopDim1>
-struct relate<Geometry, Point, Tag1, point_tag, TopDim1, 0, true>
- : detail::relate::geometry_point<Geometry, Point>
-{};
-
-template <typename MultiPoint, typename Geometry, typename Tag2, int TopDim2>
-struct relate<MultiPoint, Geometry, multi_point_tag, Tag2, 0, TopDim2, false>
- : detail::relate::multi_point_geometry<MultiPoint, Geometry>
-{};
-
-template <typename Geometry, typename MultiPoint, typename Tag1, int TopDim1>
-struct relate<Geometry, MultiPoint, Tag1, multi_point_tag, TopDim1, 0, false>
- : detail::relate::geometry_multi_point<Geometry, MultiPoint>
-{};
-
-
-template <typename Linear1, typename Linear2, typename Tag1, typename Tag2>
-struct relate<Linear1, Linear2, Tag1, Tag2, 1, 1, true>
- : detail::relate::linear_linear<Linear1, Linear2>
-{};
-
-
-template <typename Linear, typename Areal, typename Tag1, typename Tag2>
-struct relate<Linear, Areal, Tag1, Tag2, 1, 2, true>
- : detail::relate::linear_areal<Linear, Areal>
-{};
-
-template <typename Areal, typename Linear, typename Tag1, typename Tag2>
-struct relate<Areal, Linear, Tag1, Tag2, 2, 1, true>
- : detail::relate::areal_linear<Areal, Linear>
-{};
-
-
-template <typename Areal1, typename Areal2, typename Tag1, typename Tag2>
-struct relate<Areal1, Areal2, Tag1, Tag2, 2, 2, true>
- : detail::relate::areal_areal<Areal1, Areal2>
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/interface.hpp
deleted file mode 100644
index 3575fe2bc47..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/interface.hpp
+++ /dev/null
@@ -1,421 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_INTERFACE_HPP
-
-
-#include <boost/type_traits/is_same.hpp>
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/topological_dimension.hpp>
-
-#include <boost/geometry/algorithms/detail/relate/de9im.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/relate.hpp>
-
-
-namespace boost { namespace geometry {
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate {
-
-// Those are used only to allow dispatch::relate to produce compile-time error
-
-template <typename Geometry,
- typename Tag = typename geometry::tag<Geometry>::type>
-struct is_supported_by_generic
-{
- static const bool value
- = boost::is_same<Tag, linestring_tag>::value
- || boost::is_same<Tag, multi_linestring_tag>::value
- || boost::is_same<Tag, ring_tag>::value
- || boost::is_same<Tag, polygon_tag>::value
- || boost::is_same<Tag, multi_polygon_tag>::value;
-};
-
-template <typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename geometry::tag<Geometry1>::type,
- typename Tag2 = typename geometry::tag<Geometry2>::type>
-struct is_generic
-{
- static const bool value = is_supported_by_generic<Geometry1>::value
- && is_supported_by_generic<Geometry2>::value;
-};
-
-
-template <typename Point, typename Geometry, typename Tag>
-struct is_generic<Point, Geometry, point_tag, Tag>
-{
- static const bool value = is_supported_by_generic<Geometry>::value;
-};
-
-template <typename Geometry, typename Point, typename Tag>
-struct is_generic<Geometry, Point, Tag, point_tag>
-{
- static const bool value = is_supported_by_generic<Geometry>::value;
-};
-
-template <typename Point1, typename Point2>
-struct is_generic<Point1, Point2, point_tag, point_tag>
-{
- static const bool value = false;
-};
-
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-
-template <typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename geometry::tag<Geometry1>::type,
- typename Tag2 = typename geometry::tag<Geometry2>::type,
- int TopDim1 = geometry::topological_dimension<Geometry1>::value,
- int TopDim2 = geometry::topological_dimension<Geometry2>::value,
- bool IsGeneric = detail::relate::is_generic<Geometry1, Geometry2>::value
->
-struct relate : not_implemented<Tag1, Tag2>
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate {
-
-template <typename Geometry1, typename Geometry2>
-struct interruption_enabled
-{
- static const bool value =
- dispatch::relate<Geometry1, Geometry2>::interruption_enabled;
-};
-
-template <typename Geometry1,
- typename Geometry2,
- typename Result,
- bool IsSequence = boost::mpl::is_sequence<Result>::value>
-struct result_handler_type
- : not_implemented<Result>
-{};
-
-template <typename Geometry1, typename Geometry2>
-struct result_handler_type<Geometry1, Geometry2, geometry::de9im::mask, false>
-{
- typedef mask_handler
- <
- geometry::de9im::mask,
- interruption_enabled
- <
- Geometry1,
- Geometry2
- >::value
- > type;
-};
-
-template <typename Geometry1, typename Geometry2, typename Head, typename Tail>
-struct result_handler_type<Geometry1, Geometry2, boost::tuples::cons<Head, Tail>, false>
-{
- typedef mask_handler
- <
- boost::tuples::cons<Head, Tail>,
- interruption_enabled
- <
- Geometry1,
- Geometry2
- >::value
- > type;
-};
-
-template <typename Geometry1, typename Geometry2,
- char II, char IB, char IE,
- char BI, char BB, char BE,
- char EI, char EB, char EE>
-struct result_handler_type
- <
- Geometry1,
- Geometry2,
- geometry::de9im::static_mask<II, IB, IE, BI, BB, BE, EI, EB, EE>,
- false
- >
-{
- typedef static_mask_handler
- <
- geometry::de9im::static_mask<II, IB, IE, BI, BB, BE, EI, EB, EE>,
- interruption_enabled
- <
- Geometry1,
- Geometry2
- >::value
- > type;
-};
-
-template <typename Geometry1, typename Geometry2, typename StaticSequence>
-struct result_handler_type<Geometry1, Geometry2, StaticSequence, true>
-{
- typedef static_mask_handler
- <
- StaticSequence,
- interruption_enabled
- <
- Geometry1,
- Geometry2
- >::value
- > type;
-};
-
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-namespace resolve_strategy {
-
-struct relate
-{
- template <typename Geometry1, typename Geometry2, typename ResultHandler, typename Strategy>
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- ResultHandler & handler,
- Strategy const& strategy)
- {
- dispatch::relate
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, handler, strategy);
- }
-
- template <typename Geometry1, typename Geometry2, typename ResultHandler>
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- ResultHandler & handler,
- default_strategy)
- {
- typedef typename strategy::relate::services::default_strategy
- <
- Geometry1,
- Geometry2
- >::type strategy_type;
-
- dispatch::relate
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, handler, strategy_type());
- }
-};
-
-} // resolve_strategy
-
-namespace resolve_variant {
-
-template <typename Geometry1, typename Geometry2>
-struct relate
-{
- template <typename Mask, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Mask const& mask,
- Strategy const& strategy)
- {
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
- assert_dimension_equal<Geometry1, Geometry2>();
-
- typename detail::relate::result_handler_type
- <
- Geometry1,
- Geometry2,
- Mask
- >::type handler(mask);
-
- resolve_strategy::relate::apply(geometry1, geometry2, handler, strategy);
-
- return handler.result();
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct relate<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename Mask, typename Strategy>
- struct visitor : boost::static_visitor<bool>
- {
- Geometry2 const& m_geometry2;
- Mask const& m_mask;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2, Mask const& mask, Strategy const& strategy)
- : m_geometry2(geometry2), m_mask(mask), m_strategy(strategy) {}
-
- template <typename Geometry1>
- bool operator()(Geometry1 const& geometry1) const
- {
- return relate<Geometry1, Geometry2>
- ::apply(geometry1, m_geometry2, m_mask, m_strategy);
- }
- };
-
- template <typename Mask, typename Strategy>
- static inline bool
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Mask const& mask,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Mask, Strategy>(geometry2, mask, strategy), geometry1);
- }
-};
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct relate<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Mask, typename Strategy>
- struct visitor : boost::static_visitor<bool>
- {
- Geometry1 const& m_geometry1;
- Mask const& m_mask;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1, Mask const& mask, Strategy const& strategy)
- : m_geometry1(geometry1), m_mask(mask), m_strategy(strategy) {}
-
- template <typename Geometry2>
- bool operator()(Geometry2 const& geometry2) const
- {
- return relate<Geometry1, Geometry2>
- ::apply(m_geometry1, geometry2, m_mask, m_strategy);
- }
- };
-
- template <typename Mask, typename Strategy>
- static inline bool
- apply(Geometry1 const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- Mask const& mask,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Mask, Strategy>(geometry1, mask, strategy), geometry2);
- }
-};
-
-template <
- BOOST_VARIANT_ENUM_PARAMS(typename T1),
- BOOST_VARIANT_ENUM_PARAMS(typename T2)
->
-struct relate<
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
->
-{
- template <typename Mask, typename Strategy>
- struct visitor : boost::static_visitor<bool>
- {
- Mask const& m_mask;
- Strategy const& m_strategy;
-
- visitor(Mask const& mask, Strategy const& strategy)
- : m_mask(mask), m_strategy(strategy) {}
-
- template <typename Geometry1, typename Geometry2>
- bool operator()(Geometry1 const& geometry1,
- Geometry2 const& geometry2) const
- {
- return relate<Geometry1, Geometry2>
- ::apply(geometry1, geometry2, m_mask, m_strategy);
- }
- };
-
- template <typename Mask, typename Strategy>
- static inline bool
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Mask const& mask,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Mask, Strategy>(mask, strategy), geometry1, geometry2);
- }
-};
-
-} // namespace resolve_variant
-
-/*!
-\brief Checks relation between a pair of geometries defined by a mask.
-\ingroup relate
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Mask An intersection model Mask type.
-\tparam Strategy \tparam_strategy{Relate}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param mask An intersection model mask object.
-\param strategy \param_strategy{relate}
-\return true if the relation is compatible with the mask, false otherwise.
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/relate.qbk]}
- */
-template <typename Geometry1, typename Geometry2, typename Mask, typename Strategy>
-inline bool relate(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Mask const& mask,
- Strategy const& strategy)
-{
- return resolve_variant::relate
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, mask, strategy);
-}
-
-/*!
-\brief Checks relation between a pair of geometries defined by a mask.
-\ingroup relate
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Mask An intersection model Mask type.
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param mask An intersection model mask object.
-\return true if the relation is compatible with the mask, false otherwise.
-
-\qbk{[include reference/algorithms/relate.qbk]}
- */
-template <typename Geometry1, typename Geometry2, typename Mask>
-inline bool relate(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Mask const& mask)
-{
- return resolve_variant::relate
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, mask, default_strategy());
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/linear_areal.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/linear_areal.hpp
deleted file mode 100644
index ddbd7d615a7..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/linear_areal.hpp
+++ /dev/null
@@ -1,1468 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LINEAR_AREAL_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LINEAR_AREAL_HPP
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range/size.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/topological_dimension.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
-#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-#include <boost/geometry/algorithms/detail/sub_range.hpp>
-#include <boost/geometry/algorithms/detail/single_geometry.hpp>
-
-#include <boost/geometry/algorithms/detail/relate/point_geometry.hpp>
-#include <boost/geometry/algorithms/detail/relate/turns.hpp>
-#include <boost/geometry/algorithms/detail/relate/boundary_checker.hpp>
-#include <boost/geometry/algorithms/detail/relate/follow_helpers.hpp>
-
-#include <boost/geometry/views/detail/normalized_view.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate {
-
-// WARNING!
-// TODO: In the worst case calling this Pred in a loop for MultiLinestring/MultiPolygon may take O(NM)
-// Use the rtree in this case!
-
-// may be used to set IE and BE for a Linear geometry for which no turns were generated
-template
-<
- typename Geometry2,
- typename Result,
- typename PointInArealStrategy,
- typename BoundaryChecker,
- bool TransposeResult
->
-class no_turns_la_linestring_pred
-{
-public:
- no_turns_la_linestring_pred(Geometry2 const& geometry2,
- Result & res,
- PointInArealStrategy const& point_in_areal_strategy,
- BoundaryChecker const& boundary_checker)
- : m_geometry2(geometry2)
- , m_result(res)
- , m_point_in_areal_strategy(point_in_areal_strategy)
- , m_boundary_checker(boundary_checker)
- , m_interrupt_flags(0)
- {
- if ( ! may_update<interior, interior, '1', TransposeResult>(m_result) )
- {
- m_interrupt_flags |= 1;
- }
-
- if ( ! may_update<interior, exterior, '1', TransposeResult>(m_result) )
- {
- m_interrupt_flags |= 2;
- }
-
- if ( ! may_update<boundary, interior, '0', TransposeResult>(m_result) )
- {
- m_interrupt_flags |= 4;
- }
-
- if ( ! may_update<boundary, exterior, '0', TransposeResult>(m_result) )
- {
- m_interrupt_flags |= 8;
- }
- }
-
- template <typename Linestring>
- bool operator()(Linestring const& linestring)
- {
- std::size_t const count = boost::size(linestring);
-
- // invalid input
- if ( count < 2 )
- {
- // ignore
- // TODO: throw an exception?
- return true;
- }
-
- // if those flags are set nothing will change
- if ( m_interrupt_flags == 0xF )
- {
- return false;
- }
-
- int const pig = detail::within::point_in_geometry(range::front(linestring),
- m_geometry2,
- m_point_in_areal_strategy);
- //BOOST_GEOMETRY_ASSERT_MSG(pig != 0, "There should be no IPs");
-
- if ( pig > 0 )
- {
- update<interior, interior, '1', TransposeResult>(m_result);
- m_interrupt_flags |= 1;
- }
- else
- {
- update<interior, exterior, '1', TransposeResult>(m_result);
- m_interrupt_flags |= 2;
- }
-
- // check if there is a boundary
- if ( ( m_interrupt_flags & 0xC ) != 0xC // if wasn't already set
- && ( m_boundary_checker.template
- is_endpoint_boundary<boundary_front>(range::front(linestring))
- || m_boundary_checker.template
- is_endpoint_boundary<boundary_back>(range::back(linestring)) ) )
- {
- if ( pig > 0 )
- {
- update<boundary, interior, '0', TransposeResult>(m_result);
- m_interrupt_flags |= 4;
- }
- else
- {
- update<boundary, exterior, '0', TransposeResult>(m_result);
- m_interrupt_flags |= 8;
- }
- }
-
- return m_interrupt_flags != 0xF
- && ! m_result.interrupt;
- }
-
-private:
- Geometry2 const& m_geometry2;
- Result & m_result;
- PointInArealStrategy const& m_point_in_areal_strategy;
- BoundaryChecker const& m_boundary_checker;
- unsigned m_interrupt_flags;
-};
-
-// may be used to set EI and EB for an Areal geometry for which no turns were generated
-template <typename Result, bool TransposeResult>
-class no_turns_la_areal_pred
-{
-public:
- no_turns_la_areal_pred(Result & res)
- : m_result(res)
- , interrupt(! may_update<interior, exterior, '2', TransposeResult>(m_result)
- && ! may_update<boundary, exterior, '1', TransposeResult>(m_result) )
- {}
-
- template <typename Areal>
- bool operator()(Areal const& areal)
- {
- if ( interrupt )
- {
- return false;
- }
-
- // TODO:
- // handle empty/invalid geometries in a different way than below?
-
- typedef typename geometry::point_type<Areal>::type point_type;
- point_type dummy;
- bool const ok = boost::geometry::point_on_border(dummy, areal);
-
- // TODO: for now ignore, later throw an exception?
- if ( !ok )
- {
- return true;
- }
-
- update<interior, exterior, '2', TransposeResult>(m_result);
- update<boundary, exterior, '1', TransposeResult>(m_result);
-
- return false;
- }
-
-private:
- Result & m_result;
- bool const interrupt;
-};
-
-// The implementation of an algorithm calculating relate() for L/A
-template <typename Geometry1, typename Geometry2, bool TransposeResult = false>
-struct linear_areal
-{
- // check Linear / Areal
- BOOST_STATIC_ASSERT(topological_dimension<Geometry1>::value == 1
- && topological_dimension<Geometry2>::value == 2);
-
- static const bool interruption_enabled = true;
-
- typedef typename geometry::point_type<Geometry1>::type point1_type;
- typedef typename geometry::point_type<Geometry2>::type point2_type;
-
- template <typename Geometry>
- struct is_multi
- : boost::is_base_of
- <
- multi_tag,
- typename tag<Geometry>::type
- >
- {};
-
- template <typename Geom1, typename Geom2>
- struct multi_turn_info
- : turns::get_turns<Geom1, Geom2>::turn_info
- {
- multi_turn_info() : priority(0) {}
- int priority; // single-geometry sorting priority
- };
-
- template <typename Geom1, typename Geom2>
- struct turn_info_type
- : boost::mpl::if_c
- <
- is_multi<Geometry2>::value,
- multi_turn_info<Geom1, Geom2>,
- typename turns::get_turns<Geom1, Geom2>::turn_info
- >
- {};
-
- template <typename Result, typename IntersectionStrategy>
- static inline void apply(Geometry1 const& geometry1, Geometry2 const& geometry2,
- Result & result,
- IntersectionStrategy const& intersection_strategy)
- {
-// TODO: If Areal geometry may have infinite size, change the following line:
-
- // The result should be FFFFFFFFF
- relate::set<exterior, exterior, result_dimension<Geometry2>::value, TransposeResult>(result);// FFFFFFFFd, d in [1,9] or T
-
- if ( BOOST_GEOMETRY_CONDITION( result.interrupt ) )
- return;
-
- // get and analyse turns
- typedef typename turn_info_type<Geometry1, Geometry2>::type turn_type;
- std::vector<turn_type> turns;
-
- interrupt_policy_linear_areal<Geometry2, Result> interrupt_policy(geometry2, result);
-
- turns::get_turns<Geometry1, Geometry2>::apply(turns, geometry1, geometry2, interrupt_policy, intersection_strategy);
- if ( BOOST_GEOMETRY_CONDITION( result.interrupt ) )
- return;
-
- typedef typename IntersectionStrategy::template point_in_geometry_strategy<Geometry1, Geometry2>::type within_strategy_type;
- within_strategy_type const within_strategy = intersection_strategy.template get_point_in_geometry_strategy<Geometry1, Geometry2>();
- boundary_checker<Geometry1> boundary_checker1(geometry1);
- no_turns_la_linestring_pred
- <
- Geometry2,
- Result,
- within_strategy_type,
- boundary_checker<Geometry1>,
- TransposeResult
- > pred1(geometry2,
- result,
- within_strategy,
- boundary_checker1);
- for_each_disjoint_geometry_if<0, Geometry1>::apply(turns.begin(), turns.end(), geometry1, pred1);
- if ( BOOST_GEOMETRY_CONDITION( result.interrupt ) )
- return;
-
- no_turns_la_areal_pred<Result, !TransposeResult> pred2(result);
- for_each_disjoint_geometry_if<1, Geometry2>::apply(turns.begin(), turns.end(), geometry2, pred2);
- if ( BOOST_GEOMETRY_CONDITION( result.interrupt ) )
- return;
-
- if ( turns.empty() )
- return;
-
- // This is set here because in the case if empty Areal geometry were passed
- // those shouldn't be set
- relate::set<exterior, interior, '2', TransposeResult>(result);// FFFFFF2Fd
- if ( BOOST_GEOMETRY_CONDITION( result.interrupt ) )
- return;
-
- {
- sort_dispatch(turns.begin(), turns.end(), is_multi<Geometry2>());
-
- turns_analyser<turn_type> analyser;
- analyse_each_turn(result, analyser,
- turns.begin(), turns.end(),
- geometry1, geometry2,
- boundary_checker1,
- intersection_strategy.get_side_strategy());
-
- if ( BOOST_GEOMETRY_CONDITION( result.interrupt ) )
- return;
- }
-
- // If 'c' (insersection_boundary) was not found we know that any Ls isn't equal to one of the Rings
- if ( !interrupt_policy.is_boundary_found )
- {
- relate::set<exterior, boundary, '1', TransposeResult>(result);
- }
- // Don't calculate it if it's required
- else if ( may_update<exterior, boundary, '1', TransposeResult>(result) )
- {
-// TODO: REVISE THIS CODE AND PROBABLY REWRITE SOME PARTS TO BE MORE HUMAN-READABLE
-// IN GENERAL IT ANALYSES THE RINGS OF AREAL GEOMETRY AND DETECTS THE ONES THAT
-// MAY OVERLAP THE INTERIOR OF LINEAR GEOMETRY (NO IPs OR NON-FAKE 'u' OPERATION)
-// NOTE: For one case std::sort may be called again to sort data by operations for data already sorted by ring index
-// In the worst case scenario the complexity will be O( NlogN + R*(N/R)log(N/R) )
-// So always should remain O(NlogN) -> for R==1 <-> 1(N/1)log(N/1), for R==N <-> N(N/N)log(N/N)
-// Some benchmarking should probably be done to check if only one std::sort should be used
-
- // sort by multi_index and rind_index
- std::sort(turns.begin(), turns.end(), less_ring());
-
- typedef typename std::vector<turn_type>::iterator turn_iterator;
-
- turn_iterator it = turns.begin();
- segment_identifier * prev_seg_id_ptr = NULL;
- // for each ring
- for ( ; it != turns.end() ; )
- {
- // it's the next single geometry
- if ( prev_seg_id_ptr == NULL
- || prev_seg_id_ptr->multi_index != it->operations[1].seg_id.multi_index )
- {
- // if the first ring has no IPs
- if ( it->operations[1].seg_id.ring_index > -1 )
- {
- // we can be sure that the exterior overlaps the boundary
- relate::set<exterior, boundary, '1', TransposeResult>(result);
- break;
- }
- // if there was some previous ring
- if ( prev_seg_id_ptr != NULL )
- {
- signed_size_type const next_ring_index = prev_seg_id_ptr->ring_index + 1;
- BOOST_GEOMETRY_ASSERT(next_ring_index >= 0);
-
- // if one of the last rings of previous single geometry was ommited
- if ( static_cast<std::size_t>(next_ring_index)
- < geometry::num_interior_rings(
- single_geometry(geometry2, *prev_seg_id_ptr)) )
- {
- // we can be sure that the exterior overlaps the boundary
- relate::set<exterior, boundary, '1', TransposeResult>(result);
- break;
- }
- }
- }
- // if it's the same single geometry
- else /*if ( previous_multi_index == it->operations[1].seg_id.multi_index )*/
- {
- // and we jumped over one of the rings
- if ( prev_seg_id_ptr != NULL // just in case
- && prev_seg_id_ptr->ring_index + 1 < it->operations[1].seg_id.ring_index )
- {
- // we can be sure that the exterior overlaps the boundary
- relate::set<exterior, boundary, '1', TransposeResult>(result);
- break;
- }
- }
-
- prev_seg_id_ptr = boost::addressof(it->operations[1].seg_id);
-
- // find the next ring first iterator and check if the analysis should be performed
- has_boundary_intersection has_boundary_inters;
- turn_iterator next = find_next_ring(it, turns.end(), has_boundary_inters);
-
- // if there is no 1d overlap with the boundary
- if ( !has_boundary_inters.result )
- {
- // we can be sure that the exterior overlaps the boundary
- relate::set<exterior, boundary, '1', TransposeResult>(result);
- break;
- }
- // else there is 1d overlap with the boundary so we must analyse the boundary
- else
- {
- // u, c
- typedef turns::less<1, turns::less_op_areal_linear<1> > less;
- std::sort(it, next, less());
-
- // analyse
- areal_boundary_analyser<turn_type> analyser;
- for ( turn_iterator rit = it ; rit != next ; ++rit )
- {
- // if the analyser requests, break the search
- if ( !analyser.apply(it, rit, next) )
- break;
- }
-
- // if the boundary of Areal goes out of the Linear
- if ( analyser.is_union_detected )
- {
- // we can be sure that the boundary of Areal overlaps the exterior of Linear
- relate::set<exterior, boundary, '1', TransposeResult>(result);
- break;
- }
- }
-
- it = next;
- }
-
- // if there was some previous ring
- if ( prev_seg_id_ptr != NULL )
- {
- signed_size_type const next_ring_index = prev_seg_id_ptr->ring_index + 1;
- BOOST_GEOMETRY_ASSERT(next_ring_index >= 0);
-
- // if one of the last rings of previous single geometry was ommited
- if ( static_cast<std::size_t>(next_ring_index)
- < geometry::num_interior_rings(
- single_geometry(geometry2, *prev_seg_id_ptr)) )
- {
- // we can be sure that the exterior overlaps the boundary
- relate::set<exterior, boundary, '1', TransposeResult>(result);
- }
- }
- }
- }
-
- template <typename It, typename Pred, typename Comp>
- static void for_each_equal_range(It first, It last, Pred pred, Comp comp)
- {
- if ( first == last )
- return;
-
- It first_equal = first;
- It prev = first;
- for ( ++first ; ; ++first, ++prev )
- {
- if ( first == last || !comp(*prev, *first) )
- {
- pred(first_equal, first);
- first_equal = first;
- }
-
- if ( first == last )
- break;
- }
- }
-
- struct same_ip
- {
- template <typename Turn>
- bool operator()(Turn const& left, Turn const& right) const
- {
- return left.operations[0].seg_id == right.operations[0].seg_id
- && left.operations[0].fraction == right.operations[0].fraction;
- }
- };
-
- struct same_ip_and_multi_index
- {
- template <typename Turn>
- bool operator()(Turn const& left, Turn const& right) const
- {
- return same_ip()(left, right)
- && left.operations[1].seg_id.multi_index == right.operations[1].seg_id.multi_index;
- }
- };
-
- template <typename OpToPriority>
- struct set_turns_group_priority
- {
- template <typename TurnIt>
- void operator()(TurnIt first, TurnIt last) const
- {
- BOOST_GEOMETRY_ASSERT(first != last);
- static OpToPriority op_to_priority;
- // find the operation with the least priority
- int least_priority = op_to_priority(first->operations[0]);
- for ( TurnIt it = first + 1 ; it != last ; ++it )
- {
- int priority = op_to_priority(it->operations[0]);
- if ( priority < least_priority )
- least_priority = priority;
- }
- // set the least priority for all turns of the group
- for ( TurnIt it = first ; it != last ; ++it )
- {
- it->priority = least_priority;
- }
- }
- };
-
- template <typename SingleLess>
- struct sort_turns_group
- {
- struct less
- {
- template <typename Turn>
- bool operator()(Turn const& left, Turn const& right) const
- {
- return left.operations[1].seg_id.multi_index == right.operations[1].seg_id.multi_index ?
- SingleLess()(left, right) :
- left.priority < right.priority;
- }
- };
-
- template <typename TurnIt>
- void operator()(TurnIt first, TurnIt last) const
- {
- std::sort(first, last, less());
- }
- };
-
- template <typename TurnIt>
- static void sort_dispatch(TurnIt first, TurnIt last, boost::true_type const& /*is_multi*/)
- {
- // sort turns by Linear seg_id, then by fraction, then by other multi_index
- typedef turns::less<0, turns::less_other_multi_index<0> > less;
- std::sort(first, last, less());
-
- // For the same IP and multi_index - the same other's single geometry
- // set priorities as the least operation found for the whole single geometry
- // so e.g. single geometries containing 'u' will always be before those only containing 'i'
- typedef turns::op_to_int<0,2,3,1,4,0> op_to_int_xuic;
- for_each_equal_range(first, last,
- set_turns_group_priority<op_to_int_xuic>(), // least operation in xuic order
- same_ip_and_multi_index()); // other's multi_index
-
- // When priorities for single geometries are set now sort turns for the same IP
- // if multi_index is the same sort them according to the single-less
- // else use priority of the whole single-geometry set earlier
- typedef turns::less<0, turns::less_op_linear_areal_single<0> > single_less;
- for_each_equal_range(first, last,
- sort_turns_group<single_less>(),
- same_ip());
- }
-
- template <typename TurnIt>
- static void sort_dispatch(TurnIt first, TurnIt last, boost::false_type const& /*is_multi*/)
- {
- // sort turns by Linear seg_id, then by fraction, then
- // for same ring id: x, u, i, c
- // for different ring id: c, i, u, x
- typedef turns::less<0, turns::less_op_linear_areal_single<0> > less;
- std::sort(first, last, less());
- }
-
-
- // interrupt policy which may be passed to get_turns to interrupt the analysis
- // based on the info in the passed result/mask
- template <typename Areal, typename Result>
- class interrupt_policy_linear_areal
- {
- public:
- static bool const enabled = true;
-
- interrupt_policy_linear_areal(Areal const& areal, Result & result)
- : m_result(result), m_areal(areal)
- , is_boundary_found(false)
- {}
-
-// TODO: since we update result for some operations here, we may not do it in the analyser!
-
- template <typename Range>
- inline bool apply(Range const& turns)
- {
- typedef typename boost::range_iterator<Range const>::type iterator;
-
- for (iterator it = boost::begin(turns) ; it != boost::end(turns) ; ++it)
- {
- if ( it->operations[0].operation == overlay::operation_intersection )
- {
- bool const no_interior_rings
- = geometry::num_interior_rings(
- single_geometry(m_areal, it->operations[1].seg_id)) == 0;
-
- // WARNING! THIS IS TRUE ONLY IF THE POLYGON IS SIMPLE!
- // OR WITHOUT INTERIOR RINGS (AND OF COURSE VALID)
- if ( no_interior_rings )
- update<interior, interior, '1', TransposeResult>(m_result);
- }
- else if ( it->operations[0].operation == overlay::operation_continue )
- {
- update<interior, boundary, '1', TransposeResult>(m_result);
- is_boundary_found = true;
- }
- else if ( ( it->operations[0].operation == overlay::operation_union
- || it->operations[0].operation == overlay::operation_blocked )
- && it->operations[0].position == overlay::position_middle )
- {
-// TODO: here we could also check the boundaries and set BB at this point
- update<interior, boundary, '0', TransposeResult>(m_result);
- }
- }
-
- return m_result.interrupt;
- }
-
- private:
- Result & m_result;
- Areal const& m_areal;
-
- public:
- bool is_boundary_found;
- };
-
- // This analyser should be used like Input or SinglePass Iterator
- // IMPORTANT! It should be called also for the end iterator - last
- template <typename TurnInfo>
- class turns_analyser
- {
- typedef typename TurnInfo::point_type turn_point_type;
-
- static const std::size_t op_id = 0;
- static const std::size_t other_op_id = 1;
-
- public:
- turns_analyser()
- : m_previous_turn_ptr(NULL)
- , m_previous_operation(overlay::operation_none)
- , m_boundary_counter(0)
- , m_interior_detected(false)
- , m_first_interior_other_id_ptr(NULL)
- , m_first_from_unknown(false)
- , m_first_from_unknown_boundary_detected(false)
- {}
-
- template <typename Result,
- typename TurnIt,
- typename Geometry,
- typename OtherGeometry,
- typename BoundaryChecker,
- typename SideStrategy>
- void apply(Result & res, TurnIt it,
- Geometry const& geometry,
- OtherGeometry const& other_geometry,
- BoundaryChecker const& boundary_checker,
- SideStrategy const& side_strategy)
- {
- overlay::operation_type op = it->operations[op_id].operation;
-
- if ( op != overlay::operation_union
- && op != overlay::operation_intersection
- && op != overlay::operation_blocked
- && op != overlay::operation_continue ) // operation_boundary / operation_boundary_intersection
- {
- return;
- }
-
- segment_identifier const& seg_id = it->operations[op_id].seg_id;
- segment_identifier const& other_id = it->operations[other_op_id].seg_id;
-
- const bool first_in_range = m_seg_watcher.update(seg_id);
-
- // TODO: should apply() for the post-last ip be called if first_in_range ?
- // this would unify how last points in ranges are handled
- // possibly replacing parts of the code below
- // e.g. for is_multi and m_interior_detected
-
- // handle possible exit
- bool fake_enter_detected = false;
- if ( m_exit_watcher.get_exit_operation() == overlay::operation_union )
- {
- // real exit point - may be multiple
- // we know that we entered and now we exit
- if ( ! turn_on_the_same_ip<op_id>(m_exit_watcher.get_exit_turn(), *it) )
- {
- m_exit_watcher.reset_detected_exit();
-
- update<interior, exterior, '1', TransposeResult>(res);
-
- // next single geometry
- if ( first_in_range && m_previous_turn_ptr )
- {
- // NOTE: similar code is in the post-last-ip-apply()
- segment_identifier const& prev_seg_id = m_previous_turn_ptr->operations[op_id].seg_id;
-
- bool const prev_back_b = is_endpoint_on_boundary<boundary_back>(
- range::back(sub_range(geometry, prev_seg_id)),
- boundary_checker);
-
- // if there is a boundary on the last point
- if ( prev_back_b )
- {
- update<boundary, exterior, '0', TransposeResult>(res);
- }
- }
- }
- // fake exit point, reset state
- else if ( op == overlay::operation_intersection
- || op == overlay::operation_continue ) // operation_boundary
- {
- m_exit_watcher.reset_detected_exit();
- fake_enter_detected = true;
- }
- }
- else if ( m_exit_watcher.get_exit_operation() == overlay::operation_blocked )
- {
- // ignore multiple BLOCKs for this same single geometry1
- if ( op == overlay::operation_blocked
- && seg_id.multi_index == m_previous_turn_ptr->operations[op_id].seg_id.multi_index )
- {
- return;
- }
-
- if ( ( op == overlay::operation_intersection
- || op == overlay::operation_continue )
- && turn_on_the_same_ip<op_id>(m_exit_watcher.get_exit_turn(), *it) )
- {
- fake_enter_detected = true;
- }
-
- m_exit_watcher.reset_detected_exit();
- }
-
- if ( BOOST_GEOMETRY_CONDITION( is_multi<OtherGeometry>::value )
- && m_first_from_unknown )
- {
- // For MultiPolygon many x/u operations may be generated as a first IP
- // if for all turns x/u was generated and any of the Polygons doesn't contain the LineString
- // then we know that the LineString is outside
- // Similar with the u/u turns, if it was the first one it doesn't mean that the
- // Linestring came from the exterior
- if ( ( m_previous_operation == overlay::operation_blocked
- && ( op != overlay::operation_blocked // operation different than block
- || seg_id.multi_index != m_previous_turn_ptr->operations[op_id].seg_id.multi_index ) ) // or the next single-geometry
- || ( m_previous_operation == overlay::operation_union
- && ! turn_on_the_same_ip<op_id>(*m_previous_turn_ptr, *it) )
- )
- {
- update<interior, exterior, '1', TransposeResult>(res);
- if ( m_first_from_unknown_boundary_detected )
- {
- update<boundary, exterior, '0', TransposeResult>(res);
- }
-
- m_first_from_unknown = false;
- m_first_from_unknown_boundary_detected = false;
- }
- }
-
-// NOTE: THE WHOLE m_interior_detected HANDLING IS HERE BECAUSE WE CAN'T EFFICIENTLY SORT TURNS (CORRECTLY)
-// BECAUSE THE SAME IP MAY BE REPRESENTED BY TWO SEGMENTS WITH DIFFERENT DISTANCES
-// IT WOULD REQUIRE THE CALCULATION OF MAX DISTANCE
-// TODO: WE COULD GET RID OF THE TEST IF THE DISTANCES WERE NORMALIZED
-
-// UPDATE: THEY SHOULD BE NORMALIZED NOW
-
-// TODO: THIS IS POTENTIALLY ERROREOUS!
-// THIS ALGORITHM DEPENDS ON SOME SPECIFIC SEQUENCE OF OPERATIONS
-// IT WOULD GIVE WRONG RESULTS E.G.
-// IN THE CASE OF SELF-TOUCHING POINT WHEN 'i' WOULD BE BEFORE 'u'
-
- // handle the interior overlap
- if ( m_interior_detected )
- {
- BOOST_GEOMETRY_ASSERT_MSG(m_previous_turn_ptr, "non-NULL ptr expected");
-
- // real interior overlap
- if ( ! turn_on_the_same_ip<op_id>(*m_previous_turn_ptr, *it) )
- {
- update<interior, interior, '1', TransposeResult>(res);
- m_interior_detected = false;
-
- // new range detected - reset previous state and check the boundary
- if ( first_in_range )
- {
- segment_identifier const& prev_seg_id = m_previous_turn_ptr->operations[op_id].seg_id;
-
- bool const prev_back_b = is_endpoint_on_boundary<boundary_back>(
- range::back(sub_range(geometry, prev_seg_id)),
- boundary_checker);
-
- // if there is a boundary on the last point
- if ( prev_back_b )
- {
- update<boundary, interior, '0', TransposeResult>(res);
- }
-
- // The exit_watcher is reset below
- // m_exit_watcher.reset();
- }
- }
- // fake interior overlap
- else if ( op == overlay::operation_continue )
- {
- m_interior_detected = false;
- }
- else if ( op == overlay::operation_union )
- {
-// TODO: this probably is not a good way of handling the interiors/enters
-// the solution similar to exit_watcher would be more robust
-// all enters should be kept and handled.
-// maybe integrate it with the exit_watcher -> enter_exit_watcher
- if ( m_first_interior_other_id_ptr
- && m_first_interior_other_id_ptr->multi_index == other_id.multi_index )
- {
- m_interior_detected = false;
- }
- }
- }
-
- // NOTE: If post-last-ip apply() was called this wouldn't be needed
- if ( first_in_range )
- {
- m_exit_watcher.reset();
- m_boundary_counter = 0;
- m_first_from_unknown = false;
- m_first_from_unknown_boundary_detected = false;
- }
-
- // i/u, c/u
- if ( op == overlay::operation_intersection
- || op == overlay::operation_continue ) // operation_boundary/operation_boundary_intersection
- {
- bool const first_point = first_in_range || m_first_from_unknown;
- bool no_enters_detected = m_exit_watcher.is_outside();
- m_exit_watcher.enter(*it);
-
- if ( op == overlay::operation_intersection )
- {
- if ( m_boundary_counter > 0 && it->operations[op_id].is_collinear )
- --m_boundary_counter;
-
- if ( m_boundary_counter == 0 )
- {
- // interiors overlaps
- //update<interior, interior, '1', TransposeResult>(res);
-
-// TODO: think about the implementation of the more robust version
-// this way only the first enter will be handled
- if ( !m_interior_detected )
- {
- // don't update now
- // we might enter a boundary of some other ring on the same IP
- m_interior_detected = true;
- m_first_interior_other_id_ptr = boost::addressof(other_id);
- }
- }
- }
- else // operation_boundary
- {
- // don't add to the count for all met boundaries
- // only if this is the "new" boundary
- if ( first_point || !it->operations[op_id].is_collinear )
- ++m_boundary_counter;
-
- update<interior, boundary, '1', TransposeResult>(res);
- }
-
- bool const this_b
- = is_ip_on_boundary<boundary_front>(it->point,
- it->operations[op_id],
- boundary_checker,
- seg_id);
- // going inside on boundary point
- if ( this_b )
- {
- update<boundary, boundary, '0', TransposeResult>(res);
- }
- // going inside on non-boundary point
- else
- {
- update<interior, boundary, '0', TransposeResult>(res);
-
- // if we didn't enter in the past, we were outside
- if ( no_enters_detected
- && ! fake_enter_detected
- && it->operations[op_id].position != overlay::position_front )
- {
-// TODO: calculate_from_inside() is only needed if the current Linestring is not closed
- bool const from_inside = first_point
- && calculate_from_inside(geometry,
- other_geometry,
- *it,
- side_strategy);
-
- if ( from_inside )
- update<interior, interior, '1', TransposeResult>(res);
- else
- update<interior, exterior, '1', TransposeResult>(res);
-
- // if it's the first IP then the first point is outside
- if ( first_point )
- {
- bool const front_b = is_endpoint_on_boundary<boundary_front>(
- range::front(sub_range(geometry, seg_id)),
- boundary_checker);
-
- // if there is a boundary on the first point
- if ( front_b )
- {
- if ( from_inside )
- update<boundary, interior, '0', TransposeResult>(res);
- else
- update<boundary, exterior, '0', TransposeResult>(res);
- }
- }
- }
- }
-
- if ( BOOST_GEOMETRY_CONDITION( is_multi<OtherGeometry>::value ) )
- {
- m_first_from_unknown = false;
- m_first_from_unknown_boundary_detected = false;
- }
- }
- // u/u, x/u
- else if ( op == overlay::operation_union || op == overlay::operation_blocked )
- {
- bool const op_blocked = op == overlay::operation_blocked;
- bool const no_enters_detected = m_exit_watcher.is_outside()
-// TODO: is this condition ok?
-// TODO: move it into the exit_watcher?
- && m_exit_watcher.get_exit_operation() == overlay::operation_none;
-
- if ( op == overlay::operation_union )
- {
- if ( m_boundary_counter > 0 && it->operations[op_id].is_collinear )
- --m_boundary_counter;
- }
- else // overlay::operation_blocked
- {
- m_boundary_counter = 0;
- }
-
- // we're inside, possibly going out right now
- if ( ! no_enters_detected )
- {
- if ( op_blocked
- && it->operations[op_id].position == overlay::position_back ) // ignore spikes!
- {
- // check if this is indeed the boundary point
- // NOTE: is_ip_on_boundary<>() should be called here but the result will be the same
- if ( is_endpoint_on_boundary<boundary_back>(it->point, boundary_checker) )
- {
- update<boundary, boundary, '0', TransposeResult>(res);
- }
- }
- // union, inside, but no exit -> collinear on self-intersection point
- // not needed since we're already inside the boundary
- /*else if ( !exit_detected )
- {
- update<interior, boundary, '0', TransposeResult>(res);
- }*/
- }
- // we're outside or inside and this is the first turn
- else
- {
- bool const this_b = is_ip_on_boundary<boundary_any>(it->point,
- it->operations[op_id],
- boundary_checker,
- seg_id);
- // if current IP is on boundary of the geometry
- if ( this_b )
- {
- update<boundary, boundary, '0', TransposeResult>(res);
- }
- // if current IP is not on boundary of the geometry
- else
- {
- update<interior, boundary, '0', TransposeResult>(res);
- }
-
- // TODO: very similar code is used in the handling of intersection
- if ( it->operations[op_id].position != overlay::position_front )
- {
-// TODO: calculate_from_inside() is only needed if the current Linestring is not closed
- // NOTE: this is not enough for MultiPolygon and operation_blocked
- // For LS/MultiPolygon multiple x/u turns may be generated
- // the first checked Polygon may be the one which LS is outside for.
- bool const first_point = first_in_range || m_first_from_unknown;
- bool const first_from_inside = first_point
- && calculate_from_inside(geometry,
- other_geometry,
- *it,
- side_strategy);
- if ( first_from_inside )
- {
- update<interior, interior, '1', TransposeResult>(res);
-
- // notify the exit_watcher that we started inside
- m_exit_watcher.enter(*it);
- // and reset unknown flags since we know that we started inside
- m_first_from_unknown = false;
- m_first_from_unknown_boundary_detected = false;
- }
- else
- {
- if ( BOOST_GEOMETRY_CONDITION( is_multi<OtherGeometry>::value )
- /*&& ( op == overlay::operation_blocked
- || op == overlay::operation_union )*/ ) // if we're here it's u or x
- {
- m_first_from_unknown = true;
- }
- else
- {
- update<interior, exterior, '1', TransposeResult>(res);
- }
- }
-
- // first IP on the last segment point - this means that the first point is outside or inside
- if ( first_point && ( !this_b || op_blocked ) )
- {
- bool const front_b = is_endpoint_on_boundary<boundary_front>(
- range::front(sub_range(geometry, seg_id)),
- boundary_checker);
-
- // if there is a boundary on the first point
- if ( front_b )
- {
- if ( first_from_inside )
- {
- update<boundary, interior, '0', TransposeResult>(res);
- }
- else
- {
- if ( BOOST_GEOMETRY_CONDITION( is_multi<OtherGeometry>::value )
- /*&& ( op == overlay::operation_blocked
- || op == overlay::operation_union )*/ ) // if we're here it's u or x
- {
- BOOST_GEOMETRY_ASSERT(m_first_from_unknown);
- m_first_from_unknown_boundary_detected = true;
- }
- else
- {
- update<boundary, exterior, '0', TransposeResult>(res);
- }
- }
- }
- }
- }
- }
-
- // if we're going along a boundary, we exit only if the linestring was collinear
- if ( m_boundary_counter == 0
- || it->operations[op_id].is_collinear )
- {
- // notify the exit watcher about the possible exit
- m_exit_watcher.exit(*it);
- }
- }
-
- // store ref to previously analysed (valid) turn
- m_previous_turn_ptr = boost::addressof(*it);
- // and previously analysed (valid) operation
- m_previous_operation = op;
- }
-
- // it == last
- template <typename Result,
- typename TurnIt,
- typename Geometry,
- typename OtherGeometry,
- typename BoundaryChecker>
- void apply(Result & res,
- TurnIt first, TurnIt last,
- Geometry const& geometry,
- OtherGeometry const& /*other_geometry*/,
- BoundaryChecker const& boundary_checker)
- {
- boost::ignore_unused(first, last);
- //BOOST_GEOMETRY_ASSERT( first != last );
-
- // For MultiPolygon many x/u operations may be generated as a first IP
- // if for all turns x/u was generated and any of the Polygons doesn't contain the LineString
- // then we know that the LineString is outside
- if ( BOOST_GEOMETRY_CONDITION( is_multi<OtherGeometry>::value )
- && m_first_from_unknown )
- {
- update<interior, exterior, '1', TransposeResult>(res);
- if ( m_first_from_unknown_boundary_detected )
- {
- update<boundary, exterior, '0', TransposeResult>(res);
- }
-
- // done below
- //m_first_from_unknown = false;
- //m_first_from_unknown_boundary_detected = false;
- }
-
- // here, the possible exit is the real one
- // we know that we entered and now we exit
- if ( /*m_exit_watcher.get_exit_operation() == overlay::operation_union // THIS CHECK IS REDUNDANT
- ||*/ m_previous_operation == overlay::operation_union
- && !m_interior_detected )
- {
- // for sure
- update<interior, exterior, '1', TransposeResult>(res);
-
- BOOST_GEOMETRY_ASSERT(first != last);
- BOOST_GEOMETRY_ASSERT(m_previous_turn_ptr);
-
- segment_identifier const& prev_seg_id = m_previous_turn_ptr->operations[op_id].seg_id;
-
- bool const prev_back_b = is_endpoint_on_boundary<boundary_back>(
- range::back(sub_range(geometry, prev_seg_id)),
- boundary_checker);
-
- // if there is a boundary on the last point
- if ( prev_back_b )
- {
- update<boundary, exterior, '0', TransposeResult>(res);
- }
- }
- // we might enter some Areal and didn't go out,
- else if ( m_previous_operation == overlay::operation_intersection
- || m_interior_detected )
- {
- // just in case
- update<interior, interior, '1', TransposeResult>(res);
- m_interior_detected = false;
-
- BOOST_GEOMETRY_ASSERT(first != last);
- BOOST_GEOMETRY_ASSERT(m_previous_turn_ptr);
-
- segment_identifier const& prev_seg_id = m_previous_turn_ptr->operations[op_id].seg_id;
-
- bool const prev_back_b = is_endpoint_on_boundary<boundary_back>(
- range::back(sub_range(geometry, prev_seg_id)),
- boundary_checker);
-
- // if there is a boundary on the last point
- if ( prev_back_b )
- {
- update<boundary, interior, '0', TransposeResult>(res);
- }
- }
-
- // This condition may be false if the Linestring is lying on the Polygon's collinear spike
- // if Polygon's spikes are not handled in get_turns() or relate() (they currently aren't)
- //BOOST_GEOMETRY_ASSERT_MSG(m_previous_operation != overlay::operation_continue,
- // "Unexpected operation! Probably the error in get_turns(L,A) or relate(L,A)");
- // Currently one c/c turn is generated for the exit
- // when a Linestring is going out on a collinear spike
- // When a Linestring is going in on a collinear spike
- // the turn is not generated for the entry
- // So assume it's the former
- if ( m_previous_operation == overlay::operation_continue )
- {
- update<interior, exterior, '1', TransposeResult>(res);
-
- segment_identifier const& prev_seg_id = m_previous_turn_ptr->operations[op_id].seg_id;
-
- bool const prev_back_b = is_endpoint_on_boundary<boundary_back>(
- range::back(sub_range(geometry, prev_seg_id)),
- boundary_checker);
-
- // if there is a boundary on the last point
- if ( prev_back_b )
- {
- update<boundary, exterior, '0', TransposeResult>(res);
- }
- }
-
- // Reset exit watcher before the analysis of the next Linestring
- m_exit_watcher.reset();
- m_boundary_counter = 0;
- m_first_from_unknown = false;
- m_first_from_unknown_boundary_detected = false;
- }
-
- // check if the passed turn's segment of Linear geometry arrived
- // from the inside or the outside of the Areal geometry
- template <typename Turn, typename SideStrategy>
- static inline bool calculate_from_inside(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Turn const& turn,
- SideStrategy const& side_strategy)
- {
- typedef typename cs_tag<typename Turn::point_type>::type cs_tag;
-
- if ( turn.operations[op_id].position == overlay::position_front )
- return false;
-
- typename sub_range_return_type<Geometry1 const>::type
- range1 = sub_range(geometry1, turn.operations[op_id].seg_id);
-
- typedef detail::normalized_view<Geometry2 const> const range2_type;
- typedef typename boost::range_iterator<range2_type>::type range2_iterator;
- range2_type range2(sub_range(geometry2, turn.operations[other_op_id].seg_id));
-
- BOOST_GEOMETRY_ASSERT(boost::size(range1));
- std::size_t const s2 = boost::size(range2);
- BOOST_GEOMETRY_ASSERT(s2 > 2);
- std::size_t const seg_count2 = s2 - 1;
-
- std::size_t const p_seg_ij = static_cast<std::size_t>(turn.operations[op_id].seg_id.segment_index);
- std::size_t const q_seg_ij = static_cast<std::size_t>(turn.operations[other_op_id].seg_id.segment_index);
-
- BOOST_GEOMETRY_ASSERT(p_seg_ij + 1 < boost::size(range1));
- BOOST_GEOMETRY_ASSERT(q_seg_ij + 1 < s2);
-
- point1_type const& pi = range::at(range1, p_seg_ij);
- point2_type const& qi = range::at(range2, q_seg_ij);
- point2_type const& qj = range::at(range2, q_seg_ij + 1);
- point1_type qi_conv;
- geometry::convert(qi, qi_conv);
- bool const is_ip_qj = equals::equals_point_point(turn.point, qj);
-// TODO: test this!
-// BOOST_GEOMETRY_ASSERT(!equals::equals_point_point(turn.point, pi));
-// BOOST_GEOMETRY_ASSERT(!equals::equals_point_point(turn.point, qi));
- point1_type new_pj;
- geometry::convert(turn.point, new_pj);
-
- if ( is_ip_qj )
- {
- std::size_t const q_seg_jk = (q_seg_ij + 1) % seg_count2;
-// TODO: the following function should return immediately, however the worst case complexity is O(N)
-// It would be good to replace it with some O(1) mechanism
- range2_iterator qk_it = find_next_non_duplicated(boost::begin(range2),
- range::pos(range2, q_seg_jk),
- boost::end(range2));
-
- // Will this sequence of points be always correct?
- overlay::side_calculator<cs_tag, point1_type, point2_type, SideStrategy>
- side_calc(qi_conv, new_pj, pi, qi, qj, *qk_it, side_strategy);
-
- return calculate_from_inside_sides(side_calc);
- }
- else
- {
- point2_type new_qj;
- geometry::convert(turn.point, new_qj);
-
- overlay::side_calculator<cs_tag, point1_type, point2_type, SideStrategy>
- side_calc(qi_conv, new_pj, pi, qi, new_qj, qj, side_strategy);
-
- return calculate_from_inside_sides(side_calc);
- }
- }
-
- template <typename It>
- static inline It find_next_non_duplicated(It first, It current, It last)
- {
- BOOST_GEOMETRY_ASSERT( current != last );
-
- It it = current;
-
- for ( ++it ; it != last ; ++it )
- {
- if ( !equals::equals_point_point(*current, *it) )
- return it;
- }
-
- // if not found start from the beginning
- for ( it = first ; it != current ; ++it )
- {
- if ( !equals::equals_point_point(*current, *it) )
- return it;
- }
-
- return current;
- }
-
- // calculate inside or outside based on side_calc
- // this is simplified version of a check from equal<>
- template <typename SideCalc>
- static inline bool calculate_from_inside_sides(SideCalc const& side_calc)
- {
- int const side_pk_p = side_calc.pk_wrt_p1();
- int const side_qk_p = side_calc.qk_wrt_p1();
- // If they turn to same side (not opposite sides)
- if (! overlay::base_turn_handler::opposite(side_pk_p, side_qk_p))
- {
- int const side_pk_q2 = side_calc.pk_wrt_q2();
- return side_pk_q2 == -1;
- }
- else
- {
- return side_pk_p == -1;
- }
- }
-
- private:
- exit_watcher<TurnInfo, op_id> m_exit_watcher;
- segment_watcher<same_single> m_seg_watcher;
- TurnInfo * m_previous_turn_ptr;
- overlay::operation_type m_previous_operation;
- unsigned m_boundary_counter;
- bool m_interior_detected;
- const segment_identifier * m_first_interior_other_id_ptr;
- bool m_first_from_unknown;
- bool m_first_from_unknown_boundary_detected;
- };
-
- // call analyser.apply() for each turn in range
- // IMPORTANT! The analyser is also called for the end iterator - last
- template <typename Result,
- typename TurnIt,
- typename Analyser,
- typename Geometry,
- typename OtherGeometry,
- typename BoundaryChecker,
- typename SideStrategy>
- static inline void analyse_each_turn(Result & res,
- Analyser & analyser,
- TurnIt first, TurnIt last,
- Geometry const& geometry,
- OtherGeometry const& other_geometry,
- BoundaryChecker const& boundary_checker,
- SideStrategy const& side_strategy)
- {
- if ( first == last )
- return;
-
- for ( TurnIt it = first ; it != last ; ++it )
- {
- analyser.apply(res, it,
- geometry, other_geometry,
- boundary_checker,
- side_strategy);
-
- if ( BOOST_GEOMETRY_CONDITION( res.interrupt ) )
- return;
- }
-
- analyser.apply(res, first, last,
- geometry, other_geometry,
- boundary_checker);
- }
-
- // less comparator comparing multi_index then ring_index
- // may be used to sort turns by ring
- struct less_ring
- {
- template <typename Turn>
- inline bool operator()(Turn const& left, Turn const& right) const
- {
- return left.operations[1].seg_id.multi_index < right.operations[1].seg_id.multi_index
- || ( left.operations[1].seg_id.multi_index == right.operations[1].seg_id.multi_index
- && left.operations[1].seg_id.ring_index < right.operations[1].seg_id.ring_index );
- }
- };
-
- // policy/functor checking if a turn's operation is operation_continue
- struct has_boundary_intersection
- {
- has_boundary_intersection()
- : result(false) {}
-
- template <typename Turn>
- inline void operator()(Turn const& turn)
- {
- if ( turn.operations[1].operation == overlay::operation_continue )
- result = true;
- }
-
- bool result;
- };
-
- // iterate through the range and search for the different multi_index or ring_index
- // also call fun for each turn in the current range
- template <typename It, typename Fun>
- static inline It find_next_ring(It first, It last, Fun & fun)
- {
- if ( first == last )
- return last;
-
- signed_size_type const multi_index = first->operations[1].seg_id.multi_index;
- signed_size_type const ring_index = first->operations[1].seg_id.ring_index;
-
- fun(*first);
- ++first;
-
- for ( ; first != last ; ++first )
- {
- if ( multi_index != first->operations[1].seg_id.multi_index
- || ring_index != first->operations[1].seg_id.ring_index )
- {
- return first;
- }
-
- fun(*first);
- }
-
- return last;
- }
-
- // analyser which called for turns sorted by seg/distance/operation
- // checks if the boundary of Areal geometry really got out
- // into the exterior of Linear geometry
- template <typename TurnInfo>
- class areal_boundary_analyser
- {
- public:
- areal_boundary_analyser()
- : is_union_detected(false)
- , m_previous_turn_ptr(NULL)
- {}
-
- template <typename TurnIt>
- bool apply(TurnIt /*first*/, TurnIt it, TurnIt last)
- {
- overlay::operation_type op = it->operations[1].operation;
-
- if ( it != last )
- {
- if ( op != overlay::operation_union
- && op != overlay::operation_continue )
- {
- return true;
- }
-
- if ( is_union_detected )
- {
- BOOST_GEOMETRY_ASSERT(m_previous_turn_ptr != NULL);
- if ( !detail::equals::equals_point_point(it->point, m_previous_turn_ptr->point) )
- {
- // break
- return false;
- }
- else if ( op == overlay::operation_continue ) // operation_boundary
- {
- is_union_detected = false;
- }
- }
-
- if ( op == overlay::operation_union )
- {
- is_union_detected = true;
- m_previous_turn_ptr = boost::addressof(*it);
- }
-
- return true;
- }
- else
- {
- return false;
- }
- }
-
- bool is_union_detected;
-
- private:
- const TurnInfo * m_previous_turn_ptr;
- };
-};
-
-template <typename Geometry1, typename Geometry2>
-struct areal_linear
-{
- typedef linear_areal<Geometry2, Geometry1, true> linear_areal_type;
-
- static const bool interruption_enabled = linear_areal_type::interruption_enabled;
-
- template <typename Result, typename IntersectionStrategy>
- static inline void apply(Geometry1 const& geometry1, Geometry2 const& geometry2,
- Result & result,
- IntersectionStrategy const& intersection_strategy)
- {
- linear_areal_type::apply(geometry2, geometry1, result, intersection_strategy);
- }
-};
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LINEAR_AREAL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/linear_linear.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/linear_linear.hpp
deleted file mode 100644
index 520f2bd775f..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/linear_linear.hpp
+++ /dev/null
@@ -1,793 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LINEAR_LINEAR_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LINEAR_LINEAR_HPP
-
-#include <algorithm>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range/size.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/algorithms/detail/sub_range.hpp>
-#include <boost/geometry/algorithms/detail/single_geometry.hpp>
-
-#include <boost/geometry/algorithms/detail/relate/point_geometry.hpp>
-#include <boost/geometry/algorithms/detail/relate/result.hpp>
-#include <boost/geometry/algorithms/detail/relate/turns.hpp>
-#include <boost/geometry/algorithms/detail/relate/boundary_checker.hpp>
-#include <boost/geometry/algorithms/detail/relate/follow_helpers.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate {
-
-template <typename Result, typename BoundaryChecker, bool TransposeResult>
-class disjoint_linestring_pred
-{
-public:
- disjoint_linestring_pred(Result & res,
- BoundaryChecker const& boundary_checker)
- : m_result(res)
- , m_boundary_checker(boundary_checker)
- , m_flags(0)
- {
- if ( ! may_update<interior, exterior, '1', TransposeResult>(m_result) )
- {
- m_flags |= 1;
- }
- if ( ! may_update<boundary, exterior, '0', TransposeResult>(m_result) )
- {
- m_flags |= 2;
- }
- }
-
- template <typename Linestring>
- bool operator()(Linestring const& linestring)
- {
- if ( m_flags == 3 )
- {
- return false;
- }
-
- std::size_t const count = boost::size(linestring);
-
- // invalid input
- if ( count < 2 )
- {
- // ignore
- // TODO: throw an exception?
- return true;
- }
-
- // point-like linestring
- if ( count == 2
- && equals::equals_point_point(range::front(linestring),
- range::back(linestring)) )
- {
- update<interior, exterior, '0', TransposeResult>(m_result);
- }
- else
- {
- update<interior, exterior, '1', TransposeResult>(m_result);
- m_flags |= 1;
-
- // check if there is a boundary
- if ( m_flags < 2
- && ( m_boundary_checker.template
- is_endpoint_boundary<boundary_front>(range::front(linestring))
- || m_boundary_checker.template
- is_endpoint_boundary<boundary_back>(range::back(linestring)) ) )
- {
- update<boundary, exterior, '0', TransposeResult>(m_result);
- m_flags |= 2;
- }
- }
-
- return m_flags != 3
- && ! m_result.interrupt;
- }
-
-private:
- Result & m_result;
- BoundaryChecker const& m_boundary_checker;
- unsigned m_flags;
-};
-
-template <typename Geometry1, typename Geometry2>
-struct linear_linear
-{
- static const bool interruption_enabled = true;
-
- typedef typename geometry::point_type<Geometry1>::type point1_type;
- typedef typename geometry::point_type<Geometry2>::type point2_type;
-
- template <typename Result, typename IntersectionStrategy>
- static inline void apply(Geometry1 const& geometry1, Geometry2 const& geometry2,
- Result & result,
- IntersectionStrategy const& intersection_strategy)
- {
- // The result should be FFFFFFFFF
- relate::set<exterior, exterior, result_dimension<Geometry1>::value>(result);// FFFFFFFFd, d in [1,9] or T
- if ( BOOST_GEOMETRY_CONDITION( result.interrupt ) )
- return;
-
- // get and analyse turns
- typedef typename turns::get_turns<Geometry1, Geometry2>::turn_info turn_type;
- std::vector<turn_type> turns;
-
- interrupt_policy_linear_linear<Result> interrupt_policy(result);
-
- turns::get_turns
- <
- Geometry1,
- Geometry2,
- detail::get_turns::get_turn_info_type<Geometry1, Geometry2, turns::assign_policy<true> >
- >::apply(turns, geometry1, geometry2, interrupt_policy, intersection_strategy);
-
- if ( BOOST_GEOMETRY_CONDITION( result.interrupt ) )
- return;
-
- boundary_checker<Geometry1> boundary_checker1(geometry1);
- disjoint_linestring_pred<Result, boundary_checker<Geometry1>, false> pred1(result, boundary_checker1);
- for_each_disjoint_geometry_if<0, Geometry1>::apply(turns.begin(), turns.end(), geometry1, pred1);
- if ( BOOST_GEOMETRY_CONDITION( result.interrupt ) )
- return;
-
- boundary_checker<Geometry2> boundary_checker2(geometry2);
- disjoint_linestring_pred<Result, boundary_checker<Geometry2>, true> pred2(result, boundary_checker2);
- for_each_disjoint_geometry_if<1, Geometry2>::apply(turns.begin(), turns.end(), geometry2, pred2);
- if ( BOOST_GEOMETRY_CONDITION( result.interrupt ) )
- return;
-
- if ( turns.empty() )
- return;
-
- // TODO: turns must be sorted and followed only if it's possible to go out and in on the same point
- // for linear geometries union operation must be detected which I guess would be quite often
-
- if ( may_update<interior, interior, '1'>(result)
- || may_update<interior, boundary, '0'>(result)
- || may_update<interior, exterior, '1'>(result)
- || may_update<boundary, interior, '0'>(result)
- || may_update<boundary, boundary, '0'>(result)
- || may_update<boundary, exterior, '0'>(result) )
- {
- typedef turns::less<0, turns::less_op_linear_linear<0> > less;
- std::sort(turns.begin(), turns.end(), less());
-
- turns_analyser<turn_type, 0> analyser;
- analyse_each_turn(result, analyser,
- turns.begin(), turns.end(),
- geometry1, geometry2,
- boundary_checker1, boundary_checker2);
- }
-
- if ( BOOST_GEOMETRY_CONDITION( result.interrupt ) )
- return;
-
- if ( may_update<interior, interior, '1', true>(result)
- || may_update<interior, boundary, '0', true>(result)
- || may_update<interior, exterior, '1', true>(result)
- || may_update<boundary, interior, '0', true>(result)
- || may_update<boundary, boundary, '0', true>(result)
- || may_update<boundary, exterior, '0', true>(result) )
- {
- typedef turns::less<1, turns::less_op_linear_linear<1> > less;
- std::sort(turns.begin(), turns.end(), less());
-
- turns_analyser<turn_type, 1> analyser;
- analyse_each_turn(result, analyser,
- turns.begin(), turns.end(),
- geometry2, geometry1,
- boundary_checker2, boundary_checker1);
- }
- }
-
- template <typename Result>
- class interrupt_policy_linear_linear
- {
- public:
- static bool const enabled = true;
-
- explicit interrupt_policy_linear_linear(Result & result)
- : m_result(result)
- {}
-
-// TODO: since we update result for some operations here, we may not do it in the analyser!
-
- template <typename Range>
- inline bool apply(Range const& turns)
- {
- typedef typename boost::range_iterator<Range const>::type iterator;
-
- for (iterator it = boost::begin(turns) ; it != boost::end(turns) ; ++it)
- {
- if ( it->operations[0].operation == overlay::operation_intersection
- || it->operations[1].operation == overlay::operation_intersection )
- {
- update<interior, interior, '1'>(m_result);
- }
- else if ( ( it->operations[0].operation == overlay::operation_union
- || it->operations[0].operation == overlay::operation_blocked
- || it->operations[1].operation == overlay::operation_union
- || it->operations[1].operation == overlay::operation_blocked )
- && it->operations[0].position == overlay::position_middle
- && it->operations[1].position == overlay::position_middle )
- {
-// TODO: here we could also check the boundaries and set IB,BI,BB at this point
- update<interior, interior, '0'>(m_result);
- }
- }
-
- return m_result.interrupt;
- }
-
- private:
- Result & m_result;
- };
-
- // This analyser should be used like Input or SinglePass Iterator
- template <typename TurnInfo, std::size_t OpId>
- class turns_analyser
- {
- typedef typename TurnInfo::point_type turn_point_type;
-
- static const std::size_t op_id = OpId;
- static const std::size_t other_op_id = (OpId + 1) % 2;
- static const bool transpose_result = OpId != 0;
-
- public:
- turns_analyser()
- : m_previous_turn_ptr(NULL)
- , m_previous_operation(overlay::operation_none)
- , m_degenerated_turn_ptr(NULL)
- , m_collinear_spike_exit(false)
- {}
-
- template <typename Result,
- typename TurnIt,
- typename Geometry,
- typename OtherGeometry,
- typename BoundaryChecker,
- typename OtherBoundaryChecker>
- void apply(Result & res, TurnIt it,
- Geometry const& geometry,
- OtherGeometry const& other_geometry,
- BoundaryChecker const& boundary_checker,
- OtherBoundaryChecker const& other_boundary_checker)
- {
- overlay::operation_type const op = it->operations[op_id].operation;
-
- segment_identifier const& seg_id = it->operations[op_id].seg_id;
- segment_identifier const& other_id = it->operations[other_op_id].seg_id;
-
- bool const first_in_range = m_seg_watcher.update(seg_id);
-
- if ( op != overlay::operation_union
- && op != overlay::operation_intersection
- && op != overlay::operation_blocked )
- {
- // degenerated turn
- if ( op == overlay::operation_continue
- && it->method == overlay::method_none
- && m_exit_watcher.is_outside(*it)
- /*&& ( m_exit_watcher.get_exit_operation() == overlay::operation_none
- || ! turn_on_the_same_ip<op_id>(m_exit_watcher.get_exit_turn(), *it) )*/ )
- {
- // TODO: rewrite the above condition
-
- // WARNING! For spikes the above condition may be TRUE
- // When degenerated turns are be marked in a different way than c,c/c
- // different condition will be checked
-
- handle_degenerated(res, *it,
- geometry, other_geometry,
- boundary_checker, other_boundary_checker,
- first_in_range);
-
- // TODO: not elegant solution! should be rewritten.
- if ( it->operations[op_id].position == overlay::position_back )
- {
- m_previous_operation = overlay::operation_blocked;
- m_exit_watcher.reset_detected_exit();
- }
- }
-
- return;
- }
-
- // reset
- m_degenerated_turn_ptr = NULL;
-
- // handle possible exit
- bool fake_enter_detected = false;
- if ( m_exit_watcher.get_exit_operation() == overlay::operation_union )
- {
- // real exit point - may be multiple
- // we know that we entered and now we exit
- if ( ! turn_on_the_same_ip<op_id>(m_exit_watcher.get_exit_turn(), *it) )
- {
- m_exit_watcher.reset_detected_exit();
-
- // not the last IP
- update<interior, exterior, '1', transpose_result>(res);
- }
- // fake exit point, reset state
- else if ( op == overlay::operation_intersection )
- {
- m_exit_watcher.reset_detected_exit();
- fake_enter_detected = true;
- }
- }
- else if ( m_exit_watcher.get_exit_operation() == overlay::operation_blocked )
- {
- // ignore multiple BLOCKs
- if ( op == overlay::operation_blocked )
- return;
-
- if ( op == overlay::operation_intersection
- && turn_on_the_same_ip<op_id>(m_exit_watcher.get_exit_turn(), *it) )
- {
- fake_enter_detected = true;
- }
-
- m_exit_watcher.reset_detected_exit();
- }
-
- // i/i, i/x, i/u
- if ( op == overlay::operation_intersection )
- {
- bool const was_outside = m_exit_watcher.is_outside();
- m_exit_watcher.enter(*it);
-
- // interiors overlaps
- update<interior, interior, '1', transpose_result>(res);
-
- bool const this_b = it->operations[op_id].position == overlay::position_front // ignore spikes!
- && is_ip_on_boundary<boundary_front>(it->point,
- it->operations[op_id],
- boundary_checker,
- seg_id);
-
- // going inside on boundary point
- // may be front only
- if ( this_b )
- {
- // may be front and back
- bool const other_b = is_ip_on_boundary<boundary_any>(it->point,
- it->operations[other_op_id],
- other_boundary_checker,
- other_id);
-
- // it's also the boundary of the other geometry
- if ( other_b )
- {
- update<boundary, boundary, '0', transpose_result>(res);
- }
- else
- {
- update<boundary, interior, '0', transpose_result>(res);
- }
- }
- // going inside on non-boundary point
- else
- {
- // if we didn't enter in the past, we were outside
- if ( was_outside
- && ! fake_enter_detected
- && it->operations[op_id].position != overlay::position_front
- && ! m_collinear_spike_exit )
- {
- update<interior, exterior, '1', transpose_result>(res);
-
- // if it's the first IP then the first point is outside
- if ( first_in_range )
- {
- bool const front_b = is_endpoint_on_boundary<boundary_front>(
- range::front(sub_range(geometry, seg_id)),
- boundary_checker);
-
- // if there is a boundary on the first point
- if ( front_b )
- {
- update<boundary, exterior, '0', transpose_result>(res);
- }
- }
- }
- }
-
- m_collinear_spike_exit = false;
- }
- // u/i, u/u, u/x, x/i, x/u, x/x
- else if ( op == overlay::operation_union || op == overlay::operation_blocked )
- {
- // TODO: is exit watcher still needed?
- // couldn't is_collinear and some going inside counter be used instead?
-
- bool const is_collinear = it->operations[op_id].is_collinear;
- bool const was_outside = m_exit_watcher.is_outside()
- && m_exit_watcher.get_exit_operation() == overlay::operation_none;
-// TODO: move the above condition into the exit_watcher?
-
- // to exit we must be currently inside and the current segment must be collinear
- if ( !was_outside && is_collinear )
- {
- m_exit_watcher.exit(*it, false);
- // if the position is not set to back it must be a spike
- if ( it->operations[op_id].position != overlay::position_back )
- {
- m_collinear_spike_exit = true;
- }
- }
-
- bool const op_blocked = op == overlay::operation_blocked;
-
- // we're inside and going out from inside
- // possibly going out right now
- if ( ! was_outside && is_collinear )
- {
- if ( op_blocked
- && it->operations[op_id].position == overlay::position_back ) // ignore spikes!
- {
- // check if this is indeed the boundary point
- // NOTE: is_ip_on_boundary<>() should be called here but the result will be the same
- if ( is_endpoint_on_boundary<boundary_back>(it->point, boundary_checker) )
- {
- // may be front and back
- bool const other_b = is_ip_on_boundary<boundary_any>(it->point,
- it->operations[other_op_id],
- other_boundary_checker,
- other_id);
- // it's also the boundary of the other geometry
- if ( other_b )
- {
- update<boundary, boundary, '0', transpose_result>(res);
- }
- else
- {
- update<boundary, interior, '0', transpose_result>(res);
- }
- }
- }
- }
- // we're outside or intersects some segment from the outside
- else
- {
- // if we are truly outside
- if ( was_outside
- && it->operations[op_id].position != overlay::position_front
- && ! m_collinear_spike_exit
- /*&& !is_collinear*/ )
- {
- update<interior, exterior, '1', transpose_result>(res);
- }
-
- // boundaries don't overlap - just an optimization
- if ( it->method == overlay::method_crosses )
- {
- // the L1 is going from one side of the L2 to the other through the point
- update<interior, interior, '0', transpose_result>(res);
-
- // it's the first point in range
- if ( first_in_range )
- {
- bool const front_b = is_endpoint_on_boundary<boundary_front>(
- range::front(sub_range(geometry, seg_id)),
- boundary_checker);
-
- // if there is a boundary on the first point
- if ( front_b )
- {
- update<boundary, exterior, '0', transpose_result>(res);
- }
- }
- }
- // method other than crosses, check more conditions
- else
- {
- bool const this_b = is_ip_on_boundary<boundary_any>(it->point,
- it->operations[op_id],
- boundary_checker,
- seg_id);
-
- bool const other_b = is_ip_on_boundary<boundary_any>(it->point,
- it->operations[other_op_id],
- other_boundary_checker,
- other_id);
-
- // if current IP is on boundary of the geometry
- if ( this_b )
- {
- // it's also the boundary of the other geometry
- if ( other_b )
- {
- update<boundary, boundary, '0', transpose_result>(res);
- }
- else
- {
- update<boundary, interior, '0', transpose_result>(res);
- }
- }
- // if current IP is not on boundary of the geometry
- else
- {
- // it's also the boundary of the other geometry
- if ( other_b )
- {
- update<interior, boundary, '0', transpose_result>(res);
- }
- else
- {
- update<interior, interior, '0', transpose_result>(res);
- }
- }
-
- // first IP on the last segment point - this means that the first point is outside
- if ( first_in_range
- && ( !this_b || op_blocked )
- && was_outside
- && it->operations[op_id].position != overlay::position_front
- && ! m_collinear_spike_exit
- /*&& !is_collinear*/ )
- {
- bool const front_b = is_endpoint_on_boundary<boundary_front>(
- range::front(sub_range(geometry, seg_id)),
- boundary_checker);
-
- // if there is a boundary on the first point
- if ( front_b )
- {
- update<boundary, exterior, '0', transpose_result>(res);
- }
- }
-
- }
- }
- }
-
- // store ref to previously analysed (valid) turn
- m_previous_turn_ptr = boost::addressof(*it);
- // and previously analysed (valid) operation
- m_previous_operation = op;
- }
-
- // Called for last
- template <typename Result,
- typename TurnIt,
- typename Geometry,
- typename OtherGeometry,
- typename BoundaryChecker,
- typename OtherBoundaryChecker>
- void apply(Result & res,
- TurnIt first, TurnIt last,
- Geometry const& geometry,
- OtherGeometry const& /*other_geometry*/,
- BoundaryChecker const& boundary_checker,
- OtherBoundaryChecker const& /*other_boundary_checker*/)
- {
- boost::ignore_unused(first, last);
- //BOOST_GEOMETRY_ASSERT( first != last );
-
- // here, the possible exit is the real one
- // we know that we entered and now we exit
- if ( /*m_exit_watcher.get_exit_operation() == overlay::operation_union // THIS CHECK IS REDUNDANT
- ||*/ m_previous_operation == overlay::operation_union
- || m_degenerated_turn_ptr )
- {
- update<interior, exterior, '1', transpose_result>(res);
-
- BOOST_GEOMETRY_ASSERT(first != last);
-
- const TurnInfo * turn_ptr = NULL;
- if ( m_degenerated_turn_ptr )
- turn_ptr = m_degenerated_turn_ptr;
- else if ( m_previous_turn_ptr )
- turn_ptr = m_previous_turn_ptr;
-
- if ( turn_ptr )
- {
- segment_identifier const& prev_seg_id = turn_ptr->operations[op_id].seg_id;
-
- //BOOST_GEOMETRY_ASSERT(!boost::empty(sub_range(geometry, prev_seg_id)));
- bool const prev_back_b = is_endpoint_on_boundary<boundary_back>(
- range::back(sub_range(geometry, prev_seg_id)),
- boundary_checker);
-
- // if there is a boundary on the last point
- if ( prev_back_b )
- {
- update<boundary, exterior, '0', transpose_result>(res);
- }
- }
- }
-
- // Just in case,
- // reset exit watcher before the analysis of the next Linestring
- // note that if there are some enters stored there may be some error above
- m_exit_watcher.reset();
-
- m_previous_turn_ptr = NULL;
- m_previous_operation = overlay::operation_none;
- m_degenerated_turn_ptr = NULL;
-
- // actually if this is set to true here there is some error
- // in get_turns_ll or relate_ll, an assert could be checked here
- m_collinear_spike_exit = false;
- }
-
- template <typename Result,
- typename Turn,
- typename Geometry,
- typename OtherGeometry,
- typename BoundaryChecker,
- typename OtherBoundaryChecker>
- void handle_degenerated(Result & res,
- Turn const& turn,
- Geometry const& geometry,
- OtherGeometry const& other_geometry,
- BoundaryChecker const& boundary_checker,
- OtherBoundaryChecker const& /*other_boundary_checker*/,
- bool first_in_range)
- {
- typename detail::single_geometry_return_type<Geometry const>::type
- ls1_ref = detail::single_geometry(geometry, turn.operations[op_id].seg_id);
- typename detail::single_geometry_return_type<OtherGeometry const>::type
- ls2_ref = detail::single_geometry(other_geometry, turn.operations[other_op_id].seg_id);
-
- // only one of those should be true:
-
- if ( turn.operations[op_id].position == overlay::position_front )
- {
- // valid, point-sized
- if ( boost::size(ls2_ref) == 2 )
- {
- bool const front_b = is_endpoint_on_boundary<boundary_front>(turn.point, boundary_checker);
-
- if ( front_b )
- {
- update<boundary, interior, '0', transpose_result>(res);
- }
- else
- {
- update<interior, interior, '0', transpose_result>(res);
- }
-
- // operation 'c' should be last for the same IP so we know that the next point won't be the same
- update<interior, exterior, '1', transpose_result>(res);
-
- m_degenerated_turn_ptr = boost::addressof(turn);
- }
- }
- else if ( turn.operations[op_id].position == overlay::position_back )
- {
- // valid, point-sized
- if ( boost::size(ls2_ref) == 2 )
- {
- update<interior, exterior, '1', transpose_result>(res);
-
- bool const back_b = is_endpoint_on_boundary<boundary_back>(turn.point, boundary_checker);
-
- if ( back_b )
- {
- update<boundary, interior, '0', transpose_result>(res);
- }
- else
- {
- update<interior, interior, '0', transpose_result>(res);
- }
-
- if ( first_in_range )
- {
- //BOOST_GEOMETRY_ASSERT(!boost::empty(ls1_ref));
- bool const front_b = is_endpoint_on_boundary<boundary_front>(
- range::front(ls1_ref), boundary_checker);
- if ( front_b )
- {
- update<boundary, exterior, '0', transpose_result>(res);
- }
- }
- }
- }
- else if ( turn.operations[op_id].position == overlay::position_middle
- && turn.operations[other_op_id].position == overlay::position_middle )
- {
- update<interior, interior, '0', transpose_result>(res);
-
- // here we don't know which one is degenerated
-
- bool const is_point1 = boost::size(ls1_ref) == 2
- && equals::equals_point_point(range::front(ls1_ref), range::back(ls1_ref));
- bool const is_point2 = boost::size(ls2_ref) == 2
- && equals::equals_point_point(range::front(ls2_ref), range::back(ls2_ref));
-
- // if the second one is degenerated
- if ( !is_point1 && is_point2 )
- {
- update<interior, exterior, '1', transpose_result>(res);
-
- if ( first_in_range )
- {
- //BOOST_GEOMETRY_ASSERT(!boost::empty(ls1_ref));
- bool const front_b = is_endpoint_on_boundary<boundary_front>(
- range::front(ls1_ref), boundary_checker);
- if ( front_b )
- {
- update<boundary, exterior, '0', transpose_result>(res);
- }
- }
-
- m_degenerated_turn_ptr = boost::addressof(turn);
- }
- }
-
- // NOTE: other.position == front and other.position == back
- // will be handled later, for the other geometry
- }
-
- private:
- exit_watcher<TurnInfo, OpId> m_exit_watcher;
- segment_watcher<same_single> m_seg_watcher;
- const TurnInfo * m_previous_turn_ptr;
- overlay::operation_type m_previous_operation;
- const TurnInfo * m_degenerated_turn_ptr;
- bool m_collinear_spike_exit;
- };
-
- template <typename Result,
- typename TurnIt,
- typename Analyser,
- typename Geometry,
- typename OtherGeometry,
- typename BoundaryChecker,
- typename OtherBoundaryChecker>
- static inline void analyse_each_turn(Result & res,
- Analyser & analyser,
- TurnIt first, TurnIt last,
- Geometry const& geometry,
- OtherGeometry const& other_geometry,
- BoundaryChecker const& boundary_checker,
- OtherBoundaryChecker const& other_boundary_checker)
- {
- if ( first == last )
- return;
-
- for ( TurnIt it = first ; it != last ; ++it )
- {
- analyser.apply(res, it,
- geometry, other_geometry,
- boundary_checker, other_boundary_checker);
-
- if ( BOOST_GEOMETRY_CONDITION( res.interrupt ) )
- return;
- }
-
- analyser.apply(res, first, last,
- geometry, other_geometry,
- boundary_checker, other_boundary_checker);
- }
-};
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_LINEAR_LINEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp
deleted file mode 100644
index 8d5f21555c4..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp
+++ /dev/null
@@ -1,568 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_MULTI_POINT_GEOMETRY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_MULTI_POINT_GEOMETRY_HPP
-
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_box.hpp>
-#include <boost/geometry/algorithms/detail/expand_by_epsilon.hpp>
-#include <boost/geometry/algorithms/detail/relate/result.hpp>
-#include <boost/geometry/algorithms/detail/relate/topology_check.hpp>
-#include <boost/geometry/algorithms/detail/within/point_in_geometry.hpp>
-#include <boost/geometry/algorithms/envelope.hpp>
-
-#include <boost/geometry/core/is_areal.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/geometries/box.hpp>
-
-#include <boost/geometry/index/rtree.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate
-{
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type
->
-struct multi_point_geometry_eb
-{
- template <typename MultiPoint>
- static inline bool apply(MultiPoint const& ,
- detail::relate::topology_check<Geometry> const& )
- {
- return true;
- }
-};
-
-template <typename Geometry>
-struct multi_point_geometry_eb<Geometry, linestring_tag>
-{
- template <typename Points>
- struct boundary_visitor
- {
- boundary_visitor(Points const& points)
- : m_points(points)
- , m_boundary_found(false)
- {}
-
- template <typename Point>
- struct find_pred
- {
- find_pred(Point const& point)
- : m_point(point)
- {}
-
- template <typename Pt>
- bool operator()(Pt const& pt) const
- {
- return detail::equals::equals_point_point(pt, m_point);
- }
-
- Point const& m_point;
- };
-
- template <typename Point>
- bool apply(Point const& boundary_point)
- {
- if (std::find_if(m_points.begin(), m_points.end(), find_pred<Point>(boundary_point)) == m_points.end())
- {
- m_boundary_found = true;
- return false;
- }
- return true;
- }
-
- bool result() const { return m_boundary_found; }
-
- private:
- Points const& m_points;
- bool m_boundary_found;
- };
-
- template <typename MultiPoint>
- static inline bool apply(MultiPoint const& multi_point,
- detail::relate::topology_check<Geometry> const& tc)
- {
- boundary_visitor<MultiPoint> visitor(multi_point);
- tc.for_each_boundary_point(visitor);
- return visitor.result();
- }
-};
-
-template <typename Geometry>
-struct multi_point_geometry_eb<Geometry, multi_linestring_tag>
-{
- template <typename Points>
- struct boundary_visitor
- {
- boundary_visitor(Points const& points)
- : m_points(points)
- , m_boundary_found(false)
- {}
-
- template <typename Point>
- bool apply(Point const& boundary_point)
- {
- if (! std::binary_search(m_points.begin(), m_points.end(), boundary_point, geometry::less<>()))
- {
- m_boundary_found = true;
- return false;
- }
- return true;
- }
-
- bool result() const { return m_boundary_found; }
-
- private:
- Points const& m_points;
- bool m_boundary_found;
- };
-
- template <typename MultiPoint>
- static inline bool apply(MultiPoint const& multi_point,
- detail::relate::topology_check<Geometry> const& tc)
- {
- typedef typename boost::range_value<MultiPoint>::type point_type;
- typedef std::vector<point_type> points_type;
- points_type points(boost::begin(multi_point), boost::end(multi_point));
- std::sort(points.begin(), points.end(), geometry::less<>());
-
- boundary_visitor<points_type> visitor(points);
- tc.for_each_boundary_point(visitor);
- return visitor.result();
- }
-};
-
-// SingleGeometry - Linear or Areal
-template <typename MultiPoint, typename SingleGeometry, bool Transpose = false>
-struct multi_point_single_geometry
-{
- static const bool interruption_enabled = true;
-
- template <typename Result, typename Strategy>
- static inline void apply(MultiPoint const& multi_point,
- SingleGeometry const& single_geometry,
- Result & result,
- Strategy const& strategy)
- {
- typedef typename point_type<SingleGeometry>::type point2_type;
- typedef model::box<point2_type> box2_type;
-
- box2_type box2;
- geometry::envelope(single_geometry, box2, strategy.get_envelope_strategy());
- geometry::detail::expand_by_epsilon(box2);
-
- typedef typename boost::range_const_iterator<MultiPoint>::type iterator;
- for ( iterator it = boost::begin(multi_point) ; it != boost::end(multi_point) ; ++it )
- {
- if (! (relate::may_update<interior, interior, '0', Transpose>(result)
- || relate::may_update<interior, boundary, '0', Transpose>(result)
- || relate::may_update<interior, exterior, '0', Transpose>(result) ) )
- {
- break;
- }
-
- // The default strategy is enough for Point/Box
- if (detail::disjoint::disjoint_point_box(*it, box2))
- {
- relate::set<interior, exterior, '0', Transpose>(result);
- }
- else
- {
- int in_val = detail::within::point_in_geometry(*it, single_geometry, strategy);
-
- if (in_val > 0) // within
- {
- relate::set<interior, interior, '0', Transpose>(result);
- }
- else if (in_val == 0)
- {
- relate::set<interior, boundary, '0', Transpose>(result);
- }
- else // in_val < 0 - not within
- {
- relate::set<interior, exterior, '0', Transpose>(result);
- }
- }
-
- if ( BOOST_GEOMETRY_CONDITION(result.interrupt) )
- {
- return;
- }
- }
-
- typedef detail::relate::topology_check<SingleGeometry> tc_t;
- if ( relate::may_update<exterior, interior, tc_t::interior, Transpose>(result)
- || relate::may_update<exterior, boundary, tc_t::boundary, Transpose>(result) )
- {
- tc_t tc(single_geometry);
-
- if ( relate::may_update<exterior, interior, tc_t::interior, Transpose>(result)
- && tc.has_interior() )
- {
- // TODO: this is not true if a linestring is degenerated to a point
- // then the interior has topological dimension = 0, not 1
- relate::set<exterior, interior, tc_t::interior, Transpose>(result);
- }
-
- if ( relate::may_update<exterior, boundary, tc_t::boundary, Transpose>(result)
- && tc.has_boundary() )
- {
- if (multi_point_geometry_eb<SingleGeometry>::apply(multi_point, tc))
- relate::set<exterior, boundary, tc_t::boundary, Transpose>(result);
- }
- }
-
- relate::set<exterior, exterior, result_dimension<MultiPoint>::value, Transpose>(result);
- }
-};
-
-
-// MultiGeometry - Linear or Areal
-// part of the algorithm calculating II and IB when no IE has to be calculated
-// using partition()
-template <typename MultiPoint, typename MultiGeometry, bool Transpose>
-class multi_point_multi_geometry_ii_ib
-{
- struct expand_box_point
- {
- template <typename Box, typename Point>
- static inline void apply(Box& total, Point const& point)
- {
- geometry::expand(total, point);
- }
- };
-
- struct expand_box_box_pair
- {
- template <typename Box, typename BoxPair>
- static inline void apply(Box& total, BoxPair const& box_pair)
- {
- geometry::expand(total, box_pair.first);
- }
- };
-
- struct overlaps_box_point
- {
- template <typename Box, typename Point>
- static inline bool apply(Box const& box, Point const& point)
- {
- // The default strategy is enough for Point/Box
- return ! detail::disjoint::disjoint_point_box(point, box);
- }
- };
-
- struct overlaps_box_box_pair
- {
- template <typename Box, typename BoxPair>
- static inline bool apply(Box const& box, BoxPair const& box_pair)
- {
- // The default strategy is enough for Box/Box
- return ! detail::disjoint::disjoint_box_box(box_pair.first, box);
- }
- };
-
- template <typename Result, typename PtSegStrategy>
- class item_visitor_type
- {
- public:
- item_visitor_type(MultiGeometry const& multi_geometry,
- detail::relate::topology_check<MultiGeometry> const& tc,
- Result & result,
- PtSegStrategy const& strategy)
- : m_multi_geometry(multi_geometry)
- , m_tc(tc)
- , m_result(result)
- , m_strategy(strategy)
- {}
-
- template <typename Point, typename BoxPair>
- inline bool apply(Point const& point, BoxPair const& box_pair)
- {
- // The default strategy is enough for Point/Box
- if (! detail::disjoint::disjoint_point_box(point, box_pair.first))
- {
- typename boost::range_value<MultiGeometry>::type const&
- single = range::at(m_multi_geometry, box_pair.second);
-
- int in_val = detail::within::point_in_geometry(point, single, m_strategy);
-
- if (in_val > 0) // within
- {
- relate::set<interior, interior, '0', Transpose>(m_result);
- }
- else if (in_val == 0)
- {
- if (m_tc.check_boundary_point(point))
- relate::set<interior, boundary, '0', Transpose>(m_result);
- else
- relate::set<interior, interior, '0', Transpose>(m_result);
- }
- }
-
- if ( BOOST_GEOMETRY_CONDITION(m_result.interrupt) )
- {
- return false;
- }
-
- if (! (relate::may_update<interior, interior, '0', Transpose>(m_result)
- || relate::may_update<interior, boundary, '0', Transpose>(m_result) ) )
- {
- return false;
- }
-
- return true;
- }
-
-
- private:
- MultiGeometry const& m_multi_geometry;
- detail::relate::topology_check<MultiGeometry> const& m_tc;
- Result & m_result;
- PtSegStrategy const& m_strategy;
- };
-
-public:
- typedef typename point_type<MultiPoint>::type point1_type;
- typedef typename point_type<MultiGeometry>::type point2_type;
- typedef model::box<point1_type> box1_type;
- typedef model::box<point2_type> box2_type;
- typedef std::pair<box2_type, std::size_t> box_pair_type;
-
- template <typename Result, typename Strategy>
- static inline void apply(MultiPoint const& multi_point,
- MultiGeometry const& multi_geometry,
- std::vector<box_pair_type> const& boxes,
- detail::relate::topology_check<MultiGeometry> const& tc,
- Result & result,
- Strategy const& strategy)
- {
- item_visitor_type<Result, Strategy> visitor(multi_geometry, tc, result, strategy);
-
- geometry::partition
- <
- box1_type
- >::apply(multi_point, boxes, visitor,
- expand_box_point(),
- overlaps_box_point(),
- expand_box_box_pair(),
- overlaps_box_box_pair());
- }
-
-};
-
-// MultiGeometry - Linear or Areal
-// part of the algorithm calculating II, IB and IE
-// using rtree
-template <typename MultiPoint, typename MultiGeometry, bool Transpose>
-struct multi_point_multi_geometry_ii_ib_ie
-{
- typedef typename point_type<MultiPoint>::type point1_type;
- typedef typename point_type<MultiGeometry>::type point2_type;
- typedef model::box<point1_type> box1_type;
- typedef model::box<point2_type> box2_type;
- typedef std::pair<box2_type, std::size_t> box_pair_type;
- typedef std::vector<box_pair_type> boxes_type;
- typedef typename boxes_type::const_iterator boxes_iterator;
-
- template <typename Result, typename Strategy>
- static inline void apply(MultiPoint const& multi_point,
- MultiGeometry const& multi_geometry,
- std::vector<box_pair_type> const& boxes,
- detail::relate::topology_check<MultiGeometry> const& tc,
- Result & result,
- Strategy const& strategy)
- {
- index::rtree<box_pair_type, index::rstar<4> > rt(boxes.begin(), boxes.end());
-
- typedef typename boost::range_const_iterator<MultiPoint>::type iterator;
- for ( iterator it = boost::begin(multi_point) ; it != boost::end(multi_point) ; ++it )
- {
- if (! (relate::may_update<interior, interior, '0', Transpose>(result)
- || relate::may_update<interior, boundary, '0', Transpose>(result)
- || relate::may_update<interior, exterior, '0', Transpose>(result) ) )
- {
- return;
- }
-
- typename boost::range_value<MultiPoint>::type const& point = *it;
-
- boxes_type boxes_found;
- rt.query(index::intersects(point), std::back_inserter(boxes_found));
-
- bool found_ii_or_ib = false;
- for (boxes_iterator bi = boxes_found.begin() ; bi != boxes_found.end() ; ++bi)
- {
- typename boost::range_value<MultiGeometry>::type const&
- single = range::at(multi_geometry, bi->second);
-
- int in_val = detail::within::point_in_geometry(point, single, strategy);
-
- if (in_val > 0) // within
- {
- relate::set<interior, interior, '0', Transpose>(result);
- found_ii_or_ib = true;
- }
- else if (in_val == 0) // on boundary of single
- {
- if (tc.check_boundary_point(point))
- relate::set<interior, boundary, '0', Transpose>(result);
- else
- relate::set<interior, interior, '0', Transpose>(result);
- found_ii_or_ib = true;
- }
- }
-
- // neither interior nor boundary found -> exterior
- if (found_ii_or_ib == false)
- {
- relate::set<interior, exterior, '0', Transpose>(result);
- }
-
- if ( BOOST_GEOMETRY_CONDITION(result.interrupt) )
- {
- return;
- }
- }
- }
-};
-
-// MultiGeometry - Linear or Areal
-template <typename MultiPoint, typename MultiGeometry, bool Transpose = false>
-struct multi_point_multi_geometry
-{
- static const bool interruption_enabled = true;
-
- template <typename Result, typename Strategy>
- static inline void apply(MultiPoint const& multi_point,
- MultiGeometry const& multi_geometry,
- Result & result,
- Strategy const& strategy)
- {
- typedef typename point_type<MultiGeometry>::type point2_type;
- typedef model::box<point2_type> box2_type;
- typedef std::pair<box2_type, std::size_t> box_pair_type;
-
- typename Strategy::envelope_strategy_type const
- envelope_strategy = strategy.get_envelope_strategy();
-
- std::size_t count2 = boost::size(multi_geometry);
- std::vector<box_pair_type> boxes(count2);
- for (std::size_t i = 0 ; i < count2 ; ++i)
- {
- geometry::envelope(range::at(multi_geometry, i), boxes[i].first, envelope_strategy);
- geometry::detail::expand_by_epsilon(boxes[i].first);
- boxes[i].second = i;
- }
-
- typedef detail::relate::topology_check<MultiGeometry> tc_t;
- tc_t tc(multi_geometry);
-
- if ( relate::may_update<interior, interior, '0', Transpose>(result)
- || relate::may_update<interior, boundary, '0', Transpose>(result)
- || relate::may_update<interior, exterior, '0', Transpose>(result) )
- {
- // If there is no need to calculate IE, use partition
- if (! relate::may_update<interior, exterior, '0', Transpose>(result) )
- {
- multi_point_multi_geometry_ii_ib<MultiPoint, MultiGeometry, Transpose>
- ::apply(multi_point, multi_geometry, boxes, tc, result, strategy);
- }
- else // otherwise use rtree
- {
- multi_point_multi_geometry_ii_ib_ie<MultiPoint, MultiGeometry, Transpose>
- ::apply(multi_point, multi_geometry, boxes, tc, result, strategy);
- }
- }
-
- if ( BOOST_GEOMETRY_CONDITION(result.interrupt) )
- {
- return;
- }
-
- if ( relate::may_update<exterior, interior, tc_t::interior, Transpose>(result)
- || relate::may_update<exterior, boundary, tc_t::boundary, Transpose>(result) )
- {
- if ( relate::may_update<exterior, interior, tc_t::interior, Transpose>(result)
- && tc.has_interior() )
- {
- // TODO: this is not true if a linestring is degenerated to a point
- // then the interior has topological dimension = 0, not 1
- relate::set<exterior, interior, tc_t::interior, Transpose>(result);
- }
-
- if ( relate::may_update<exterior, boundary, tc_t::boundary, Transpose>(result)
- && tc.has_boundary() )
- {
- if (multi_point_geometry_eb<MultiGeometry>::apply(multi_point, tc))
- relate::set<exterior, boundary, tc_t::boundary, Transpose>(result);
- }
- }
-
- relate::set<exterior, exterior, result_dimension<MultiPoint>::value, Transpose>(result);
- }
-
-};
-
-
-template
-<
- typename MultiPoint, typename Geometry,
- bool Transpose = false,
- bool isMulti = boost::is_same
- <
- typename tag_cast
- <
- typename tag<Geometry>::type, multi_tag
- >::type,
- multi_tag
- >::value
->
-struct multi_point_geometry
- : multi_point_single_geometry<MultiPoint, Geometry, Transpose>
-{};
-
-template <typename MultiPoint, typename Geometry, bool Transpose>
-struct multi_point_geometry<MultiPoint, Geometry, Transpose, true>
- : multi_point_multi_geometry<MultiPoint, Geometry, Transpose>
-{};
-
-
-// transposed result of multi_point_geometry
-template <typename Geometry, typename MultiPoint>
-struct geometry_multi_point
-{
- static const bool interruption_enabled = true;
-
- template <typename Result, typename Strategy>
- static inline void apply(Geometry const& geometry, MultiPoint const& multi_point,
- Result & result, Strategy const& strategy)
- {
- multi_point_geometry<MultiPoint, Geometry, true>::apply(multi_point, geometry, result, strategy);
- }
-};
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_MULTI_POINT_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/point_geometry.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/point_geometry.hpp
deleted file mode 100644
index e78a404b217..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/point_geometry.hpp
+++ /dev/null
@@ -1,206 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_POINT_GEOMETRY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_POINT_GEOMETRY_HPP
-
-#include <boost/geometry/algorithms/detail/within/point_in_geometry.hpp>
-//#include <boost/geometry/algorithms/within.hpp>
-//#include <boost/geometry/algorithms/covered_by.hpp>
-
-#include <boost/geometry/algorithms/detail/relate/result.hpp>
-#include <boost/geometry/algorithms/detail/relate/topology_check.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate {
-
-// non-point geometry
-template <typename Point, typename Geometry, bool Transpose = false>
-struct point_geometry
-{
- // TODO: interrupt only if the topology check is complex
-
- static const bool interruption_enabled = true;
-
- template <typename Result, typename Strategy>
- static inline void apply(Point const& point, Geometry const& geometry, Result & result, Strategy const& strategy)
- {
- int pig = detail::within::point_in_geometry(point, geometry, strategy);
-
- if ( pig > 0 ) // within
- {
- relate::set<interior, interior, '0', Transpose>(result);
- }
- else if ( pig == 0 )
- {
- relate::set<interior, boundary, '0', Transpose>(result);
- }
- else // pig < 0 - not within
- {
- relate::set<interior, exterior, '0', Transpose>(result);
- }
-
- relate::set<exterior, exterior, result_dimension<Point>::value, Transpose>(result);
-
- if ( BOOST_GEOMETRY_CONDITION(result.interrupt) )
- return;
-
- typedef detail::relate::topology_check<Geometry> tc_t;
- if ( relate::may_update<exterior, interior, tc_t::interior, Transpose>(result)
- || relate::may_update<exterior, boundary, tc_t::boundary, Transpose>(result) )
- {
- // the point is on the boundary
- if ( pig == 0 )
- {
- // NOTE: even for MLs, if there is at least one boundary point,
- // somewhere there must be another one
- relate::set<exterior, interior, tc_t::interior, Transpose>(result);
- relate::set<exterior, boundary, tc_t::boundary, Transpose>(result);
- }
- else
- {
- // check if there is a boundary in Geometry
- tc_t tc(geometry);
- if ( tc.has_interior() )
- relate::set<exterior, interior, tc_t::interior, Transpose>(result);
- if ( tc.has_boundary() )
- relate::set<exterior, boundary, tc_t::boundary, Transpose>(result);
- }
- }
- }
-};
-
-// transposed result of point_geometry
-template <typename Geometry, typename Point>
-struct geometry_point
-{
- // TODO: interrupt only if the topology check is complex
-
- static const bool interruption_enabled = true;
-
- template <typename Result, typename Strategy>
- static inline void apply(Geometry const& geometry, Point const& point, Result & result, Strategy const& strategy)
- {
- point_geometry<Point, Geometry, true>::apply(point, geometry, result, strategy);
- }
-};
-
-// TODO: rewrite the folowing:
-
-//// NOTE: Those tests should be consistent with within(Point, Box) and covered_by(Point, Box)
-//// There is no EPS used in those functions, values are compared using < or <=
-//// so comparing MIN and MAX in the same way should be fine
-//
-//template <typename Box, std::size_t I = 0, std::size_t D = geometry::dimension<Box>::value>
-//struct box_has_interior
-//{
-// static inline bool apply(Box const& box)
-// {
-// return geometry::get<min_corner, I>(box) < geometry::get<max_corner, I>(box)
-// && box_has_interior<Box, I + 1, D>::apply(box);
-// }
-//};
-//
-//template <typename Box, std::size_t D>
-//struct box_has_interior<Box, D, D>
-//{
-// static inline bool apply(Box const&) { return true; }
-//};
-//
-//// NOTE: especially important here (see the NOTE above).
-//
-//template <typename Box, std::size_t I = 0, std::size_t D = geometry::dimension<Box>::value>
-//struct box_has_equal_min_max
-//{
-// static inline bool apply(Box const& box)
-// {
-// return geometry::get<min_corner, I>(box) == geometry::get<max_corner, I>(box)
-// && box_has_equal_min_max<Box, I + 1, D>::apply(box);
-// }
-//};
-//
-//template <typename Box, std::size_t D>
-//struct box_has_equal_min_max<Box, D, D>
-//{
-// static inline bool apply(Box const&) { return true; }
-//};
-//
-//template <typename Point, typename Box>
-//struct point_box
-//{
-// static inline result apply(Point const& point, Box const& box)
-// {
-// result res;
-//
-// if ( geometry::within(point, box) ) // this also means that the box has interior
-// {
-// return result("0FFFFFTTT");
-// }
-// else if ( geometry::covered_by(point, box) ) // point is on the boundary
-// {
-// //if ( box_has_interior<Box>::apply(box) )
-// //{
-// // return result("F0FFFFTTT");
-// //}
-// //else if ( box_has_equal_min_max<Box>::apply(box) ) // no boundary outside point
-// //{
-// // return result("F0FFFFFFT");
-// //}
-// //else // no interior outside point
-// //{
-// // return result("F0FFFFFTT");
-// //}
-// return result("F0FFFF**T");
-// }
-// else
-// {
-// /*if ( box_has_interior<Box>::apply(box) )
-// {
-// return result("FF0FFFTTT");
-// }
-// else
-// {
-// return result("FF0FFFFTT");
-// }*/
-// return result("FF0FFF*TT");
-// }
-//
-// return res;
-// }
-//};
-//
-//template <typename Box, typename Point>
-//struct box_point
-//{
-// static inline result apply(Box const& box, Point const& point)
-// {
-// if ( geometry::within(point, box) )
-// return result("0FTFFTFFT");
-// else if ( geometry::covered_by(point, box) )
-// return result("FF*0F*FFT");
-// else
-// return result("FF*FFT0FT");
-// }
-//};
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_POINT_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/point_point.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/point_point.hpp
deleted file mode 100644
index e0bed72ba3f..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/point_point.hpp
+++ /dev/null
@@ -1,268 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_POINT_POINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_POINT_POINT_HPP
-
-#include <algorithm>
-#include <vector>
-
-#include <boost/range/empty.hpp>
-
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-#include <boost/geometry/algorithms/detail/within/point_in_geometry.hpp>
-#include <boost/geometry/algorithms/detail/relate/result.hpp>
-
-#include <boost/geometry/policies/compare.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate {
-
-template <typename Point1, typename Point2>
-struct point_point
-{
- static const bool interruption_enabled = false;
-
- template <typename Result, typename Strategy>
- static inline void apply(Point1 const& point1, Point2 const& point2,
- Result & result,
- Strategy const& /*strategy*/)
- {
- bool equal = detail::equals::equals_point_point(point1, point2);
- if ( equal )
- {
- relate::set<interior, interior, '0'>(result);
- }
- else
- {
- relate::set<interior, exterior, '0'>(result);
- relate::set<exterior, interior, '0'>(result);
- }
-
- relate::set<exterior, exterior, result_dimension<Point1>::value>(result);
- }
-};
-
-template <typename Point, typename MultiPoint>
-std::pair<bool, bool> point_multipoint_check(Point const& point, MultiPoint const& multi_point)
-{
- bool found_inside = false;
- bool found_outside = false;
-
- // point_in_geometry could be used here but why iterate over MultiPoint twice?
- // we must search for a point in the exterior because all points in MultiPoint can be equal
-
- typedef typename boost::range_iterator<MultiPoint const>::type iterator;
- iterator it = boost::begin(multi_point);
- iterator last = boost::end(multi_point);
- for ( ; it != last ; ++it )
- {
- bool ii = detail::equals::equals_point_point(point, *it);
-
- if ( ii )
- found_inside = true;
- else
- found_outside = true;
-
- if ( found_inside && found_outside )
- break;
- }
-
- return std::make_pair(found_inside, found_outside);
-}
-
-template <typename Point, typename MultiPoint, bool Transpose = false>
-struct point_multipoint
-{
- static const bool interruption_enabled = false;
-
- template <typename Result, typename Strategy>
- static inline void apply(Point const& point, MultiPoint const& multi_point,
- Result & result,
- Strategy const& /*strategy*/)
- {
- if ( boost::empty(multi_point) )
- {
- // TODO: throw on empty input?
- relate::set<interior, exterior, '0', Transpose>(result);
- return;
- }
-
- std::pair<bool, bool> rel = point_multipoint_check(point, multi_point);
-
- if ( rel.first ) // some point of MP is equal to P
- {
- relate::set<interior, interior, '0', Transpose>(result);
-
- if ( rel.second ) // a point of MP was found outside P
- {
- relate::set<exterior, interior, '0', Transpose>(result);
- }
- }
- else
- {
- relate::set<interior, exterior, '0', Transpose>(result);
- relate::set<exterior, interior, '0', Transpose>(result);
- }
-
- relate::set<exterior, exterior, result_dimension<Point>::value, Transpose>(result);
- }
-};
-
-template <typename MultiPoint, typename Point>
-struct multipoint_point
-{
- static const bool interruption_enabled = false;
-
- template <typename Result, typename Strategy>
- static inline void apply(MultiPoint const& multi_point, Point const& point,
- Result & result,
- Strategy const& strategy)
- {
- point_multipoint<Point, MultiPoint, true>::apply(point, multi_point, result, strategy);
- }
-};
-
-template <typename MultiPoint1, typename MultiPoint2>
-struct multipoint_multipoint
-{
- static const bool interruption_enabled = true;
-
- template <typename Result, typename Strategy>
- static inline void apply(MultiPoint1 const& multi_point1, MultiPoint2 const& multi_point2,
- Result & result,
- Strategy const& /*strategy*/)
- {
- {
- // TODO: throw on empty input?
- bool empty1 = boost::empty(multi_point1);
- bool empty2 = boost::empty(multi_point2);
- if ( empty1 && empty2 )
- {
- return;
- }
- else if ( empty1 )
- {
- relate::set<exterior, interior, '0'>(result);
- return;
- }
- else if ( empty2 )
- {
- relate::set<interior, exterior, '0'>(result);
- return;
- }
- }
-
- // The geometry containing smaller number of points will be analysed first
- if ( boost::size(multi_point1) < boost::size(multi_point2) )
- {
- search_both<false>(multi_point1, multi_point2, result);
- }
- else
- {
- search_both<true>(multi_point2, multi_point1, result);
- }
-
- relate::set<exterior, exterior, result_dimension<MultiPoint1>::value>(result);
- }
-
- template <bool Transpose, typename MPt1, typename MPt2, typename Result>
- static inline void search_both(MPt1 const& first_sorted_mpt, MPt2 const& first_iterated_mpt,
- Result & result)
- {
- if ( relate::may_update<interior, interior, '0'>(result)
- || relate::may_update<interior, exterior, '0'>(result)
- || relate::may_update<exterior, interior, '0'>(result) )
- {
- // NlogN + MlogN
- bool is_disjoint = search<Transpose>(first_sorted_mpt, first_iterated_mpt, result);
-
- if ( BOOST_GEOMETRY_CONDITION(is_disjoint || result.interrupt) )
- return;
- }
-
- if ( relate::may_update<interior, interior, '0'>(result)
- || relate::may_update<interior, exterior, '0'>(result)
- || relate::may_update<exterior, interior, '0'>(result) )
- {
- // MlogM + NlogM
- search<! Transpose>(first_iterated_mpt, first_sorted_mpt, result);
- }
- }
-
- template <bool Transpose,
- typename SortedMultiPoint,
- typename IteratedMultiPoint,
- typename Result>
- static inline bool search(SortedMultiPoint const& sorted_mpt,
- IteratedMultiPoint const& iterated_mpt,
- Result & result)
- {
- // sort points from the 1 MPt
- typedef typename geometry::point_type<SortedMultiPoint>::type point_type;
- std::vector<point_type> points(boost::begin(sorted_mpt), boost::end(sorted_mpt));
-
- geometry::less<> const less = geometry::less<>();
- std::sort(points.begin(), points.end(), less);
-
- bool found_inside = false;
- bool found_outside = false;
-
- // for each point in the second MPt
- typedef typename boost::range_iterator<IteratedMultiPoint const>::type iterator;
- for ( iterator it = boost::begin(iterated_mpt) ;
- it != boost::end(iterated_mpt) ; ++it )
- {
- bool ii =
- std::binary_search(points.begin(), points.end(), *it, less);
- if ( ii )
- found_inside = true;
- else
- found_outside = true;
-
- if ( found_inside && found_outside )
- break;
- }
-
- if ( found_inside ) // some point of MP2 is equal to some of MP1
- {
-// TODO: if I/I is set for one MPt, this won't be changed when the other one in analysed
-// so if e.g. only I/I must be analysed we musn't check the other MPt
-
- relate::set<interior, interior, '0', Transpose>(result);
-
- if ( found_outside ) // some point of MP2 was found outside of MP1
- {
- relate::set<exterior, interior, '0', Transpose>(result);
- }
- }
- else
- {
- relate::set<interior, exterior, '0', Transpose>(result);
- relate::set<exterior, interior, '0', Transpose>(result);
- }
-
- // if no point is intersecting the other MPt then we musn't analyse the reversed case
- return ! found_inside;
- }
-};
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_POINT_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/relate_impl.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/relate_impl.hpp
deleted file mode 100644
index 2ec2361c03b..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/relate_impl.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2015.
-// Modifications copyright (c) 2013-2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RELATE_IMPL_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RELATE_IMPL_HPP
-
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/or.hpp>
-#include <boost/type_traits/is_base_of.hpp>
-
-#include <boost/geometry/algorithms/detail/relate/interface.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/core/tag.hpp>
-
-namespace boost { namespace geometry {
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate {
-
-struct implemented_tag {};
-
-template <template <typename, typename> class StaticMaskTrait,
- typename Geometry1,
- typename Geometry2>
-struct relate_impl
- : boost::mpl::if_
- <
- boost::mpl::or_
- <
- boost::is_base_of
- <
- nyi::not_implemented_tag,
- StaticMaskTrait<Geometry1, Geometry2>
- >,
- boost::is_base_of
- <
- nyi::not_implemented_tag,
- dispatch::relate<Geometry1, Geometry2>
- >
- >,
- not_implemented
- <
- typename geometry::tag<Geometry1>::type,
- typename geometry::tag<Geometry2>::type
- >,
- implemented_tag
- >::type
-{
- template <typename Strategy>
- static inline bool apply(Geometry1 const& g1, Geometry2 const& g2, Strategy const& strategy)
- {
- typename detail::relate::result_handler_type
- <
- Geometry1,
- Geometry2,
- typename StaticMaskTrait<Geometry1, Geometry2>::type
- >::type handler;
-
- dispatch::relate<Geometry1, Geometry2>::apply(g1, g2, handler, strategy);
-
- return handler.result();
- }
-};
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RELATE_IMPL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/result.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/result.hpp
deleted file mode 100644
index 07287dc6259..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/result.hpp
+++ /dev/null
@@ -1,1296 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2016.
-// Modifications copyright (c) 2013-2016 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RESULT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RESULT_HPP
-
-#include <cstddef>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/begin.hpp>
-#include <boost/mpl/deref.hpp>
-#include <boost/mpl/end.hpp>
-#include <boost/mpl/is_sequence.hpp>
-#include <boost/mpl/next.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/throw_exception.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/exception.hpp>
-#include <boost/geometry/util/condition.hpp>
-
-namespace boost { namespace geometry {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate {
-
-enum field { interior = 0, boundary = 1, exterior = 2 };
-
-// TODO: IF THE RESULT IS UPDATED WITH THE MAX POSSIBLE VALUE FOR SOME PAIR OF GEOEMTRIES
-// THE VALUE ALREADY STORED MUSN'T BE CHECKED
-// update() calls chould be replaced with set() in those cases
-// but for safety reasons (STATIC_ASSERT) we should check if parameter D is valid and set() doesn't do that
-// so some additional function could be added, e.g. set_dim()
-
-// --------------- MATRIX ----------------
-
-// matrix
-
-template <std::size_t Height, std::size_t Width = Height>
-class matrix
-{
-public:
- typedef char value_type;
- typedef std::size_t size_type;
- typedef const char * const_iterator;
- typedef const_iterator iterator;
-
- static const std::size_t static_width = Width;
- static const std::size_t static_height = Height;
- static const std::size_t static_size = Width * Height;
-
- inline matrix()
- {
- ::memset(m_array, 'F', static_size);
- }
-
- template <field F1, field F2>
- inline char get() const
- {
- BOOST_STATIC_ASSERT(F1 < Height && F2 < Width);
- static const std::size_t index = F1 * Width + F2;
- BOOST_STATIC_ASSERT(index < static_size);
- return m_array[index];
- }
-
- template <field F1, field F2, char V>
- inline void set()
- {
- BOOST_STATIC_ASSERT(F1 < Height && F2 < Width);
- static const std::size_t index = F1 * Width + F2;
- BOOST_STATIC_ASSERT(index < static_size);
- m_array[index] = V;
- }
-
- inline char operator[](std::size_t index) const
- {
- BOOST_GEOMETRY_ASSERT(index < static_size);
- return m_array[index];
- }
-
- inline const_iterator begin() const
- {
- return m_array;
- }
-
- inline const_iterator end() const
- {
- return m_array + static_size;
- }
-
- inline static std::size_t size()
- {
- return static_size;
- }
-
- inline const char * data() const
- {
- return m_array;
- }
-
- inline std::string str() const
- {
- return std::string(m_array, static_size);
- }
-
-private:
- char m_array[static_size];
-};
-
-// matrix_handler
-
-template <typename Matrix>
-class matrix_handler
-{
-public:
- typedef Matrix result_type;
-
- static const bool interrupt = false;
-
- matrix_handler()
- {}
-
- result_type const& result() const
- {
- return m_matrix;
- }
-
- result_type const& matrix() const
- {
- return m_matrix;
- }
-
- result_type & matrix()
- {
- return m_matrix;
- }
-
- template <field F1, field F2, char D>
- inline bool may_update() const
- {
- BOOST_STATIC_ASSERT('0' <= D && D <= '9');
-
- char const c = m_matrix.template get<F1, F2>();
- return D > c || c > '9';
- }
-
- template <field F1, field F2, char V>
- inline void set()
- {
- static const bool in_bounds = F1 < Matrix::static_height
- && F2 < Matrix::static_width;
- typedef boost::integral_constant<bool, in_bounds> in_bounds_t;
- set_dispatch<F1, F2, V>(in_bounds_t());
- }
-
- template <field F1, field F2, char D>
- inline void update()
- {
- static const bool in_bounds = F1 < Matrix::static_height
- && F2 < Matrix::static_width;
- typedef boost::integral_constant<bool, in_bounds> in_bounds_t;
- update_dispatch<F1, F2, D>(in_bounds_t());
- }
-
-private:
- template <field F1, field F2, char V>
- inline void set_dispatch(integral_constant<bool, true>)
- {
- static const std::size_t index = F1 * Matrix::static_width + F2;
- BOOST_STATIC_ASSERT(index < Matrix::static_size);
- BOOST_STATIC_ASSERT(('0' <= V && V <= '9') || V == 'T' || V == 'F');
- m_matrix.template set<F1, F2, V>();
- }
- template <field F1, field F2, char V>
- inline void set_dispatch(integral_constant<bool, false>)
- {}
-
- template <field F1, field F2, char D>
- inline void update_dispatch(integral_constant<bool, true>)
- {
- static const std::size_t index = F1 * Matrix::static_width + F2;
- BOOST_STATIC_ASSERT(index < Matrix::static_size);
- BOOST_STATIC_ASSERT('0' <= D && D <= '9');
- char const c = m_matrix.template get<F1, F2>();
- if ( D > c || c > '9')
- m_matrix.template set<F1, F2, D>();
- }
- template <field F1, field F2, char D>
- inline void update_dispatch(integral_constant<bool, false>)
- {}
-
- Matrix m_matrix;
-};
-
-// --------------- RUN-TIME MASK ----------------
-
-// run-time mask
-
-template <std::size_t Height, std::size_t Width = Height>
-class mask
-{
-public:
- static const std::size_t static_width = Width;
- static const std::size_t static_height = Height;
- static const std::size_t static_size = Width * Height;
-
- inline mask(const char * s)
- {
- char * it = m_array;
- char * const last = m_array + static_size;
- for ( ; it != last && *s != '\0' ; ++it, ++s )
- {
- char c = *s;
- check_char(c);
- *it = c;
- }
- if ( it != last )
- {
- ::memset(it, '*', last - it);
- }
- }
-
- inline mask(const char * s, std::size_t count)
- {
- if ( count > static_size )
- {
- count = static_size;
- }
- if ( count > 0 )
- {
- std::for_each(s, s + count, check_char);
- ::memcpy(m_array, s, count);
- }
- if ( count < static_size )
- {
- ::memset(m_array + count, '*', static_size - count);
- }
- }
-
- template <field F1, field F2>
- inline char get() const
- {
- BOOST_STATIC_ASSERT(F1 < Height && F2 < Width);
- static const std::size_t index = F1 * Width + F2;
- BOOST_STATIC_ASSERT(index < static_size);
- return m_array[index];
- }
-
-private:
- static inline void check_char(char c)
- {
- bool const is_valid = c == '*' || c == 'T' || c == 'F'
- || ( c >= '0' && c <= '9' );
- if ( !is_valid )
- {
- BOOST_THROW_EXCEPTION(geometry::invalid_input_exception());
- }
- }
-
- char m_array[static_size];
-};
-
-// interrupt()
-
-template <typename Mask, bool InterruptEnabled>
-struct interrupt_dispatch
-{
- template <field F1, field F2, char V>
- static inline bool apply(Mask const&)
- {
- return false;
- }
-};
-
-template <typename Mask>
-struct interrupt_dispatch<Mask, true>
-{
- template <field F1, field F2, char V>
- static inline bool apply(Mask const& mask)
- {
- char m = mask.template get<F1, F2>();
- return check_element<V>(m);
- }
-
- template <char V>
- static inline bool check_element(char m)
- {
- if ( BOOST_GEOMETRY_CONDITION(V >= '0' && V <= '9') )
- {
- return m == 'F' || ( m < V && m >= '0' && m <= '9' );
- }
- else if ( BOOST_GEOMETRY_CONDITION(V == 'T') )
- {
- return m == 'F';
- }
- return false;
- }
-};
-
-template <typename Masks, int I = 0, int N = boost::tuples::length<Masks>::value>
-struct interrupt_dispatch_tuple
-{
- template <field F1, field F2, char V>
- static inline bool apply(Masks const& masks)
- {
- typedef typename boost::tuples::element<I, Masks>::type mask_type;
- mask_type const& mask = boost::get<I>(masks);
- return interrupt_dispatch<mask_type, true>::template apply<F1, F2, V>(mask)
- && interrupt_dispatch_tuple<Masks, I+1>::template apply<F1, F2, V>(masks);
- }
-};
-
-template <typename Masks, int N>
-struct interrupt_dispatch_tuple<Masks, N, N>
-{
- template <field F1, field F2, char V>
- static inline bool apply(Masks const& )
- {
- return true;
- }
-};
-
-//template <typename T0, typename T1, typename T2, typename T3, typename T4,
-// typename T5, typename T6, typename T7, typename T8, typename T9>
-//struct interrupt_dispatch<boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>, true>
-//{
-// typedef boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> mask_type;
-
-// template <field F1, field F2, char V>
-// static inline bool apply(mask_type const& mask)
-// {
-// return interrupt_dispatch_tuple<mask_type>::template apply<F1, F2, V>(mask);
-// }
-//};
-
-template <typename Head, typename Tail>
-struct interrupt_dispatch<boost::tuples::cons<Head, Tail>, true>
-{
- typedef boost::tuples::cons<Head, Tail> mask_type;
-
- template <field F1, field F2, char V>
- static inline bool apply(mask_type const& mask)
- {
- return interrupt_dispatch_tuple<mask_type>::template apply<F1, F2, V>(mask);
- }
-};
-
-template <field F1, field F2, char V, bool InterruptEnabled, typename Mask>
-inline bool interrupt(Mask const& mask)
-{
- return interrupt_dispatch<Mask, InterruptEnabled>
- ::template apply<F1, F2, V>(mask);
-}
-
-// may_update()
-
-template <typename Mask>
-struct may_update_dispatch
-{
- template <field F1, field F2, char D, typename Matrix>
- static inline bool apply(Mask const& mask, Matrix const& matrix)
- {
- BOOST_STATIC_ASSERT('0' <= D && D <= '9');
-
- char const m = mask.template get<F1, F2>();
-
- if ( m == 'F' )
- {
- return true;
- }
- else if ( m == 'T' )
- {
- char const c = matrix.template get<F1, F2>();
- return c == 'F'; // if it's T or between 0 and 9, the result will be the same
- }
- else if ( m >= '0' && m <= '9' )
- {
- char const c = matrix.template get<F1, F2>();
- return D > c || c > '9';
- }
-
- return false;
- }
-};
-
-template <typename Masks, int I = 0, int N = boost::tuples::length<Masks>::value>
-struct may_update_dispatch_tuple
-{
- template <field F1, field F2, char D, typename Matrix>
- static inline bool apply(Masks const& masks, Matrix const& matrix)
- {
- typedef typename boost::tuples::element<I, Masks>::type mask_type;
- mask_type const& mask = boost::get<I>(masks);
- return may_update_dispatch<mask_type>::template apply<F1, F2, D>(mask, matrix)
- || may_update_dispatch_tuple<Masks, I+1>::template apply<F1, F2, D>(masks, matrix);
- }
-};
-
-template <typename Masks, int N>
-struct may_update_dispatch_tuple<Masks, N, N>
-{
- template <field F1, field F2, char D, typename Matrix>
- static inline bool apply(Masks const& , Matrix const& )
- {
- return false;
- }
-};
-
-//template <typename T0, typename T1, typename T2, typename T3, typename T4,
-// typename T5, typename T6, typename T7, typename T8, typename T9>
-//struct may_update_dispatch< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
-//{
-// typedef boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> mask_type;
-
-// template <field F1, field F2, char D, typename Matrix>
-// static inline bool apply(mask_type const& mask, Matrix const& matrix)
-// {
-// return may_update_dispatch_tuple<mask_type>::template apply<F1, F2, D>(mask, matrix);
-// }
-//};
-
-template <typename Head, typename Tail>
-struct may_update_dispatch< boost::tuples::cons<Head, Tail> >
-{
- typedef boost::tuples::cons<Head, Tail> mask_type;
-
- template <field F1, field F2, char D, typename Matrix>
- static inline bool apply(mask_type const& mask, Matrix const& matrix)
- {
- return may_update_dispatch_tuple<mask_type>::template apply<F1, F2, D>(mask, matrix);
- }
-};
-
-template <field F1, field F2, char D, typename Mask, typename Matrix>
-inline bool may_update(Mask const& mask, Matrix const& matrix)
-{
- return may_update_dispatch<Mask>
- ::template apply<F1, F2, D>(mask, matrix);
-}
-
-// check_matrix()
-
-template <typename Mask>
-struct check_dispatch
-{
- template <typename Matrix>
- static inline bool apply(Mask const& mask, Matrix const& matrix)
- {
- return per_one<interior, interior>(mask, matrix)
- && per_one<interior, boundary>(mask, matrix)
- && per_one<interior, exterior>(mask, matrix)
- && per_one<boundary, interior>(mask, matrix)
- && per_one<boundary, boundary>(mask, matrix)
- && per_one<boundary, exterior>(mask, matrix)
- && per_one<exterior, interior>(mask, matrix)
- && per_one<exterior, boundary>(mask, matrix)
- && per_one<exterior, exterior>(mask, matrix);
- }
-
- template <field F1, field F2, typename Matrix>
- static inline bool per_one(Mask const& mask, Matrix const& matrix)
- {
- const char mask_el = mask.template get<F1, F2>();
- const char el = matrix.template get<F1, F2>();
-
- if ( mask_el == 'F' )
- {
- return el == 'F';
- }
- else if ( mask_el == 'T' )
- {
- return el == 'T' || ( el >= '0' && el <= '9' );
- }
- else if ( mask_el >= '0' && mask_el <= '9' )
- {
- return el == mask_el;
- }
-
- return true;
- }
-};
-
-template <typename Masks, int I = 0, int N = boost::tuples::length<Masks>::value>
-struct check_dispatch_tuple
-{
- template <typename Matrix>
- static inline bool apply(Masks const& masks, Matrix const& matrix)
- {
- typedef typename boost::tuples::element<I, Masks>::type mask_type;
- mask_type const& mask = boost::get<I>(masks);
- return check_dispatch<mask_type>::apply(mask, matrix)
- || check_dispatch_tuple<Masks, I+1>::apply(masks, matrix);
- }
-};
-
-template <typename Masks, int N>
-struct check_dispatch_tuple<Masks, N, N>
-{
- template <typename Matrix>
- static inline bool apply(Masks const&, Matrix const&)
- {
- return false;
- }
-};
-
-//template <typename T0, typename T1, typename T2, typename T3, typename T4,
-// typename T5, typename T6, typename T7, typename T8, typename T9>
-//struct check_dispatch< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
-//{
-// typedef boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> mask_type;
-
-// template <typename Matrix>
-// static inline bool apply(mask_type const& mask, Matrix const& matrix)
-// {
-// return check_dispatch_tuple<mask_type>::apply(mask, matrix);
-// }
-//};
-
-template <typename Head, typename Tail>
-struct check_dispatch< boost::tuples::cons<Head, Tail> >
-{
- typedef boost::tuples::cons<Head, Tail> mask_type;
-
- template <typename Matrix>
- static inline bool apply(mask_type const& mask, Matrix const& matrix)
- {
- return check_dispatch_tuple<mask_type>::apply(mask, matrix);
- }
-};
-
-template <typename Mask, typename Matrix>
-inline bool check_matrix(Mask const& mask, Matrix const& matrix)
-{
- return check_dispatch<Mask>::apply(mask, matrix);
-}
-
-// matrix_width
-
-template <typename MatrixOrMask>
-struct matrix_width
-{
- static const std::size_t value = MatrixOrMask::static_width;
-};
-
-template <typename Tuple,
- int I = 0,
- int N = boost::tuples::length<Tuple>::value>
-struct matrix_width_tuple
-{
- static const std::size_t
- current = matrix_width<typename boost::tuples::element<I, Tuple>::type>::value;
- static const std::size_t
- next = matrix_width_tuple<Tuple, I+1>::value;
-
- static const std::size_t
- value = current > next ? current : next;
-};
-
-template <typename Tuple, int N>
-struct matrix_width_tuple<Tuple, N, N>
-{
- static const std::size_t value = 0;
-};
-
-template <typename Head, typename Tail>
-struct matrix_width< boost::tuples::cons<Head, Tail> >
-{
- static const std::size_t
- value = matrix_width_tuple< boost::tuples::cons<Head, Tail> >::value;
-};
-
-// mask_handler
-
-template <typename Mask, bool Interrupt>
-class mask_handler
- : private matrix_handler
- <
- relate::matrix<matrix_width<Mask>::value>
- >
-{
- typedef matrix_handler
- <
- relate::matrix<matrix_width<Mask>::value>
- > base_t;
-
-public:
- typedef bool result_type;
-
- bool interrupt;
-
- inline explicit mask_handler(Mask const& m)
- : interrupt(false)
- , m_mask(m)
- {}
-
- result_type result() const
- {
- return !interrupt
- && check_matrix(m_mask, base_t::matrix());
- }
-
- template <field F1, field F2, char D>
- inline bool may_update() const
- {
- return detail::relate::may_update<F1, F2, D>(
- m_mask, base_t::matrix()
- );
- }
-
- template <field F1, field F2, char V>
- inline void set()
- {
- if ( relate::interrupt<F1, F2, V, Interrupt>(m_mask) )
- {
- interrupt = true;
- }
- else
- {
- base_t::template set<F1, F2, V>();
- }
- }
-
- template <field F1, field F2, char V>
- inline void update()
- {
- if ( relate::interrupt<F1, F2, V, Interrupt>(m_mask) )
- {
- interrupt = true;
- }
- else
- {
- base_t::template update<F1, F2, V>();
- }
- }
-
-private:
- Mask const& m_mask;
-};
-
-// --------------- COMPILE-TIME MASK ----------------
-
-// static_check_characters
-template
-<
- typename Seq,
- typename First = typename boost::mpl::begin<Seq>::type,
- typename Last = typename boost::mpl::end<Seq>::type
->
-struct static_check_characters
- : static_check_characters
- <
- Seq,
- typename boost::mpl::next<First>::type
- >
-{
- typedef typename boost::mpl::deref<First>::type type;
- static const char value = type::value;
- static const bool is_valid = (value >= '0' && value <= '9')
- || value == 'T' || value == 'F' || value == '*';
- BOOST_MPL_ASSERT_MSG((is_valid),
- INVALID_STATIC_MASK_CHARACTER,
- (type));
-};
-
-template <typename Seq, typename Last>
-struct static_check_characters<Seq, Last, Last>
-{};
-
-// static_mask
-
-template
-<
- typename Seq,
- std::size_t Height,
- std::size_t Width = Height
->
-struct static_mask
-{
- static const std::size_t static_width = Width;
- static const std::size_t static_height = Height;
- static const std::size_t static_size = Width * Height;
-
- BOOST_STATIC_ASSERT(
- std::size_t(boost::mpl::size<Seq>::type::value) == static_size);
-
- template <detail::relate::field F1, detail::relate::field F2>
- struct static_get
- {
- BOOST_STATIC_ASSERT(std::size_t(F1) < static_height);
- BOOST_STATIC_ASSERT(std::size_t(F2) < static_width);
-
- static const char value
- = boost::mpl::at_c<Seq, F1 * static_width + F2>::type::value;
- };
-
-private:
- // check static_mask characters
- enum { mask_check = sizeof(static_check_characters<Seq>) };
-};
-
-// static_should_handle_element
-
-template <typename StaticMask, field F1, field F2, bool IsSequence>
-struct static_should_handle_element_dispatch
-{
- static const char mask_el = StaticMask::template static_get<F1, F2>::value;
- static const bool value = mask_el == 'F'
- || mask_el == 'T'
- || ( mask_el >= '0' && mask_el <= '9' );
-};
-
-template <typename First, typename Last, field F1, field F2>
-struct static_should_handle_element_sequence
-{
- typedef typename boost::mpl::deref<First>::type StaticMask;
-
- static const bool value
- = static_should_handle_element_dispatch
- <
- StaticMask,
- F1, F2,
- boost::mpl::is_sequence<StaticMask>::value
- >::value
- || static_should_handle_element_sequence
- <
- typename boost::mpl::next<First>::type,
- Last,
- F1, F2
- >::value;
-};
-
-template <typename Last, field F1, field F2>
-struct static_should_handle_element_sequence<Last, Last, F1, F2>
-{
- static const bool value = false;
-};
-
-template <typename StaticMask, field F1, field F2>
-struct static_should_handle_element_dispatch<StaticMask, F1, F2, true>
-{
- static const bool value
- = static_should_handle_element_sequence
- <
- typename boost::mpl::begin<StaticMask>::type,
- typename boost::mpl::end<StaticMask>::type,
- F1, F2
- >::value;
-};
-
-template <typename StaticMask, field F1, field F2>
-struct static_should_handle_element
-{
- static const bool value
- = static_should_handle_element_dispatch
- <
- StaticMask,
- F1, F2,
- boost::mpl::is_sequence<StaticMask>::value
- >::value;
-};
-
-// static_interrupt
-
-template <typename StaticMask, char V, field F1, field F2, bool InterruptEnabled, bool IsSequence>
-struct static_interrupt_dispatch
-{
- static const bool value = false;
-};
-
-template <typename StaticMask, char V, field F1, field F2, bool IsSequence>
-struct static_interrupt_dispatch<StaticMask, V, F1, F2, true, IsSequence>
-{
- static const char mask_el = StaticMask::template static_get<F1, F2>::value;
-
- static const bool value
- = ( V >= '0' && V <= '9' ) ?
- ( mask_el == 'F' || ( mask_el < V && mask_el >= '0' && mask_el <= '9' ) ) :
- ( ( V == 'T' ) ? mask_el == 'F' : false );
-};
-
-template <typename First, typename Last, char V, field F1, field F2>
-struct static_interrupt_sequence
-{
- typedef typename boost::mpl::deref<First>::type StaticMask;
-
- static const bool value
- = static_interrupt_dispatch
- <
- StaticMask,
- V, F1, F2,
- true,
- boost::mpl::is_sequence<StaticMask>::value
- >::value
- && static_interrupt_sequence
- <
- typename boost::mpl::next<First>::type,
- Last,
- V, F1, F2
- >::value;
-};
-
-template <typename Last, char V, field F1, field F2>
-struct static_interrupt_sequence<Last, Last, V, F1, F2>
-{
- static const bool value = true;
-};
-
-template <typename StaticMask, char V, field F1, field F2>
-struct static_interrupt_dispatch<StaticMask, V, F1, F2, true, true>
-{
- static const bool value
- = static_interrupt_sequence
- <
- typename boost::mpl::begin<StaticMask>::type,
- typename boost::mpl::end<StaticMask>::type,
- V, F1, F2
- >::value;
-};
-
-template <typename StaticMask, char V, field F1, field F2, bool EnableInterrupt>
-struct static_interrupt
-{
- static const bool value
- = static_interrupt_dispatch
- <
- StaticMask,
- V, F1, F2,
- EnableInterrupt,
- boost::mpl::is_sequence<StaticMask>::value
- >::value;
-};
-
-// static_may_update
-
-template <typename StaticMask, char D, field F1, field F2, bool IsSequence>
-struct static_may_update_dispatch
-{
- static const char mask_el = StaticMask::template static_get<F1, F2>::value;
- static const int version
- = mask_el == 'F' ? 0
- : mask_el == 'T' ? 1
- : mask_el >= '0' && mask_el <= '9' ? 2
- : 3;
-
- template <typename Matrix>
- static inline bool apply(Matrix const& matrix)
- {
- return apply_dispatch(matrix, integral_constant<int, version>());
- }
-
- // mask_el == 'F'
- template <typename Matrix>
- static inline bool apply_dispatch(Matrix const& , integral_constant<int, 0>)
- {
- return true;
- }
- // mask_el == 'T'
- template <typename Matrix>
- static inline bool apply_dispatch(Matrix const& matrix, integral_constant<int, 1>)
- {
- char const c = matrix.template get<F1, F2>();
- return c == 'F'; // if it's T or between 0 and 9, the result will be the same
- }
- // mask_el >= '0' && mask_el <= '9'
- template <typename Matrix>
- static inline bool apply_dispatch(Matrix const& matrix, integral_constant<int, 2>)
- {
- char const c = matrix.template get<F1, F2>();
- return D > c || c > '9';
- }
- // else
- template <typename Matrix>
- static inline bool apply_dispatch(Matrix const&, integral_constant<int, 3>)
- {
- return false;
- }
-};
-
-template <typename First, typename Last, char D, field F1, field F2>
-struct static_may_update_sequence
-{
- typedef typename boost::mpl::deref<First>::type StaticMask;
-
- template <typename Matrix>
- static inline bool apply(Matrix const& matrix)
- {
- return static_may_update_dispatch
- <
- StaticMask,
- D, F1, F2,
- boost::mpl::is_sequence<StaticMask>::value
- >::apply(matrix)
- || static_may_update_sequence
- <
- typename boost::mpl::next<First>::type,
- Last,
- D, F1, F2
- >::apply(matrix);
- }
-};
-
-template <typename Last, char D, field F1, field F2>
-struct static_may_update_sequence<Last, Last, D, F1, F2>
-{
- template <typename Matrix>
- static inline bool apply(Matrix const& /*matrix*/)
- {
- return false;
- }
-};
-
-template <typename StaticMask, char D, field F1, field F2>
-struct static_may_update_dispatch<StaticMask, D, F1, F2, true>
-{
- template <typename Matrix>
- static inline bool apply(Matrix const& matrix)
- {
- return static_may_update_sequence
- <
- typename boost::mpl::begin<StaticMask>::type,
- typename boost::mpl::end<StaticMask>::type,
- D, F1, F2
- >::apply(matrix);
- }
-};
-
-template <typename StaticMask, char D, field F1, field F2>
-struct static_may_update
-{
- template <typename Matrix>
- static inline bool apply(Matrix const& matrix)
- {
- return static_may_update_dispatch
- <
- StaticMask,
- D, F1, F2,
- boost::mpl::is_sequence<StaticMask>::value
- >::apply(matrix);
- }
-};
-
-// static_check_matrix
-
-template <typename StaticMask, bool IsSequence>
-struct static_check_dispatch
-{
- template <typename Matrix>
- static inline bool apply(Matrix const& matrix)
- {
- return per_one<interior, interior>::apply(matrix)
- && per_one<interior, boundary>::apply(matrix)
- && per_one<interior, exterior>::apply(matrix)
- && per_one<boundary, interior>::apply(matrix)
- && per_one<boundary, boundary>::apply(matrix)
- && per_one<boundary, exterior>::apply(matrix)
- && per_one<exterior, interior>::apply(matrix)
- && per_one<exterior, boundary>::apply(matrix)
- && per_one<exterior, exterior>::apply(matrix);
- }
-
- template <field F1, field F2>
- struct per_one
- {
- static const char mask_el = StaticMask::template static_get<F1, F2>::value;
- static const int version
- = mask_el == 'F' ? 0
- : mask_el == 'T' ? 1
- : mask_el >= '0' && mask_el <= '9' ? 2
- : 3;
-
- template <typename Matrix>
- static inline bool apply(Matrix const& matrix)
- {
- const char el = matrix.template get<F1, F2>();
- return apply_dispatch(el, integral_constant<int, version>());
- }
-
- // mask_el == 'F'
- static inline bool apply_dispatch(char el, integral_constant<int, 0>)
- {
- return el == 'F';
- }
- // mask_el == 'T'
- static inline bool apply_dispatch(char el, integral_constant<int, 1>)
- {
- return el == 'T' || ( el >= '0' && el <= '9' );
- }
- // mask_el >= '0' && mask_el <= '9'
- static inline bool apply_dispatch(char el, integral_constant<int, 2>)
- {
- return el == mask_el;
- }
- // else
- static inline bool apply_dispatch(char /*el*/, integral_constant<int, 3>)
- {
- return true;
- }
- };
-};
-
-template <typename First, typename Last>
-struct static_check_sequence
-{
- typedef typename boost::mpl::deref<First>::type StaticMask;
-
- template <typename Matrix>
- static inline bool apply(Matrix const& matrix)
- {
- return static_check_dispatch
- <
- StaticMask,
- boost::mpl::is_sequence<StaticMask>::value
- >::apply(matrix)
- || static_check_sequence
- <
- typename boost::mpl::next<First>::type,
- Last
- >::apply(matrix);
- }
-};
-
-template <typename Last>
-struct static_check_sequence<Last, Last>
-{
- template <typename Matrix>
- static inline bool apply(Matrix const& /*matrix*/)
- {
- return false;
- }
-};
-
-template <typename StaticMask>
-struct static_check_dispatch<StaticMask, true>
-{
- template <typename Matrix>
- static inline bool apply(Matrix const& matrix)
- {
- return static_check_sequence
- <
- typename boost::mpl::begin<StaticMask>::type,
- typename boost::mpl::end<StaticMask>::type
- >::apply(matrix);
- }
-};
-
-template <typename StaticMask>
-struct static_check_matrix
-{
- template <typename Matrix>
- static inline bool apply(Matrix const& matrix)
- {
- return static_check_dispatch
- <
- StaticMask,
- boost::mpl::is_sequence<StaticMask>::value
- >::apply(matrix);
- }
-};
-
-// static_mask_handler
-
-template <typename StaticMask, bool Interrupt>
-class static_mask_handler
- : private matrix_handler< matrix<3> >
-{
- typedef matrix_handler< relate::matrix<3> > base_type;
-
-public:
- typedef bool result_type;
-
- bool interrupt;
-
- inline static_mask_handler()
- : interrupt(false)
- {}
-
- inline explicit static_mask_handler(StaticMask const& /*dummy*/)
- : interrupt(false)
- {}
-
- result_type result() const
- {
- return (!Interrupt || !interrupt)
- && static_check_matrix<StaticMask>::apply(base_type::matrix());
- }
-
- template <field F1, field F2, char D>
- inline bool may_update() const
- {
- return static_may_update<StaticMask, D, F1, F2>::
- apply(base_type::matrix());
- }
-
- template <field F1, field F2>
- static inline bool expects()
- {
- return static_should_handle_element<StaticMask, F1, F2>::value;
- }
-
- template <field F1, field F2, char V>
- inline void set()
- {
- static const bool interrupt_c = static_interrupt<StaticMask, V, F1, F2, Interrupt>::value;
- static const bool should_handle = static_should_handle_element<StaticMask, F1, F2>::value;
- static const int version = interrupt_c ? 0
- : should_handle ? 1
- : 2;
-
- set_dispatch<F1, F2, V>(integral_constant<int, version>());
- }
-
- template <field F1, field F2, char V>
- inline void update()
- {
- static const bool interrupt_c = static_interrupt<StaticMask, V, F1, F2, Interrupt>::value;
- static const bool should_handle = static_should_handle_element<StaticMask, F1, F2>::value;
- static const int version = interrupt_c ? 0
- : should_handle ? 1
- : 2;
-
- update_dispatch<F1, F2, V>(integral_constant<int, version>());
- }
-
-private:
- // Interrupt && interrupt
- template <field F1, field F2, char V>
- inline void set_dispatch(integral_constant<int, 0>)
- {
- interrupt = true;
- }
- // else should_handle
- template <field F1, field F2, char V>
- inline void set_dispatch(integral_constant<int, 1>)
- {
- base_type::template set<F1, F2, V>();
- }
- // else
- template <field F1, field F2, char V>
- inline void set_dispatch(integral_constant<int, 2>)
- {}
-
- // Interrupt && interrupt
- template <field F1, field F2, char V>
- inline void update_dispatch(integral_constant<int, 0>)
- {
- interrupt = true;
- }
- // else should_handle
- template <field F1, field F2, char V>
- inline void update_dispatch(integral_constant<int, 1>)
- {
- base_type::template update<F1, F2, V>();
- }
- // else
- template <field F1, field F2, char V>
- inline void update_dispatch(integral_constant<int, 2>)
- {}
-};
-
-// --------------- UTIL FUNCTIONS ----------------
-
-// set
-
-template <field F1, field F2, char V, typename Result>
-inline void set(Result & res)
-{
- res.template set<F1, F2, V>();
-}
-
-template <field F1, field F2, char V, bool Transpose>
-struct set_dispatch
-{
- template <typename Result>
- static inline void apply(Result & res)
- {
- res.template set<F1, F2, V>();
- }
-};
-
-template <field F1, field F2, char V>
-struct set_dispatch<F1, F2, V, true>
-{
- template <typename Result>
- static inline void apply(Result & res)
- {
- res.template set<F2, F1, V>();
- }
-};
-
-template <field F1, field F2, char V, bool Transpose, typename Result>
-inline void set(Result & res)
-{
- set_dispatch<F1, F2, V, Transpose>::apply(res);
-}
-
-// update
-
-template <field F1, field F2, char D, typename Result>
-inline void update(Result & res)
-{
- res.template update<F1, F2, D>();
-}
-
-template <field F1, field F2, char D, bool Transpose>
-struct update_result_dispatch
-{
- template <typename Result>
- static inline void apply(Result & res)
- {
- update<F1, F2, D>(res);
- }
-};
-
-template <field F1, field F2, char D>
-struct update_result_dispatch<F1, F2, D, true>
-{
- template <typename Result>
- static inline void apply(Result & res)
- {
- update<F2, F1, D>(res);
- }
-};
-
-template <field F1, field F2, char D, bool Transpose, typename Result>
-inline void update(Result & res)
-{
- update_result_dispatch<F1, F2, D, Transpose>::apply(res);
-}
-
-// may_update
-
-template <field F1, field F2, char D, typename Result>
-inline bool may_update(Result const& res)
-{
- return res.template may_update<F1, F2, D>();
-}
-
-template <field F1, field F2, char D, bool Transpose>
-struct may_update_result_dispatch
-{
- template <typename Result>
- static inline bool apply(Result const& res)
- {
- return may_update<F1, F2, D>(res);
- }
-};
-
-template <field F1, field F2, char D>
-struct may_update_result_dispatch<F1, F2, D, true>
-{
- template <typename Result>
- static inline bool apply(Result const& res)
- {
- return may_update<F2, F1, D>(res);
- }
-};
-
-template <field F1, field F2, char D, bool Transpose, typename Result>
-inline bool may_update(Result const& res)
-{
- return may_update_result_dispatch<F1, F2, D, Transpose>::apply(res);
-}
-
-// result_dimension
-
-template <typename Geometry>
-struct result_dimension
-{
- BOOST_STATIC_ASSERT(geometry::dimension<Geometry>::value >= 0);
- static const char value
- = ( geometry::dimension<Geometry>::value <= 9 ) ?
- ( '0' + geometry::dimension<Geometry>::value ) :
- 'T';
-};
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_RESULT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/topology_check.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/topology_check.hpp
deleted file mode 100644
index 810466ec052..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/topology_check.hpp
+++ /dev/null
@@ -1,344 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_TOPOLOGY_CHECK_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_TOPOLOGY_CHECK_HPP
-
-
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-
-#include <boost/geometry/policies/compare.hpp>
-
-#include <boost/geometry/util/has_nan_coordinate.hpp>
-#include <boost/geometry/util/range.hpp>
-
-
-namespace boost { namespace geometry {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate {
-
-// TODO: change the name for e.g. something with the word "exterior"
-
-template <typename Geometry,
- typename Tag = typename geometry::tag<Geometry>::type>
-struct topology_check
- : not_implemented<Tag>
-{};
-
-//template <typename Point>
-//struct topology_check<Point, point_tag>
-//{
-// static const char interior = '0';
-// static const char boundary = 'F';
-//
-// static const bool has_interior = true;
-// static const bool has_boundary = false;
-//
-// topology_check(Point const&) {}
-// template <typename IgnoreBoundaryPoint>
-// topology_check(Point const&, IgnoreBoundaryPoint const&) {}
-//};
-
-template <typename Linestring>
-struct topology_check<Linestring, linestring_tag>
-{
- static const char interior = '1';
- static const char boundary = '0';
-
- topology_check(Linestring const& ls)
- : m_ls(ls)
- , m_is_initialized(false)
- {}
-
- bool has_interior() const
- {
- init();
- return m_has_interior;
- }
-
- bool has_boundary() const
- {
- init();
- return m_has_boundary;
- }
-
- /*template <typename Point>
- bool check_boundary_point(Point const& point) const
- {
- init();
- return m_has_boundary
- && ( equals::equals_point_point(point, range::front(m_ls))
- || equals::equals_point_point(point, range::back(m_ls)) );
- }*/
-
- template <typename Visitor>
- void for_each_boundary_point(Visitor & visitor) const
- {
- init();
- if (m_has_boundary)
- {
- if (visitor.apply(range::front(m_ls)))
- visitor.apply(range::back(m_ls));
- }
- }
-
-private:
- void init() const
- {
- if (m_is_initialized)
- return;
-
- std::size_t count = boost::size(m_ls);
- m_has_interior = count > 0;
- // NOTE: Linestring with all points equal is treated as 1d linear ring
- m_has_boundary = count > 1
- && ! detail::equals::equals_point_point(range::front(m_ls), range::back(m_ls));
-
- m_is_initialized = true;
- }
-
- Linestring const& m_ls;
- mutable bool m_is_initialized;
-
- mutable bool m_has_interior;
- mutable bool m_has_boundary;
-};
-
-template <typename MultiLinestring>
-struct topology_check<MultiLinestring, multi_linestring_tag>
-{
- static const char interior = '1';
- static const char boundary = '0';
-
- topology_check(MultiLinestring const& mls)
- : m_mls(mls)
- , m_is_initialized(false)
- {}
-
- bool has_interior() const
- {
- init();
- return m_has_interior;
- }
-
- bool has_boundary() const
- {
- init();
- return m_has_boundary;
- }
-
- template <typename Point>
- bool check_boundary_point(Point const& point) const
- {
- init();
-
- if (! m_has_boundary)
- return false;
-
- std::size_t count = count_equal(m_endpoints.begin(), m_endpoints.end(), point);
-
- return count % 2 != 0; // odd count -> boundary
- }
-
- template <typename Visitor>
- void for_each_boundary_point(Visitor & visitor) const
- {
- init();
- if (m_has_boundary)
- {
- for_each_boundary_point(m_endpoints.begin(), m_endpoints.end(), visitor);
- }
- }
-
-private:
- void init() const
- {
- if (m_is_initialized)
- return;
-
- m_endpoints.reserve(boost::size(m_mls) * 2);
-
- m_has_interior = false;
-
- typedef typename boost::range_iterator<MultiLinestring const>::type ls_iterator;
- for ( ls_iterator it = boost::begin(m_mls) ; it != boost::end(m_mls) ; ++it )
- {
- typename boost::range_reference<MultiLinestring const>::type
- ls = *it;
-
- std::size_t count = boost::size(ls);
-
- if (count > 0)
- {
- m_has_interior = true;
- }
-
- if (count > 1)
- {
- typedef typename boost::range_reference
- <
- typename boost::range_value<MultiLinestring const>::type const
- >::type point_reference;
-
- point_reference front_pt = range::front(ls);
- point_reference back_pt = range::back(ls);
-
- // don't store boundaries of linear rings, this doesn't change anything
- if (! equals::equals_point_point(front_pt, back_pt))
- {
- // do not add points containing NaN coordinates
- // because they cannot be reasonably compared, e.g. with MSVC
- // an assertion failure is reported in std::equal_range()
- // NOTE: currently ignoring_counter calling std::equal_range()
- // is not used anywhere in the code, still it's safer this way
- if (! geometry::has_nan_coordinate(front_pt))
- {
- m_endpoints.push_back(front_pt);
- }
- if (! geometry::has_nan_coordinate(back_pt))
- {
- m_endpoints.push_back(back_pt);
- }
- }
- }
- }
-
- m_has_boundary = false;
-
- if (! m_endpoints.empty() )
- {
- std::sort(m_endpoints.begin(), m_endpoints.end(), geometry::less<>());
- m_has_boundary = find_odd_count(m_endpoints.begin(), m_endpoints.end());
- }
-
- m_is_initialized = true;
- }
-
- template <typename It, typename Point>
- static inline std::size_t count_equal(It first, It last, Point const& point)
- {
- std::pair<It, It> rng = std::equal_range(first, last, point, geometry::less<>());
- return (std::size_t)std::distance(rng.first, rng.second);
- }
-
- template <typename It>
- static inline bool find_odd_count(It first, It last)
- {
- interrupting_visitor visitor;
- for_each_boundary_point(first, last, visitor);
- return visitor.found;
- }
-
- struct interrupting_visitor
- {
- bool found;
- interrupting_visitor() : found(false) {}
- template <typename Point>
- bool apply(Point const&)
- {
- found = true;
- return false;
- }
- };
-
- template <typename It, typename Visitor>
- static void for_each_boundary_point(It first, It last, Visitor& visitor)
- {
- if ( first == last )
- return;
-
- std::size_t count = 1;
- It prev = first;
- ++first;
- for ( ; first != last ; ++first, ++prev )
- {
- // the end of the equal points subrange
- if ( ! equals::equals_point_point(*first, *prev) )
- {
- // odd count -> boundary
- if ( count % 2 != 0 )
- {
- if (! visitor.apply(*prev))
- {
- return;
- }
- }
-
- count = 1;
- }
- else
- {
- ++count;
- }
- }
-
- // odd count -> boundary
- if ( count % 2 != 0 )
- {
- visitor.apply(*prev);
- }
- }
-
-private:
- MultiLinestring const& m_mls;
- mutable bool m_is_initialized;
-
- mutable bool m_has_interior;
- mutable bool m_has_boundary;
-
- typedef typename geometry::point_type<MultiLinestring>::type point_type;
- mutable std::vector<point_type> m_endpoints;
-};
-
-template <typename Ring>
-struct topology_check<Ring, ring_tag>
-{
- static const char interior = '2';
- static const char boundary = '1';
-
- topology_check(Ring const&) {}
-
- static bool has_interior() { return true; }
- static bool has_boundary() { return true; }
-};
-
-template <typename Polygon>
-struct topology_check<Polygon, polygon_tag>
-{
- static const char interior = '2';
- static const char boundary = '1';
-
- topology_check(Polygon const&) {}
-
- static bool has_interior() { return true; }
- static bool has_boundary() { return true; }
-};
-
-template <typename MultiPolygon>
-struct topology_check<MultiPolygon, multi_polygon_tag>
-{
- static const char interior = '2';
- static const char boundary = '1';
-
- topology_check(MultiPolygon const&) {}
-
- static bool has_interior() { return true; }
- static bool has_boundary() { return true; }
- template <typename Point>
- static bool check_boundary_point(Point const& ) { return true; }
-};
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_TOPOLOGY_CHECK_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/turns.hpp
deleted file mode 100644
index 6fa05eaf212..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relate/turns.hpp
+++ /dev/null
@@ -1,307 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_TURNS_HPP
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/algorithms/detail/overlay/do_reverse.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
-#include <boost/geometry/algorithms/detail/overlay/get_turn_info.hpp>
-
-#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
-#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
-
-#include <boost/type_traits/is_base_of.hpp>
-
-
-namespace boost { namespace geometry {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate { namespace turns {
-
-template <bool IncludeDegenerate = false>
-struct assign_policy
- : overlay::assign_null_policy
-{
- static bool const include_degenerate = IncludeDegenerate;
-};
-
-// GET_TURNS
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename GetTurnPolicy = detail::get_turns::get_turn_info_type
- <
- Geometry1, Geometry2, assign_policy<>
- >,
- typename RobustPolicy = detail::no_rescale_policy
->
-struct get_turns
-{
- typedef typename geometry::point_type<Geometry1>::type point1_type;
-
- typedef overlay::turn_info
- <
- point1_type,
- typename segment_ratio_type<point1_type, RobustPolicy>::type,
- typename detail::get_turns::turn_operation_type
- <
- Geometry1, Geometry2,
- typename segment_ratio_type
- <
- point1_type, RobustPolicy
- >::type
- >::type
- > turn_info;
-
- template <typename Turns>
- static inline void apply(Turns & turns,
- Geometry1 const& geometry1,
- Geometry2 const& geometry2)
- {
- detail::get_turns::no_interrupt_policy interrupt_policy;
-
- typename strategy::intersection::services::default_strategy
- <
- typename cs_tag<Geometry1>::type
- >::type intersection_strategy;
-
- apply(turns, geometry1, geometry2, interrupt_policy, intersection_strategy);
- }
-
- template <typename Turns, typename InterruptPolicy, typename IntersectionStrategy>
- static inline void apply(Turns & turns,
- Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- InterruptPolicy & interrupt_policy,
- IntersectionStrategy const& intersection_strategy)
- {
- RobustPolicy robust_policy = geometry::get_rescale_policy
- <
- RobustPolicy
- >(geometry1, geometry2);
-
- apply(turns, geometry1, geometry2, interrupt_policy, intersection_strategy, robust_policy);
- }
-
- template <typename Turns, typename InterruptPolicy, typename IntersectionStrategy>
- static inline void apply(Turns & turns,
- Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- InterruptPolicy & interrupt_policy,
- IntersectionStrategy const& intersection_strategy,
- RobustPolicy const& robust_policy)
- {
- static const bool reverse1 = detail::overlay::do_reverse
- <
- geometry::point_order<Geometry1>::value
- >::value;
-
- static const bool reverse2 = detail::overlay::do_reverse
- <
- geometry::point_order<Geometry2>::value
- >::value;
-
- dispatch::get_turns
- <
- typename geometry::tag<Geometry1>::type,
- typename geometry::tag<Geometry2>::type,
- Geometry1,
- Geometry2,
- reverse1,
- reverse2,
- GetTurnPolicy
- >::apply(0, geometry1, 1, geometry2,
- intersection_strategy, robust_policy,
- turns, interrupt_policy);
- }
-};
-
-// TURNS SORTING AND SEARCHING
-
-template <int N = 0, int U = 1, int I = 2, int B = 3, int C = 4, int O = 0>
-struct op_to_int
-{
- template <typename Operation>
- inline int operator()(Operation const& op) const
- {
- switch(op.operation)
- {
- case detail::overlay::operation_none : return N;
- case detail::overlay::operation_union : return U;
- case detail::overlay::operation_intersection : return I;
- case detail::overlay::operation_blocked : return B;
- case detail::overlay::operation_continue : return C;
- case detail::overlay::operation_opposite : return O;
- }
- return -1;
- }
-};
-
-template <std::size_t OpId, typename OpToInt>
-struct less_op_xxx_linear
-{
- template <typename Turn>
- inline bool operator()(Turn const& left, Turn const& right) const
- {
- static OpToInt op_to_int;
- return op_to_int(left.operations[OpId]) < op_to_int(right.operations[OpId]);
- }
-};
-
-template <std::size_t OpId>
-struct less_op_linear_linear
- : less_op_xxx_linear< OpId, op_to_int<0,2,3,1,4,0> >
-{};
-
-template <std::size_t OpId>
-struct less_op_linear_areal_single
-{
- template <typename Turn>
- inline bool operator()(Turn const& left, Turn const& right) const
- {
- static const std::size_t other_op_id = (OpId + 1) % 2;
- static turns::op_to_int<0,2,3,1,4,0> op_to_int_xuic;
- static turns::op_to_int<0,3,2,1,4,0> op_to_int_xiuc;
-
- segment_identifier const& left_other_seg_id = left.operations[other_op_id].seg_id;
- segment_identifier const& right_other_seg_id = right.operations[other_op_id].seg_id;
-
- typedef typename Turn::turn_operation_type operation_type;
- operation_type const& left_operation = left.operations[OpId];
- operation_type const& right_operation = right.operations[OpId];
-
- if ( left_other_seg_id.ring_index == right_other_seg_id.ring_index )
- {
- return op_to_int_xuic(left_operation)
- < op_to_int_xuic(right_operation);
- }
- else
- {
- return op_to_int_xiuc(left_operation)
- < op_to_int_xiuc(right_operation);
- }
- }
-};
-
-template <std::size_t OpId>
-struct less_op_areal_linear
- : less_op_xxx_linear< OpId, op_to_int<0,1,0,0,2,0> >
-{};
-
-template <std::size_t OpId>
-struct less_op_areal_areal
-{
- template <typename Turn>
- inline bool operator()(Turn const& left, Turn const& right) const
- {
- static const std::size_t other_op_id = (OpId + 1) % 2;
- static op_to_int<0, 1, 2, 3, 4, 0> op_to_int_uixc;
- static op_to_int<0, 2, 1, 3, 4, 0> op_to_int_iuxc;
-
- segment_identifier const& left_other_seg_id = left.operations[other_op_id].seg_id;
- segment_identifier const& right_other_seg_id = right.operations[other_op_id].seg_id;
-
- typedef typename Turn::turn_operation_type operation_type;
- operation_type const& left_operation = left.operations[OpId];
- operation_type const& right_operation = right.operations[OpId];
-
- if ( left_other_seg_id.multi_index == right_other_seg_id.multi_index )
- {
- if ( left_other_seg_id.ring_index == right_other_seg_id.ring_index )
- {
- return op_to_int_uixc(left_operation) < op_to_int_uixc(right_operation);
- }
- else
- {
- if ( left_other_seg_id.ring_index == -1 )
- {
- if ( left_operation.operation == overlay::operation_union )
- return false;
- else if ( left_operation.operation == overlay::operation_intersection )
- return true;
- }
- else if ( right_other_seg_id.ring_index == -1 )
- {
- if ( right_operation.operation == overlay::operation_union )
- return true;
- else if ( right_operation.operation == overlay::operation_intersection )
- return false;
- }
-
- return op_to_int_iuxc(left_operation) < op_to_int_iuxc(right_operation);
- }
- }
- else
- {
- return op_to_int_uixc(left_operation) < op_to_int_uixc(right_operation);
- }
- }
-};
-
-template <std::size_t OpId>
-struct less_other_multi_index
-{
- static const std::size_t other_op_id = (OpId + 1) % 2;
-
- template <typename Turn>
- inline bool operator()(Turn const& left, Turn const& right) const
- {
- return left.operations[other_op_id].seg_id.multi_index
- < right.operations[other_op_id].seg_id.multi_index;
- }
-};
-
-// sort turns by G1 - source_index == 0 by:
-// seg_id -> distance -> operation
-template <std::size_t OpId = 0,
- typename LessOp = less_op_xxx_linear< OpId, op_to_int<> > >
-struct less
-{
- BOOST_STATIC_ASSERT(OpId < 2);
-
- template <typename Turn>
- static inline bool use_fraction(Turn const& left, Turn const& right)
- {
- static LessOp less_op;
-
- return
- geometry::math::equals(left.operations[OpId].fraction,
- right.operations[OpId].fraction)
- ?
- less_op(left, right)
- :
- (left.operations[OpId].fraction < right.operations[OpId].fraction)
- ;
- }
-
- template <typename Turn>
- inline bool operator()(Turn const& left, Turn const& right) const
- {
- segment_identifier const& sl = left.operations[OpId].seg_id;
- segment_identifier const& sr = right.operations[OpId].seg_id;
-
- return sl < sr || ( sl == sr && use_fraction(left, right) );
- }
-};
-
-}}} // namespace detail::relate::turns
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relation/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relation/implementation.hpp
deleted file mode 100644
index b9a238d6c8c..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relation/implementation.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATION_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATION_IMPLEMENTATION_HPP
-
-
-#include <boost/geometry/algorithms/detail/relate/implementation.hpp>
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATION_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/relation/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/relation/interface.hpp
deleted file mode 100644
index 83d27ed72ff..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/relation/interface.hpp
+++ /dev/null
@@ -1,219 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATION_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATION_INTERFACE_HPP
-
-
-#include <boost/geometry/algorithms/detail/relate/interface.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace relate
-{
-
-template <typename Geometry1, typename Geometry2>
-struct result_handler_type<Geometry1, Geometry2, geometry::de9im::matrix, false>
-{
- typedef matrix_handler<geometry::de9im::matrix> type;
-};
-
-
-}} // namespace detail::relate
-#endif // DOXYGEN_NO_DETAIL
-
-namespace resolve_variant
-{
-
-template <typename Geometry1, typename Geometry2>
-struct relation
-{
- template <typename Matrix, typename Strategy>
- static inline Matrix apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
- assert_dimension_equal<Geometry1, Geometry2>();
-
- typename detail::relate::result_handler_type
- <
- Geometry1,
- Geometry2,
- Matrix
- >::type handler;
-
- resolve_strategy::relate::apply(geometry1, geometry2, handler, strategy);
-
- return handler.result();
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct relation<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename Matrix, typename Strategy>
- struct visitor : boost::static_visitor<Matrix>
- {
- Geometry2 const& m_geometry2;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2, Strategy const& strategy)
- : m_geometry2(geometry2), m_strategy(strategy) {}
-
- template <typename Geometry1>
- Matrix operator()(Geometry1 const& geometry1) const
- {
- return relation<Geometry1, Geometry2>
- ::template apply<Matrix>(geometry1, m_geometry2, m_strategy);
- }
- };
-
- template <typename Matrix, typename Strategy>
- static inline Matrix
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Matrix, Strategy>(geometry2, strategy), geometry1);
- }
-};
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct relation<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Matrix, typename Strategy>
- struct visitor : boost::static_visitor<Matrix>
- {
- Geometry1 const& m_geometry1;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1, Strategy const& strategy)
- : m_geometry1(geometry1), m_strategy(strategy) {}
-
- template <typename Geometry2>
- Matrix operator()(Geometry2 const& geometry2) const
- {
- return relation<Geometry1, Geometry2>
- ::template apply<Matrix>(m_geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Matrix, typename Strategy>
- static inline Matrix
- apply(Geometry1 const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Matrix, Strategy>(geometry1, strategy), geometry2);
- }
-};
-
-template
-<
- BOOST_VARIANT_ENUM_PARAMS(typename T1),
- BOOST_VARIANT_ENUM_PARAMS(typename T2)
->
-struct relation
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
- >
-{
- template <typename Matrix, typename Strategy>
- struct visitor : boost::static_visitor<Matrix>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy)
- : m_strategy(strategy) {}
-
- template <typename Geometry1, typename Geometry2>
- Matrix operator()(Geometry1 const& geometry1,
- Geometry2 const& geometry2) const
- {
- return relation<Geometry1, Geometry2>
- ::template apply<Matrix>(geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Matrix, typename Strategy>
- static inline Matrix
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Matrix, Strategy>(strategy), geometry1, geometry2);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief Calculates the relation between a pair of geometries as defined in DE-9IM.
-\ingroup relation
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Strategy \tparam_strategy{Relation}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param strategy \param_strategy{relation}
-\return The DE-9IM matrix expressing the relation between geometries.
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/relation.qbk]}
- */
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline de9im::matrix relation(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- return resolve_variant::relation
- <
- Geometry1,
- Geometry2
- >::template apply<de9im::matrix>(geometry1, geometry2, strategy);
-}
-
-
-/*!
-\brief Calculates the relation between a pair of geometries as defined in DE-9IM.
-\ingroup relation
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return The DE-9IM matrix expressing the relation between geometries.
-
-\qbk{[include reference/algorithms/relation.qbk]}
- */
-template <typename Geometry1, typename Geometry2>
-inline de9im::matrix relation(Geometry1 const& geometry1,
- Geometry2 const& geometry2)
-{
- return resolve_variant::relation
- <
- Geometry1,
- Geometry2
- >::template apply<de9im::matrix>(geometry1, geometry2, default_strategy());
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RELATE_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/ring_identifier.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/ring_identifier.hpp
deleted file mode 100644
index 4a7e717cf78..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/ring_identifier.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_RING_IDENTIFIER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_RING_IDENTIFIER_HPP
-
-
-#if defined(BOOST_GEOMETRY_DEBUG_IDENTIFIER)
-#include <iostream>
-#endif
-
-
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-// Ring Identifier. It is currently: source,multi,ring
-struct ring_identifier
-{
-
- inline ring_identifier()
- : source_index(-1)
- , multi_index(-1)
- , ring_index(-1)
- {}
-
- inline ring_identifier(signed_size_type src,
- signed_size_type mul,
- signed_size_type rin)
- : source_index(src)
- , multi_index(mul)
- , ring_index(rin)
- {}
-
- inline bool operator<(ring_identifier const& other) const
- {
- return source_index != other.source_index ? source_index < other.source_index
- : multi_index !=other.multi_index ? multi_index < other.multi_index
- : ring_index < other.ring_index
- ;
- }
-
- inline bool operator==(ring_identifier const& other) const
- {
- return source_index == other.source_index
- && ring_index == other.ring_index
- && multi_index == other.multi_index
- ;
- }
-
- inline bool operator!=(ring_identifier const& other) const
- {
- return ! operator==(other);
- }
-
-#if defined(BOOST_GEOMETRY_DEBUG_IDENTIFIER)
- friend std::ostream& operator<<(std::ostream &os, ring_identifier const& ring_id)
- {
- os << "(s:" << ring_id.source_index;
- if (ring_id.ring_index >= 0) os << ", r:" << ring_id.ring_index;
- if (ring_id.multi_index >= 0) os << ", m:" << ring_id.multi_index;
- os << ")";
- return os;
- }
-#endif
-
-
- signed_size_type source_index;
- signed_size_type multi_index;
- signed_size_type ring_index;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_RING_IDENTIFIER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp
deleted file mode 100644
index 611ad172d27..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/sections/range_by_section.hpp
+++ /dev/null
@@ -1,193 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014.
-// Modifications copyright (c) 2013, 2014, Oracle and/or its affiliates.
-
-// 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)
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP
-
-#include <boost/mpl/assert.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/util/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace section
-{
-
-
-template <typename Range, typename Section>
-struct full_section_range
-{
- static inline Range const& apply(Range const& range, Section const& )
- {
- return range;
- }
-};
-
-
-template <typename Polygon, typename Section>
-struct full_section_polygon
-{
- static inline typename ring_return_type<Polygon const>::type apply(Polygon const& polygon, Section const& section)
- {
- return section.ring_id.ring_index < 0
- ? geometry::exterior_ring(polygon)
- : range::at(geometry::interior_rings(polygon),
- static_cast<std::size_t>(section.ring_id.ring_index));
- }
-};
-
-
-template
-<
- typename MultiGeometry,
- typename Section,
- typename Policy
->
-struct full_section_multi
-{
- static inline typename ring_return_type<MultiGeometry const>::type apply(
- MultiGeometry const& multi, Section const& section)
- {
- typedef typename boost::range_size<MultiGeometry>::type size_type;
-
- BOOST_GEOMETRY_ASSERT
- (
- section.ring_id.multi_index >= 0
- && size_type(section.ring_id.multi_index) < boost::size(multi)
- );
-
- return Policy::apply(range::at(multi, size_type(section.ring_id.multi_index)), section);
- }
-};
-
-
-}} // namespace detail::section
-#endif
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Tag,
- typename Geometry,
- typename Section
->
-struct range_by_section
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-
-template <typename LineString, typename Section>
-struct range_by_section<linestring_tag, LineString, Section>
- : detail::section::full_section_range<LineString, Section>
-{};
-
-
-template <typename Ring, typename Section>
-struct range_by_section<ring_tag, Ring, Section>
- : detail::section::full_section_range<Ring, Section>
-{};
-
-
-template <typename Polygon, typename Section>
-struct range_by_section<polygon_tag, Polygon, Section>
- : detail::section::full_section_polygon<Polygon, Section>
-{};
-
-
-template <typename MultiPolygon, typename Section>
-struct range_by_section<multi_polygon_tag, MultiPolygon, Section>
- : detail::section::full_section_multi
- <
- MultiPolygon,
- Section,
- detail::section::full_section_polygon
- <
- typename boost::range_value<MultiPolygon>::type,
- Section
- >
- >
-{};
-
-template <typename MultiLinestring, typename Section>
-struct range_by_section<multi_linestring_tag, MultiLinestring, Section>
- : detail::section::full_section_multi
- <
- MultiLinestring,
- Section,
- detail::section::full_section_range
- <
- typename boost::range_value<MultiLinestring>::type,
- Section
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-/*!
- \brief Get full ring (exterior, one of interiors, one from multi)
- indicated by the specified section
- \ingroup sectionalize
- \tparam Geometry type
- \tparam Section type of section to get from
- \param geometry geometry to take section of
- \param section structure with section
- */
-template <typename Geometry, typename Section>
-inline typename ring_return_type<Geometry const>::type
- range_by_section(Geometry const& geometry, Section const& section)
-{
- concepts::check<Geometry const>();
-
- return dispatch::range_by_section
- <
- typename tag<Geometry>::type,
- Geometry,
- Section
- >::apply(geometry, section);
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/sections/section_box_policies.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/sections/section_box_policies.hpp
deleted file mode 100644
index cf06700306c..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/sections/section_box_policies.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015 Barend Gehrels, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_SECTION_BOX_POLICIES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_SECTION_BOX_POLICIES_HPP
-
-
-#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace section
-{
-
-struct get_section_box
-{
- template <typename Box, typename Section>
- static inline void apply(Box& total, Section const& section)
- {
- geometry::expand(total, section.bounding_box);
- }
-};
-
-struct overlaps_section_box
-{
- template <typename Box, typename Section>
- static inline bool apply(Box const& box, Section const& section)
- {
- return ! detail::disjoint::disjoint_box_box(box, section.bounding_box);
- }
-};
-
-
-}} // namespace detail::section
-#endif
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_SECTION_BOX_POLICIES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/sections/section_functions.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/sections/section_functions.hpp
deleted file mode 100644
index d283784e2cd..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/sections/section_functions.hpp
+++ /dev/null
@@ -1,158 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015, 2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_FUNCTIONS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_FUNCTIONS_HPP
-
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/algorithms/detail/recalculate.hpp>
-#include <boost/geometry/policies/robustness/robust_point_type.hpp>
-
-// For spherical/geographic longitudes covered_by point/box
-#include <boost/geometry/strategies/cartesian/point_in_box.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace section
-{
-
-template
-<
- std::size_t Dimension,
- typename Geometry,
- typename CastedCSTag = typename tag_cast
- <
- typename cs_tag<Geometry>::type,
- spherical_tag
- >::type
->
-struct preceding_check
-{
- template <typename Point, typename Box>
- static inline bool apply(int dir, Point const& point, Box const& /*point_box*/, Box const& other_box)
- {
- return (dir == 1 && get<Dimension>(point) < get<min_corner, Dimension>(other_box))
- || (dir == -1 && get<Dimension>(point) > get<max_corner, Dimension>(other_box));
- }
-};
-
-template <typename Geometry>
-struct preceding_check<0, Geometry, spherical_tag>
-{
- template <typename Point, typename Box>
- static inline bool apply(int dir, Point const& point, Box const& point_box, Box const& other_box)
- {
- typedef typename select_coordinate_type
- <
- Point, Box
- >::type calc_t;
- typedef typename coordinate_system<Point>::type::units units_t;
-
- calc_t const c0 = 0;
-
- calc_t const value = get<0>(point);
- calc_t const other_min = get<min_corner, 0>(other_box);
- calc_t const other_max = get<max_corner, 0>(other_box);
-
- bool const pt_covered = strategy::within::covered_by_range
- <
- Point, 0, spherical_tag
- >::apply(value,
- other_min,
- other_max);
-
- if (pt_covered)
- {
- return false;
- }
-
- if (dir == 1)
- {
- calc_t const diff_min = math::longitude_distance_signed
- <
- units_t, calc_t
- >(other_min, value);
-
- calc_t const diff_min_min = math::longitude_distance_signed
- <
- units_t, calc_t
- >(other_min, get<min_corner, 0>(point_box));
-
- return diff_min < c0 && diff_min_min <= c0 && diff_min_min <= diff_min;
- }
- else if (dir == -1)
- {
- calc_t const diff_max = math::longitude_distance_signed
- <
- units_t, calc_t
- >(other_max, value);
-
- calc_t const diff_max_max = math::longitude_distance_signed
- <
- units_t, calc_t
- >(other_max, get<max_corner, 0>(point_box));
-
- return diff_max > c0 && diff_max_max >= c0 && diff_max <= diff_max_max;
- }
-
- return false;
- }
-};
-
-
-template
-<
- std::size_t Dimension,
- typename Point,
- typename RobustBox,
- typename RobustPolicy
->
-static inline bool preceding(int dir,
- Point const& point,
- RobustBox const& point_robust_box,
- RobustBox const& other_robust_box,
- RobustPolicy const& robust_policy)
-{
- typename geometry::robust_point_type<Point, RobustPolicy>::type robust_point;
- geometry::recalculate(robust_point, point, robust_policy);
- return preceding_check<Dimension, Point>::apply(dir, robust_point, point_robust_box, other_robust_box);
-}
-
-template
-<
- std::size_t Dimension,
- typename Point,
- typename RobustBox,
- typename RobustPolicy
->
-static inline bool exceeding(int dir,
- Point const& point,
- RobustBox const& point_robust_box,
- RobustBox const& other_robust_box,
- RobustPolicy const& robust_policy)
-{
- return preceding<Dimension>(-dir, point, point_robust_box, other_robust_box, robust_policy);
-}
-
-
-}} // namespace detail::section
-#endif
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_FUNCTIONS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp
deleted file mode 100644
index f1d8e7d2315..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/sections/sectionalize.hpp
+++ /dev/null
@@ -1,999 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP
-
-#include <cstddef>
-#include <vector>
-
-#include <boost/concept/requires.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/vector_c.hpp>
-#include <boost/range.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/is_fundamental.hpp>
-
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/envelope.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-#include <boost/geometry/algorithms/detail/recalculate.hpp>
-#include <boost/geometry/algorithms/detail/ring_identifier.hpp>
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
-#include <boost/geometry/policies/robustness/robust_point_type.hpp>
-#include <boost/geometry/views/closeable_view.hpp>
-#include <boost/geometry/views/reversible_view.hpp>
-#include <boost/geometry/geometries/segment.hpp>
-
-#include <boost/geometry/algorithms/detail/expand_by_epsilon.hpp>
-#include <boost/geometry/strategies/envelope.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-/*!
- \brief Structure containing section information
- \details Section information consists of a bounding box, direction
- information (if it is increasing or decreasing, per dimension),
- index information (begin-end, ring, multi) and the number of
- segments in this section
-
- \tparam Box box-type
- \tparam DimensionCount number of dimensions for this section
- \ingroup sectionalize
- */
-template
-<
- typename Box,
- std::size_t DimensionCount
->
-struct section
-{
- typedef Box box_type;
- static std::size_t const dimension_count = DimensionCount;
-
- int directions[DimensionCount];
- ring_identifier ring_id;
- Box bounding_box;
-
- // NOTE: size_type could be passed as template parameter
- // NOTE: these probably also could be of type std::size_t
- signed_size_type begin_index;
- signed_size_type end_index;
- std::size_t count;
- std::size_t range_count;
- bool duplicate;
- signed_size_type non_duplicate_index;
-
- bool is_non_duplicate_first;
- bool is_non_duplicate_last;
-
- inline section()
- : begin_index(-1)
- , end_index(-1)
- , count(0)
- , range_count(0)
- , duplicate(false)
- , non_duplicate_index(-1)
- , is_non_duplicate_first(false)
- , is_non_duplicate_last(false)
- {
- assign_inverse(bounding_box);
- for (std::size_t i = 0; i < DimensionCount; i++)
- {
- directions[i] = 0;
- }
- }
-};
-
-
-/*!
- \brief Structure containing a collection of sections
- \note Derived from a vector, proves to be faster than of deque
- \note vector might be templated in the future
- \ingroup sectionalize
- */
-template <typename Box, std::size_t DimensionCount>
-struct sections : std::vector<section<Box, DimensionCount> >
-{
- typedef Box box_type;
- static std::size_t const value = DimensionCount;
-};
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace sectionalize
-{
-
-// NOTE: This utility will NOT work for latitudes, dimension 1 in spherical
-// and geographic coordinate system because in these coordinate systems
-// e.g. a segment on northern hemisphere may go towards greater latitude
-// and then towards lesser latitude.
-template
-<
- typename Point,
- typename DimensionVector,
- std::size_t Index,
- std::size_t Count,
- typename CastedCSTag = typename tag_cast
- <
- typename cs_tag<Point>::type,
- spherical_tag
- >::type
->
-struct get_direction_loop
-{
- typedef typename boost::mpl::at_c<DimensionVector, Index>::type dimension;
-
- template <typename Segment>
- static inline void apply(Segment const& seg,
- int directions[Count])
- {
- typedef typename coordinate_type<Segment>::type coordinate_type;
-
- coordinate_type const diff =
- geometry::get<1, dimension::value>(seg)
- - geometry::get<0, dimension::value>(seg);
-
- coordinate_type zero = coordinate_type();
- directions[Index] = diff > zero ? 1 : diff < zero ? -1 : 0;
-
- get_direction_loop
- <
- Point,
- DimensionVector,
- Index + 1,
- Count,
- CastedCSTag
- >::apply(seg, directions);
- }
-};
-
-template
-<
- typename Point,
- typename DimensionVector,
- std::size_t Count
->
-struct get_direction_loop<Point, DimensionVector, 0, Count, spherical_tag>
-{
- typedef typename boost::mpl::at_c<DimensionVector, 0>::type dimension;
-
- template <typename Segment>
- static inline void apply(Segment const& seg,
- int directions[Count])
- {
- typedef typename coordinate_type<Segment>::type coordinate_type;
- typedef typename coordinate_system<Point>::type::units units_t;
-
- coordinate_type const diff = math::longitude_distance_signed
- <
- units_t, coordinate_type
- >(geometry::get<0, 0>(seg),
- geometry::get<1, 0>(seg));
-
- coordinate_type zero = coordinate_type();
- directions[0] = diff > zero ? 1 : diff < zero ? -1 : 0;
-
- get_direction_loop
- <
- Point,
- DimensionVector,
- 1,
- Count,
- spherical_tag
- >::apply(seg, directions);
- }
-};
-
-template
-<
- typename Point,
- typename DimensionVector,
- std::size_t Count,
- typename CastedCSTag
->
-struct get_direction_loop<Point, DimensionVector, Count, Count, CastedCSTag>
-{
- template <typename Segment>
- static inline void apply(Segment const&, int [Count])
- {}
-};
-
-
-//! Copy one static array to another
-template <typename T, std::size_t Index, std::size_t Count>
-struct copy_loop
-{
- static inline void apply(T const source[Count], T target[Count])
- {
- target[Index] = source[Index];
- copy_loop<T, Index + 1, Count>::apply(source, target);
- }
-};
-
-template <typename T, std::size_t Count>
-struct copy_loop<T, Count, Count>
-{
- static inline void apply(T const [Count], T [Count])
- {}
-};
-
-//! Compare two static arrays
-template <typename T, std::size_t Index, std::size_t Count>
-struct compare_loop
-{
- static inline bool apply(T const array1[Count], T const array2[Count])
- {
- return array1[Index] != array2[Index]
- ? false
- : compare_loop
- <
- T, Index + 1, Count
- >::apply(array1, array2);
- }
-};
-
-template <typename T, std::size_t Count>
-struct compare_loop<T, Count, Count>
-{
- static inline bool apply(T const [Count], T const [Count])
- {
-
- return true;
- }
-};
-
-
-template <std::size_t Dimension, std::size_t DimensionCount>
-struct check_duplicate_loop
-{
- template <typename Segment>
- static inline bool apply(Segment const& seg)
- {
- if (! geometry::math::equals
- (
- geometry::get<0, Dimension>(seg),
- geometry::get<1, Dimension>(seg)
- )
- )
- {
- return false;
- }
-
- return check_duplicate_loop
- <
- Dimension + 1, DimensionCount
- >::apply(seg);
- }
-};
-
-template <std::size_t DimensionCount>
-struct check_duplicate_loop<DimensionCount, DimensionCount>
-{
- template <typename Segment>
- static inline bool apply(Segment const&)
- {
- return true;
- }
-};
-
-//! Assign a value to a static array
-template <typename T, std::size_t Index, std::size_t Count>
-struct assign_loop
-{
- static inline void apply(T dims[Count], T const value)
- {
- dims[Index] = value;
- assign_loop<T, Index + 1, Count>::apply(dims, value);
- }
-};
-
-template <typename T, std::size_t Count>
-struct assign_loop<T, Count, Count>
-{
- static inline void apply(T [Count], T const)
- {
- }
-};
-
-template <typename CSTag>
-struct box_first_in_section
-{
- template <typename Box, typename Point, typename Strategy>
- static inline void apply(Box & box, Point const& prev, Point const& curr,
- Strategy const& strategy)
- {
- geometry::model::referring_segment<Point const> seg(prev, curr);
- geometry::envelope(seg, box, strategy);
- }
-};
-
-template <>
-struct box_first_in_section<cartesian_tag>
-{
- template <typename Box, typename Point, typename Strategy>
- static inline void apply(Box & box, Point const& prev, Point const& curr,
- Strategy const& )
- {
- geometry::envelope(prev, box);
- geometry::expand(box, curr);
- }
-};
-
-template <typename CSTag>
-struct box_next_in_section
-{
- template <typename Box, typename Point, typename Strategy>
- static inline void apply(Box & box, Point const& prev, Point const& curr,
- Strategy const& strategy)
- {
- geometry::model::referring_segment<Point const> seg(prev, curr);
- geometry::expand(box, seg, strategy);
- }
-};
-
-template <>
-struct box_next_in_section<cartesian_tag>
-{
- template <typename Box, typename Point, typename Strategy>
- static inline void apply(Box & box, Point const& , Point const& curr,
- Strategy const& )
- {
- geometry::expand(box, curr);
- }
-};
-
-/// @brief Helper class to create sections of a part of a range, on the fly
-template
-<
- typename Point,
- typename DimensionVector
->
-struct sectionalize_part
-{
- static const std::size_t dimension_count
- = boost::mpl::size<DimensionVector>::value;
-
- template
- <
- typename Iterator,
- typename RobustPolicy,
- typename Sections
- >
- static inline void apply(Sections& sections,
- Iterator begin, Iterator end,
- RobustPolicy const& robust_policy,
- ring_identifier ring_id,
- std::size_t max_count)
- {
- typedef typename strategy::envelope::services::default_strategy
- <
- typename cs_tag<typename Sections::box_type>::type
- >::type envelope_strategy_type;
-
- apply(sections, begin, end,
- robust_policy, envelope_strategy_type(),
- ring_id, max_count);
- }
-
- template
- <
- typename Iterator,
- typename RobustPolicy,
- typename Sections,
- typename EnvelopeStrategy
- >
- static inline void apply(Sections& sections,
- Iterator begin, Iterator end,
- RobustPolicy const& robust_policy,
- EnvelopeStrategy const& strategy,
- ring_identifier ring_id,
- std::size_t max_count)
- {
- boost::ignore_unused_variable_warning(robust_policy);
-
- typedef typename boost::range_value<Sections>::type section_type;
- BOOST_STATIC_ASSERT
- (
- (static_cast<std::size_t>(section_type::dimension_count)
- == static_cast<std::size_t>(boost::mpl::size<DimensionVector>::value))
- );
-
- typedef typename geometry::robust_point_type
- <
- Point,
- RobustPolicy
- >::type robust_point_type;
-
- std::size_t const count = std::distance(begin, end);
- if (count == 0)
- {
- return;
- }
-
- signed_size_type index = 0;
- signed_size_type ndi = 0; // non duplicate index
- section_type section;
-
- bool mark_first_non_duplicated = true;
- std::size_t last_non_duplicate_index = sections.size();
-
- Iterator it = begin;
- robust_point_type previous_robust_point;
- geometry::recalculate(previous_robust_point, *it, robust_policy);
-
- for(Iterator previous = it++;
- it != end;
- ++previous, ++it, index++)
- {
- robust_point_type current_robust_point;
- geometry::recalculate(current_robust_point, *it, robust_policy);
- model::referring_segment<robust_point_type> robust_segment(
- previous_robust_point, current_robust_point);
-
- int direction_classes[dimension_count] = {0};
- get_direction_loop
- <
- Point, DimensionVector, 0, dimension_count
- >::apply(robust_segment, direction_classes);
-
- // if "dir" == 0 for all point-dimensions, it is duplicate.
- // Those sections might be omitted, if wished, lateron
- bool duplicate = false;
-
- if (direction_classes[0] == 0)
- {
- // Recheck because ALL dimensions should be checked,
- // not only first one.
- // (dimension_count might be < dimension<P>::value)
- if (check_duplicate_loop
- <
- 0, geometry::dimension<Point>::type::value
- >::apply(robust_segment)
- )
- {
- duplicate = true;
-
- // Change direction-info to force new section
- // Note that wo consecutive duplicate segments will generate
- // only one duplicate-section.
- // Actual value is not important as long as it is not -1,0,1
- assign_loop
- <
- int, 0, dimension_count
- >::apply(direction_classes, -99);
- }
- }
-
- if (section.count > 0
- && (! compare_loop
- <
- int, 0, dimension_count
- >::apply(direction_classes, section.directions)
- || section.count > max_count)
- )
- {
- if (! section.duplicate)
- {
- last_non_duplicate_index = sections.size();
- }
-
- sections.push_back(section);
- section = section_type();
- }
-
- if (section.count == 0)
- {
- section.begin_index = index;
- section.ring_id = ring_id;
- section.duplicate = duplicate;
- section.non_duplicate_index = ndi;
- section.range_count = count;
-
- if (mark_first_non_duplicated && ! duplicate)
- {
- section.is_non_duplicate_first = true;
- mark_first_non_duplicated = false;
- }
-
- copy_loop
- <
- int, 0, dimension_count
- >::apply(direction_classes, section.directions);
-
- // In cartesian this is envelope of previous point expanded with current point
- // in non-cartesian this is envelope of a segment
- box_first_in_section<typename cs_tag<robust_point_type>::type>
- ::apply(section.bounding_box, previous_robust_point, current_robust_point, strategy);
- }
- else
- {
- // In cartesian this is expand with current point
- // in non-cartesian this is expand with a segment
- box_next_in_section<typename cs_tag<robust_point_type>::type>
- ::apply(section.bounding_box, previous_robust_point, current_robust_point, strategy);
- }
-
- section.end_index = index + 1;
- section.count++;
- if (! duplicate)
- {
- ndi++;
- }
- previous_robust_point = current_robust_point;
- }
-
- // Add last section if applicable
- if (section.count > 0)
- {
- if (! section.duplicate)
- {
- last_non_duplicate_index = sections.size();
- }
-
- sections.push_back(section);
- }
-
- if (last_non_duplicate_index < sections.size()
- && ! sections[last_non_duplicate_index].duplicate)
- {
- sections[last_non_duplicate_index].is_non_duplicate_last = true;
- }
- }
-};
-
-
-template
-<
- closure_selector Closure,
- bool Reverse,
- typename Point,
- typename DimensionVector
->
-struct sectionalize_range
-{
- template
- <
- typename Range,
- typename RobustPolicy,
- typename Sections,
- typename EnvelopeStrategy
- >
- static inline void apply(Range const& range,
- RobustPolicy const& robust_policy,
- Sections& sections,
- EnvelopeStrategy const& strategy,
- ring_identifier ring_id,
- std::size_t max_count)
- {
- typedef typename closeable_view<Range const, Closure>::type cview_type;
- typedef typename reversible_view
- <
- cview_type const,
- Reverse ? iterate_reverse : iterate_forward
- >::type view_type;
-
- cview_type cview(range);
- view_type view(cview);
-
- std::size_t const n = boost::size(view);
- if (n == 0)
- {
- // Zero points, no section
- return;
- }
-
- if (n == 1)
- {
- // Line with one point ==> no sections
- return;
- }
-
- sectionalize_part<Point, DimensionVector>::apply(sections,
- boost::begin(view), boost::end(view),
- robust_policy, strategy, ring_id, max_count);
- }
-};
-
-template
-<
- bool Reverse,
- typename DimensionVector
->
-struct sectionalize_polygon
-{
- template
- <
- typename Polygon,
- typename RobustPolicy,
- typename Sections,
- typename EnvelopeStrategy
- >
- static inline void apply(Polygon const& poly,
- RobustPolicy const& robust_policy,
- Sections& sections,
- EnvelopeStrategy const& strategy,
- ring_identifier ring_id,
- std::size_t max_count)
- {
- typedef typename point_type<Polygon>::type point_type;
- typedef sectionalize_range
- <
- closure<Polygon>::value, Reverse,
- point_type, DimensionVector
- > per_range;
-
- ring_id.ring_index = -1;
- per_range::apply(exterior_ring(poly), robust_policy, sections, strategy, ring_id, max_count);
-
- ring_id.ring_index++;
- typename interior_return_type<Polygon const>::type
- rings = interior_rings(poly);
- for (typename detail::interior_iterator<Polygon const>::type
- it = boost::begin(rings); it != boost::end(rings); ++it, ++ring_id.ring_index)
- {
- per_range::apply(*it, robust_policy, sections, strategy, ring_id, max_count);
- }
- }
-};
-
-template <typename DimensionVector>
-struct sectionalize_box
-{
- template
- <
- typename Box,
- typename RobustPolicy,
- typename Sections,
- typename EnvelopeStrategy
- >
- static inline void apply(Box const& box,
- RobustPolicy const& robust_policy,
- Sections& sections,
- EnvelopeStrategy const& ,
- ring_identifier const& ring_id, std::size_t max_count)
- {
- typedef typename point_type<Box>::type point_type;
-
- assert_dimension<Box, 2>();
-
- // Add all four sides of the 2D-box as separate section.
- // Easiest is to convert it to a polygon.
- // However, we don't have the polygon type
- // (or polygon would be a helper-type).
- // Therefore we mimic a linestring/std::vector of 5 points
-
- // TODO: might be replaced by assign_box_corners_oriented
- // or just "convert"
- point_type ll, lr, ul, ur;
- geometry::detail::assign_box_corners(box, ll, lr, ul, ur);
-
- std::vector<point_type> points;
- points.push_back(ll);
- points.push_back(ul);
- points.push_back(ur);
- points.push_back(lr);
- points.push_back(ll);
-
- // NOTE: Use cartesian envelope strategy in all coordinate systems
- // because edges of a box are not geodesic segments
- sectionalize_range
- <
- closed, false,
- point_type,
- DimensionVector
- >::apply(points, robust_policy, sections,
- strategy::envelope::cartesian_segment<>(),
- ring_id, max_count);
- }
-};
-
-template <typename DimensionVector, typename Policy>
-struct sectionalize_multi
-{
- template
- <
- typename MultiGeometry,
- typename RobustPolicy,
- typename Sections,
- typename EnvelopeStrategy
- >
- static inline void apply(MultiGeometry const& multi,
- RobustPolicy const& robust_policy,
- Sections& sections,
- EnvelopeStrategy const& strategy,
- ring_identifier ring_id,
- std::size_t max_count)
- {
- ring_id.multi_index = 0;
- for (typename boost::range_iterator<MultiGeometry const>::type
- it = boost::begin(multi);
- it != boost::end(multi);
- ++it, ++ring_id.multi_index)
- {
- Policy::apply(*it, robust_policy, sections, strategy, ring_id, max_count);
- }
- }
-};
-
-template <typename Sections>
-inline void enlarge_sections(Sections& sections)
-{
- // Robustness issue. Increase sections a tiny bit such that all points are really within (and not on border)
- // Reason: turns might, rarely, be missed otherwise (case: "buffer_mp1")
- // Drawback: not really, range is now completely inside the section. Section is a tiny bit too large,
- // which might cause (a small number) of more comparisons
-
- // NOTE: above is old comment to the not used code expanding the Boxes by relaxed_epsilon(10)
-
- // Enlarge sections by scaled epsilon, this should be consistent with math::equals().
- // Points and Segments are equal-compared WRT machine epsilon, but Boxes aren't
- // Enlarging Boxes ensures that they correspond to the bound objects,
- // Segments in this case, since Sections are collections of Segments.
- for (typename boost::range_iterator<Sections>::type it = boost::begin(sections);
- it != boost::end(sections);
- ++it)
- {
- detail::expand_by_epsilon(it->bounding_box);
- }
-}
-
-
-}} // namespace detail::sectionalize
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Tag,
- typename Geometry,
- bool Reverse,
- typename DimensionVector
->
-struct sectionalize
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-template
-<
- typename Box,
- bool Reverse,
- typename DimensionVector
->
-struct sectionalize<box_tag, Box, Reverse, DimensionVector>
- : detail::sectionalize::sectionalize_box<DimensionVector>
-{};
-
-template
-<
- typename LineString,
- typename DimensionVector
->
-struct sectionalize
- <
- linestring_tag,
- LineString,
- false,
- DimensionVector
- >
- : detail::sectionalize::sectionalize_range
- <
- closed, false,
- typename point_type<LineString>::type,
- DimensionVector
- >
-{};
-
-template
-<
- typename Ring,
- bool Reverse,
- typename DimensionVector
->
-struct sectionalize<ring_tag, Ring, Reverse, DimensionVector>
- : detail::sectionalize::sectionalize_range
- <
- geometry::closure<Ring>::value, Reverse,
- typename point_type<Ring>::type,
- DimensionVector
- >
-{};
-
-template
-<
- typename Polygon,
- bool Reverse,
- typename DimensionVector
->
-struct sectionalize<polygon_tag, Polygon, Reverse, DimensionVector>
- : detail::sectionalize::sectionalize_polygon
- <
- Reverse, DimensionVector
- >
-{};
-
-template
-<
- typename MultiPolygon,
- bool Reverse,
- typename DimensionVector
->
-struct sectionalize<multi_polygon_tag, MultiPolygon, Reverse, DimensionVector>
- : detail::sectionalize::sectionalize_multi
- <
- DimensionVector,
- detail::sectionalize::sectionalize_polygon
- <
- Reverse,
- DimensionVector
- >
- >
-
-{};
-
-template
-<
- typename MultiLinestring,
- bool Reverse,
- typename DimensionVector
->
-struct sectionalize<multi_linestring_tag, MultiLinestring, Reverse, DimensionVector>
- : detail::sectionalize::sectionalize_multi
- <
- DimensionVector,
- detail::sectionalize::sectionalize_range
- <
- closed, false,
- typename point_type<MultiLinestring>::type,
- DimensionVector
- >
- >
-
-{};
-
-} // namespace dispatch
-#endif
-
-
-/*!
- \brief Split a geometry into monotonic sections
- \ingroup sectionalize
- \tparam Geometry type of geometry to check
- \tparam Sections type of sections to create
- \param geometry geometry to create sections from
- \param robust_policy policy to handle robustness issues
- \param sections structure with sections
- \param source_index index to assign to the ring_identifiers
- \param max_count maximal number of points per section
- (defaults to 10, this seems to give the fastest results)
-
- */
-template
-<
- bool Reverse,
- typename DimensionVector,
- typename Geometry,
- typename Sections,
- typename RobustPolicy,
- typename EnvelopeStrategy
->
-inline void sectionalize(Geometry const& geometry,
- RobustPolicy const& robust_policy,
- Sections& sections,
- EnvelopeStrategy const& strategy,
- int source_index = 0,
- std::size_t max_count = 10)
-{
- BOOST_STATIC_ASSERT((! boost::is_fundamental<EnvelopeStrategy>::value));
-
- concepts::check<Geometry const>();
-
- typedef typename boost::range_value<Sections>::type section_type;
-
- // Compiletime check for point type of section boxes
- // and point type related to robust policy
- typedef typename geometry::coordinate_type
- <
- typename section_type::box_type
- >::type ctype1;
- typedef typename geometry::coordinate_type
- <
- typename geometry::robust_point_type
- <
- typename geometry::point_type<Geometry>::type,
- RobustPolicy
- >::type
- >::type ctype2;
-
- BOOST_MPL_ASSERT((boost::is_same<ctype1, ctype2>));
-
-
- sections.clear();
-
- ring_identifier ring_id;
- ring_id.source_index = source_index;
-
- dispatch::sectionalize
- <
- typename tag<Geometry>::type,
- Geometry,
- Reverse,
- DimensionVector
- >::apply(geometry, robust_policy, sections, strategy, ring_id, max_count);
-
- detail::sectionalize::enlarge_sections(sections);
-}
-
-
-template
-<
- bool Reverse,
- typename DimensionVector,
- typename Geometry,
- typename Sections,
- typename RobustPolicy
->
-inline void sectionalize(Geometry const& geometry,
- RobustPolicy const& robust_policy,
- Sections& sections,
- int source_index = 0,
- std::size_t max_count = 10)
-{
- typedef typename strategy::envelope::services::default_strategy
- <
- typename cs_tag<Geometry>::type
- >::type envelope_strategy_type;
-
- boost::geometry::sectionalize
- <
- Reverse, DimensionVector
- >(geometry, robust_policy, sections,
- envelope_strategy_type(),
- source_index, max_count);
-}
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/signed_size_type.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/signed_size_type.hpp
deleted file mode 100644
index db7344ec80b..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/signed_size_type.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_SIGNED_SIZE_TYPE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SIGNED_SIZE_TYPE_HPP
-
-
-#include <cstddef>
-#include <boost/type_traits/make_signed.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-typedef boost::make_signed<std::size_t>::type signed_size_type;
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SIGNED_SIZE_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/single_geometry.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/single_geometry.hpp
deleted file mode 100644
index 31e4401099a..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/single_geometry.hpp
+++ /dev/null
@@ -1,94 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014.
-// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
-
-// 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)
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_SINGLE_GEOMETRY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SINGLE_GEOMETRY_HPP
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_base_of.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/util/range.hpp>
-
-namespace boost { namespace geometry {
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace detail_dispatch {
-
-// Returns single geometry by Id
-// for single geometries returns the geometry itself
-template <typename Geometry,
- bool IsMulti = boost::is_base_of
- <
- multi_tag,
- typename geometry::tag<Geometry>::type
- >::value
->
-struct single_geometry
-{
- typedef Geometry & return_type;
-
- template <typename Id>
- static inline return_type apply(Geometry & g, Id const& ) { return g; }
-};
-
-// for multi geometries returns one of the stored single geometries
-template <typename Geometry>
-struct single_geometry<Geometry, true>
-{
- typedef typename boost::range_reference<Geometry>::type return_type;
-
- template <typename Id>
- static inline return_type apply(Geometry & g, Id const& id)
- {
- BOOST_GEOMETRY_ASSERT(id.multi_index >= 0);
- typedef typename boost::range_size<Geometry>::type size_type;
- return range::at(g, static_cast<size_type>(id.multi_index));
- }
-};
-
-} // namespace detail_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail {
-
-template <typename Geometry>
-struct single_geometry_return_type
-{
- typedef typename detail_dispatch::single_geometry<Geometry>::return_type type;
-};
-
-template <typename Geometry, typename Id>
-inline
-typename single_geometry_return_type<Geometry>::type
-single_geometry(Geometry & geometry, Id const& id)
-{
- return detail_dispatch::single_geometry<Geometry>::apply(geometry, id);
-}
-
-template <typename Geometry, typename Id>
-inline
-typename single_geometry_return_type<Geometry const>::type
-single_geometry(Geometry const& geometry, Id const& id)
-{
- return detail_dispatch::single_geometry<Geometry const>::apply(geometry, id);
-}
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SINGLE_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/sub_range.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/sub_range.hpp
deleted file mode 100644
index 29edc94e6cc..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/sub_range.hpp
+++ /dev/null
@@ -1,129 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014.
-// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
-
-// 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)
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_SUB_RANGE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SUB_RANGE_HPP
-
-#include <boost/mpl/if.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/util/range.hpp>
-
-namespace boost { namespace geometry {
-
-#ifndef DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace detail_dispatch {
-
-template <typename Geometry,
- typename Tag = typename geometry::tag<Geometry>::type,
- bool IsMulti = boost::is_base_of<multi_tag, Tag>::value>
-struct sub_range : not_implemented<Tag>
-{};
-
-template <typename Geometry, typename Tag>
-struct sub_range<Geometry, Tag, false>
-{
- typedef Geometry & return_type;
-
- template <typename Id> static inline
- return_type apply(Geometry & geometry, Id const&)
- {
- return geometry;
- }
-};
-
-template <typename Geometry>
-struct sub_range<Geometry, polygon_tag, false>
-{
- typedef typename geometry::ring_return_type<Geometry>::type return_type;
-
- template <typename Id> static inline
- return_type apply(Geometry & geometry, Id const& id)
- {
- if ( id.ring_index < 0 )
- {
- return geometry::exterior_ring(geometry);
- }
- else
- {
- typedef typename boost::range_size
- <
- typename geometry::interior_type<Geometry>::type
- >::type size_type;
- size_type const ri = static_cast<size_type>(id.ring_index);
- return range::at(geometry::interior_rings(geometry), ri);
- }
- }
-};
-
-template <typename Geometry, typename Tag>
-struct sub_range<Geometry, Tag, true>
-{
- typedef typename boost::range_value<Geometry>::type value_type;
- typedef typename boost::mpl::if_c
- <
- boost::is_const<Geometry>::value,
- typename boost::add_const<value_type>::type,
- value_type
- >::type sub_type;
-
- typedef detail_dispatch::sub_range<sub_type> sub_sub_range;
-
- // TODO: shouldn't it be return_type?
- typedef typename sub_sub_range::return_type return_type;
-
- template <typename Id> static inline
- return_type apply(Geometry & geometry, Id const& id)
- {
- BOOST_GEOMETRY_ASSERT(0 <= id.multi_index);
- typedef typename boost::range_size<Geometry>::type size_type;
- size_type const mi = static_cast<size_type>(id.multi_index);
- return sub_sub_range::apply(range::at(geometry, mi), id);
- }
-};
-
-} // namespace detail_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-namespace detail {
-
-template <typename Geometry>
-struct sub_range_return_type
-{
- typedef typename detail_dispatch::sub_range<Geometry>::return_type type;
-};
-
-// This function also works for geometry::segment_identifier
-
-template <typename Geometry, typename Id> inline
-typename sub_range_return_type<Geometry>::type
-sub_range(Geometry & geometry, Id const& id)
-{
- return detail_dispatch::sub_range<Geometry>::apply(geometry, id);
-}
-
-template <typename Geometry, typename Id> inline
-typename sub_range_return_type<Geometry const>::type
-sub_range(Geometry const& geometry, Id const& id)
-{
- return detail_dispatch::sub_range<Geometry const>::apply(geometry, id);
-}
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SUB_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/sweep.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/sweep.hpp
deleted file mode 100644
index 3dc78261f2d..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/sweep.hpp
+++ /dev/null
@@ -1,87 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_SWEEP_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_SWEEP_HPP
-
-#include <boost/core/ignore_unused.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace sweep
-{
-
-struct no_interrupt_policy
-{
- static bool const enabled = false;
-
- template <typename Event>
- static inline bool apply(Event const&)
- {
- return false;
- }
-};
-
-}} // namespace detail::sweep
-#endif // DOXYGEN_NO_DETAIL
-
-
-template
-<
- typename Range,
- typename PriorityQueue,
- typename InitializationVisitor,
- typename EventVisitor,
- typename InterruptPolicy
->
-inline void sweep(Range const& range, PriorityQueue& queue,
- InitializationVisitor& initialization_visitor,
- EventVisitor& event_visitor,
- InterruptPolicy const& interrupt_policy)
-{
- typedef typename PriorityQueue::value_type event_type;
-
- initialization_visitor.apply(range, queue, event_visitor);
- while (! queue.empty())
- {
- event_type event = queue.top();
- queue.pop();
- event_visitor.apply(event, queue);
- if (interrupt_policy.enabled && interrupt_policy.apply(event))
- {
- break;
- }
- }
-
- boost::ignore_unused(interrupt_policy);
-}
-
-
-template
-<
- typename Range,
- typename PriorityQueue,
- typename InitializationVisitor,
- typename EventVisitor
->
-inline void sweep(Range const& range, PriorityQueue& queue,
- InitializationVisitor& initialization_visitor,
- EventVisitor& event_visitor)
-{
- sweep(range, queue, initialization_visitor, event_visitor,
- detail::sweep::no_interrupt_policy());
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_SWEEP_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/throw_on_empty_input.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/throw_on_empty_input.hpp
deleted file mode 100644
index 3d45a46d160..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/throw_on_empty_input.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_THROW_ON_EMPTY_INPUT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_THROW_ON_EMPTY_INPUT_HPP
-
-
-#include <boost/geometry/core/exception.hpp>
-#include <boost/geometry/algorithms/is_empty.hpp>
-
-#include <boost/throw_exception.hpp>
-
-
-// BSG 2012-02-06: we use this currently only for distance.
-// For other scalar results area,length,perimeter it is commented on purpose.
-// Reason is that for distance there is no other choice. distance of two
-// empty geometries (or one empty) should NOT return any value.
-// But for area it is no problem to be 0.
-// Suppose: area(intersection(a,b)). We (probably) don't want a throw there...
-
-// So decided that at least for Boost 1.49 this is commented for
-// scalar results, except distance.
-
-#if defined(BOOST_GEOMETRY_EMPTY_INPUT_NO_THROW)
-#include <boost/core/ignore_unused.hpp>
-#endif
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Geometry>
-inline void throw_on_empty_input(Geometry const& geometry)
-{
-#if ! defined(BOOST_GEOMETRY_EMPTY_INPUT_NO_THROW)
- if (geometry::is_empty(geometry))
- {
- BOOST_THROW_EXCEPTION(empty_input_exception());
- }
-#else
- boost::ignore_unused(geometry);
-#endif
-}
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_THROW_ON_EMPTY_INPUT_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/touches/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/touches/implementation.hpp
deleted file mode 100644
index 0cdb8ad1d47..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/touches/implementation.hpp
+++ /dev/null
@@ -1,461 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_TOUCHES_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TOUCHES_IMPLEMENTATION_HPP
-
-
-#include <boost/geometry/algorithms/detail/for_each_range.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay.hpp>
-#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
-#include <boost/geometry/algorithms/detail/sub_range.hpp>
-#include <boost/geometry/algorithms/detail/relate/relate_impl.hpp>
-#include <boost/geometry/algorithms/detail/touches/interface.hpp>
-#include <boost/geometry/algorithms/disjoint.hpp>
-#include <boost/geometry/algorithms/intersects.hpp>
-#include <boost/geometry/algorithms/num_geometries.hpp>
-#include <boost/geometry/algorithms/relate.hpp>
-
-#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace touches
-{
-
-// Box/Box
-
-template
-<
- std::size_t Dimension,
- std::size_t DimensionCount
->
-struct box_box_loop
-{
- template <typename Box1, typename Box2>
- static inline bool apply(Box1 const& b1, Box2 const& b2, bool & touch)
- {
- typedef typename coordinate_type<Box1>::type coordinate_type1;
- typedef typename coordinate_type<Box2>::type coordinate_type2;
-
- coordinate_type1 const& min1 = get<min_corner, Dimension>(b1);
- coordinate_type1 const& max1 = get<max_corner, Dimension>(b1);
- coordinate_type2 const& min2 = get<min_corner, Dimension>(b2);
- coordinate_type2 const& max2 = get<max_corner, Dimension>(b2);
-
- // TODO assert or exception?
- //BOOST_GEOMETRY_ASSERT(min1 <= max1 && min2 <= max2);
-
- if (max1 < min2 || max2 < min1)
- {
- return false;
- }
-
- if (max1 == min2 || max2 == min1)
- {
- touch = true;
- }
-
- return box_box_loop
- <
- Dimension + 1,
- DimensionCount
- >::apply(b1, b2, touch);
- }
-};
-
-template
-<
- std::size_t DimensionCount
->
-struct box_box_loop<DimensionCount, DimensionCount>
-{
- template <typename Box1, typename Box2>
- static inline bool apply(Box1 const& , Box2 const&, bool &)
- {
- return true;
- }
-};
-
-struct box_box
-{
- template <typename Box1, typename Box2, typename Strategy>
- static inline bool apply(Box1 const& b1, Box2 const& b2, Strategy const& /*strategy*/)
- {
- BOOST_STATIC_ASSERT((boost::is_same
- <
- typename geometry::coordinate_system<Box1>::type,
- typename geometry::coordinate_system<Box2>::type
- >::value
- ));
- assert_dimension_equal<Box1, Box2>();
-
- bool touches = false;
- bool ok = box_box_loop
- <
- 0,
- dimension<Box1>::type::value
- >::apply(b1, b2, touches);
-
- return ok && touches;
- }
-};
-
-// Areal/Areal
-
-struct areal_interrupt_policy
-{
- static bool const enabled = true;
- bool found_touch;
- bool found_not_touch;
-
- // dummy variable required by self_get_turn_points::get_turns
- static bool const has_intersections = false;
-
- inline bool result()
- {
- return found_touch && !found_not_touch;
- }
-
- inline areal_interrupt_policy()
- : found_touch(false), found_not_touch(false)
- {}
-
- template <typename Range>
- inline bool apply(Range const& range)
- {
- // if already rejected (temp workaround?)
- if ( found_not_touch )
- return true;
-
- typedef typename boost::range_iterator<Range const>::type iterator;
- for ( iterator it = boost::begin(range) ; it != boost::end(range) ; ++it )
- {
- if ( it->has(overlay::operation_intersection) )
- {
- found_not_touch = true;
- return true;
- }
-
- switch(it->method)
- {
- case overlay::method_crosses:
- found_not_touch = true;
- return true;
- case overlay::method_equal:
- // Segment spatially equal means: at the right side
- // the polygon internally overlaps. So return false.
- found_not_touch = true;
- return true;
- case overlay::method_touch:
- case overlay::method_touch_interior:
- case overlay::method_collinear:
- if ( ok_for_touch(*it) )
- {
- found_touch = true;
- }
- else
- {
- found_not_touch = true;
- return true;
- }
- break;
- case overlay::method_none :
- case overlay::method_disjoint :
- case overlay::method_error :
- break;
- }
- }
-
- return false;
- }
-
- template <typename Turn>
- inline bool ok_for_touch(Turn const& turn)
- {
- return turn.both(overlay::operation_union)
- || turn.both(overlay::operation_blocked)
- || turn.combination(overlay::operation_union, overlay::operation_blocked)
- ;
- }
-};
-
-template<typename Geometry, typename PointInRingStrategy>
-struct check_each_ring_for_within
-{
- bool has_within;
- Geometry const& m_geometry;
- PointInRingStrategy const& m_strategy;
-
- inline check_each_ring_for_within(Geometry const& g, PointInRingStrategy const& strategy)
- : has_within(false)
- , m_geometry(g)
- , m_strategy(strategy)
- {}
-
- template <typename Range>
- inline void apply(Range const& range)
- {
- typename geometry::point_type<Range>::type p;
- geometry::point_on_border(p, range);
- if ( !has_within && geometry::within(p, m_geometry, m_strategy) )
- {
- has_within = true;
- }
- }
-};
-
-template <typename FirstGeometry, typename SecondGeometry, typename IntersectionStrategy>
-inline bool rings_containing(FirstGeometry const& geometry1,
- SecondGeometry const& geometry2,
- IntersectionStrategy const& strategy)
-{
- // NOTE: This strategy could be defined inside IntersectionStrategy
- typedef typename IntersectionStrategy::template point_in_geometry_strategy
- <
- FirstGeometry, SecondGeometry
- >::type point_in_ring_strategy_type;
-
- point_in_ring_strategy_type point_in_ring_strategy
- = strategy.template get_point_in_geometry_strategy<FirstGeometry, SecondGeometry>();
-
- check_each_ring_for_within
- <
- FirstGeometry, point_in_ring_strategy_type
- > checker(geometry1, point_in_ring_strategy);
- geometry::detail::for_each_range(geometry2, checker);
- return checker.has_within;
-}
-
-template <typename Geometry1, typename Geometry2>
-struct areal_areal
-{
- template <typename IntersectionStrategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- IntersectionStrategy const& strategy)
- {
- typedef detail::no_rescale_policy rescale_policy_type;
- typedef typename geometry::point_type<Geometry1>::type point_type;
- typedef detail::overlay::turn_info
- <
- point_type,
- typename segment_ratio_type<point_type, rescale_policy_type>::type
- > turn_info;
-
- std::deque<turn_info> turns;
- detail::touches::areal_interrupt_policy policy;
- rescale_policy_type robust_policy;
- boost::geometry::get_turns
- <
- detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
- detail::overlay::do_reverse<geometry::point_order<Geometry2>::value>::value,
- detail::overlay::assign_null_policy
- >(geometry1, geometry2, strategy, robust_policy, turns, policy);
-
- return policy.result()
- && ! geometry::detail::touches::rings_containing(geometry1, geometry2, strategy)
- && ! geometry::detail::touches::rings_containing(geometry2, geometry1, strategy);
- }
-};
-
-// P/*
-
-struct use_point_in_geometry
-{
- template <typename Point, typename Geometry, typename Strategy>
- static inline bool apply(Point const& point, Geometry const& geometry, Strategy const& strategy)
- {
- return detail::within::point_in_geometry(point, geometry, strategy) == 0;
- }
-};
-
-
-}}
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-// P/P
-
-template <typename Geometry1, typename Geometry2, typename Tag2>
-struct touches<Geometry1, Geometry2, point_tag, Tag2, pointlike_tag, pointlike_tag, false>
-{
- template <typename Strategy>
- static inline bool apply(Geometry1 const& , Geometry2 const& , Strategy const&)
- {
- return false;
- }
-};
-
-template <typename Geometry1, typename Geometry2, typename Tag2>
-struct touches<Geometry1, Geometry2, multi_point_tag, Tag2, pointlike_tag, pointlike_tag, false>
-{
- template <typename Strategy>
- static inline bool apply(Geometry1 const&, Geometry2 const&, Strategy const&)
- {
- return false;
- }
-};
-
-// P/*
-
-template <typename Point, typename Geometry, typename Tag2, typename CastedTag2>
-struct touches<Point, Geometry, point_tag, Tag2, pointlike_tag, CastedTag2, false>
- : detail::touches::use_point_in_geometry
-{};
-
-template <typename MultiPoint, typename MultiGeometry, typename Tag2, typename CastedTag2>
-struct touches<MultiPoint, MultiGeometry, multi_point_tag, Tag2, pointlike_tag, CastedTag2, false>
- : detail::relate::relate_impl
- <
- detail::de9im::static_mask_touches_type,
- MultiPoint,
- MultiGeometry
- >
-{};
-
-template <typename Geometry, typename MultiPoint, typename Tag1, typename CastedTag1>
-struct touches<Geometry, MultiPoint, Tag1, multi_point_tag, CastedTag1, pointlike_tag, false>
- : detail::relate::relate_impl
- <
- detail::de9im::static_mask_touches_type,
- Geometry,
- MultiPoint
- >
-{};
-
-// Box/Box
-
-template <typename Box1, typename Box2, typename CastedTag1, typename CastedTag2>
-struct touches<Box1, Box2, box_tag, box_tag, CastedTag1, CastedTag2, false>
- : detail::touches::box_box
-{};
-
-template <typename Box1, typename Box2>
-struct touches<Box1, Box2, box_tag, box_tag, areal_tag, areal_tag, false>
- : detail::touches::box_box
-{};
-
-// L/L
-
-template <typename Linear1, typename Linear2, typename Tag1, typename Tag2>
-struct touches<Linear1, Linear2, Tag1, Tag2, linear_tag, linear_tag, false>
- : detail::relate::relate_impl
- <
- detail::de9im::static_mask_touches_type,
- Linear1,
- Linear2
- >
-{};
-
-// L/A
-
-template <typename Linear, typename Areal, typename Tag1, typename Tag2>
-struct touches<Linear, Areal, Tag1, Tag2, linear_tag, areal_tag, false>
- : detail::relate::relate_impl
- <
- detail::de9im::static_mask_touches_type,
- Linear,
- Areal
- >
-{};
-
-// A/L
-template <typename Linear, typename Areal, typename Tag1, typename Tag2>
-struct touches<Areal, Linear, Tag1, Tag2, areal_tag, linear_tag, false>
- : detail::relate::relate_impl
- <
- detail::de9im::static_mask_touches_type,
- Areal,
- Linear
- >
-{};
-
-// A/A
-
-template <typename Areal1, typename Areal2, typename Tag1, typename Tag2>
-struct touches<Areal1, Areal2, Tag1, Tag2, areal_tag, areal_tag, false>
- : detail::relate::relate_impl
- <
- detail::de9im::static_mask_touches_type,
- Areal1,
- Areal2
- >
-{};
-
-template <typename Areal1, typename Areal2>
-struct touches<Areal1, Areal2, ring_tag, ring_tag, areal_tag, areal_tag, false>
- : detail::touches::areal_areal<Areal1, Areal2>
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct self_touches
-{
- static bool apply(Geometry const& geometry)
- {
- concepts::check<Geometry const>();
-
- typedef typename strategy::relate::services::default_strategy
- <
- Geometry, Geometry
- >::type strategy_type;
- typedef detail::no_rescale_policy rescale_policy_type;
- typedef typename geometry::point_type<Geometry>::type point_type;
- typedef detail::overlay::turn_info
- <
- point_type,
- typename segment_ratio_type<point_type, rescale_policy_type>::type
- > turn_info;
-
- typedef detail::overlay::get_turn_info
- <
- detail::overlay::assign_null_policy
- > policy_type;
-
- std::deque<turn_info> turns;
- detail::touches::areal_interrupt_policy policy;
- strategy_type strategy;
- rescale_policy_type robust_policy;
- // TODO: skip_adjacent should be set to false
- detail::self_get_turn_points::get_turns
- <
- false, policy_type
- >::apply(geometry, strategy, robust_policy, turns, policy, 0, true);
-
- return policy.result();
- }
-};
-
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_TOUCHES_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/touches/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/touches/interface.hpp
deleted file mode 100644
index d2e0cc8c4e9..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/touches/interface.hpp
+++ /dev/null
@@ -1,321 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_TOUCHES_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TOUCHES_INTERFACE_HPP
-
-
-#include <deque>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/reverse_dispatch.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/relate.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch {
-
-// TODO: Since CastedTags are used is Reverse needed?
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename tag<Geometry1>::type,
- typename Tag2 = typename tag<Geometry2>::type,
- typename CastedTag1 = typename tag_cast<Tag1, pointlike_tag, linear_tag, areal_tag>::type,
- typename CastedTag2 = typename tag_cast<Tag2, pointlike_tag, linear_tag, areal_tag>::type,
- bool Reverse = reverse_dispatch<Geometry1, Geometry2>::type::value
->
-struct touches
- : not_implemented<Tag1, Tag2>
-{};
-
-// If reversal is needed, perform it
-template
-<
- typename Geometry1, typename Geometry2,
- typename Tag1, typename Tag2,
- typename CastedTag1, typename CastedTag2
->
-struct touches<Geometry1, Geometry2, Tag1, Tag2, CastedTag1, CastedTag2, true>
- : touches<Geometry2, Geometry1, Tag2, Tag1, CastedTag2, CastedTag1, false>
-{
- template <typename Strategy>
- static inline bool apply(Geometry1 const& g1, Geometry2 const& g2, Strategy const& strategy)
- {
- return touches<Geometry2, Geometry1>::apply(g2, g1, strategy);
- }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy
-{
-
-struct touches
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return dispatch::touches
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, strategy);
- }
-
- template <typename Geometry1, typename Geometry2>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- default_strategy)
- {
- typedef typename strategy::relate::services::default_strategy
- <
- Geometry1,
- Geometry2
- >::type strategy_type;
-
- return dispatch::touches
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant {
-
-template <typename Geometry1, typename Geometry2>
-struct touches
-{
- template <typename Strategy>
- static bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
-
- return resolve_strategy::touches::apply(geometry1, geometry2, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct touches<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Geometry2 const& m_geometry2;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2, Strategy const& strategy)
- : m_geometry2(geometry2)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1>
- bool operator()(Geometry1 const& geometry1) const
- {
- return touches<Geometry1, Geometry2>::apply(geometry1, m_geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry2, strategy), geometry1);
- }
-};
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct touches<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Geometry1 const& m_geometry1;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1, Strategy const& strategy)
- : m_geometry1(geometry1)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry2>
- bool operator()(Geometry2 const& geometry2) const
- {
- return touches<Geometry1, Geometry2>::apply(m_geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry1, strategy), geometry2);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T1),
- BOOST_VARIANT_ENUM_PARAMS(typename T2)>
-struct touches<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> >
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Geometry1, typename Geometry2>
- bool operator()(Geometry1 const& geometry1,
- Geometry2 const& geometry2) const
- {
- return touches<Geometry1, Geometry2>::apply(geometry1, geometry2, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), geometry1, geometry2);
- }
-};
-
-template <typename Geometry>
-struct self_touches;
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct self_touches<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- struct visitor: boost::static_visitor<bool>
- {
- template <typename Geometry>
- bool operator()(Geometry const& geometry) const
- {
- return self_touches<Geometry>::apply(geometry);
- }
- };
-
- static inline bool
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry)
- {
- return boost::apply_visitor(visitor(), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_check{has at least one touching point (self-tangency)}
-\note This function can be called for one geometry (self-tangency) and
- also for two geometries (touch)
-\ingroup touches
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_check{is self-touching}
-
-\qbk{distinguish,one geometry}
-\qbk{[def __one_parameter__]}
-\qbk{[include reference/algorithms/touches.qbk]}
-*/
-template <typename Geometry>
-inline bool touches(Geometry const& geometry)
-{
- return resolve_variant::self_touches<Geometry>::apply(geometry);
-}
-
-
-/*!
-\brief \brief_check2{have at least one touching point (tangent - non overlapping)}
-\ingroup touches
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return \return_check2{touch each other}
-
-\qbk{distinguish,two geometries}
-\qbk{[include reference/algorithms/touches.qbk]}
- */
-template <typename Geometry1, typename Geometry2>
-inline bool touches(Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- return resolve_variant::touches
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, default_strategy());
-}
-
-/*!
-\brief \brief_check2{have at least one touching point (tangent - non overlapping)}
-\ingroup touches
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Strategy \tparam_strategy{Touches}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param strategy \param_strategy{touches}
-\return \return_check2{touch each other}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/touches.qbk]}
- */
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline bool touches(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- return resolve_variant::touches
- <
- Geometry1, Geometry2
- >::apply(geometry1, geometry2, strategy);
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_TOUCHES_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/compare_turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/compare_turns.hpp
deleted file mode 100644
index ec383bf1039..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/compare_turns.hpp
+++ /dev/null
@@ -1,117 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_COMPARE_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_COMPARE_TURNS_HPP
-
-#include <cstddef>
-#include <functional>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace turns
-{
-
-// TURNS SORTING AND SEARCHING
-
-// sort turns by G1 - source_index == 0 by:
-// seg_id -> fraction -> other_id -> operation
-template
-<
- typename IdLess = std::less<signed_size_type>,
- int N = 0, int U = 1, int I = 2, int B = 3, int C = 4, int O = 0,
- std::size_t OpId = 0
->
-struct less_seg_fraction_other_op
-{
- BOOST_STATIC_ASSERT(OpId < 2);
- static const std::size_t other_op_id = (OpId + 1) % 2;
-
- template <typename Op>
- static inline int order_op(Op const& op)
- {
- switch (op.operation)
- {
- case detail::overlay::operation_none : return N;
- case detail::overlay::operation_union : return U;
- case detail::overlay::operation_intersection : return I;
- case detail::overlay::operation_blocked : return B;
- case detail::overlay::operation_continue : return C;
- case detail::overlay::operation_opposite : return O;
- }
- return -1;
- }
-
- template <typename Op>
- static inline bool use_operation(Op const& left, Op const& right)
- {
- return order_op(left) < order_op(right);
- }
-
- template <typename Turn>
- static inline bool use_other_id(Turn const& left, Turn const& right)
- {
- segment_identifier const& left_other_seg_id = left.operations[other_op_id].seg_id;
- segment_identifier const& right_other_seg_id = right.operations[other_op_id].seg_id;
-
- if ( left_other_seg_id.multi_index != right_other_seg_id.multi_index )
- {
- return left_other_seg_id.multi_index < right_other_seg_id.multi_index;
- }
- if ( left_other_seg_id.ring_index != right_other_seg_id.ring_index )
- {
- return left_other_seg_id.ring_index != right_other_seg_id.ring_index;
- }
- if ( left_other_seg_id.segment_index != right_other_seg_id.segment_index )
- {
- return IdLess()(left_other_seg_id.segment_index,
- right_other_seg_id.segment_index);
- }
- return use_operation(left.operations[OpId], right.operations[OpId]);
- }
-
- template <typename Turn>
- static inline bool use_fraction(Turn const& left, Turn const& right)
- {
- return
- geometry::math::equals(left.operations[OpId].fraction,
- right.operations[OpId].fraction)
- ?
- use_other_id(left, right)
- :
- (left.operations[OpId].fraction < right.operations[OpId].fraction)
- ;
- }
-
- template <typename Turn>
- inline bool operator()(Turn const& left, Turn const& right) const
- {
- segment_identifier const& sl = left.operations[OpId].seg_id;
- segment_identifier const& sr = right.operations[OpId].seg_id;
-
- return sl < sr || ( sl == sr && use_fraction(left, right) );
- }
-};
-
-
-
-
-
-}} // namespace detail::turns
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_COMPARE_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/debug_turn.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/debug_turn.hpp
deleted file mode 100644
index 5c4f03277af..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/debug_turn.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_DEBUG_TURN_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_DEBUG_TURN_HPP
-
-#ifdef BOOST_GEOMETRY_DEBUG_TURNS
-#include <iostream>
-#include <string>
-
-#include <boost/algorithm/string/predicate.hpp>
-
-#include <boost/geometry/io/wkt/write.hpp>
-#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
-#endif // BOOST_GEOMETRY_DEBUG_TURNS
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace turns
-{
-
-
-#ifdef BOOST_GEOMETRY_DEBUG_TURNS
-template <typename Turn, typename Operation>
-inline void debug_turn(Turn const& turn, Operation op,
- std::string const& header)
-{
- std::cout << header
- << " at " << op.seg_id
- << " meth: " << method_char(turn.method)
- << " op: " << operation_char(op.operation)
- << " of: " << operation_char(turn.operations[0].operation)
- << operation_char(turn.operations[1].operation)
- << " " << geometry::wkt(turn.point)
- << std::endl;
-
- if (boost::contains(header, "Finished"))
- {
- std::cout << std::endl;
- }
-}
-#else
-template <typename Turn, typename Operation>
-inline void debug_turn(Turn const& , Operation, const char*)
-{
-}
-#endif // BOOST_GEOMETRY_DEBUG_TURNS
-
-
-}} // namespace detail::turns
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost:geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_DEBUG_TURN_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp
deleted file mode 100644
index 17fbd65ddc9..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_FILTER_CONTINUE_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_FILTER_CONTINUE_TURNS_HPP
-
-#include <algorithm>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace turns
-{
-
-
-template <typename Turns, bool Enable>
-struct filter_continue_turns
-{
- static inline void apply(Turns&) {}
-};
-
-
-template <typename Turns>
-class filter_continue_turns<Turns, true>
-{
-private:
- class IsContinueTurn
- {
- private:
- template <typename Operation>
- inline bool is_continue_or_opposite(Operation const& operation) const
- {
- return operation == detail::overlay::operation_continue
- || operation == detail::overlay::operation_opposite;
- }
-
- public:
- template <typename Turn>
- bool operator()(Turn const& turn) const
- {
- if ( turn.method != detail::overlay::method_collinear
- && turn.method != detail::overlay::method_equal )
- {
- return false;
- }
-
- return is_continue_or_opposite(turn.operations[0].operation)
- && is_continue_or_opposite(turn.operations[1].operation);
- }
- };
-
-
-public:
- static inline void apply(Turns& turns)
- {
- turns.erase( std::remove_if(turns.begin(), turns.end(),
- IsContinueTurn()),
- turns.end()
- );
- }
-};
-
-
-}} // namespace detail::turns
-
-}} // namespect boost::geometry
-
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_FILTER_CONTINUE_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/print_turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/print_turns.hpp
deleted file mode 100644
index 1e9b9df4096..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/print_turns.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_PRINT_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_PRINT_TURNS_HPP
-
-#include <algorithm>
-#include <iostream>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/traversal_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/turn_info.hpp>
-#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
-#include <boost/geometry/io/wkt/write.hpp>
-#include <boost/geometry/io/dsv/write.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace turns
-{
-
-struct turn_printer
-{
- turn_printer(std::ostream & os)
- : index(0)
- , out(os)
- {}
-
- template <typename Turn>
- void operator()(Turn const& turn)
- {
- out << index
- << ": " << geometry::method_char(turn.method);
-
- if ( turn.discarded )
- out << " (discarded)\n";
- else if ( turn.blocked() )
- out << " (blocked)\n";
- else
- out << '\n';
-
- double fraction[2];
-
- fraction[0] = turn.operations[0].fraction.numerator()
- / turn.operations[0].fraction.denominator();
-
- out << geometry::operation_char(turn.operations[0].operation)
- <<": seg: " << turn.operations[0].seg_id.source_index
- << ", m: " << turn.operations[0].seg_id.multi_index
- << ", r: " << turn.operations[0].seg_id.ring_index
- << ", s: " << turn.operations[0].seg_id.segment_index;
- out << ", fr: " << fraction[0];
- out << ", col?: " << turn.operations[0].is_collinear;
- out << ' ' << geometry::dsv(turn.point) << ' ';
-
- out << '\n';
-
- fraction[1] = turn.operations[1].fraction.numerator()
- / turn.operations[1].fraction.denominator();
-
- out << geometry::operation_char(turn.operations[1].operation)
- << ": seg: " << turn.operations[1].seg_id.source_index
- << ", m: " << turn.operations[1].seg_id.multi_index
- << ", r: " << turn.operations[1].seg_id.ring_index
- << ", s: " << turn.operations[1].seg_id.segment_index;
- out << ", fr: " << fraction[1];
- out << ", col?: " << turn.operations[1].is_collinear;
- out << ' ' << geometry::dsv(turn.point) << ' ';
-
- ++index;
- out << std::endl;
- }
-
- int index;
- std::ostream & out;
-};
-
-template <typename Geometry1, typename Geometry2, typename Turns>
-static inline void print_turns(Geometry1 const& g1,
- Geometry2 const& g2,
- Turns const& turns)
-{
- std::cout << geometry::wkt(g1) << std::endl;
- std::cout << geometry::wkt(g2) << std::endl;
-
- std::for_each(boost::begin(turns), boost::end(turns), turn_printer(std::cout));
-}
-
-
-
-
-}} // namespace detail::turns
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_PRINT_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp
deleted file mode 100644
index ccb19efb73c..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_REMOVE_DUPLICATE_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_REMOVE_DUPLICATE_TURNS_HPP
-
-#include <algorithm>
-#include <boost/geometry/algorithms/equals.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace turns
-{
-
-template <typename Turns, bool Enable>
-struct remove_duplicate_turns
-{
- static inline void apply(Turns&) {}
-};
-
-
-
-template <typename Turns>
-class remove_duplicate_turns<Turns, true>
-{
-private:
- struct TurnEqualsTo
- {
- template <typename Turn>
- bool operator()(Turn const& t1, Turn const& t2) const
- {
- return geometry::equals(t1.point, t2.point)
- && t1.operations[0].seg_id == t2.operations[0].seg_id
- && t1.operations[1].seg_id == t2.operations[1].seg_id;
- }
- };
-
-public:
- static inline void apply(Turns& turns)
- {
- turns.erase( std::unique(turns.begin(), turns.end(),
- TurnEqualsTo()),
- turns.end()
- );
- }
-};
-
-
-
-}} // namespace detail::turns
-
-}} // namespect boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_TURNS_REMOVE_DUPLICATE_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/within/implementation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/within/implementation.hpp
deleted file mode 100644
index 8f1eba62e64..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/within/implementation.hpp
+++ /dev/null
@@ -1,306 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013, 2014, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_IMPLEMENTATION_HPP
-
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/within/interface.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/order_as_direction.hpp>
-#include <boost/geometry/views/closeable_view.hpp>
-#include <boost/geometry/views/reversible_view.hpp>
-
-#include <boost/geometry/algorithms/detail/within/multi_point.hpp>
-#include <boost/geometry/algorithms/detail/within/point_in_geometry.hpp>
-#include <boost/geometry/algorithms/relate.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
-#include <boost/geometry/algorithms/detail/overlay/do_reverse.hpp>
-#include <deque>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace within {
-
-struct use_point_in_geometry
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- return detail::within::point_in_geometry(geometry1, geometry2, strategy) == 1;
- }
-};
-
-struct use_relate
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- typedef typename detail::de9im::static_mask_within_type
- <
- Geometry1, Geometry2
- >::type within_mask;
- return geometry::relate(geometry1, geometry2, within_mask(), strategy);
- }
-};
-
-}} // namespace detail::within
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Point, typename Box>
-struct within<Point, Box, point_tag, box_tag>
-{
- template <typename Strategy>
- static inline bool apply(Point const& point, Box const& box, Strategy const& strategy)
- {
- boost::ignore_unused_variable_warning(strategy);
- return strategy.apply(point, box);
- }
-};
-
-template <typename Box1, typename Box2>
-struct within<Box1, Box2, box_tag, box_tag>
-{
- template <typename Strategy>
- static inline bool apply(Box1 const& box1, Box2 const& box2, Strategy const& strategy)
- {
- assert_dimension_equal<Box1, Box2>();
- boost::ignore_unused_variable_warning(strategy);
- return strategy.apply(box1, box2);
- }
-};
-
-// P/P
-
-template <typename Point1, typename Point2>
-struct within<Point1, Point2, point_tag, point_tag>
- : public detail::within::use_point_in_geometry
-{};
-
-template <typename Point, typename MultiPoint>
-struct within<Point, MultiPoint, point_tag, multi_point_tag>
- : public detail::within::use_point_in_geometry
-{};
-
-template <typename MultiPoint, typename Point>
-struct within<MultiPoint, Point, multi_point_tag, point_tag>
- : public detail::within::multi_point_point
-{};
-
-template <typename MultiPoint1, typename MultiPoint2>
-struct within<MultiPoint1, MultiPoint2, multi_point_tag, multi_point_tag>
- : public detail::within::multi_point_multi_point
-{};
-
-// P/L
-
-template <typename Point, typename Segment>
-struct within<Point, Segment, point_tag, segment_tag>
- : public detail::within::use_point_in_geometry
-{};
-
-template <typename Point, typename Linestring>
-struct within<Point, Linestring, point_tag, linestring_tag>
- : public detail::within::use_point_in_geometry
-{};
-
-template <typename Point, typename MultiLinestring>
-struct within<Point, MultiLinestring, point_tag, multi_linestring_tag>
- : public detail::within::use_point_in_geometry
-{};
-
-template <typename MultiPoint, typename Segment>
-struct within<MultiPoint, Segment, multi_point_tag, segment_tag>
- : public detail::within::multi_point_single_geometry<true>
-{};
-
-template <typename MultiPoint, typename Linestring>
-struct within<MultiPoint, Linestring, multi_point_tag, linestring_tag>
- : public detail::within::multi_point_single_geometry<true>
-{};
-
-template <typename MultiPoint, typename MultiLinestring>
-struct within<MultiPoint, MultiLinestring, multi_point_tag, multi_linestring_tag>
- : public detail::within::multi_point_multi_geometry<true>
-{};
-
-// P/A
-
-template <typename Point, typename Ring>
-struct within<Point, Ring, point_tag, ring_tag>
- : public detail::within::use_point_in_geometry
-{};
-
-template <typename Point, typename Polygon>
-struct within<Point, Polygon, point_tag, polygon_tag>
- : public detail::within::use_point_in_geometry
-{};
-
-template <typename Point, typename MultiPolygon>
-struct within<Point, MultiPolygon, point_tag, multi_polygon_tag>
- : public detail::within::use_point_in_geometry
-{};
-
-template <typename MultiPoint, typename Ring>
-struct within<MultiPoint, Ring, multi_point_tag, ring_tag>
- : public detail::within::multi_point_single_geometry<true>
-{};
-
-template <typename MultiPoint, typename Polygon>
-struct within<MultiPoint, Polygon, multi_point_tag, polygon_tag>
- : public detail::within::multi_point_single_geometry<true>
-{};
-
-template <typename MultiPoint, typename MultiPolygon>
-struct within<MultiPoint, MultiPolygon, multi_point_tag, multi_polygon_tag>
- : public detail::within::multi_point_multi_geometry<true>
-{};
-
-// L/L
-
-template <typename Linestring1, typename Linestring2>
-struct within<Linestring1, Linestring2, linestring_tag, linestring_tag>
- : public detail::within::use_relate
-{};
-
-template <typename Linestring, typename MultiLinestring>
-struct within<Linestring, MultiLinestring, linestring_tag, multi_linestring_tag>
- : public detail::within::use_relate
-{};
-
-template <typename MultiLinestring, typename Linestring>
-struct within<MultiLinestring, Linestring, multi_linestring_tag, linestring_tag>
- : public detail::within::use_relate
-{};
-
-template <typename MultiLinestring1, typename MultiLinestring2>
-struct within<MultiLinestring1, MultiLinestring2, multi_linestring_tag, multi_linestring_tag>
- : public detail::within::use_relate
-{};
-
-// L/A
-
-template <typename Linestring, typename Ring>
-struct within<Linestring, Ring, linestring_tag, ring_tag>
- : public detail::within::use_relate
-{};
-
-template <typename MultiLinestring, typename Ring>
-struct within<MultiLinestring, Ring, multi_linestring_tag, ring_tag>
- : public detail::within::use_relate
-{};
-
-template <typename Linestring, typename Polygon>
-struct within<Linestring, Polygon, linestring_tag, polygon_tag>
- : public detail::within::use_relate
-{};
-
-template <typename MultiLinestring, typename Polygon>
-struct within<MultiLinestring, Polygon, multi_linestring_tag, polygon_tag>
- : public detail::within::use_relate
-{};
-
-template <typename Linestring, typename MultiPolygon>
-struct within<Linestring, MultiPolygon, linestring_tag, multi_polygon_tag>
- : public detail::within::use_relate
-{};
-
-template <typename MultiLinestring, typename MultiPolygon>
-struct within<MultiLinestring, MultiPolygon, multi_linestring_tag, multi_polygon_tag>
- : public detail::within::use_relate
-{};
-
-// A/A
-
-template <typename Ring1, typename Ring2>
-struct within<Ring1, Ring2, ring_tag, ring_tag>
- : public detail::within::use_relate
-{};
-
-template <typename Ring, typename Polygon>
-struct within<Ring, Polygon, ring_tag, polygon_tag>
- : public detail::within::use_relate
-{};
-
-template <typename Polygon, typename Ring>
-struct within<Polygon, Ring, polygon_tag, ring_tag>
- : public detail::within::use_relate
-{};
-
-template <typename Polygon1, typename Polygon2>
-struct within<Polygon1, Polygon2, polygon_tag, polygon_tag>
- : public detail::within::use_relate
-{};
-
-template <typename Ring, typename MultiPolygon>
-struct within<Ring, MultiPolygon, ring_tag, multi_polygon_tag>
- : public detail::within::use_relate
-{};
-
-template <typename MultiPolygon, typename Ring>
-struct within<MultiPolygon, Ring, multi_polygon_tag, ring_tag>
- : public detail::within::use_relate
-{};
-
-template <typename Polygon, typename MultiPolygon>
-struct within<Polygon, MultiPolygon, polygon_tag, multi_polygon_tag>
- : public detail::within::use_relate
-{};
-
-template <typename MultiPolygon, typename Polygon>
-struct within<MultiPolygon, Polygon, multi_polygon_tag, polygon_tag>
- : public detail::within::use_relate
-{};
-
-template <typename MultiPolygon1, typename MultiPolygon2>
-struct within<MultiPolygon1, MultiPolygon2, multi_polygon_tag, multi_polygon_tag>
- : public detail::within::use_relate
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#include <boost/geometry/index/rtree.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/within/interface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/within/interface.hpp
deleted file mode 100644
index 23263604c27..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/within/interface.hpp
+++ /dev/null
@@ -1,304 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013, 2014, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_INTERFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_INTERFACE_HPP
-
-
-#include <boost/concept_check.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/strategies/concepts/within_concept.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/within.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename tag<Geometry1>::type,
- typename Tag2 = typename tag<Geometry2>::type
->
-struct within
- : not_implemented<Tag1, Tag2>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy
-{
-
-struct within
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- concepts::within::check
- <
- typename tag<Geometry1>::type,
- typename tag<Geometry2>::type,
- typename tag_cast<typename tag<Geometry2>::type, areal_tag>::type,
- Strategy
- >();
-
- return dispatch::within<Geometry1, Geometry2>::apply(geometry1, geometry2, strategy);
- }
-
- template <typename Geometry1, typename Geometry2>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- default_strategy)
- {
- typedef typename strategy::within::services::default_strategy
- <
- Geometry1,
- Geometry2
- >::type strategy_type;
-
- return apply(geometry1, geometry2, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry1, typename Geometry2>
-struct within
-{
- template <typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
- assert_dimension_equal<Geometry1, Geometry2>();
-
- return resolve_strategy::within::apply(geometry1,
- geometry2,
- strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct within<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Geometry2 const& m_geometry2;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2, Strategy const& strategy)
- : m_geometry2(geometry2)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1>
- bool operator()(Geometry1 const& geometry1) const
- {
- return within<Geometry1, Geometry2>::apply(geometry1,
- m_geometry2,
- m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry2, strategy),
- geometry1);
- }
-};
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct within<Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Geometry1 const& m_geometry1;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1, Strategy const& strategy)
- : m_geometry1(geometry1)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry2>
- bool operator()(Geometry2 const& geometry2) const
- {
- return within<Geometry1, Geometry2>::apply(m_geometry1,
- geometry2,
- m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool
- apply(Geometry1 const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(geometry1, strategy),
- geometry2
- );
- }
-};
-
-template <
- BOOST_VARIANT_ENUM_PARAMS(typename T1),
- BOOST_VARIANT_ENUM_PARAMS(typename T2)
->
-struct within<
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)>
->
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy): m_strategy(strategy) {}
-
- template <typename Geometry1, typename Geometry2>
- bool operator()(Geometry1 const& geometry1,
- Geometry2 const& geometry2) const
- {
- return within<Geometry1, Geometry2>::apply(geometry1,
- geometry2,
- m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(strategy),
- geometry1,
- geometry2);
- }
-};
-
-}
-
-
-/*!
-\brief \brief_check12{is completely inside}
-\ingroup within
-\details \details_check12{within, is completely inside}.
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry which might be within the second geometry
-\param geometry2 \param_geometry which might contain the first geometry
-\return true if geometry1 is completely contained within geometry2,
- else false
-\note The default strategy is used for within detection
-
-
-\qbk{[include reference/algorithms/within.qbk]}
-
-\qbk{
-[heading Example]
-[within]
-[within_output]
-}
- */
-template<typename Geometry1, typename Geometry2>
-inline bool within(Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- return resolve_variant::within
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, default_strategy());
-}
-
-/*!
-\brief \brief_check12{is completely inside} \brief_strategy
-\ingroup within
-\details \details_check12{within, is completely inside}, \brief_strategy. \details_strategy_reasons
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry which might be within the second geometry
-\param geometry2 \param_geometry which might contain the first geometry
-\param strategy strategy to be used
-\return true if geometry1 is completely contained within geometry2,
- else false
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/within.qbk]}
-\qbk{
-[heading Available Strategies]
-\* [link geometry.reference.strategies.strategy_within_winding Winding (coordinate system agnostic)]
-\* [link geometry.reference.strategies.strategy_within_franklin Franklin (cartesian)]
-\* [link geometry.reference.strategies.strategy_within_crossings_multiply Crossings Multiply (cartesian)]
-
-[heading Example]
-[within_strategy]
-[within_strategy_output]
-
-}
-*/
-template<typename Geometry1, typename Geometry2, typename Strategy>
-inline bool within(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Strategy const& strategy)
-{
- return resolve_variant::within
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, strategy);
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/within/multi_point.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/within/multi_point.hpp
deleted file mode 100644
index 359853f6a4f..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/within/multi_point.hpp
+++ /dev/null
@@ -1,269 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_MULTI_POINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_MULTI_POINT_HPP
-
-
-#include <algorithm>
-#include <vector>
-
-#include <boost/range.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_box.hpp>
-#include <boost/geometry/algorithms/detail/expand_by_epsilon.hpp>
-#include <boost/geometry/algorithms/detail/within/point_in_geometry.hpp>
-#include <boost/geometry/algorithms/envelope.hpp>
-#include <boost/geometry/algorithms/detail/partition.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/box.hpp>
-
-#include <boost/geometry/index/rtree.hpp>
-
-#include <boost/geometry/policies/compare.hpp>
-
-#include <boost/geometry/strategies/covered_by.hpp>
-#include <boost/geometry/strategies/disjoint.hpp>
-
-
-namespace boost { namespace geometry {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace within {
-
-struct multi_point_point
-{
- template <typename MultiPoint, typename Point, typename Strategy>
- static inline bool apply(MultiPoint const& multi_point,
- Point const& point,
- Strategy const& strategy)
- {
- typedef typename boost::range_const_iterator<MultiPoint>::type iterator;
- for ( iterator it = boost::begin(multi_point) ; it != boost::end(multi_point) ; ++it )
- {
- if (! strategy.apply(*it, point))
- {
- return false;
- }
- }
-
- // all points of MultiPoint inside Point
- return true;
- }
-};
-
-// NOTE: currently the strategy is ignored, math::equals() is used inside geometry::less<>
-struct multi_point_multi_point
-{
- template <typename MultiPoint1, typename MultiPoint2, typename Strategy>
- static inline bool apply(MultiPoint1 const& multi_point1,
- MultiPoint2 const& multi_point2,
- Strategy const& /*strategy*/)
- {
- typedef typename boost::range_value<MultiPoint2>::type point2_type;
-
- geometry::less<> const less = geometry::less<>();
-
- std::vector<point2_type> points2(boost::begin(multi_point2), boost::end(multi_point2));
- std::sort(points2.begin(), points2.end(), less);
-
- bool result = false;
-
- typedef typename boost::range_const_iterator<MultiPoint1>::type iterator;
- for ( iterator it = boost::begin(multi_point1) ; it != boost::end(multi_point1) ; ++it )
- {
- if (! std::binary_search(points2.begin(), points2.end(), *it, less))
- {
- return false;
- }
- else
- {
- result = true;
- }
- }
-
- return result;
- }
-};
-
-
-// TODO: the complexity could be lesser
-// the second geometry could be "prepared"/sorted
-// For Linear geometries partition could be used
-// For Areal geometries point_in_geometry() would have to call the winding
-// strategy differently, currently it linearly calls the strategy for each
-// segment. So the segments would have to be sorted in a way consistent with
-// the strategy and then the strategy called only for the segments in range.
-template <bool Within>
-struct multi_point_single_geometry
-{
- template <typename MultiPoint, typename LinearOrAreal, typename Strategy>
- static inline bool apply(MultiPoint const& multi_point,
- LinearOrAreal const& linear_or_areal,
- Strategy const& strategy)
- {
- typedef typename boost::range_value<MultiPoint>::type point1_type;
- typedef typename point_type<LinearOrAreal>::type point2_type;
- typedef model::box<point2_type> box2_type;
-
- // Create envelope of geometry
- box2_type box;
- geometry::envelope(linear_or_areal, box, strategy.get_envelope_strategy());
- geometry::detail::expand_by_epsilon(box);
-
- typedef typename strategy::covered_by::services::default_strategy
- <
- point1_type, box2_type
- >::type point_in_box_type;
-
- // Test each Point with envelope and then geometry if needed
- // If in the exterior, break
- bool result = false;
-
- typedef typename boost::range_const_iterator<MultiPoint>::type iterator;
- for ( iterator it = boost::begin(multi_point) ; it != boost::end(multi_point) ; ++it )
- {
- int in_val = 0;
-
- // exterior of box and of geometry
- if (! point_in_box_type::apply(*it, box)
- || (in_val = point_in_geometry(*it, linear_or_areal, strategy)) < 0)
- {
- result = false;
- break;
- }
-
- // interior : interior/boundary
- if (Within ? in_val > 0 : in_val >= 0)
- {
- result = true;
- }
- }
-
- return result;
- }
-};
-
-
-// TODO: same here, probably the complexity could be lesser
-template <bool Within>
-struct multi_point_multi_geometry
-{
- template <typename MultiPoint, typename LinearOrAreal, typename Strategy>
- static inline bool apply(MultiPoint const& multi_point,
- LinearOrAreal const& linear_or_areal,
- Strategy const& strategy)
- {
- typedef typename point_type<LinearOrAreal>::type point2_type;
- typedef model::box<point2_type> box2_type;
- static const bool is_linear = is_same
- <
- typename tag_cast
- <
- typename tag<LinearOrAreal>::type,
- linear_tag
- >::type,
- linear_tag
- >::value;
-
- typename Strategy::envelope_strategy_type const
- envelope_strategy = strategy.get_envelope_strategy();
-
- // TODO: box pairs could be constructed on the fly, inside the rtree
-
- // Prepare range of envelopes and ids
- std::size_t count2 = boost::size(linear_or_areal);
- typedef std::pair<box2_type, std::size_t> box_pair_type;
- typedef std::vector<box_pair_type> box_pair_vector;
- box_pair_vector boxes(count2);
- for (std::size_t i = 0 ; i < count2 ; ++i)
- {
- geometry::envelope(linear_or_areal, boxes[i].first, envelope_strategy);
- geometry::detail::expand_by_epsilon(boxes[i].first);
- boxes[i].second = i;
- }
-
- // Create R-tree
- index::rtree<box_pair_type, index::rstar<4> > rtree(boxes.begin(), boxes.end());
-
- // For each point find overlapping envelopes and test corresponding single geometries
- // If a point is in the exterior break
- bool result = false;
-
- typedef typename boost::range_const_iterator<MultiPoint>::type iterator;
- for ( iterator it = boost::begin(multi_point) ; it != boost::end(multi_point) ; ++it )
- {
- // TODO: investigate the possibility of using satisfies
- // TODO: investigate the possibility of using iterative queries (optimization below)
- box_pair_vector inters_boxes;
- rtree.query(index::intersects(*it), std::back_inserter(inters_boxes));
-
- bool found_interior = false;
- bool found_boundary = false;
- int boundaries = 0;
-
- typedef typename box_pair_vector::const_iterator iterator;
- for ( iterator box_it = inters_boxes.begin() ; box_it != inters_boxes.end() ; ++box_it )
- {
- int in_val = point_in_geometry(*it, range::at(linear_or_areal, box_it->second), strategy);
-
- if (in_val > 0)
- found_interior = true;
- else if (in_val == 0)
- ++boundaries;
-
- // If the result was set previously (interior or
- // interior/boundary found) the only thing that needs to be
- // done for other points is to make sure they're not
- // overlapping the exterior no need to analyse boundaries.
- if (result && in_val >= 0)
- {
- break;
- }
- }
-
- if ( boundaries > 0)
- {
- if (is_linear && boundaries % 2 == 0)
- found_interior = true;
- else
- found_boundary = true;
- }
-
- // exterior
- if (! found_interior && ! found_boundary)
- {
- result = false;
- break;
- }
-
- // interior : interior/boundary
- if (Within ? found_interior : (found_interior || found_boundary))
- {
- result = true;
- }
- }
-
- return result;
- }
-};
-
-}} // namespace detail::within
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_MULTI_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/within/point_in_geometry.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/within/point_in_geometry.hpp
deleted file mode 100644
index a24f4d21e26..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/within/point_in_geometry.hpp
+++ /dev/null
@@ -1,391 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_POINT_IN_GEOMETRY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_POINT_IN_GEOMETRY_HPP
-
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/strategies/concepts/within_concept.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/relate.hpp>
-
-#include <boost/geometry/util/range.hpp>
-#include <boost/geometry/views/detail/normalized_view.hpp>
-
-namespace boost { namespace geometry {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace within {
-
-
-// TODO: is this needed?
-inline int check_result_type(int result)
-{
- return result;
-}
-
-template <typename T>
-inline T check_result_type(T result)
-{
- BOOST_GEOMETRY_ASSERT(false);
- return result;
-}
-
-template <typename Point, typename Range, typename Strategy> inline
-int point_in_range(Point const& point, Range const& range, Strategy const& strategy)
-{
- boost::ignore_unused(strategy);
-
- typedef typename boost::range_iterator<Range const>::type iterator_type;
- typename Strategy::state_type state;
- iterator_type it = boost::begin(range);
- iterator_type end = boost::end(range);
-
- for ( iterator_type previous = it++ ; it != end ; ++previous, ++it )
- {
- if ( ! strategy.apply(point, *previous, *it, state) )
- {
- break;
- }
- }
-
- return check_result_type(strategy.result(state));
-}
-
-template <typename Geometry, typename Point, typename Range>
-inline int point_in_range(Point const& point, Range const& range)
-{
- typedef typename strategy::point_in_geometry::services::default_strategy
- <
- Point, Geometry
- >::type strategy_type;
-
- return point_in_range(point, range, strategy_type());
-}
-
-}} // namespace detail::within
-
-namespace detail_dispatch { namespace within {
-
-// checks the relation between a point P and geometry G
-// returns 1 if P is in the interior of G
-// returns 0 if P is on the boundry of G
-// returns -1 if P is in the exterior of G
-
-template <typename Geometry,
- typename Tag = typename geometry::tag<Geometry>::type>
-struct point_in_geometry
- : not_implemented<Tag>
-{};
-
-template <typename Point2>
-struct point_in_geometry<Point2, point_tag>
-{
- template <typename Point1, typename Strategy> static inline
- int apply(Point1 const& point1, Point2 const& point2, Strategy const& strategy)
- {
- boost::ignore_unused(strategy);
- return strategy.apply(point1, point2) ? 1 : -1;
- }
-};
-
-template <typename Segment>
-struct point_in_geometry<Segment, segment_tag>
-{
- template <typename Point, typename Strategy> static inline
- int apply(Point const& point, Segment const& segment, Strategy const& strategy)
- {
- boost::ignore_unused(strategy);
-
- typedef typename geometry::point_type<Segment>::type point_type;
- point_type p0, p1;
-// TODO: don't copy points
- detail::assign_point_from_index<0>(segment, p0);
- detail::assign_point_from_index<1>(segment, p1);
-
- typename Strategy::state_type state;
- strategy.apply(point, p0, p1, state);
- int r = detail::within::check_result_type(strategy.result(state));
-
- if ( r != 0 )
- return -1; // exterior
-
- // if the point is equal to the one of the terminal points
- if ( detail::equals::equals_point_point(point, p0)
- || detail::equals::equals_point_point(point, p1) )
- return 0; // boundary
- else
- return 1; // interior
- }
-};
-
-
-template <typename Linestring>
-struct point_in_geometry<Linestring, linestring_tag>
-{
- template <typename Point, typename Strategy> static inline
- int apply(Point const& point, Linestring const& linestring, Strategy const& strategy)
- {
- std::size_t count = boost::size(linestring);
- if ( count > 1 )
- {
- if ( detail::within::point_in_range(point, linestring, strategy) != 0 )
- return -1; // exterior
-
- // if the linestring doesn't have a boundary
- if (detail::equals::equals_point_point(range::front(linestring), range::back(linestring)))
- return 1; // interior
- // else if the point is equal to the one of the terminal points
- else if (detail::equals::equals_point_point(point, range::front(linestring))
- || detail::equals::equals_point_point(point, range::back(linestring)))
- return 0; // boundary
- else
- return 1; // interior
- }
-// TODO: for now degenerated linestrings are ignored
-// throw an exception here?
- /*else if ( count == 1 )
- {
- if ( detail::equals::equals_point_point(point, range::front(linestring)) )
- return 1;
- }*/
-
- return -1; // exterior
- }
-};
-
-template <typename Ring>
-struct point_in_geometry<Ring, ring_tag>
-{
- template <typename Point, typename Strategy> static inline
- int apply(Point const& point, Ring const& ring, Strategy const& strategy)
- {
- if ( boost::size(ring) < core_detail::closure::minimum_ring_size
- <
- geometry::closure<Ring>::value
- >::value )
- {
- return -1;
- }
-
- detail::normalized_view<Ring const> view(ring);
- return detail::within::point_in_range(point, view, strategy);
- }
-};
-
-// Polygon: in exterior ring, and if so, not within interior ring(s)
-template <typename Polygon>
-struct point_in_geometry<Polygon, polygon_tag>
-{
- template <typename Point, typename Strategy>
- static inline int apply(Point const& point, Polygon const& polygon,
- Strategy const& strategy)
- {
- int const code = point_in_geometry
- <
- typename ring_type<Polygon>::type
- >::apply(point, exterior_ring(polygon), strategy);
-
- if (code == 1)
- {
- typename interior_return_type<Polygon const>::type
- rings = interior_rings(polygon);
-
- for (typename detail::interior_iterator<Polygon const>::type
- it = boost::begin(rings);
- it != boost::end(rings);
- ++it)
- {
- int const interior_code = point_in_geometry
- <
- typename ring_type<Polygon>::type
- >::apply(point, *it, strategy);
-
- if (interior_code != -1)
- {
- // If 0, return 0 (touch)
- // If 1 (inside hole) return -1 (outside polygon)
- // If -1 (outside hole) check other holes if any
- return -interior_code;
- }
- }
- }
- return code;
- }
-};
-
-template <typename Geometry>
-struct point_in_geometry<Geometry, multi_point_tag>
-{
- template <typename Point, typename Strategy> static inline
- int apply(Point const& point, Geometry const& geometry, Strategy const& strategy)
- {
- typedef typename boost::range_value<Geometry>::type point_type;
- typedef typename boost::range_const_iterator<Geometry>::type iterator;
- for ( iterator it = boost::begin(geometry) ; it != boost::end(geometry) ; ++it )
- {
- int pip = point_in_geometry<point_type>::apply(point, *it, strategy);
-
- //BOOST_GEOMETRY_ASSERT(pip != 0);
- if ( pip > 0 ) // inside
- return 1;
- }
-
- return -1; // outside
- }
-};
-
-template <typename Geometry>
-struct point_in_geometry<Geometry, multi_linestring_tag>
-{
- template <typename Point, typename Strategy> static inline
- int apply(Point const& point, Geometry const& geometry, Strategy const& strategy)
- {
- int pip = -1; // outside
-
- typedef typename boost::range_value<Geometry>::type linestring_type;
- typedef typename boost::range_value<linestring_type>::type point_type;
- typedef typename boost::range_iterator<Geometry const>::type iterator;
- iterator it = boost::begin(geometry);
- for ( ; it != boost::end(geometry) ; ++it )
- {
- pip = point_in_geometry<linestring_type>::apply(point, *it, strategy);
-
- // inside or on the boundary
- if ( pip >= 0 )
- {
- ++it;
- break;
- }
- }
-
- // outside
- if ( pip < 0 )
- return -1;
-
- // TODO: the following isn't needed for covered_by()
-
- unsigned boundaries = pip == 0 ? 1 : 0;
-
- for ( ; it != boost::end(geometry) ; ++it )
- {
- if ( boost::size(*it) < 2 )
- continue;
-
- point_type const& front = range::front(*it);
- point_type const& back = range::back(*it);
-
- // is closed_ring - no boundary
- if ( detail::equals::equals_point_point(front, back) )
- continue;
-
- // is point on boundary
- if ( detail::equals::equals_point_point(point, front)
- || detail::equals::equals_point_point(point, back) )
- {
- ++boundaries;
- }
- }
-
- // if the number of boundaries is odd, the point is on the boundary
- return boundaries % 2 ? 0 : 1;
- }
-};
-
-template <typename Geometry>
-struct point_in_geometry<Geometry, multi_polygon_tag>
-{
- template <typename Point, typename Strategy> static inline
- int apply(Point const& point, Geometry const& geometry, Strategy const& strategy)
- {
- // For invalid multipolygons
- //int res = -1; // outside
-
- typedef typename boost::range_value<Geometry>::type polygon_type;
- typedef typename boost::range_const_iterator<Geometry>::type iterator;
- for ( iterator it = boost::begin(geometry) ; it != boost::end(geometry) ; ++it )
- {
- int pip = point_in_geometry<polygon_type>::apply(point, *it, strategy);
-
- // inside or on the boundary
- if ( pip >= 0 )
- return pip;
-
- // For invalid multi-polygons
- //if ( 1 == pip ) // inside polygon
- // return 1;
- //else if ( res < pip ) // point must be inside at least one polygon
- // res = pip;
- }
-
- return -1; // for valid multipolygons
- //return res; // for invalid multipolygons
- }
-};
-
-}} // namespace detail_dispatch::within
-
-namespace detail { namespace within {
-
-// 1 - in the interior
-// 0 - in the boundry
-// -1 - in the exterior
-template <typename Point, typename Geometry, typename Strategy>
-inline int point_in_geometry(Point const& point, Geometry const& geometry, Strategy const& strategy)
-{
- concepts::within::check
- <
- typename tag<Point>::type,
- typename tag<Geometry>::type,
- typename tag_cast<typename tag<Geometry>::type, areal_tag>::type,
- Strategy
- >();
-
- return detail_dispatch::within::point_in_geometry<Geometry>::apply(point, geometry, strategy);
-}
-
-template <typename Point, typename Geometry>
-inline int point_in_geometry(Point const& point, Geometry const& geometry)
-{
- typedef typename strategy::point_in_geometry::services::default_strategy
- <
- Point, Geometry
- >::type strategy_type;
-
- return point_in_geometry(point, geometry, strategy_type());
-}
-
-}} // namespace detail::within
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_POINT_IN_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/detail/within/within_no_turns.hpp b/contrib/restricted/boost/boost/geometry/algorithms/detail/within/within_no_turns.hpp
deleted file mode 100644
index 8da05e58fd8..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/detail/within/within_no_turns.hpp
+++ /dev/null
@@ -1,221 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013.
-// Modifications copyright (c) 2013, Oracle and/or its affiliates.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_WITHIN_NO_TURNS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_WITHIN_NO_TURNS_HPP
-
-#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-#include <boost/geometry/algorithms/detail/within/point_in_geometry.hpp>
-
-namespace boost { namespace geometry {
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail_dispatch { namespace within {
-
-// returns true if G1 is within G2
-// this function should be called only if there are no intersection points
-// otherwise it may return invalid result
-// e.g. when non-first point of G1 is outside G2 or when some rings of G1 are the same as rings of G2
-
-template <typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename geometry::tag<Geometry1>::type,
- typename Tag2 = typename geometry::tag<Geometry2>::type>
-struct within_no_turns
-{
- template <typename Strategy> static inline
- bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- typedef typename geometry::point_type<Geometry1>::type point1_type;
- point1_type p;
- if ( !geometry::point_on_border(p, geometry1) )
- return false;
-
- return detail::within::point_in_geometry(p, geometry2, strategy) >= 0;
- }
-};
-
-template <typename Geometry1, typename Geometry2>
-struct within_no_turns<Geometry1, Geometry2, ring_tag, polygon_tag>
-{
- template <typename Strategy> static inline
- bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- typedef typename geometry::point_type<Geometry1>::type point1_type;
- typedef typename geometry::point_type<Geometry2>::type point2_type;
- point1_type p;
- if ( !geometry::point_on_border(p, geometry1) )
- return false;
- // check if one of ring points is outside the polygon
- if ( detail::within::point_in_geometry(p, geometry2, strategy) < 0 )
- return false;
- // Now check if holes of G2 aren't inside G1
- typedef typename boost::range_const_iterator
- <
- typename geometry::interior_type<Geometry2>::type
- >::type iterator;
- for ( iterator it = boost::begin(geometry::interior_rings(geometry2)) ;
- it != boost::end(geometry::interior_rings(geometry2)) ;
- ++it )
- {
- point2_type p;
- if ( !geometry::point_on_border(p, *it) )
- return false;
- if ( detail::within::point_in_geometry(p, geometry1, strategy) > 0 )
- return false;
- }
- return true;
- }
-};
-
-template <typename Geometry1, typename Geometry2>
-struct within_no_turns<Geometry1, Geometry2, polygon_tag, polygon_tag>
-{
- template <typename Strategy> static inline
- bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- typedef typename geometry::point_type<Geometry1>::type point1_type;
- typedef typename geometry::point_type<Geometry2>::type point2_type;
- point1_type p;
- if ( !geometry::point_on_border(p, geometry1) )
- return false;
- // check if one of ring points is outside the polygon
- if ( detail::within::point_in_geometry(p, geometry2, strategy) < 0 )
- return false;
- // Now check if holes of G2 aren't inside G1
- typedef typename boost::range_const_iterator
- <
- typename geometry::interior_type<Geometry2>::type
- >::type iterator2;
- for ( iterator2 it = boost::begin(geometry::interior_rings(geometry2)) ;
- it != boost::end(geometry::interior_rings(geometry2)) ;
- ++it )
- {
- point2_type p2;
- if ( !geometry::point_on_border(p2, *it) )
- return false;
- // if the hole of G2 is inside G1
- if ( detail::within::point_in_geometry(p2, geometry1, strategy) > 0 )
- {
- // if it's also inside one of the G1 holes, it's ok
- bool ok = false;
- typedef typename boost::range_const_iterator
- <
- typename geometry::interior_type<Geometry1>::type
- >::type iterator1;
- for ( iterator1 it1 = boost::begin(geometry::interior_rings(geometry1)) ;
- it1 != boost::end(geometry::interior_rings(geometry1)) ;
- ++it1 )
- {
- if ( detail::within::point_in_geometry(p2, *it1, strategy) < 0 )
- {
- ok = true;
- break;
- }
- }
- if ( !ok )
- return false;
- }
- }
- return true;
- }
-};
-
-template <typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename geometry::tag<Geometry1>::type,
- typename Tag2 = typename geometry::tag<Geometry2>::type,
- bool IsMulti1 = boost::is_base_of<geometry::multi_tag, Tag1>::value,
- bool IsMulti2 = boost::is_base_of<geometry::multi_tag, Tag2>::value>
-struct within_no_turns_multi
-{
- template <typename Strategy> static inline
- bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- return within_no_turns<Geometry1, Geometry2>::apply(geometry1, geometry2, strategy);
- }
-};
-
-template <typename Geometry1, typename Geometry2, typename Tag1, typename Tag2>
-struct within_no_turns_multi<Geometry1, Geometry2, Tag1, Tag2, true, false>
-{
- template <typename Strategy> static inline
- bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- // All values of G1 must be inside G2
- typedef typename boost::range_value<Geometry1>::type subgeometry1;
- typedef typename boost::range_const_iterator<Geometry1>::type iterator;
- for ( iterator it = boost::begin(geometry1) ; it != boost::end(geometry1) ; ++it )
- {
- if ( !within_no_turns<subgeometry1, Geometry2>::apply(*it, geometry2, strategy) )
- return false;
- }
- return true;
- }
-};
-
-template <typename Geometry1, typename Geometry2, typename Tag1, typename Tag2>
-struct within_no_turns_multi<Geometry1, Geometry2, Tag1, Tag2, false, true>
-{
- template <typename Strategy> static inline
- bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- // G1 must be within at least one value of G2
- typedef typename boost::range_value<Geometry2>::type subgeometry2;
- typedef typename boost::range_const_iterator<Geometry2>::type iterator;
- for ( iterator it = boost::begin(geometry2) ; it != boost::end(geometry2) ; ++it )
- {
- if ( within_no_turns<Geometry1, subgeometry2>::apply(geometry1, *it, strategy) )
- return true;
- }
- return false;
- }
-};
-
-template <typename Geometry1, typename Geometry2, typename Tag1, typename Tag2>
-struct within_no_turns_multi<Geometry1, Geometry2, Tag1, Tag2, true, true>
-{
- template <typename Strategy> static inline
- bool apply(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
- {
- // each value of G1 must be inside at least one value of G2
- typedef typename boost::range_value<Geometry1>::type subgeometry1;
- typedef typename boost::range_const_iterator<Geometry1>::type iterator;
- for ( iterator it = boost::begin(geometry1) ; it != boost::end(geometry1) ; ++it )
- {
- if ( !within_no_turns_multi<subgeometry1, Geometry2>::apply(*it, geometry2, strategy) )
- return false;
- }
- return true;
- }
-};
-
-}} // namespace detail_dispatch::within
-
-namespace detail { namespace within {
-
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline bool within_no_turns(Geometry1 const& geometry1, Geometry2 const& geometry2, Strategy const& strategy)
-{
- return detail_dispatch::within::within_no_turns_multi<Geometry1, Geometry2>::apply(geometry1, geometry2, strategy);
-}
-
-}} // namespace detail::within
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_WITHIN_WITHIN_NO_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/difference.hpp b/contrib/restricted/boost/boost/geometry/algorithms/difference.hpp
deleted file mode 100644
index c11ceca2434..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/difference.hpp
+++ /dev/null
@@ -1,406 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_DIFFERENCE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DIFFERENCE_HPP
-
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/intersection_insert.hpp>
-#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/util/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace difference
-{
-
-/*!
-\brief_calc2{difference} \brief_strategy
-\ingroup difference
-\details \details_calc2{difference_insert, spatial set theoretic difference}
- \brief_strategy. \details_inserter{difference}
-\tparam GeometryOut output geometry type, must be specified
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam OutputIterator output iterator
-\tparam Strategy \tparam_strategy_overlay
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param out \param_out{difference}
-\param strategy \param_strategy{difference}
-\return \return_out
-
-\qbk{distinguish,with strategy}
-*/
-template
-<
- typename GeometryOut,
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename OutputIterator,
- typename Strategy
->
-inline OutputIterator difference_insert(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
- concepts::check<GeometryOut>();
-
- return geometry::dispatch::intersection_insert
- <
- Geometry1, Geometry2,
- GeometryOut,
- overlay_difference,
- geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
- geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, true>::value
- >::apply(geometry1, geometry2, robust_policy, out, strategy);
-}
-
-/*!
-\brief_calc2{difference}
-\ingroup difference
-\details \details_calc2{difference_insert, spatial set theoretic difference}.
- \details_insert{difference}
-\tparam GeometryOut output geometry type, must be specified
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam OutputIterator output iterator
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param out \param_out{difference}
-\return \return_out
-
-\qbk{[include reference/algorithms/difference_insert.qbk]}
-*/
-template
-<
- typename GeometryOut,
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename OutputIterator
->
-inline OutputIterator difference_insert(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- OutputIterator out)
-{
- typedef typename strategy::relate::services::default_strategy
- <
- Geometry1,
- Geometry2
- >::type strategy_type;
-
- return difference_insert<GeometryOut>(geometry1, geometry2,
- robust_policy, out, strategy_type());
-}
-
-
-}} // namespace detail::difference
-#endif // DOXYGEN_NO_DETAIL
-
-
-namespace resolve_strategy {
-
-struct difference
-{
- template
- <
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename Collection,
- typename Strategy
- >
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- Collection & output_collection,
- Strategy const& strategy)
- {
- typedef typename boost::range_value<Collection>::type geometry_out;
-
- detail::difference::difference_insert<geometry_out>(
- geometry1, geometry2, robust_policy,
- range::back_inserter(output_collection),
- strategy);
- }
-
- template
- <
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename Collection
- >
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- Collection & output_collection,
- default_strategy)
- {
- typedef typename boost::range_value<Collection>::type geometry_out;
-
- detail::difference::difference_insert<geometry_out>(
- geometry1, geometry2, robust_policy,
- range::back_inserter(output_collection));
- }
-};
-
-} // resolve_strategy
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry1, typename Geometry2>
-struct difference
-{
- template <typename Collection, typename Strategy>
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- {
- typedef typename geometry::rescale_overlay_policy_type
- <
- Geometry1,
- Geometry2
- >::type rescale_policy_type;
-
- rescale_policy_type robust_policy
- = geometry::get_rescale_policy<rescale_policy_type>(geometry1,
- geometry2);
-
- resolve_strategy::difference::apply(geometry1, geometry2,
- robust_policy,
- output_collection,
- strategy);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct difference<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename Collection, typename Strategy>
- struct visitor: static_visitor<>
- {
- Geometry2 const& m_geometry2;
- Collection& m_output_collection;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- : m_geometry2(geometry2)
- , m_output_collection(output_collection)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1>
- void operator()(Geometry1 const& geometry1) const
- {
- difference
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, m_geometry2, m_output_collection, m_strategy);
- }
- };
-
- template <typename Collection, typename Strategy>
- static inline void
- apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Collection, Strategy>(geometry2,
- output_collection,
- strategy),
- geometry1);
- }
-};
-
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct difference<Geometry1, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Collection, typename Strategy>
- struct visitor: static_visitor<>
- {
- Geometry1 const& m_geometry1;
- Collection& m_output_collection;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1,
- Collection& output_collection,
- Strategy const& strategy)
- : m_geometry1(geometry1)
- , m_output_collection(output_collection)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry2>
- void operator()(Geometry2 const& geometry2) const
- {
- difference
- <
- Geometry1,
- Geometry2
- >::apply(m_geometry1, geometry2, m_output_collection, m_strategy);
- }
- };
-
- template <typename Collection, typename Strategy>
- static inline void
- apply(Geometry1 const& geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Collection, Strategy>(geometry1,
- output_collection,
- strategy),
- geometry2);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T1), BOOST_VARIANT_ENUM_PARAMS(typename T2)>
-struct difference<variant<BOOST_VARIANT_ENUM_PARAMS(T1)>, variant<BOOST_VARIANT_ENUM_PARAMS(T2)> >
-{
- template <typename Collection, typename Strategy>
- struct visitor: static_visitor<>
- {
- Collection& m_output_collection;
- Strategy const& m_strategy;
-
- visitor(Collection& output_collection, Strategy const& strategy)
- : m_output_collection(output_collection)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1, typename Geometry2>
- void operator()(Geometry1 const& geometry1,
- Geometry2 const& geometry2) const
- {
- difference
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, m_output_collection, m_strategy);
- }
- };
-
- template <typename Collection, typename Strategy>
- static inline void
- apply(variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Collection, Strategy>(output_collection,
- strategy),
- geometry1, geometry2);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief_calc2{difference}
-\ingroup difference
-\details \details_calc2{difference, spatial set theoretic difference}.
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Collection \tparam_output_collection
-\tparam Strategy \tparam_strategy{Difference}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param output_collection the output collection
-\param strategy \param_strategy{difference}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/difference.qbk]}
-*/
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Collection,
- typename Strategy
->
-inline void difference(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
-{
- resolve_variant::difference
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, output_collection, strategy);
-}
-
-
-/*!
-\brief_calc2{difference}
-\ingroup difference
-\details \details_calc2{difference, spatial set theoretic difference}.
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Collection \tparam_output_collection
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param output_collection the output collection
-
-\qbk{[include reference/algorithms/difference.qbk]}
-*/
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Collection
->
-inline void difference(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Collection& output_collection)
-{
- resolve_variant::difference
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, output_collection, default_strategy());
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DIFFERENCE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/disjoint.hpp b/contrib/restricted/boost/boost/geometry/algorithms/disjoint.hpp
deleted file mode 100644
index f997487c717..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/disjoint.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2014.
-// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DISJOINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DISJOINT_HPP
-
-#include <boost/geometry/algorithms/detail/disjoint/interface.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/implementation.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DISJOINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/dispatch/disjoint.hpp b/contrib/restricted/boost/boost/geometry/algorithms/dispatch/disjoint.hpp
deleted file mode 100644
index 78015f1a550..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/dispatch/disjoint.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DISPATCH_DISJOINT_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DISPATCH_DISJOINT_HPP
-
-#include <cstddef>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/reverse_dispatch.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry1, typename Geometry2,
- std::size_t DimensionCount = dimension<Geometry1>::type::value,
- typename Tag1 = typename tag_cast
- <
- typename tag<Geometry1>::type,
- segment_tag, box_tag, linear_tag, areal_tag
- >::type,
- typename Tag2 = typename tag_cast
- <
- typename tag<Geometry2>::type,
- segment_tag, box_tag, linear_tag, areal_tag
- >::type,
- bool Reverse = reverse_dispatch<Geometry1, Geometry2>::type::value
->
-struct disjoint
- : not_implemented<Geometry1, Geometry2>
-{};
-
-
-// If reversal is needed, perform it
-template
-<
- typename Geometry1, typename Geometry2,
- std::size_t DimensionCount,
- typename Tag1, typename Tag2
->
-struct disjoint<Geometry1, Geometry2, DimensionCount, Tag1, Tag2, true>
-{
- template <typename Strategy>
- static inline bool apply(Geometry1 const& g1, Geometry2 const& g2, Strategy const& strategy)
- {
- return disjoint
- <
- Geometry2, Geometry1,
- DimensionCount,
- Tag2, Tag1
- >::apply(g2, g1, strategy);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DISPATCH_DISJOINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/dispatch/distance.hpp b/contrib/restricted/boost/boost/geometry/algorithms/dispatch/distance.hpp
deleted file mode 100644
index cae3ebd0c99..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/dispatch/distance.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DISPATCH_DISTANCE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DISPATCH_DISTANCE_HPP
-
-
-#include <boost/geometry/core/reverse_dispatch.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry1, typename Geometry2,
- typename Strategy = typename detail::distance::default_strategy
- <
- Geometry1, Geometry2
- >::type,
- typename Tag1 = typename tag_cast
- <
- typename tag<Geometry1>::type,
- segment_tag,
- box_tag,
- linear_tag,
- areal_tag
- >::type,
- typename Tag2 = typename tag_cast
- <
- typename tag<Geometry2>::type,
- segment_tag,
- box_tag,
- linear_tag,
- areal_tag
- >::type,
- typename StrategyTag = typename strategy::distance::services::tag
- <
- Strategy
- >::type,
- bool Reverse = reverse_dispatch<Geometry1, Geometry2>::type::value
->
-struct distance: not_implemented<Tag1, Tag2>
-{};
-
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DISPATCH_DISTANCE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/dispatch/envelope.hpp b/contrib/restricted/boost/boost/geometry/algorithms/dispatch/envelope.hpp
deleted file mode 100644
index bb8a99f5a83..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/dispatch/envelope.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DISPATCH_ENVELOPE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DISPATCH_ENVELOPE_HPP
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/tag.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type,
- typename CS_Tag = typename cs_tag<Geometry>::type
->
-struct envelope : not_implemented<Tag>
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DISPATCH_ENVELOPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/dispatch/expand.hpp b/contrib/restricted/boost/boost/geometry/algorithms/dispatch/expand.hpp
deleted file mode 100644
index c7a76964802..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/dispatch/expand.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Samuel Debionne, Grenoble, France.
-
-// This file was modified by Oracle on 2015, 2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_DISPATCH_EXPAND_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DISPATCH_EXPAND_HPP
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/tag.hpp>
-
-#include <boost/geometry/strategies/compare.hpp>
-#include <boost/geometry/policies/compare.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename GeometryOut, typename Geometry,
- typename TagOut = typename tag<GeometryOut>::type,
- typename Tag = typename tag<Geometry>::type,
- typename CSTagOut = typename cs_tag<GeometryOut>::type,
- typename CSTag = typename cs_tag<Geometry>::type
->
-struct expand : not_implemented<TagOut, Tag>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DISPATCH_EXPAND_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/dispatch/is_simple.hpp b/contrib/restricted/boost/boost/geometry/algorithms/dispatch/is_simple.hpp
deleted file mode 100644
index 2ac92256b37..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/dispatch/is_simple.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DISPATCH_IS_SIMPLE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DISPATCH_IS_SIMPLE_HPP
-
-#include <boost/geometry/core/tag.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct is_simple
- : not_implemented<Geometry>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DISPATCH_IS_SIMPLE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/dispatch/is_valid.hpp b/contrib/restricted/boost/boost/geometry/algorithms/dispatch/is_valid.hpp
deleted file mode 100644
index 5d8108655c0..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/dispatch/is_valid.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_DISPATCH_IS_VALID_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DISPATCH_IS_VALID_HPP
-
-#include <boost/geometry/core/tag.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type,
- // for multi-geometries: determines if empty multi-geometries are allowed
- bool AllowEmptyMultiGeometries = true
->
-struct is_valid
- : not_implemented<Geometry>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DISPATCH_IS_VALID_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/distance.hpp b/contrib/restricted/boost/boost/geometry/algorithms/distance.hpp
deleted file mode 100644
index dcfe597cd01..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/distance.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_DISTANCE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_DISTANCE_HPP
-
-#include <boost/geometry/algorithms/detail/distance/interface.hpp>
-#include <boost/geometry/algorithms/detail/distance/implementation.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DISTANCE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/envelope.hpp b/contrib/restricted/boost/boost/geometry/algorithms/envelope.hpp
deleted file mode 100644
index 00981224b21..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/envelope.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_ENVELOPE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_ENVELOPE_HPP
-
-#include <boost/geometry/algorithms/detail/envelope/interface.hpp>
-#include <boost/geometry/algorithms/detail/envelope/implementation.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_ENVELOPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/equals.hpp b/contrib/restricted/boost/boost/geometry/algorithms/equals.hpp
deleted file mode 100644
index 77b8977d223..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/equals.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014, 2015, 2016, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_EQUALS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_EQUALS_HPP
-
-
-#include <boost/geometry/algorithms/detail/equals/interface.hpp>
-#include <boost/geometry/algorithms/detail/equals/implementation.hpp>
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_EQUALS_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/expand.hpp b/contrib/restricted/boost/boost/geometry/algorithms/expand.hpp
deleted file mode 100644
index f41df53801d..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/expand.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Samuel Debionne, Grenoble, France.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
-
-// Distributed under 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 BOOST_GEOMETRY_ALGORITHMS_EXPAND_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_EXPAND_HPP
-
-#include <boost/geometry/algorithms/detail/expand/interface.hpp>
-#include <boost/geometry/algorithms/detail/expand/implementation.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_EXPAND_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/for_each.hpp b/contrib/restricted/boost/boost/geometry/algorithms/for_each.hpp
deleted file mode 100644
index 741dc359fe6..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/for_each.hpp
+++ /dev/null
@@ -1,373 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_FOR_EACH_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_FOR_EACH_HPP
-
-
-#include <algorithm>
-
-#include <boost/range.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/geometries/segment.hpp>
-
-#include <boost/geometry/util/add_const_if_c.hpp>
-#include <boost/geometry/util/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace for_each
-{
-
-
-struct fe_point_per_point
-{
- template <typename Point, typename Functor>
- static inline void apply(Point& point, Functor& f)
- {
- f(point);
- }
-};
-
-
-struct fe_point_per_segment
-{
- template <typename Point, typename Functor>
- static inline void apply(Point& , Functor& /*f*/)
- {
- // TODO: if non-const, we should extract the points from the segment
- // and call the functor on those two points
- }
-};
-
-
-struct fe_range_per_point
-{
- template <typename Range, typename Functor>
- static inline void apply(Range& range, Functor& f)
- {
- // The previous implementation called the std library:
- // return (std::for_each(boost::begin(range), boost::end(range), f));
- // But that is not accepted for capturing lambda's.
- // It needs to do it like that to return the state of Functor f (f is passed by value in std::for_each).
-
- // So we now loop manually.
-
- for (typename boost::range_iterator<Range>::type
- it = boost::begin(range); it != boost::end(range); ++it)
- {
- f(*it);
- }
- }
-};
-
-
-template <closure_selector Closure>
-struct fe_range_per_segment_with_closure
-{
- template <typename Range, typename Functor>
- static inline void apply(Range& range, Functor& f)
- {
- typedef typename add_const_if_c
- <
- is_const<Range>::value,
- typename point_type<Range>::type
- >::type point_type;
-
- typedef typename boost::range_iterator<Range>::type iterator_type;
-
- iterator_type it = boost::begin(range);
- iterator_type previous = it++;
- while(it != boost::end(range))
- {
- model::referring_segment<point_type> s(*previous, *it);
- f(s);
- previous = it++;
- }
- }
-};
-
-
-template <>
-struct fe_range_per_segment_with_closure<open>
-{
- template <typename Range, typename Functor>
- static inline void apply(Range& range, Functor& f)
- {
- fe_range_per_segment_with_closure<closed>::apply(range, f);
-
- model::referring_segment
- <
- typename add_const_if_c
- <
- is_const<Range>::value,
- typename point_type<Range>::type
- >::type
- > s(range::back(range), range::front(range));
-
- f(s);
- }
-};
-
-
-struct fe_range_per_segment
-{
- template <typename Range, typename Functor>
- static inline void apply(Range& range, Functor& f)
- {
- fe_range_per_segment_with_closure
- <
- closure<Range>::value
- >::apply(range, f);
- }
-};
-
-
-struct fe_polygon_per_point
-{
- template <typename Polygon, typename Functor>
- static inline void apply(Polygon& poly, Functor& f)
- {
- fe_range_per_point::apply(exterior_ring(poly), f);
-
- typename interior_return_type<Polygon>::type
- rings = interior_rings(poly);
-
- for (typename detail::interior_iterator<Polygon>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- fe_range_per_point::apply(*it, f);
- }
- }
-
-};
-
-struct fe_polygon_per_segment
-{
- template <typename Polygon, typename Functor>
- static inline void apply(Polygon& poly, Functor& f)
- {
- fe_range_per_segment::apply(exterior_ring(poly), f);
-
- typename interior_return_type<Polygon>::type
- rings = interior_rings(poly);
-
- for (typename detail::interior_iterator<Polygon>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- fe_range_per_segment::apply(*it, f);
- }
- }
-
-};
-
-// Implementation of multi, for both point and segment,
-// just calling the single version.
-template <typename Policy>
-struct for_each_multi
-{
- template <typename MultiGeometry, typename Functor>
- static inline void apply(MultiGeometry& multi, Functor& f)
- {
- for (typename boost::range_iterator<MultiGeometry>::type
- it = boost::begin(multi); it != boost::end(multi); ++it)
- {
- Policy::apply(*it, f);
- }
- }
-};
-
-}} // namespace detail::for_each
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry,
- typename Tag = typename tag_cast<typename tag<Geometry>::type, multi_tag>::type
->
-struct for_each_point: not_implemented<Tag>
-{};
-
-
-template <typename Point>
-struct for_each_point<Point, point_tag>
- : detail::for_each::fe_point_per_point
-{};
-
-
-template <typename Linestring>
-struct for_each_point<Linestring, linestring_tag>
- : detail::for_each::fe_range_per_point
-{};
-
-
-template <typename Ring>
-struct for_each_point<Ring, ring_tag>
- : detail::for_each::fe_range_per_point
-{};
-
-
-template <typename Polygon>
-struct for_each_point<Polygon, polygon_tag>
- : detail::for_each::fe_polygon_per_point
-{};
-
-
-template
-<
- typename Geometry,
- typename Tag = typename tag_cast<typename tag<Geometry>::type, multi_tag>::type
->
-struct for_each_segment: not_implemented<Tag>
-{};
-
-template <typename Point>
-struct for_each_segment<Point, point_tag>
- : detail::for_each::fe_point_per_segment
-{};
-
-
-template <typename Linestring>
-struct for_each_segment<Linestring, linestring_tag>
- : detail::for_each::fe_range_per_segment
-{};
-
-
-template <typename Ring>
-struct for_each_segment<Ring, ring_tag>
- : detail::for_each::fe_range_per_segment
-{};
-
-
-template <typename Polygon>
-struct for_each_segment<Polygon, polygon_tag>
- : detail::for_each::fe_polygon_per_segment
-{};
-
-
-template <typename MultiGeometry>
-struct for_each_point<MultiGeometry, multi_tag>
- : detail::for_each::for_each_multi
- <
- // Specify the dispatch of the single-version as policy
- for_each_point
- <
- typename add_const_if_c
- <
- is_const<MultiGeometry>::value,
- typename boost::range_value<MultiGeometry>::type
- >::type
- >
- >
-{};
-
-
-template <typename MultiGeometry>
-struct for_each_segment<MultiGeometry, multi_tag>
- : detail::for_each::for_each_multi
- <
- // Specify the dispatch of the single-version as policy
- for_each_segment
- <
- typename add_const_if_c
- <
- is_const<MultiGeometry>::value,
- typename boost::range_value<MultiGeometry>::type
- >::type
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief \brf_for_each{point}
-\details \det_for_each{point}
-\ingroup for_each
-\param geometry \param_geometry
-\param f \par_for_each_f{point}
-\tparam Geometry \tparam_geometry
-\tparam Functor \tparam_functor
-
-\qbk{[include reference/algorithms/for_each_point.qbk]}
-\qbk{[heading Example]}
-\qbk{[for_each_point] [for_each_point_output]}
-\qbk{[for_each_point_const] [for_each_point_const_output]}
-*/
-template<typename Geometry, typename Functor>
-inline Functor for_each_point(Geometry& geometry, Functor f)
-{
- concepts::check<Geometry>();
-
- dispatch::for_each_point<Geometry>::apply(geometry, f);
- return f;
-}
-
-
-/*!
-\brief \brf_for_each{segment}
-\details \det_for_each{segment}
-\ingroup for_each
-\param geometry \param_geometry
-\param f \par_for_each_f{segment}
-\tparam Geometry \tparam_geometry
-\tparam Functor \tparam_functor
-
-\qbk{[include reference/algorithms/for_each_segment.qbk]}
-\qbk{[heading Example]}
-\qbk{[for_each_segment_const] [for_each_segment_const_output]}
-*/
-template<typename Geometry, typename Functor>
-inline Functor for_each_segment(Geometry& geometry, Functor f)
-{
- concepts::check<Geometry>();
-
- dispatch::for_each_segment<Geometry>::apply(geometry, f);
- return f;
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_FOR_EACH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/intersection.hpp b/contrib/restricted/boost/boost/geometry/algorithms/intersection.hpp
deleted file mode 100644
index 0169f12db1d..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/intersection.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_INTERSECTION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_INTERSECTION_HPP
-
-
-#include <boost/geometry/algorithms/detail/intersection/interface.hpp>
-#include <boost/geometry/algorithms/detail/intersection/implementation.hpp>
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/intersects.hpp b/contrib/restricted/boost/boost/geometry/algorithms/intersects.hpp
deleted file mode 100644
index 503ee1a10ae..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/intersects.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_INTERSECTS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_INTERSECTS_HPP
-
-
-#include <boost/geometry/algorithms/detail/intersects/interface.hpp>
-#include <boost/geometry/algorithms/detail/intersects/implementation.hpp>
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_INTERSECTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/is_convex.hpp b/contrib/restricted/boost/boost/geometry/algorithms/is_convex.hpp
deleted file mode 100644
index 4a9251b2706..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/is_convex.hpp
+++ /dev/null
@@ -1,224 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_IS_CONVEX_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_IS_CONVEX_HPP
-
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/iterators/ever_circling_iterator.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/views/detail/normalized_view.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_convex
-{
-
-struct ring_is_convex
-{
- template <typename Ring, typename SideStrategy>
- static inline bool apply(Ring const& ring, SideStrategy const& strategy)
- {
- std::size_t n = boost::size(ring);
- if (boost::size(ring) < core_detail::closure::minimum_ring_size
- <
- geometry::closure<Ring>::value
- >::value)
- {
- // (Too) small rings are considered as non-concave, is convex
- return true;
- }
-
- // Walk in clockwise direction, consider ring as closed
- // (though closure is not important in this algorithm - any dupped
- // point is skipped)
- typedef detail::normalized_view<Ring const> view_type;
- view_type view(ring);
-
- typedef geometry::ever_circling_range_iterator<view_type const> it_type;
- it_type previous(view);
- it_type current(view);
- current++;
-
- std::size_t index = 1;
- while (equals::equals_point_point(*current, *previous) && index < n)
- {
- current++;
- index++;
- }
-
- if (index == n)
- {
- // All points are apparently equal
- return true;
- }
-
- it_type next = current;
- next++;
- while (equals::equals_point_point(*current, *next))
- {
- next++;
- }
-
- // We have now three different points on the ring
- // Walk through all points, use a counter because of the ever-circling
- // iterator
- for (std::size_t i = 0; i < n; i++)
- {
- int const side = strategy.apply(*previous, *current, *next);
- if (side == 1)
- {
- // Next is on the left side of clockwise ring:
- // the piece is not convex
- return false;
- }
-
- previous = current;
- current = next;
-
- // Advance next to next different point
- // (because there are non-equal points, this loop is not infinite)
- next++;
- while (equals::equals_point_point(*current, *next))
- {
- next++;
- }
- }
- return true;
- }
-};
-
-
-}} // namespace detail::is_convex
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type
->
-struct is_convex : not_implemented<Tag>
-{};
-
-template <typename Box>
-struct is_convex<Box, box_tag>
-{
- template <typename Strategy>
- static inline bool apply(Box const& , Strategy const& )
- {
- // Any box is convex (TODO: consider spherical boxes)
- return true;
- }
-};
-
-template <typename Box>
-struct is_convex<Box, ring_tag> : detail::is_convex::ring_is_convex
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-namespace resolve_variant {
-
-template <typename Geometry>
-struct is_convex
-{
- template <typename Strategy>
- static bool apply(Geometry const& geometry, Strategy const& strategy)
- {
- concepts::check<Geometry>();
- return dispatch::is_convex<Geometry>::apply(geometry, strategy);
- }
-
- static bool apply(Geometry const& geometry, geometry::default_strategy const&)
- {
- typedef typename strategy::side::services::default_strategy
- <
- typename cs_tag<Geometry>::type
- >::type side_strategy;
-
- return apply(geometry, side_strategy());
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct is_convex<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<bool>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy) : m_strategy(strategy) {}
-
- template <typename Geometry>
- bool operator()(Geometry const& geometry) const
- {
- return is_convex<Geometry>::apply(geometry, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline bool apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-// TODO: documentation / qbk
-template<typename Geometry>
-inline bool is_convex(Geometry const& geometry)
-{
- return resolve_variant::is_convex
- <
- Geometry
- >::apply(geometry, geometry::default_strategy());
-}
-
-// TODO: documentation / qbk
-template<typename Geometry, typename Strategy>
-inline bool is_convex(Geometry const& geometry, Strategy const& strategy)
-{
- return resolve_variant::is_convex<Geometry>::apply(geometry, strategy);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_IS_CONVEX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/is_empty.hpp b/contrib/restricted/boost/boost/geometry/algorithms/is_empty.hpp
deleted file mode 100644
index 8dab69c8799..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/is_empty.hpp
+++ /dev/null
@@ -1,207 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_IS_EMPTY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_IS_EMPTY_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace is_empty
-{
-
-struct always_not_empty
-{
- template <typename Geometry>
- static inline bool apply(Geometry const&)
- {
- return false;
- }
-};
-
-struct range_is_empty
-{
- template <typename Range>
- static inline bool apply(Range const& range)
- {
- return boost::empty(range);
- }
-};
-
-class polygon_is_empty
-{
- template <typename InteriorRings>
- static inline bool check_interior_rings(InteriorRings const& interior_rings)
- {
- return check_iterator_range
- <
- range_is_empty, true // allow empty range
- >::apply(boost::begin(interior_rings), boost::end(interior_rings));
- }
-
-public:
- template <typename Polygon>
- static inline bool apply(Polygon const& polygon)
- {
- return boost::empty(exterior_ring(polygon))
- && check_interior_rings(interior_rings(polygon));
- }
-};
-
-template <typename Policy = range_is_empty>
-struct multi_is_empty
-{
- template <typename MultiGeometry>
- static inline bool apply(MultiGeometry const& multigeometry)
- {
- return check_iterator_range
- <
- Policy, true // allow empty range
- >::apply(boost::begin(multigeometry), boost::end(multigeometry));
- }
-
-};
-
-}} // namespace detail::is_empty
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct is_empty : not_implemented<Tag>
-{};
-
-template <typename Geometry>
-struct is_empty<Geometry, point_tag>
- : detail::is_empty::always_not_empty
-{};
-
-template <typename Geometry>
-struct is_empty<Geometry, box_tag>
- : detail::is_empty::always_not_empty
-{};
-
-template <typename Geometry>
-struct is_empty<Geometry, segment_tag>
- : detail::is_empty::always_not_empty
-{};
-
-template <typename Geometry>
-struct is_empty<Geometry, linestring_tag>
- : detail::is_empty::range_is_empty
-{};
-
-template <typename Geometry>
-struct is_empty<Geometry, ring_tag>
- : detail::is_empty::range_is_empty
-{};
-
-template <typename Geometry>
-struct is_empty<Geometry, polygon_tag>
- : detail::is_empty::polygon_is_empty
-{};
-
-template <typename Geometry>
-struct is_empty<Geometry, multi_point_tag>
- : detail::is_empty::range_is_empty
-{};
-
-template <typename Geometry>
-struct is_empty<Geometry, multi_linestring_tag>
- : detail::is_empty::multi_is_empty<>
-{};
-
-template <typename Geometry>
-struct is_empty<Geometry, multi_polygon_tag>
- : detail::is_empty::multi_is_empty<detail::is_empty::polygon_is_empty>
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct is_empty
-{
- static inline bool apply(Geometry const& geometry)
- {
- concepts::check<Geometry const>();
-
- return dispatch::is_empty<Geometry>::apply(geometry);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct is_empty<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- struct visitor : boost::static_visitor<bool>
- {
- template <typename Geometry>
- inline bool operator()(Geometry const& geometry) const
- {
- return is_empty<Geometry>::apply(geometry);
- }
- };
-
- static bool
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry)
- {
- return boost::apply_visitor(visitor(), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_check{is the empty set}
-\ingroup is_empty
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_check{is the empty set}
-
-\qbk{[include reference/algorithms/is_empty.qbk]}
-*/
-template <typename Geometry>
-inline bool is_empty(Geometry const& geometry)
-{
- return resolve_variant::is_empty<Geometry>::apply(geometry);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_IS_EMPTY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/is_simple.hpp b/contrib/restricted/boost/boost/geometry/algorithms/is_simple.hpp
deleted file mode 100644
index f48c957dfc9..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/is_simple.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_IS_SIMPLE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_IS_SIMPLE_HPP
-
-#include <boost/geometry/algorithms/detail/is_simple/interface.hpp>
-#include <boost/geometry/algorithms/detail/is_simple/implementation.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_IS_SIMPLE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/is_valid.hpp b/contrib/restricted/boost/boost/geometry/algorithms/is_valid.hpp
deleted file mode 100644
index 24dc5f77371..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/is_valid.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_IS_VALID_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_IS_VALID_HPP
-
-#include <boost/geometry/algorithms/detail/is_valid/interface.hpp>
-#include <boost/geometry/algorithms/detail/is_valid/implementation.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_IS_VALID_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/length.hpp b/contrib/restricted/boost/boost/geometry/algorithms/length.hpp
deleted file mode 100644
index cfc46a07bdc..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/length.hpp
+++ /dev/null
@@ -1,318 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014, 2015.
-// Modifications copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_LENGTH_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_LENGTH_HPP
-
-#include <iterator>
-
-#include <boost/concept_check.hpp>
-#include <boost/core/ignore_unused.hpp>
-#include <boost/mpl/fold.hpp>
-#include <boost/mpl/greater.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/insert.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/set.hpp>
-#include <boost/mpl/size.hpp>
-#include <boost/mpl/transform.hpp>
-#include <boost/range/begin.hpp>
-#include <boost/range/end.hpp>
-#include <boost/range/iterator.hpp>
-#include <boost/range/value_type.hpp>
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/detail/calculate_null.hpp>
-#include <boost/geometry/algorithms/detail/multi_sum.hpp>
-// #include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
-#include <boost/geometry/views/closeable_view.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/default_length_result.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace length
-{
-
-
-template<typename Segment>
-struct segment_length
-{
- template <typename Strategy>
- static inline typename default_length_result<Segment>::type apply(
- Segment const& segment, Strategy const& strategy)
- {
- boost::ignore_unused(strategy);
- typedef typename point_type<Segment>::type point_type;
- point_type p1, p2;
- geometry::detail::assign_point_from_index<0>(segment, p1);
- geometry::detail::assign_point_from_index<1>(segment, p2);
- return strategy.apply(p1, p2);
- }
-};
-
-/*!
-\brief Internal, calculates length of a linestring using iterator pairs and
- specified strategy
-\note for_each could be used here, now that point_type is changed by boost
- range iterator
-*/
-template<typename Range, closure_selector Closure>
-struct range_length
-{
- typedef typename default_length_result<Range>::type return_type;
-
- template <typename Strategy>
- static inline return_type apply(
- Range const& range, Strategy const& strategy)
- {
- boost::ignore_unused(strategy);
- typedef typename closeable_view<Range const, Closure>::type view_type;
- typedef typename boost::range_iterator
- <
- view_type const
- >::type iterator_type;
-
- return_type sum = return_type();
- view_type view(range);
- iterator_type it = boost::begin(view), end = boost::end(view);
- if(it != end)
- {
- for(iterator_type previous = it++;
- it != end;
- ++previous, ++it)
- {
- // Add point-point distance using the return type belonging
- // to strategy
- sum += strategy.apply(*previous, *it);
- }
- }
-
- return sum;
- }
-};
-
-
-}} // namespace detail::length
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct length : detail::calculate_null
-{
- typedef typename default_length_result<Geometry>::type return_type;
-
- template <typename Strategy>
- static inline return_type apply(Geometry const& geometry, Strategy const& strategy)
- {
- return calculate_null::apply<return_type>(geometry, strategy);
- }
-};
-
-
-template <typename Geometry>
-struct length<Geometry, linestring_tag>
- : detail::length::range_length<Geometry, closed>
-{};
-
-
-// RING: length is currently 0; it might be argued that it is the "perimeter"
-
-
-template <typename Geometry>
-struct length<Geometry, segment_tag>
- : detail::length::segment_length<Geometry>
-{};
-
-
-template <typename MultiLinestring>
-struct length<MultiLinestring, multi_linestring_tag> : detail::multi_sum
-{
- template <typename Strategy>
- static inline typename default_length_result<MultiLinestring>::type
- apply(MultiLinestring const& multi, Strategy const& strategy)
- {
- return multi_sum::apply
- <
- typename default_length_result<MultiLinestring>::type,
- detail::length::range_length
- <
- typename boost::range_value<MultiLinestring>::type,
- closed // no need to close it explicitly
- >
- >(multi, strategy);
-
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy {
-
-struct length
-{
- template <typename Geometry, typename Strategy>
- static inline typename default_length_result<Geometry>::type
- apply(Geometry const& geometry, Strategy const& strategy)
- {
- return dispatch::length<Geometry>::apply(geometry, strategy);
- }
-
- template <typename Geometry>
- static inline typename default_length_result<Geometry>::type
- apply(Geometry const& geometry, default_strategy)
- {
- typedef typename strategy::distance::services::default_strategy
- <
- point_tag, point_tag, typename point_type<Geometry>::type
- >::type strategy_type;
-
- return dispatch::length<Geometry>::apply(geometry, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant {
-
-template <typename Geometry>
-struct length
-{
- template <typename Strategy>
- static inline typename default_length_result<Geometry>::type
- apply(Geometry const& geometry, Strategy const& strategy)
- {
- return resolve_strategy::length::apply(geometry, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct length<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- typedef typename default_length_result
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>
- >::type result_type;
-
- template <typename Strategy>
- struct visitor
- : static_visitor<result_type>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy)
- : m_strategy(strategy)
- {}
-
- template <typename Geometry>
- inline typename default_length_result<Geometry>::type
- operator()(Geometry const& geometry) const
- {
- return length<Geometry>::apply(geometry, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline result_type apply(
- variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- Strategy const& strategy
- )
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_calc{length}
-\ingroup length
-\details \details_calc{length, length (the sum of distances between consecutive points)}. \details_default_strategy
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_calc{length}
-
-\qbk{[include reference/algorithms/length.qbk]}
-\qbk{[length] [length_output]}
- */
-template<typename Geometry>
-inline typename default_length_result<Geometry>::type
-length(Geometry const& geometry)
-{
- concepts::check<Geometry const>();
-
- // detail::throw_on_empty_input(geometry);
-
- return resolve_variant::length<Geometry>::apply(geometry, default_strategy());
-}
-
-
-/*!
-\brief \brief_calc{length} \brief_strategy
-\ingroup length
-\details \details_calc{length, length (the sum of distances between consecutive points)} \brief_strategy. \details_strategy_reasons
-\tparam Geometry \tparam_geometry
-\tparam Strategy \tparam_strategy{distance}
-\param geometry \param_geometry
-\param strategy \param_strategy{distance}
-\return \return_calc{length}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/length.qbk]}
-\qbk{[length_with_strategy] [length_with_strategy_output]}
- */
-template<typename Geometry, typename Strategy>
-inline typename default_length_result<Geometry>::type
-length(Geometry const& geometry, Strategy const& strategy)
-{
- concepts::check<Geometry const>();
-
- // detail::throw_on_empty_input(geometry);
-
- return resolve_variant::length<Geometry>::apply(geometry, strategy);
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_LENGTH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/make.hpp b/contrib/restricted/boost/boost/geometry/algorithms/make.hpp
deleted file mode 100644
index 899d5489b73..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/make.hpp
+++ /dev/null
@@ -1,200 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_MAKE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_MAKE_HPP
-
-#include <boost/geometry/algorithms/assign.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace make
-{
-
-/*!
-\brief Construct a geometry
-\ingroup make
-\tparam Geometry \tparam_geometry
-\tparam Range \tparam_range_point
-\param range \param_range_point
-\return The constructed geometry, here: a linestring or a ring
-
-\qbk{distinguish, with a range}
-\qbk{
-[heading Example]
-[make_with_range] [make_with_range_output]
-
-[heading See also]
-\* [link geometry.reference.algorithms.assign.assign_points assign]
-}
- */
-template <typename Geometry, typename Range>
-inline Geometry make_points(Range const& range)
-{
- concepts::check<Geometry>();
-
- Geometry geometry;
- geometry::append(geometry, range);
- return geometry;
-}
-
-}} // namespace detail::make
-#endif // DOXYGEN_NO_DETAIL
-
-/*!
-\brief Construct a geometry
-\ingroup make
-\details
-\note It does not work with array-point types, like int[2]
-\tparam Geometry \tparam_geometry
-\tparam Type \tparam_numeric to specify the coordinates
-\param c1 \param_x
-\param c2 \param_y
-\return The constructed geometry, here: a 2D point
-
-\qbk{distinguish, 2 coordinate values}
-\qbk{
-[heading Example]
-[make_2d_point] [make_2d_point_output]
-
-[heading See also]
-\* [link geometry.reference.algorithms.assign.assign_values_3_2_coordinate_values assign]
-}
-*/
-template <typename Geometry, typename Type>
-inline Geometry make(Type const& c1, Type const& c2)
-{
- concepts::check<Geometry>();
-
- Geometry geometry;
- dispatch::assign
- <
- typename tag<Geometry>::type,
- Geometry,
- geometry::dimension<Geometry>::type::value
- >::apply(geometry, c1, c2);
- return geometry;
-}
-
-/*!
-\brief Construct a geometry
-\ingroup make
-\tparam Geometry \tparam_geometry
-\tparam Type \tparam_numeric to specify the coordinates
-\param c1 \param_x
-\param c2 \param_y
-\param c3 \param_z
-\return The constructed geometry, here: a 3D point
-
-\qbk{distinguish, 3 coordinate values}
-\qbk{
-[heading Example]
-[make_3d_point] [make_3d_point_output]
-
-[heading See also]
-\* [link geometry.reference.algorithms.assign.assign_values_4_3_coordinate_values assign]
-}
- */
-template <typename Geometry, typename Type>
-inline Geometry make(Type const& c1, Type const& c2, Type const& c3)
-{
- concepts::check<Geometry>();
-
- Geometry geometry;
- dispatch::assign
- <
- typename tag<Geometry>::type,
- Geometry,
- geometry::dimension<Geometry>::type::value
- >::apply(geometry, c1, c2, c3);
- return geometry;
-}
-
-template <typename Geometry, typename Type>
-inline Geometry make(Type const& c1, Type const& c2, Type const& c3, Type const& c4)
-{
- concepts::check<Geometry>();
-
- Geometry geometry;
- dispatch::assign
- <
- typename tag<Geometry>::type,
- Geometry,
- geometry::dimension<Geometry>::type::value
- >::apply(geometry, c1, c2, c3, c4);
- return geometry;
-}
-
-
-
-
-
-/*!
-\brief Construct a box with inverse infinite coordinates
-\ingroup make
-\details The make_inverse function initializes a 2D or 3D box with large coordinates, the
- min corner is very large, the max corner is very small. This is useful e.g. in combination
- with the expand function, to determine the bounding box of a series of geometries.
-\tparam Geometry \tparam_geometry
-\return The constructed geometry, here: a box
-
-\qbk{
-[heading Example]
-[make_inverse] [make_inverse_output]
-
-[heading See also]
-\* [link geometry.reference.algorithms.assign.assign_inverse assign_inverse]
-}
- */
-template <typename Geometry>
-inline Geometry make_inverse()
-{
- concepts::check<Geometry>();
-
- Geometry geometry;
- dispatch::assign_inverse
- <
- typename tag<Geometry>::type,
- Geometry
- >::apply(geometry);
- return geometry;
-}
-
-/*!
-\brief Construct a geometry with its coordinates initialized to zero
-\ingroup make
-\details The make_zero function initializes a 2D or 3D point or box with coordinates of zero
-\tparam Geometry \tparam_geometry
-\return The constructed and zero-initialized geometry
- */
-template <typename Geometry>
-inline Geometry make_zero()
-{
- concepts::check<Geometry>();
-
- Geometry geometry;
- dispatch::assign_zero
- <
- typename tag<Geometry>::type,
- Geometry
- >::apply(geometry);
- return geometry;
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_MAKE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/not_implemented.hpp b/contrib/restricted/boost/boost/geometry/algorithms/not_implemented.hpp
deleted file mode 100644
index 9c416074ed0..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/not_implemented.hpp
+++ /dev/null
@@ -1,131 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP
-
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/identity.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace info
-{
- struct UNRECOGNIZED_GEOMETRY_TYPE {};
- struct POINT {};
- struct LINESTRING {};
- struct POLYGON {};
- struct RING {};
- struct BOX {};
- struct SEGMENT {};
- struct MULTI_POINT {};
- struct MULTI_LINESTRING {};
- struct MULTI_POLYGON {};
- struct GEOMETRY_COLLECTION {};
- template <size_t D> struct DIMENSION {};
-}
-
-
-namespace nyi
-{
-
-
-struct not_implemented_tag {};
-
-template
-<
- typename Term1,
- typename Term2,
- typename Term3
->
-struct not_implemented_error
-{
-
-#ifndef BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD
-# define BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD false
-#endif
-
- BOOST_MPL_ASSERT_MSG
- (
- BOOST_GEOMETRY_IMPLEMENTATION_STATUS_BUILD,
- THIS_OPERATION_IS_NOT_OR_NOT_YET_IMPLEMENTED,
- (
- types<Term1, Term2, Term3>
- )
- );
-};
-
-template <typename Tag>
-struct tag_to_term
-{
- typedef Tag type;
-};
-
-template <> struct tag_to_term<geometry_not_recognized_tag> { typedef info::UNRECOGNIZED_GEOMETRY_TYPE type; };
-template <> struct tag_to_term<point_tag> { typedef info::POINT type; };
-template <> struct tag_to_term<linestring_tag> { typedef info::LINESTRING type; };
-template <> struct tag_to_term<polygon_tag> { typedef info::POLYGON type; };
-template <> struct tag_to_term<ring_tag> { typedef info::RING type; };
-template <> struct tag_to_term<box_tag> { typedef info::BOX type; };
-template <> struct tag_to_term<segment_tag> { typedef info::SEGMENT type; };
-template <> struct tag_to_term<multi_point_tag> { typedef info::MULTI_POINT type; };
-template <> struct tag_to_term<multi_linestring_tag> { typedef info::MULTI_LINESTRING type; };
-template <> struct tag_to_term<multi_polygon_tag> { typedef info::MULTI_POLYGON type; };
-template <> struct tag_to_term<geometry_collection_tag> { typedef info::GEOMETRY_COLLECTION type; };
-template <int D> struct tag_to_term<boost::mpl::int_<D> > { typedef info::DIMENSION<D> type; };
-
-
-}
-
-
-template
-<
- typename Term1 = void,
- typename Term2 = void,
- typename Term3 = void
->
-struct not_implemented
- : nyi::not_implemented_tag,
- nyi::not_implemented_error
- <
- typename boost::mpl::identity
- <
- typename nyi::tag_to_term<Term1>::type
- >::type,
- typename boost::mpl::identity
- <
- typename nyi::tag_to_term<Term2>::type
- >::type,
- typename boost::mpl::identity
- <
- typename nyi::tag_to_term<Term3>::type
- >::type
- >
-{};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_NOT_IMPLEMENTED_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/num_geometries.hpp b/contrib/restricted/boost/boost/geometry/algorithms/num_geometries.hpp
deleted file mode 100644
index e122241fea4..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/num_geometries.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_NUM_GEOMETRIES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_NUM_GEOMETRIES_HPP
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/detail/counting.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry,
- typename Tag = typename tag_cast
- <
- typename tag<Geometry>::type,
- single_tag,
- multi_tag
- >::type
->
-struct num_geometries: not_implemented<Tag>
-{};
-
-
-template <typename Geometry>
-struct num_geometries<Geometry, single_tag>
- : detail::counting::other_count<1>
-{};
-
-
-template <typename MultiGeometry>
-struct num_geometries<MultiGeometry, multi_tag>
-{
- static inline std::size_t apply(MultiGeometry const& multi_geometry)
- {
- return boost::size(multi_geometry);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct num_geometries
-{
- static inline std::size_t apply(Geometry const& geometry)
- {
- concepts::check<Geometry const>();
-
- return dispatch::num_geometries<Geometry>::apply(geometry);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct num_geometries<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- struct visitor: boost::static_visitor<std::size_t>
- {
- template <typename Geometry>
- inline std::size_t operator()(Geometry const& geometry) const
- {
- return num_geometries<Geometry>::apply(geometry);
- }
- };
-
- static inline std::size_t
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry)
- {
- return boost::apply_visitor(visitor(), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_calc{number of geometries}
-\ingroup num_geometries
-\details \details_calc{num_geometries, number of geometries}.
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_calc{number of geometries}
-
-\qbk{[include reference/algorithms/num_geometries.qbk]}
-*/
-template <typename Geometry>
-inline std::size_t num_geometries(Geometry const& geometry)
-{
- return resolve_variant::num_geometries<Geometry>::apply(geometry);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_NUM_GEOMETRIES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/num_interior_rings.hpp b/contrib/restricted/boost/boost/geometry/algorithms/num_interior_rings.hpp
deleted file mode 100644
index b7531a3dd00..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/num_interior_rings.hpp
+++ /dev/null
@@ -1,142 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_NUM_INTERIOR_RINGS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_NUM_INTERIOR_RINGS_HPP
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/core/interior_rings.hpp>
-
-#include <boost/geometry/algorithms/detail/counting.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct num_interior_rings
- : detail::counting::other_count<0>
-{};
-
-
-
-template <typename Polygon>
-struct num_interior_rings<Polygon, polygon_tag>
-{
- static inline std::size_t apply(Polygon const& polygon)
- {
- return boost::size(geometry::interior_rings(polygon));
- }
-
-};
-
-
-template <typename MultiPolygon>
-struct num_interior_rings<MultiPolygon, multi_polygon_tag>
- : detail::counting::multi_count
- <
- num_interior_rings
- <
- typename boost::range_value<MultiPolygon const>::type
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct num_interior_rings
-{
- static inline std::size_t apply(Geometry const& geometry)
- {
- concepts::check<Geometry const>();
-
- return dispatch::num_interior_rings<Geometry>::apply(geometry);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct num_interior_rings<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- struct visitor: boost::static_visitor<std::size_t>
- {
- template <typename Geometry>
- inline std::size_t operator()(Geometry const& geometry) const
- {
- return num_interior_rings<Geometry>::apply(geometry);
- }
- };
-
- static inline std::size_t
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry)
- {
- return boost::apply_visitor(visitor(), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_calc{number of interior rings}
-\ingroup num_interior_rings
-\details \details_calc{num_interior_rings, number of interior rings}.
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_calc{number of interior rings}
-
-\qbk{[include reference/algorithms/num_interior_rings.qbk]}
-
-\note Defined by OGC as "numInteriorRing". To be consistent with "numPoints"
- letter "s" is appended
-*/
-template <typename Geometry>
-inline std::size_t num_interior_rings(Geometry const& geometry)
-{
- return resolve_variant::num_interior_rings<Geometry>::apply(geometry);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_NUM_INTERIOR_RINGS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/num_points.hpp b/contrib/restricted/boost/boost/geometry/algorithms/num_points.hpp
deleted file mode 100644
index 9ef77f271d6..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/num_points.hpp
+++ /dev/null
@@ -1,211 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_NUM_POINTS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_NUM_POINTS_HPP
-
-#include <cstddef>
-
-#include <boost/mpl/size_t.hpp>
-
-#include <boost/range.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/algorithms/detail/counting.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-// Silence warning C4127: conditional expression is constant
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
-#endif
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace num_points
-{
-
-
-template <bool AddForOpen>
-struct range_count
-{
- template <typename Range>
- static inline std::size_t apply(Range const& range)
- {
- std::size_t n = boost::size(range);
- if (AddForOpen
- && n > 0
- && geometry::closure<Range>::value == open
- )
- {
- return n + 1;
- }
- return n;
- }
-};
-
-}} // namespace detail::num_points
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry,
- bool AddForOpen,
- typename Tag = typename tag_cast
- <
- typename tag<Geometry>::type, multi_tag
- >::type
->
-struct num_points: not_implemented<Tag>
-{};
-
-template <typename Geometry, bool AddForOpen>
-struct num_points<Geometry, AddForOpen, point_tag>
- : detail::counting::other_count<1>
-{};
-
-template <typename Geometry, bool AddForOpen>
-struct num_points<Geometry, AddForOpen, box_tag>
- : detail::counting::other_count<(1 << geometry::dimension<Geometry>::value)>
-{};
-
-template <typename Geometry, bool AddForOpen>
-struct num_points<Geometry, AddForOpen, segment_tag>
- : detail::counting::other_count<2>
-{};
-
-template <typename Geometry, bool AddForOpen>
-struct num_points<Geometry, AddForOpen, linestring_tag>
- : detail::num_points::range_count<AddForOpen>
-{};
-
-template <typename Geometry, bool AddForOpen>
-struct num_points<Geometry, AddForOpen, ring_tag>
- : detail::num_points::range_count<AddForOpen>
-{};
-
-template <typename Geometry, bool AddForOpen>
-struct num_points<Geometry, AddForOpen, polygon_tag>
- : detail::counting::polygon_count
- <
- detail::num_points::range_count<AddForOpen>
- >
-{};
-
-template <typename Geometry, bool AddForOpen>
-struct num_points<Geometry, AddForOpen, multi_tag>
- : detail::counting::multi_count
- <
- num_points<typename boost::range_value<Geometry>::type, AddForOpen>
- >
-{};
-
-} // namespace dispatch
-#endif
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct num_points
-{
- static inline std::size_t apply(Geometry const& geometry,
- bool add_for_open)
- {
- concepts::check<Geometry const>();
-
- return add_for_open
- ? dispatch::num_points<Geometry, true>::apply(geometry)
- : dispatch::num_points<Geometry, false>::apply(geometry);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct num_points<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- struct visitor: boost::static_visitor<std::size_t>
- {
- bool m_add_for_open;
-
- visitor(bool add_for_open): m_add_for_open(add_for_open) {}
-
- template <typename Geometry>
- inline std::size_t operator()(Geometry const& geometry) const
- {
- return num_points<Geometry>::apply(geometry, m_add_for_open);
- }
- };
-
- static inline std::size_t
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- bool add_for_open)
- {
- return boost::apply_visitor(visitor(add_for_open), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_calc{number of points}
-\ingroup num_points
-\details \details_calc{num_points, number of points}.
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\param add_for_open add one for open geometries (i.e. polygon types which are not closed)
-\return \return_calc{number of points}
-
-\qbk{[include reference/algorithms/num_points.qbk]}
-*/
-template <typename Geometry>
-inline std::size_t num_points(Geometry const& geometry, bool add_for_open = false)
-{
- return resolve_variant::num_points<Geometry>::apply(geometry, add_for_open);
-}
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_NUM_POINTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/num_segments.hpp b/contrib/restricted/boost/boost/geometry/algorithms/num_segments.hpp
deleted file mode 100644
index 86eb63fad54..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/num_segments.hpp
+++ /dev/null
@@ -1,204 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_NUM_SEGMENTS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_NUM_SEGMENTS_HPP
-
-#include <cstddef>
-
-#include <boost/mpl/size_t.hpp>
-#include <boost/mpl/times.hpp>
-
-#include <boost/range.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/algorithms/detail/counting.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace num_segments
-{
-
-
-struct range_count
-{
- template <typename Range>
- static inline std::size_t apply(Range const& range)
- {
- std::size_t n = boost::size(range);
- if ( n <= 1 )
- {
- return 0;
- }
-
- return
- geometry::closure<Range>::value == open
- ?
- n
- :
- static_cast<std::size_t>(n - 1);
- }
-};
-
-}} // namespace detail::num_segments
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct num_segments
- : not_implemented<Tag>
-{};
-
-template <typename Geometry>
-struct num_segments<Geometry, point_tag>
- : detail::counting::other_count<0>
-{};
-
-// the number of segments (1-dimensional faces) of the hypercube is
-// given by the formula: d * 2^(d-1), where d is the dimension of the
-// hypercube; see also:
-// http://en.wikipedia.org/wiki/Hypercube
-template <typename Geometry>
-struct num_segments<Geometry, box_tag>
- : detail::counting::other_count
- <
- geometry::dimension<Geometry>::value
- * (1 << (geometry::dimension<Geometry>::value - 1))
- >
-{};
-
-template <typename Geometry>
-struct num_segments<Geometry, segment_tag>
- : detail::counting::other_count<1>
-{};
-
-template <typename Geometry>
-struct num_segments<Geometry, linestring_tag>
- : detail::num_segments::range_count
-{};
-
-template <typename Geometry>
-struct num_segments<Geometry, ring_tag>
- : detail::num_segments::range_count
-{};
-
-template <typename Geometry>
-struct num_segments<Geometry, polygon_tag>
- : detail::counting::polygon_count<detail::num_segments::range_count>
-{};
-
-template <typename Geometry>
-struct num_segments<Geometry, multi_point_tag>
- : detail::counting::other_count<0>
-{};
-
-template <typename Geometry>
-struct num_segments<Geometry, multi_linestring_tag>
- : detail::counting::multi_count
- <
- num_segments< typename boost::range_value<Geometry>::type>
- >
-{};
-
-template <typename Geometry>
-struct num_segments<Geometry, multi_polygon_tag>
- : detail::counting::multi_count
- <
- num_segments< typename boost::range_value<Geometry>::type>
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-namespace resolve_variant
-{
-
-
-template <typename Geometry>
-struct num_segments
-{
- static inline std::size_t apply(Geometry const& geometry)
- {
- concepts::check<Geometry const>();
-
- return dispatch::num_segments<Geometry>::apply(geometry);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct num_segments<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- struct visitor: boost::static_visitor<std::size_t>
- {
- template <typename Geometry>
- inline std::size_t operator()(Geometry const& geometry) const
- {
- return num_segments<Geometry>::apply(geometry);
- }
- };
-
- static inline std::size_t
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry)
- {
- return boost::apply_visitor(visitor(), geometry);
- }
-};
-
-
-} // namespace resolve_variant
-
-
-
-/*!
-\brief \brief_calc{number of segments}
-\ingroup num_segments
-\details \details_calc{num_segments, number of segments}.
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_calc{number of segments}
-
-\qbk{[include reference/algorithms/num_segments.qbk]}
-*/
-template <typename Geometry>
-inline std::size_t num_segments(Geometry const& geometry)
-{
- return resolve_variant::num_segments<Geometry>::apply(geometry);
-}
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_NUM_SEGMENTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/overlaps.hpp b/contrib/restricted/boost/boost/geometry/algorithms/overlaps.hpp
deleted file mode 100644
index 869a85ca983..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/overlaps.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014, 2015, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_OVERLAPS_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_OVERLAPS_HPP
-
-
-#include <boost/geometry/algorithms/detail/overlaps/interface.hpp>
-#include <boost/geometry/algorithms/detail/overlaps/implementation.hpp>
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_OVERLAPS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/perimeter.hpp b/contrib/restricted/boost/boost/geometry/algorithms/perimeter.hpp
deleted file mode 100644
index 47b0649727c..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/perimeter.hpp
+++ /dev/null
@@ -1,229 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_PERIMETER_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_PERIMETER_HPP
-
-#include <boost/range/metafunctions.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/length.hpp>
-#include <boost/geometry/algorithms/detail/calculate_null.hpp>
-#include <boost/geometry/algorithms/detail/calculate_sum.hpp>
-#include <boost/geometry/algorithms/detail/multi_sum.hpp>
-// #include <boost/geometry/algorithms/detail/throw_on_empty_input.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/strategies/default_length_result.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-// Default perimeter is 0.0, specializations implement calculated values
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct perimeter : detail::calculate_null
-{
- typedef typename default_length_result<Geometry>::type return_type;
-
- template <typename Strategy>
- static inline return_type apply(Geometry const& geometry, Strategy const& strategy)
- {
- return calculate_null::apply<return_type>(geometry, strategy);
- }
-};
-
-template <typename Geometry>
-struct perimeter<Geometry, ring_tag>
- : detail::length::range_length
- <
- Geometry,
- closure<Geometry>::value
- >
-{};
-
-template <typename Polygon>
-struct perimeter<Polygon, polygon_tag> : detail::calculate_polygon_sum
-{
- typedef typename default_length_result<Polygon>::type return_type;
- typedef detail::length::range_length
- <
- typename ring_type<Polygon>::type,
- closure<Polygon>::value
- > policy;
-
- template <typename Strategy>
- static inline return_type apply(Polygon const& polygon, Strategy const& strategy)
- {
- return calculate_polygon_sum::apply<return_type, policy>(polygon, strategy);
- }
-};
-
-template <typename MultiPolygon>
-struct perimeter<MultiPolygon, multi_polygon_tag> : detail::multi_sum
-{
- typedef typename default_length_result<MultiPolygon>::type return_type;
-
- template <typename Strategy>
- static inline return_type apply(MultiPolygon const& multi, Strategy const& strategy)
- {
- return multi_sum::apply
- <
- return_type,
- perimeter<typename boost::range_value<MultiPolygon>::type>
- >(multi, strategy);
- }
-};
-
-
-// box,n-sphere: to be implemented
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy {
-
-struct perimeter
-{
- template <typename Geometry, typename Strategy>
- static inline typename default_length_result<Geometry>::type
- apply(Geometry const& geometry, Strategy const& strategy)
- {
- return dispatch::perimeter<Geometry>::apply(geometry, strategy);
- }
-
- template <typename Geometry>
- static inline typename default_length_result<Geometry>::type
- apply(Geometry const& geometry, default_strategy)
- {
- typedef typename strategy::distance::services::default_strategy
- <
- point_tag, point_tag, typename point_type<Geometry>::type
- >::type strategy_type;
-
- return dispatch::perimeter<Geometry>::apply(geometry, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant {
-
-template <typename Geometry>
-struct perimeter
-{
- template <typename Strategy>
- static inline typename default_length_result<Geometry>::type
- apply(Geometry const& geometry, Strategy const& strategy)
- {
- concepts::check<Geometry const>();
- return resolve_strategy::perimeter::apply(geometry, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct perimeter<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- typedef typename default_length_result
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>
- >::type result_type;
-
- template <typename Strategy>
- struct visitor: boost::static_visitor<result_type>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy): m_strategy(strategy) {}
-
- template <typename Geometry>
- typename default_length_result<Geometry>::type
- operator()(Geometry const& geometry) const
- {
- return perimeter<Geometry>::apply(geometry, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline result_type
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- Strategy const& strategy)
- {
- return boost::apply_visitor(visitor<Strategy>(strategy), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_calc{perimeter}
-\ingroup perimeter
-\details The function perimeter returns the perimeter of a geometry,
- using the default distance-calculation-strategy
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\return \return_calc{perimeter}
-
-\qbk{[include reference/algorithms/perimeter.qbk]}
- */
-template<typename Geometry>
-inline typename default_length_result<Geometry>::type perimeter(
- Geometry const& geometry)
-{
- // detail::throw_on_empty_input(geometry);
- return resolve_variant::perimeter<Geometry>::apply(geometry, default_strategy());
-}
-
-/*!
-\brief \brief_calc{perimeter} \brief_strategy
-\ingroup perimeter
-\details The function perimeter returns the perimeter of a geometry,
- using specified strategy
-\tparam Geometry \tparam_geometry
-\tparam Strategy \tparam_strategy{distance}
-\param geometry \param_geometry
-\param strategy strategy to be used for distance calculations.
-\return \return_calc{perimeter}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/perimeter.qbk]}
- */
-template<typename Geometry, typename Strategy>
-inline typename default_length_result<Geometry>::type perimeter(
- Geometry const& geometry, Strategy const& strategy)
-{
- // detail::throw_on_empty_input(geometry);
- return resolve_variant::perimeter<Geometry>::apply(geometry, strategy);
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_PERIMETER_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/point_on_surface.hpp b/contrib/restricted/boost/boost/geometry/algorithms/point_on_surface.hpp
deleted file mode 100644
index 3bd18d83dd0..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/point_on_surface.hpp
+++ /dev/null
@@ -1,365 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_POINT_ON_SURFACE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_POINT_ON_SURFACE_HPP
-
-
-#include <cstddef>
-
-#include <numeric>
-
-#include <boost/concept_check.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/detail/extreme_points.hpp>
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-
-#include <boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp>
-#include <boost/geometry/strategies/side.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace point_on_surface
-{
-
-template <typename CoordinateType, int Dimension>
-struct specific_coordinate_first
-{
- CoordinateType const m_value_to_be_first;
-
- inline specific_coordinate_first(CoordinateType value_to_be_skipped)
- : m_value_to_be_first(value_to_be_skipped)
- {}
-
- template <typename Point>
- inline bool operator()(Point const& lhs, Point const& rhs)
- {
- CoordinateType const lh = geometry::get<Dimension>(lhs);
- CoordinateType const rh = geometry::get<Dimension>(rhs);
-
- // If both lhs and rhs equal m_value_to_be_first,
- // we should handle conform if lh < rh = FALSE
- // The first condition meets that, keep it first
- if (geometry::math::equals(rh, m_value_to_be_first))
- {
- // Handle conform lh < -INF, which is always false
- return false;
- }
-
- if (geometry::math::equals(lh, m_value_to_be_first))
- {
- // Handle conform -INF < rh, which is always true
- return true;
- }
-
- return lh < rh;
- }
-};
-
-template <int Dimension, typename Collection, typename Value, typename Predicate>
-inline bool max_value(Collection const& collection, Value& the_max, Predicate const& predicate)
-{
- bool first = true;
- for (typename Collection::const_iterator it = collection.begin(); it != collection.end(); ++it)
- {
- if (! it->empty())
- {
- Value the_value = geometry::get<Dimension>(*std::max_element(it->begin(), it->end(), predicate));
- if (first || the_value > the_max)
- {
- the_max = the_value;
- first = false;
- }
- }
- }
- return ! first;
-}
-
-
-template <int Dimension, typename Value>
-struct select_below
-{
- Value m_value;
- inline select_below(Value const& v)
- : m_value(v)
- {}
-
- template <typename Intruder>
- inline bool operator()(Intruder const& intruder) const
- {
- if (intruder.empty())
- {
- return true;
- }
- Value max = geometry::get<Dimension>(*std::max_element(intruder.begin(), intruder.end(), detail::extreme_points::compare<Dimension>()));
- return geometry::math::equals(max, m_value) || max < m_value;
- }
-};
-
-template <int Dimension, typename Value>
-struct adapt_base
-{
- Value m_value;
- inline adapt_base(Value const& v)
- : m_value(v)
- {}
-
- template <typename Intruder>
- inline void operator()(Intruder& intruder) const
- {
- if (intruder.size() >= 3)
- {
- detail::extreme_points::move_along_vector<Dimension>(intruder, m_value);
- }
- }
-};
-
-template <int Dimension, typename Value>
-struct min_of_intruder
-{
- template <typename Intruder>
- inline bool operator()(Intruder const& lhs, Intruder const& rhs) const
- {
- Value lhs_min = geometry::get<Dimension>(*std::min_element(lhs.begin(), lhs.end(), detail::extreme_points::compare<Dimension>()));
- Value rhs_min = geometry::get<Dimension>(*std::min_element(rhs.begin(), rhs.end(), detail::extreme_points::compare<Dimension>()));
- return lhs_min < rhs_min;
- }
-};
-
-
-template <typename Point, typename P>
-inline void calculate_average(Point& point, std::vector<P> const& points)
-{
- typedef typename geometry::coordinate_type<Point>::type coordinate_type;
- typedef typename std::vector<P>::const_iterator iterator_type;
-
- coordinate_type x = 0;
- coordinate_type y = 0;
-
- iterator_type end = points.end();
- for ( iterator_type it = points.begin() ; it != end ; ++it)
- {
- x += geometry::get<0>(*it);
- y += geometry::get<1>(*it);
- }
-
- signed_size_type const count = points.size();
- geometry::set<0>(point, x / count);
- geometry::set<1>(point, y / count);
-}
-
-
-template <int Dimension, typename Extremes, typename Intruders, typename CoordinateType>
-inline void replace_extremes_for_self_tangencies(Extremes& extremes, Intruders& intruders, CoordinateType const& max_intruder)
-{
- // This function handles self-tangencies.
- // Self-tangencies use, as usual, the major part of code...
-
- // ___ e
- // /|\ \ .
- // / | \ \ .
- // / | \ \ .
- // / | \ \ .
- // / /\ | \ \ .
- // i2 i1
-
- // The picture above shows the extreme (outside, "e") and two intruders ("i1","i2")
- // Assume that "i1" is self-tangent with the extreme, in one point at the top
- // Now the "penultimate" value is searched, this is is the top of i2
- // Then everything including and below (this is "i2" here) is removed
- // Then the base of "i1" and of "e" is adapted to this penultimate value
- // It then looks like:
-
- // b ___ e
- // /|\ \ .
- // / | \ \ .
- // / | \ \ .
- // / | \ \ .
- // a c i1
-
- // Then intruders (here "i1" but there may be more) are sorted from left to right
- // Finally points "a","b" and "c" (in this order) are selected as a new triangle.
- // This triangle will have a centroid which is inside (assumed that intruders left segment
- // is not equal to extremes left segment, but that polygon would be invalid)
-
- // Find highest non-self tangent intrusion, if any
- CoordinateType penultimate_value;
- specific_coordinate_first<CoordinateType, Dimension> pu_compare(max_intruder);
- if (max_value<Dimension>(intruders, penultimate_value, pu_compare))
- {
- // Throw away all intrusions <= this value, and of the kept one set this as base.
- select_below<Dimension, CoordinateType> predicate(penultimate_value);
- intruders.erase
- (
- std::remove_if(boost::begin(intruders), boost::end(intruders), predicate),
- boost::end(intruders)
- );
- adapt_base<Dimension, CoordinateType> fe_predicate(penultimate_value);
- // Sort from left to right (or bottom to top if Dimension=0)
- std::for_each(boost::begin(intruders), boost::end(intruders), fe_predicate);
-
- // Also adapt base of extremes
- detail::extreme_points::move_along_vector<Dimension>(extremes, penultimate_value);
- }
- // Then sort in 1-Dim. Take first to calc centroid.
- std::sort(boost::begin(intruders), boost::end(intruders), min_of_intruder<1 - Dimension, CoordinateType>());
-
- Extremes triangle;
- triangle.reserve(3);
-
- // Make a triangle of first two points of extremes (the ramp, from left to right), and last point of first intruder (which goes from right to left)
- std::copy(extremes.begin(), extremes.begin() + 2, std::back_inserter(triangle));
- triangle.push_back(intruders.front().back());
-
- // (alternatively we could use the last two points of extremes, and first point of last intruder...):
- //// ALTERNATIVE: std::copy(extremes.rbegin(), extremes.rbegin() + 2, std::back_inserter(triangle));
- //// ALTERNATIVE: triangle.push_back(intruders.back().front());
-
- // Now replace extremes with this smaller subset, a triangle, such that centroid calculation will result in a point inside
- extremes = triangle;
-}
-
-template <int Dimension, typename Geometry, typename Point, typename SideStrategy>
-inline bool calculate_point_on_surface(Geometry const& geometry, Point& point,
- SideStrategy const& strategy)
-{
- typedef typename geometry::point_type<Geometry>::type point_type;
- typedef typename geometry::coordinate_type<Geometry>::type coordinate_type;
- std::vector<point_type> extremes;
-
- typedef std::vector<std::vector<point_type> > intruders_type;
- intruders_type intruders;
- geometry::extreme_points<Dimension>(geometry, extremes, intruders, strategy);
-
- if (extremes.size() < 3)
- {
- return false;
- }
-
- // If there are intruders, find the max.
- if (! intruders.empty())
- {
- coordinate_type max_intruder;
- detail::extreme_points::compare<Dimension> compare;
- if (max_value<Dimension>(intruders, max_intruder, compare))
- {
- coordinate_type max_extreme = geometry::get<Dimension>(*std::max_element(extremes.begin(), extremes.end(), detail::extreme_points::compare<Dimension>()));
- if (max_extreme > max_intruder)
- {
- detail::extreme_points::move_along_vector<Dimension>(extremes, max_intruder);
- }
- else
- {
- replace_extremes_for_self_tangencies<Dimension>(extremes, intruders, max_intruder);
- }
- }
- }
-
- // Now calculate the average/centroid of the (possibly adapted) extremes
- calculate_average(point, extremes);
-
- return true;
-}
-
-}} // namespace detail::point_on_surface
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief Assigns a Point guaranteed to lie on the surface of the Geometry
-\tparam Geometry geometry type. This also defines the type of the output point
-\param geometry Geometry to take point from
-\param point Point to assign
-\param strategy side strategy
- */
-template <typename Geometry, typename Point, typename SideStrategy>
-inline void point_on_surface(Geometry const& geometry, Point & point,
- SideStrategy const& strategy)
-{
- concepts::check<Point>();
- concepts::check<Geometry const>();
-
- // First try in Y-direction (which should always succeed for valid polygons)
- if (! detail::point_on_surface::calculate_point_on_surface<1>(geometry, point, strategy))
- {
- // For invalid polygons, we might try X-direction
- detail::point_on_surface::calculate_point_on_surface<0>(geometry, point, strategy);
- }
-}
-
-/*!
-\brief Assigns a Point guaranteed to lie on the surface of the Geometry
-\tparam Geometry geometry type. This also defines the type of the output point
-\param geometry Geometry to take point from
-\param point Point to assign
- */
-template <typename Geometry, typename Point>
-inline void point_on_surface(Geometry const& geometry, Point & point)
-{
- typedef typename strategy::side::services::default_strategy
- <
- typename cs_tag<Geometry>::type
- >::type strategy_type;
-
- point_on_surface(geometry, point, strategy_type());
-}
-
-
-/*!
-\brief Returns point guaranteed to lie on the surface of the Geometry
-\tparam Geometry geometry type. This also defines the type of the output point
-\param geometry Geometry to take point from
-\param strategy side strategy
-\return The Point guaranteed to lie on the surface of the Geometry
- */
-template<typename Geometry, typename SideStrategy>
-inline typename geometry::point_type<Geometry>::type
-return_point_on_surface(Geometry const& geometry, SideStrategy const& strategy)
-{
- typename geometry::point_type<Geometry>::type result;
- geometry::point_on_surface(geometry, result, strategy);
- return result;
-}
-
-/*!
-\brief Returns point guaranteed to lie on the surface of the Geometry
-\tparam Geometry geometry type. This also defines the type of the output point
-\param geometry Geometry to take point from
-\return The Point guaranteed to lie on the surface of the Geometry
- */
-template<typename Geometry>
-inline typename geometry::point_type<Geometry>::type
-return_point_on_surface(Geometry const& geometry)
-{
- typename geometry::point_type<Geometry>::type result;
- geometry::point_on_surface(geometry, result);
- return result;
-}
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_POINT_ON_SURFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/relate.hpp b/contrib/restricted/boost/boost/geometry/algorithms/relate.hpp
deleted file mode 100644
index 34733ec5962..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/relate.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_RELATE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_RELATE_HPP
-
-#include <boost/geometry/algorithms/detail/relate/interface.hpp>
-#include <boost/geometry/algorithms/detail/relate/implementation.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_RELATE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/relation.hpp b/contrib/restricted/boost/boost/geometry/algorithms/relation.hpp
deleted file mode 100644
index c3cf2f99f82..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/relation.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_RELATION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_RELATION_HPP
-
-#include <boost/geometry/algorithms/detail/relation/interface.hpp>
-#include <boost/geometry/algorithms/detail/relation/implementation.hpp>
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_RELATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/remove_spikes.hpp b/contrib/restricted/boost/boost/geometry/algorithms/remove_spikes.hpp
deleted file mode 100644
index 196b20c6a44..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/remove_spikes.hpp
+++ /dev/null
@@ -1,323 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_REMOVE_SPIKES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_REMOVE_SPIKES_HPP
-
-#include <deque>
-
-#include <boost/range.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp>
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-#include <boost/geometry/algorithms/clear.hpp>
-
-#include <boost/geometry/strategies/default_strategy.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-
-
-/*
-Remove spikes from a ring/polygon.
-Ring (having 8 vertices, including closing vertex)
-+------+
-| |
-| +--+
-| | ^this "spike" is removed, can be located outside/inside the ring
-+------+
-(the actualy determination if it is removed is done by a strategy)
-
-*/
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace remove_spikes
-{
-
-
-struct range_remove_spikes
-{
- template <typename Range, typename SideStrategy>
- static inline void apply(Range& range, SideStrategy const& strategy)
- {
- typedef typename point_type<Range>::type point_type;
-
- std::size_t n = boost::size(range);
- std::size_t const min_num_points = core_detail::closure::minimum_ring_size
- <
- geometry::closure<Range>::value
- >::value - 1; // subtract one: a polygon with only one spike should result into one point
- if (n < min_num_points)
- {
- return;
- }
-
- std::deque<point_type> cleaned;
- for (typename boost::range_iterator<Range const>::type it = boost::begin(range);
- it != boost::end(range); ++it)
- {
- // Add point
- cleaned.push_back(*it);
-
- while(cleaned.size() >= 3
- && detail::point_is_spike_or_equal(cleaned.back(),
- *(cleaned.end() - 3),
- *(cleaned.end() - 2),
- strategy))
- {
- // Remove pen-ultimate point causing the spike (or which was equal)
- cleaned.erase(cleaned.end() - 2);
- }
- }
-
- // For a closed-polygon, remove closing point, this makes checking first point(s) easier and consistent
- if ( BOOST_GEOMETRY_CONDITION(geometry::closure<Range>::value == geometry::closed) )
- {
- cleaned.pop_back();
- }
-
- bool found = false;
- do
- {
- found = false;
- // Check for spike in first point
- int const penultimate = 2;
- while(cleaned.size() >= 3
- && detail::point_is_spike_or_equal(cleaned.front(),
- *(cleaned.end() - penultimate),
- cleaned.back(),
- strategy))
- {
- cleaned.pop_back();
- found = true;
- }
- // Check for spike in second point
- while(cleaned.size() >= 3
- && detail::point_is_spike_or_equal(*(cleaned.begin() + 1),
- cleaned.back(),
- cleaned.front(),
- strategy))
- {
- cleaned.pop_front();
- found = true;
- }
- }
- while (found);
-
- if (cleaned.size() == 2)
- {
- // Ticket #9871: open polygon with only two points.
- // the second point forms, by definition, a spike
- cleaned.pop_back();
- }
-
- // Close if necessary
- if ( BOOST_GEOMETRY_CONDITION(geometry::closure<Range>::value == geometry::closed) )
- {
- cleaned.push_back(cleaned.front());
- }
-
- // Copy output
- geometry::clear(range);
- std::copy(cleaned.begin(), cleaned.end(), range::back_inserter(range));
- }
-};
-
-
-struct polygon_remove_spikes
-{
- template <typename Polygon, typename SideStrategy>
- static inline void apply(Polygon& polygon, SideStrategy const& strategy)
- {
- typedef range_remove_spikes per_range;
- per_range::apply(exterior_ring(polygon), strategy);
-
- typename interior_return_type<Polygon>::type
- rings = interior_rings(polygon);
-
- for (typename detail::interior_iterator<Polygon>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- per_range::apply(*it, strategy);
- }
- }
-};
-
-
-template <typename SingleVersion>
-struct multi_remove_spikes
-{
- template <typename MultiGeometry, typename SideStrategy>
- static inline void apply(MultiGeometry& multi, SideStrategy const& strategy)
- {
- for (typename boost::range_iterator<MultiGeometry>::type
- it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- SingleVersion::apply(*it, strategy);
- }
- }
-};
-
-
-}} // namespace detail::remove_spikes
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type
->
-struct remove_spikes
-{
- template <typename SideStrategy>
- static inline void apply(Geometry&, SideStrategy const&)
- {}
-};
-
-
-template <typename Ring>
-struct remove_spikes<Ring, ring_tag>
- : detail::remove_spikes::range_remove_spikes
-{};
-
-
-
-template <typename Polygon>
-struct remove_spikes<Polygon, polygon_tag>
- : detail::remove_spikes::polygon_remove_spikes
-{};
-
-
-template <typename MultiPolygon>
-struct remove_spikes<MultiPolygon, multi_polygon_tag>
- : detail::remove_spikes::multi_remove_spikes
- <
- detail::remove_spikes::polygon_remove_spikes
- >
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-namespace resolve_variant {
-
-template <typename Geometry>
-struct remove_spikes
-{
- template <typename Strategy>
- static void apply(Geometry& geometry, Strategy const& strategy)
- {
- concepts::check<Geometry>();
- dispatch::remove_spikes<Geometry>::apply(geometry, strategy);
- }
-
- static void apply(Geometry& geometry, geometry::default_strategy const&)
- {
- typedef typename strategy::side::services::default_strategy
- <
- typename cs_tag<Geometry>::type
- >::type side_strategy;
-
- apply(geometry, side_strategy());
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct remove_spikes<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Strategy>
- struct visitor: boost::static_visitor<void>
- {
- Strategy const& m_strategy;
-
- visitor(Strategy const& strategy) : m_strategy(strategy) {}
-
- template <typename Geometry>
- void operator()(Geometry& geometry) const
- {
- remove_spikes<Geometry>::apply(geometry, m_strategy);
- }
- };
-
- template <typename Strategy>
- static inline void apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Strategy>(strategy), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
- \ingroup remove_spikes
- \tparam Geometry geometry type
- \param geometry the geometry to make remove_spikes
-*/
-template <typename Geometry>
-inline void remove_spikes(Geometry& geometry)
-{
- resolve_variant::remove_spikes<Geometry>::apply(geometry, geometry::default_strategy());
-}
-
-/*!
- \ingroup remove_spikes
- \tparam Geometry geometry type
- \tparam Strategy side strategy type
- \param geometry the geometry to make remove_spikes
- \param strategy the side strategy used by the algorithm
-*/
-template <typename Geometry, typename Strategy>
-inline void remove_spikes(Geometry& geometry, Strategy const& strategy)
-{
- resolve_variant::remove_spikes<Geometry>::apply(geometry, strategy);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_REMOVE_SPIKES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/reverse.hpp b/contrib/restricted/boost/boost/geometry/algorithms/reverse.hpp
deleted file mode 100644
index dc7d2de42c1..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/reverse.hpp
+++ /dev/null
@@ -1,186 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_REVERSE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_REVERSE_HPP
-
-#include <algorithm>
-
-#include <boost/range.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-#include <boost/geometry/algorithms/detail/multi_modify.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace reverse
-{
-
-
-struct range_reverse
-{
- template <typename Range>
- static inline void apply(Range& range)
- {
- std::reverse(boost::begin(range), boost::end(range));
- }
-};
-
-
-struct polygon_reverse: private range_reverse
-{
- template <typename Polygon>
- static inline void apply(Polygon& polygon)
- {
- range_reverse::apply(exterior_ring(polygon));
-
- typename interior_return_type<Polygon>::type
- rings = interior_rings(polygon);
-
- for (typename detail::interior_iterator<Polygon>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- range_reverse::apply(*it);
- }
- }
-};
-
-
-}} // namespace detail::reverse
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct reverse
-{
- static inline void apply(Geometry&)
- {}
-};
-
-
-template <typename Ring>
-struct reverse<Ring, ring_tag>
- : detail::reverse::range_reverse
-{};
-
-
-template <typename LineString>
-struct reverse<LineString, linestring_tag>
- : detail::reverse::range_reverse
-{};
-
-
-template <typename Polygon>
-struct reverse<Polygon, polygon_tag>
- : detail::reverse::polygon_reverse
-{};
-
-
-template <typename Geometry>
-struct reverse<Geometry, multi_linestring_tag>
- : detail::multi_modify
- <
- Geometry,
- detail::reverse::range_reverse
- >
-{};
-
-
-template <typename Geometry>
-struct reverse<Geometry, multi_polygon_tag>
- : detail::multi_modify
- <
- Geometry,
- detail::reverse::polygon_reverse
- >
-{};
-
-
-
-} // namespace dispatch
-#endif
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct reverse
-{
- static void apply(Geometry& geometry)
- {
- concepts::check<Geometry>();
- dispatch::reverse<Geometry>::apply(geometry);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct reverse<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- struct visitor: boost::static_visitor<void>
- {
- template <typename Geometry>
- void operator()(Geometry& geometry) const
- {
- reverse<Geometry>::apply(geometry);
- }
- };
-
- static inline void apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& geometry)
- {
- boost::apply_visitor(visitor(), geometry);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief Reverses the points within a geometry
-\details Generic function to reverse a geometry. It resembles the std::reverse
- functionality, but it takes the geometry type into account. Only for a ring
- or for a linestring it is the same as the std::reverse.
-\ingroup reverse
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry which will be reversed
-
-\qbk{[include reference/algorithms/reverse.qbk]}
-*/
-template <typename Geometry>
-inline void reverse(Geometry& geometry)
-{
- resolve_variant::reverse<Geometry>::apply(geometry);
-}
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_REVERSE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/simplify.hpp b/contrib/restricted/boost/boost/geometry/algorithms/simplify.hpp
deleted file mode 100644
index 298f9c640aa..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/simplify.hpp
+++ /dev/null
@@ -1,690 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_SIMPLIFY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_SIMPLIFY_HPP
-
-#include <cstddef>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/range.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp>
-#include <boost/geometry/strategies/concepts/simplify_concept.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-
-#include <boost/geometry/algorithms/area.hpp>
-#include <boost/geometry/algorithms/clear.hpp>
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/algorithms/is_empty.hpp>
-#include <boost/geometry/algorithms/perimeter.hpp>
-
-#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace simplify
-{
-
-template <typename Range>
-inline bool is_degenerate(Range const& range)
-{
- return boost::size(range) == 2
- && detail::equals::equals_point_point(geometry::range::front(range),
- geometry::range::back(range));
-}
-
-struct simplify_range_insert
-{
- template<typename Range, typename Strategy, typename OutputIterator, typename Distance>
- static inline void apply(Range const& range, OutputIterator out,
- Distance const& max_distance, Strategy const& strategy)
- {
- boost::ignore_unused(strategy);
-
- if (is_degenerate(range))
- {
- std::copy(boost::begin(range), boost::begin(range) + 1, out);
- }
- else if (boost::size(range) <= 2 || max_distance < 0)
- {
- std::copy(boost::begin(range), boost::end(range), out);
- }
- else
- {
- strategy.apply(range, out, max_distance);
- }
- }
-};
-
-
-struct simplify_copy
-{
- template <typename RangeIn, typename RangeOut, typename Strategy, typename Distance>
- static inline void apply(RangeIn const& range, RangeOut& out,
- Distance const& , Strategy const& )
- {
- std::copy
- (
- boost::begin(range), boost::end(range),
- geometry::range::back_inserter(out)
- );
- }
-};
-
-
-template <std::size_t MinimumToUseStrategy>
-struct simplify_range
-{
- template <typename RangeIn, typename RangeOut, typename Strategy, typename Distance>
- static inline void apply(RangeIn const& range, RangeOut& out,
- Distance const& max_distance, Strategy const& strategy)
- {
- // For a RING:
- // Note that, especially if max_distance is too large,
- // the output ring might be self intersecting while the input ring is
- // not, although chances are low in normal polygons
-
- if (boost::size(range) <= MinimumToUseStrategy || max_distance < 0)
- {
- simplify_copy::apply(range, out, max_distance, strategy);
- }
- else
- {
- simplify_range_insert::apply
- (
- range, geometry::range::back_inserter(out), max_distance, strategy
- );
- }
-
- // Verify the two remaining points are equal. If so, remove one of them.
- // This can cause the output being under the minimum size
- if (is_degenerate(out))
- {
- range::resize(out, 1);
- }
- }
-};
-
-struct simplify_ring
-{
-private :
- template <typename Area>
- static inline int area_sign(Area const& area)
- {
- return area > 0 ? 1 : area < 0 ? -1 : 0;
- }
-
- template <typename Strategy, typename Ring>
- static std::size_t get_opposite(std::size_t index, Ring const& ring)
- {
- typename Strategy::distance_strategy_type distance_strategy;
-
- // Verify if it is NOT the case that all points are less than the
- // simplifying distance. If so, output is empty.
- typename Strategy::distance_type max_distance(-1);
-
- typename geometry::point_type<Ring>::type point = range::at(ring, index);
- std::size_t i = 0;
- for (typename boost::range_iterator<Ring const>::type
- it = boost::begin(ring); it != boost::end(ring); ++it, ++i)
- {
- // This actually is point-segment distance but will result
- // in point-point distance
- typename Strategy::distance_type dist = distance_strategy.apply(*it, point, point);
- if (dist > max_distance)
- {
- max_distance = dist;
- index = i;
- }
- }
- return index;
- }
-
-public :
- template <typename Ring, typename Strategy, typename Distance>
- static inline void apply(Ring const& ring, Ring& out,
- Distance const& max_distance, Strategy const& strategy)
- {
- std::size_t const size = boost::size(ring);
- if (size == 0)
- {
- return;
- }
-
- int const input_sign = area_sign(geometry::area(ring));
-
- std::set<std::size_t> visited_indexes;
-
- // Rotate it into a copied vector
- // (vector, because source type might not support rotation)
- // (duplicate end point will be simplified away)
- typedef typename geometry::point_type<Ring>::type point_type;
-
- std::vector<point_type> rotated(size);
-
- // Closing point (but it will not start here)
- std::size_t index = 0;
-
- // Iterate (usually one iteration is enough)
- for (std::size_t iteration = 0; iteration < 4u; iteration++)
- {
- // Always take the opposite. Opposite guarantees that no point
- // "halfway" is chosen, creating an artefact (very narrow triangle)
- // Iteration 0: opposite to closing point (1/2, = on convex hull)
- // (this will start simplification with that point
- // and its opposite ~0)
- // Iteration 1: move a quarter on that ring, then opposite to 1/4
- // (with its opposite 3/4)
- // Iteration 2: move an eight on that ring, then opposite (1/8)
- // Iteration 3: again move a quarter, then opposite (7/8)
- // So finally 8 "sides" of the ring have been examined (if it were
- // a semi-circle). Most probably, there are only 0 or 1 iterations.
- switch (iteration)
- {
- case 1 : index = (index + size / 4) % size; break;
- case 2 : index = (index + size / 8) % size; break;
- case 3 : index = (index + size / 4) % size; break;
- }
- index = get_opposite<Strategy>(index, ring);
-
- if (visited_indexes.count(index) > 0)
- {
- // Avoid trying the same starting point more than once
- continue;
- }
-
- std::rotate_copy(boost::begin(ring), range::pos(ring, index),
- boost::end(ring), rotated.begin());
-
- // Close the rotated copy
- rotated.push_back(range::at(ring, index));
-
- simplify_range<0>::apply(rotated, out, max_distance, strategy);
-
- // Verify that what was positive, stays positive (or goes to 0)
- // and what was negative stays negative (or goes to 0)
- int const output_sign = area_sign(geometry::area(out));
- if (output_sign == input_sign)
- {
- // Result is considered as satisfactory (usually this is the
- // first iteration - only for small rings, having a scale
- // similar to simplify_distance, next iterations are tried
- return;
- }
-
- // Original is simplified away. Possibly there is a solution
- // when another starting point is used
- geometry::clear(out);
-
- if (iteration == 0
- && geometry::perimeter(ring) < 3 * max_distance)
- {
- // Check if it is useful to iterate. A minimal triangle has a
- // perimeter of a bit more than 3 times the simplify distance
- return;
- }
-
- // Prepare next try
- visited_indexes.insert(index);
- rotated.resize(size);
- }
- }
-};
-
-
-struct simplify_polygon
-{
-private:
-
- template
- <
- typename IteratorIn,
- typename InteriorRingsOut,
- typename Distance,
- typename Strategy
- >
- static inline void iterate(IteratorIn begin, IteratorIn end,
- InteriorRingsOut& interior_rings_out,
- Distance const& max_distance, Strategy const& strategy)
- {
- typedef typename boost::range_value<InteriorRingsOut>::type single_type;
- for (IteratorIn it = begin; it != end; ++it)
- {
- single_type out;
- simplify_ring::apply(*it, out, max_distance, strategy);
- if (! geometry::is_empty(out))
- {
- range::push_back(interior_rings_out, out);
- }
- }
- }
-
- template
- <
- typename InteriorRingsIn,
- typename InteriorRingsOut,
- typename Distance,
- typename Strategy
- >
- static inline void apply_interior_rings(
- InteriorRingsIn const& interior_rings_in,
- InteriorRingsOut& interior_rings_out,
- Distance const& max_distance, Strategy const& strategy)
- {
- range::clear(interior_rings_out);
-
- iterate(
- boost::begin(interior_rings_in), boost::end(interior_rings_in),
- interior_rings_out,
- max_distance, strategy);
- }
-
-public:
- template <typename Polygon, typename Strategy, typename Distance>
- static inline void apply(Polygon const& poly_in, Polygon& poly_out,
- Distance const& max_distance, Strategy const& strategy)
- {
- // Note that if there are inner rings, and distance is too large,
- // they might intersect with the outer ring in the output,
- // while it didn't in the input.
- simplify_ring::apply(exterior_ring(poly_in), exterior_ring(poly_out),
- max_distance, strategy);
-
- apply_interior_rings(interior_rings(poly_in),
- interior_rings(poly_out), max_distance, strategy);
- }
-};
-
-
-template<typename Policy>
-struct simplify_multi
-{
- template <typename MultiGeometry, typename Strategy, typename Distance>
- static inline void apply(MultiGeometry const& multi, MultiGeometry& out,
- Distance const& max_distance, Strategy const& strategy)
- {
- range::clear(out);
-
- typedef typename boost::range_value<MultiGeometry>::type single_type;
-
- for (typename boost::range_iterator<MultiGeometry const>::type
- it = boost::begin(multi); it != boost::end(multi); ++it)
- {
- single_type single_out;
- Policy::apply(*it, single_out, max_distance, strategy);
- if (! geometry::is_empty(single_out))
- {
- range::push_back(out, single_out);
- }
- }
- }
-};
-
-
-}} // namespace detail::simplify
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type
->
-struct simplify: not_implemented<Tag>
-{};
-
-template <typename Point>
-struct simplify<Point, point_tag>
-{
- template <typename Distance, typename Strategy>
- static inline void apply(Point const& point, Point& out,
- Distance const& , Strategy const& )
- {
- geometry::convert(point, out);
- }
-};
-
-// Linestring, keep 2 points (unless those points are the same)
-template <typename Linestring>
-struct simplify<Linestring, linestring_tag>
- : detail::simplify::simplify_range<2>
-{};
-
-template <typename Ring>
-struct simplify<Ring, ring_tag>
- : detail::simplify::simplify_ring
-{};
-
-template <typename Polygon>
-struct simplify<Polygon, polygon_tag>
- : detail::simplify::simplify_polygon
-{};
-
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type
->
-struct simplify_insert: not_implemented<Tag>
-{};
-
-
-template <typename Linestring>
-struct simplify_insert<Linestring, linestring_tag>
- : detail::simplify::simplify_range_insert
-{};
-
-template <typename Ring>
-struct simplify_insert<Ring, ring_tag>
- : detail::simplify::simplify_range_insert
-{};
-
-template <typename MultiPoint>
-struct simplify<MultiPoint, multi_point_tag>
- : detail::simplify::simplify_copy
-{};
-
-
-template <typename MultiLinestring>
-struct simplify<MultiLinestring, multi_linestring_tag>
- : detail::simplify::simplify_multi<detail::simplify::simplify_range<2> >
-{};
-
-
-template <typename MultiPolygon>
-struct simplify<MultiPolygon, multi_polygon_tag>
- : detail::simplify::simplify_multi<detail::simplify::simplify_polygon>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy
-{
-
-struct simplify
-{
- template <typename Geometry, typename Distance, typename Strategy>
- static inline void apply(Geometry const& geometry,
- Geometry& out,
- Distance const& max_distance,
- Strategy const& strategy)
- {
- dispatch::simplify<Geometry>::apply(geometry, out, max_distance, strategy);
- }
-
- template <typename Geometry, typename Distance>
- static inline void apply(Geometry const& geometry,
- Geometry& out,
- Distance const& max_distance,
- default_strategy)
- {
- typedef typename point_type<Geometry>::type point_type;
-
- typedef typename strategy::distance::services::default_strategy
- <
- point_tag, segment_tag, point_type
- >::type ds_strategy_type;
-
- typedef strategy::simplify::douglas_peucker
- <
- point_type, ds_strategy_type
- > strategy_type;
-
- BOOST_CONCEPT_ASSERT(
- (concepts::SimplifyStrategy<strategy_type, point_type>)
- );
-
- apply(geometry, out, max_distance, strategy_type());
- }
-};
-
-struct simplify_insert
-{
- template
- <
- typename Geometry,
- typename OutputIterator,
- typename Distance,
- typename Strategy
- >
- static inline void apply(Geometry const& geometry,
- OutputIterator& out,
- Distance const& max_distance,
- Strategy const& strategy)
- {
- dispatch::simplify_insert<Geometry>::apply(geometry, out, max_distance, strategy);
- }
-
- template <typename Geometry, typename OutputIterator, typename Distance>
- static inline void apply(Geometry const& geometry,
- OutputIterator& out,
- Distance const& max_distance,
- default_strategy)
- {
- typedef typename point_type<Geometry>::type point_type;
-
- typedef typename strategy::distance::services::default_strategy
- <
- point_tag, segment_tag, point_type
- >::type ds_strategy_type;
-
- typedef strategy::simplify::douglas_peucker
- <
- point_type, ds_strategy_type
- > strategy_type;
-
- BOOST_CONCEPT_ASSERT(
- (concepts::SimplifyStrategy<strategy_type, point_type>)
- );
-
- apply(geometry, out, max_distance, strategy_type());
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant {
-
-template <typename Geometry>
-struct simplify
-{
- template <typename Distance, typename Strategy>
- static inline void apply(Geometry const& geometry,
- Geometry& out,
- Distance const& max_distance,
- Strategy const& strategy)
- {
- resolve_strategy::simplify::apply(geometry, out, max_distance, strategy);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct simplify<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Distance, typename Strategy>
- struct visitor: boost::static_visitor<void>
- {
- Distance const& m_max_distance;
- Strategy const& m_strategy;
-
- visitor(Distance const& max_distance, Strategy const& strategy)
- : m_max_distance(max_distance)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry>
- void operator()(Geometry const& geometry, Geometry& out) const
- {
- simplify<Geometry>::apply(geometry, out, m_max_distance, m_strategy);
- }
- };
-
- template <typename Distance, typename Strategy>
- static inline void
- apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>& out,
- Distance const& max_distance,
- Strategy const& strategy)
- {
- boost::apply_visitor(
- visitor<Distance, Strategy>(max_distance, strategy),
- geometry,
- out
- );
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief Simplify a geometry using a specified strategy
-\ingroup simplify
-\tparam Geometry \tparam_geometry
-\tparam Distance A numerical distance measure
-\tparam Strategy A type fulfilling a SimplifyStrategy concept
-\param strategy A strategy to calculate simplification
-\param geometry input geometry, to be simplified
-\param out output geometry, simplified version of the input geometry
-\param max_distance distance (in units of input coordinates) of a vertex
- to other segments to be removed
-\param strategy simplify strategy to be used for simplification, might
- include point-distance strategy
-
-\image html svg_simplify_country.png "The image below presents the simplified country"
-\qbk{distinguish,with strategy}
-*/
-template<typename Geometry, typename Distance, typename Strategy>
-inline void simplify(Geometry const& geometry, Geometry& out,
- Distance const& max_distance, Strategy const& strategy)
-{
- concepts::check<Geometry>();
-
- geometry::clear(out);
-
- resolve_variant::simplify<Geometry>::apply(geometry, out, max_distance, strategy);
-}
-
-
-
-
-/*!
-\brief Simplify a geometry
-\ingroup simplify
-\tparam Geometry \tparam_geometry
-\tparam Distance \tparam_numeric
-\note This version of simplify simplifies a geometry using the default
- strategy (Douglas Peucker),
-\param geometry input geometry, to be simplified
-\param out output geometry, simplified version of the input geometry
-\param max_distance distance (in units of input coordinates) of a vertex
- to other segments to be removed
-
-\qbk{[include reference/algorithms/simplify.qbk]}
- */
-template<typename Geometry, typename Distance>
-inline void simplify(Geometry const& geometry, Geometry& out,
- Distance const& max_distance)
-{
- concepts::check<Geometry>();
-
- geometry::simplify(geometry, out, max_distance, default_strategy());
-}
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace simplify
-{
-
-
-/*!
-\brief Simplify a geometry, using an output iterator
- and a specified strategy
-\ingroup simplify
-\tparam Geometry \tparam_geometry
-\param geometry input geometry, to be simplified
-\param out output iterator, outputs all simplified points
-\param max_distance distance (in units of input coordinates) of a vertex
- to other segments to be removed
-\param strategy simplify strategy to be used for simplification,
- might include point-distance strategy
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/simplify.qbk]}
-*/
-template<typename Geometry, typename OutputIterator, typename Distance, typename Strategy>
-inline void simplify_insert(Geometry const& geometry, OutputIterator out,
- Distance const& max_distance, Strategy const& strategy)
-{
- concepts::check<Geometry const>();
-
- resolve_strategy::simplify_insert::apply(geometry, out, max_distance, strategy);
-}
-
-/*!
-\brief Simplify a geometry, using an output iterator
-\ingroup simplify
-\tparam Geometry \tparam_geometry
-\param geometry input geometry, to be simplified
-\param out output iterator, outputs all simplified points
-\param max_distance distance (in units of input coordinates) of a vertex
- to other segments to be removed
-
-\qbk{[include reference/algorithms/simplify_insert.qbk]}
- */
-template<typename Geometry, typename OutputIterator, typename Distance>
-inline void simplify_insert(Geometry const& geometry, OutputIterator out,
- Distance const& max_distance)
-{
- // Concept: output point type = point type of input geometry
- concepts::check<Geometry const>();
- concepts::check<typename point_type<Geometry>::type>();
-
- simplify_insert(geometry, out, max_distance, default_strategy());
-}
-
-}} // namespace detail::simplify
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_SIMPLIFY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/sym_difference.hpp b/contrib/restricted/boost/boost/geometry/algorithms/sym_difference.hpp
deleted file mode 100644
index 725230cd5bb..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/sym_difference.hpp
+++ /dev/null
@@ -1,582 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015, 2017.
-// Modifications copyright (c) 2015-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_SYM_DIFFERENCE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_SYM_DIFFERENCE_HPP
-
-
-#include <algorithm>
-#include <iterator>
-#include <vector>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/intersection.hpp>
-#include <boost/geometry/algorithms/union.hpp>
-#include <boost/geometry/geometries/multi_polygon.hpp>
-#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/util/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace sym_difference
-{
-
-
-template <typename GeometryOut>
-struct compute_difference
-{
- template
- <
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename OutputIterator,
- typename Strategy
- >
- static inline OutputIterator apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- return geometry::dispatch::intersection_insert
- <
- Geometry1,
- Geometry2,
- GeometryOut,
- overlay_difference,
- geometry::detail::overlay::do_reverse
- <
- geometry::point_order<Geometry1>::value
- >::value,
- geometry::detail::overlay::do_reverse
- <
- geometry::point_order<Geometry2>::value, true
- >::value
- >::apply(geometry1, geometry2, robust_policy, out, strategy);
- }
-};
-
-
-
-template <typename GeometryOut, typename Geometry1, typename Geometry2>
-struct sym_difference_generic
-{
- template
- <
- typename RobustPolicy,
- typename OutputIterator,
- typename Strategy
- >
- static inline OutputIterator apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- out = compute_difference
- <
- GeometryOut
- >::apply(geometry1, geometry2, robust_policy, out, strategy);
-
- return compute_difference
- <
- GeometryOut
- >::apply(geometry2, geometry1, robust_policy, out, strategy);
- }
-};
-
-
-template <typename GeometryOut, typename Areal1, typename Areal2>
-struct sym_difference_areal_areal
-{
- template
- <
- typename RobustPolicy,
- typename OutputIterator,
- typename Strategy
- >
- static inline OutputIterator apply(Areal1 const& areal1,
- Areal2 const& areal2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- typedef geometry::model::multi_polygon
- <
- GeometryOut
- > helper_geometry_type;
-
- helper_geometry_type diff12, diff21;
-
- std::back_insert_iterator<helper_geometry_type> oit12(diff12);
- std::back_insert_iterator<helper_geometry_type> oit21(diff21);
-
- compute_difference
- <
- GeometryOut
- >::apply(areal1, areal2, robust_policy, oit12, strategy);
-
- compute_difference
- <
- GeometryOut
- >::apply(areal2, areal1, robust_policy, oit21, strategy);
-
- return geometry::dispatch::union_insert
- <
- helper_geometry_type,
- helper_geometry_type,
- GeometryOut
- >::apply(diff12, diff21, robust_policy, out, strategy);
- }
-};
-
-
-}} // namespace detail::sym_difference
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename GeometryOut,
- typename TagIn1 = typename geometry::tag_cast
- <
- typename tag<Geometry1>::type, areal_tag
- >::type,
- typename TagIn2 = typename geometry::tag_cast
- <
- typename tag<Geometry2>::type, areal_tag
- >::type,
- typename TagOut = typename geometry::tag<GeometryOut>::type
->
-struct sym_difference_insert
- : detail::sym_difference::sym_difference_generic
- <
- GeometryOut, Geometry1, Geometry2
- >
-{};
-
-
-template
-<
- typename Areal1,
- typename Areal2,
- typename GeometryOut,
- typename TagOut
->
-struct sym_difference_insert
- <
- Areal1, Areal2, GeometryOut,
- areal_tag, areal_tag, TagOut
- > : detail::sym_difference::sym_difference_areal_areal
- <
- GeometryOut, Areal1, Areal2
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace sym_difference
-{
-
-
-
-/*!
-\brief \brief_calc2{symmetric difference} \brief_strategy
-\ingroup sym_difference
-\details \details_calc2{symmetric difference, spatial set theoretic symmetric difference (XOR)}
- \brief_strategy. \details_insert{sym_difference}
-\tparam GeometryOut output geometry type, must be specified
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Strategy \tparam_strategy_overlay
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param out \param_out{difference}
-\param strategy \param_strategy{difference}
-\return \return_out
-
-\qbk{distinguish,with strategy}
-*/
-template
-<
- typename GeometryOut,
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename OutputIterator,
- typename Strategy
->
-inline OutputIterator sym_difference_insert(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
- concepts::check<GeometryOut>();
-
- return dispatch::sym_difference_insert
- <
- Geometry1, Geometry2, GeometryOut
- >::apply(geometry1, geometry2, robust_policy, out, strategy);
-}
-
-
-/*!
-\brief \brief_calc2{symmetric difference}
-\ingroup sym_difference
-\details \details_calc2{symmetric difference, spatial set theoretic symmetric difference (XOR)}
- \details_insert{sym_difference}
-\tparam GeometryOut output geometry type, must be specified
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param out \param_out{difference}
-\return \return_out
-
-*/
-template
-<
- typename GeometryOut,
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename OutputIterator
->
-inline OutputIterator sym_difference_insert(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy, OutputIterator out)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
- concepts::check<GeometryOut>();
-
- typedef typename strategy::intersection::services::default_strategy
- <
- typename cs_tag<GeometryOut>::type
- >::type strategy_type;
-
- return sym_difference_insert<GeometryOut>(geometry1, geometry2, robust_policy, out, strategy_type());
-}
-
-}} // namespace detail::sym_difference
-#endif // DOXYGEN_NO_DETAIL
-
-
-namespace resolve_strategy {
-
-struct sym_difference
-{
- template
- <
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename Collection,
- typename Strategy
- >
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- Collection & output_collection,
- Strategy const& strategy)
- {
- typedef typename boost::range_value<Collection>::type geometry_out;
-
- detail::sym_difference::sym_difference_insert<geometry_out>(
- geometry1, geometry2, robust_policy,
- range::back_inserter(output_collection),
- strategy);
- }
-
- template
- <
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename Collection
- >
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- Collection & output_collection,
- default_strategy)
- {
- typedef typename boost::range_value<Collection>::type geometry_out;
-
- detail::sym_difference::sym_difference_insert<geometry_out>(
- geometry1, geometry2, robust_policy,
- range::back_inserter(output_collection));
- }
-};
-
-} // resolve_strategy
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry1, typename Geometry2>
-struct sym_difference
-{
- template <typename Collection, typename Strategy>
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- {
- typedef typename geometry::rescale_overlay_policy_type
- <
- Geometry1,
- Geometry2
- >::type rescale_policy_type;
-
- rescale_policy_type robust_policy
- = geometry::get_rescale_policy<rescale_policy_type>(geometry1,
- geometry2);
-
- resolve_strategy::sym_difference::apply(geometry1, geometry2,
- robust_policy,
- output_collection,
- strategy);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct sym_difference<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename Collection, typename Strategy>
- struct visitor: static_visitor<>
- {
- Geometry2 const& m_geometry2;
- Collection& m_output_collection;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- : m_geometry2(geometry2)
- , m_output_collection(output_collection)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1>
- void operator()(Geometry1 const& geometry1) const
- {
- sym_difference
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, m_geometry2, m_output_collection, m_strategy);
- }
- };
-
- template <typename Collection, typename Strategy>
- static inline void
- apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Collection, Strategy>(geometry2,
- output_collection,
- strategy),
- geometry1);
- }
-};
-
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct sym_difference<Geometry1, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Collection, typename Strategy>
- struct visitor: static_visitor<>
- {
- Geometry1 const& m_geometry1;
- Collection& m_output_collection;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1,
- Collection& output_collection,
- Strategy const& strategy)
- : m_geometry1(geometry1)
- , m_output_collection(output_collection)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry2>
- void operator()(Geometry2 const& geometry2) const
- {
- sym_difference
- <
- Geometry1,
- Geometry2
- >::apply(m_geometry1, geometry2, m_output_collection, m_strategy);
- }
- };
-
- template <typename Collection, typename Strategy>
- static inline void
- apply(Geometry1 const& geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Collection, Strategy>(geometry1,
- output_collection,
- strategy),
- geometry2);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T1), BOOST_VARIANT_ENUM_PARAMS(typename T2)>
-struct sym_difference<variant<BOOST_VARIANT_ENUM_PARAMS(T1)>, variant<BOOST_VARIANT_ENUM_PARAMS(T2)> >
-{
- template <typename Collection, typename Strategy>
- struct visitor: static_visitor<>
- {
- Collection& m_output_collection;
- Strategy const& m_strategy;
-
- visitor(Collection& output_collection, Strategy const& strategy)
- : m_output_collection(output_collection)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1, typename Geometry2>
- void operator()(Geometry1 const& geometry1,
- Geometry2 const& geometry2) const
- {
- sym_difference
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, m_output_collection, m_strategy);
- }
- };
-
- template <typename Collection, typename Strategy>
- static inline void
- apply(variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Collection, Strategy>(output_collection,
- strategy),
- geometry1, geometry2);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief \brief_calc2{symmetric difference}
-\ingroup sym_difference
-\details \details_calc2{symmetric difference, spatial set theoretic symmetric difference (XOR)}.
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Collection output collection, either a multi-geometry,
- or a std::vector<Geometry> / std::deque<Geometry> etc
-\tparam Strategy \tparam_strategy{Sym_difference}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param output_collection the output collection
-\param strategy \param_strategy{sym_difference}
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/sym_difference.qbk]}
-*/
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Collection,
- typename Strategy
->
-inline void sym_difference(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
-{
- resolve_variant::sym_difference
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, output_collection, strategy);
-}
-
-
-/*!
-\brief \brief_calc2{symmetric difference}
-\ingroup sym_difference
-\details \details_calc2{symmetric difference, spatial set theoretic symmetric difference (XOR)}.
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Collection output collection, either a multi-geometry,
- or a std::vector<Geometry> / std::deque<Geometry> etc
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param output_collection the output collection
-
-\qbk{[include reference/algorithms/sym_difference.qbk]}
-*/
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Collection
->
-inline void sym_difference(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Collection& output_collection)
-{
- resolve_variant::sym_difference
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, output_collection, default_strategy());
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_SYM_DIFFERENCE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/touches.hpp b/contrib/restricted/boost/boost/geometry/algorithms/touches.hpp
deleted file mode 100644
index d358c3f20ee..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/touches.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_TOUCHES_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_TOUCHES_HPP
-
-
-#include <boost/geometry/algorithms/detail/touches/interface.hpp>
-#include <boost/geometry/algorithms/detail/touches/implementation.hpp>
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_TOUCHES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/transform.hpp b/contrib/restricted/boost/boost/geometry/algorithms/transform.hpp
deleted file mode 100644
index b514c1dacf6..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/transform.hpp
+++ /dev/null
@@ -1,480 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_TRANSFORM_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_TRANSFORM_HPP
-
-#include <cmath>
-#include <iterator>
-
-#include <boost/range.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/clear.hpp>
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/transform.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace transform
-{
-
-struct transform_point
-{
- template <typename Point1, typename Point2, typename Strategy>
- static inline bool apply(Point1 const& p1, Point2& p2,
- Strategy const& strategy)
- {
- return strategy.apply(p1, p2);
- }
-};
-
-
-struct transform_box
-{
- template <typename Box1, typename Box2, typename Strategy>
- static inline bool apply(Box1 const& b1, Box2& b2,
- Strategy const& strategy)
- {
- typedef typename point_type<Box1>::type point_type1;
- typedef typename point_type<Box2>::type point_type2;
-
- point_type1 lower_left, upper_right;
- geometry::detail::assign::assign_box_2d_corner<min_corner, min_corner>(
- b1, lower_left);
- geometry::detail::assign::assign_box_2d_corner<max_corner, max_corner>(
- b1, upper_right);
-
- point_type2 p1, p2;
- if (strategy.apply(lower_left, p1) && strategy.apply(upper_right, p2))
- {
- // Create a valid box and therefore swap if necessary
- typedef typename coordinate_type<point_type2>::type coordinate_type;
- coordinate_type x1 = geometry::get<0>(p1)
- , y1 = geometry::get<1>(p1)
- , x2 = geometry::get<0>(p2)
- , y2 = geometry::get<1>(p2);
-
- if (x1 > x2) { std::swap(x1, x2); }
- if (y1 > y2) { std::swap(y1, y2); }
-
- geometry::set<min_corner, 0>(b2, x1);
- geometry::set<min_corner, 1>(b2, y1);
- geometry::set<max_corner, 0>(b2, x2);
- geometry::set<max_corner, 1>(b2, y2);
-
- return true;
- }
- return false;
- }
-};
-
-struct transform_box_or_segment
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& source, Geometry2& target,
- Strategy const& strategy)
- {
- typedef typename point_type<Geometry1>::type point_type1;
- typedef typename point_type<Geometry2>::type point_type2;
-
- point_type1 source_point[2];
- geometry::detail::assign_point_from_index<0>(source, source_point[0]);
- geometry::detail::assign_point_from_index<1>(source, source_point[1]);
-
- point_type2 target_point[2];
- if (strategy.apply(source_point[0], target_point[0])
- && strategy.apply(source_point[1], target_point[1]))
- {
- geometry::detail::assign_point_to_index<0>(target_point[0], target);
- geometry::detail::assign_point_to_index<1>(target_point[1], target);
- return true;
- }
- return false;
- }
-};
-
-
-template
-<
- typename PointOut,
- typename OutputIterator,
- typename Range,
- typename Strategy
->
-inline bool transform_range_out(Range const& range,
- OutputIterator out, Strategy const& strategy)
-{
- PointOut point_out;
- for(typename boost::range_iterator<Range const>::type
- it = boost::begin(range);
- it != boost::end(range);
- ++it)
- {
- if (! transform_point::apply(*it, point_out, strategy))
- {
- return false;
- }
- *out++ = point_out;
- }
- return true;
-}
-
-
-struct transform_polygon
-{
- template <typename Polygon1, typename Polygon2, typename Strategy>
- static inline bool apply(Polygon1 const& poly1, Polygon2& poly2,
- Strategy const& strategy)
- {
- typedef typename point_type<Polygon2>::type point2_type;
-
- geometry::clear(poly2);
-
- if (!transform_range_out<point2_type>(geometry::exterior_ring(poly1),
- range::back_inserter(geometry::exterior_ring(poly2)), strategy))
- {
- return false;
- }
-
- // Note: here a resizeable container is assumed.
- traits::resize
- <
- typename boost::remove_reference
- <
- typename traits::interior_mutable_type<Polygon2>::type
- >::type
- >::apply(geometry::interior_rings(poly2),
- geometry::num_interior_rings(poly1));
-
- typename geometry::interior_return_type<Polygon1 const>::type
- rings1 = geometry::interior_rings(poly1);
- typename geometry::interior_return_type<Polygon2>::type
- rings2 = geometry::interior_rings(poly2);
-
- typename detail::interior_iterator<Polygon1 const>::type
- it1 = boost::begin(rings1);
- typename detail::interior_iterator<Polygon2>::type
- it2 = boost::begin(rings2);
- for ( ; it1 != boost::end(rings1); ++it1, ++it2)
- {
- if ( ! transform_range_out<point2_type>(*it1,
- range::back_inserter(*it2),
- strategy) )
- {
- return false;
- }
- }
-
- return true;
- }
-};
-
-
-template <typename Point1, typename Point2>
-struct select_strategy
-{
- typedef typename strategy::transform::services::default_strategy
- <
- typename cs_tag<Point1>::type,
- typename cs_tag<Point2>::type,
- typename coordinate_system<Point1>::type,
- typename coordinate_system<Point2>::type,
- dimension<Point1>::type::value,
- dimension<Point2>::type::value,
- typename point_type<Point1>::type,
- typename point_type<Point2>::type
- >::type type;
-};
-
-struct transform_range
-{
- template <typename Range1, typename Range2, typename Strategy>
- static inline bool apply(Range1 const& range1,
- Range2& range2, Strategy const& strategy)
- {
- typedef typename point_type<Range2>::type point_type;
-
- // Should NOT be done here!
- // geometry::clear(range2);
- return transform_range_out<point_type>(range1,
- range::back_inserter(range2), strategy);
- }
-};
-
-
-/*!
- \brief Is able to transform any multi-geometry, calling the single-version as policy
-*/
-template <typename Policy>
-struct transform_multi
-{
- template <typename Multi1, typename Multi2, typename S>
- static inline bool apply(Multi1 const& multi1, Multi2& multi2, S const& strategy)
- {
- traits::resize<Multi2>::apply(multi2, boost::size(multi1));
-
- typename boost::range_iterator<Multi1 const>::type it1
- = boost::begin(multi1);
- typename boost::range_iterator<Multi2>::type it2
- = boost::begin(multi2);
-
- for (; it1 != boost::end(multi1); ++it1, ++it2)
- {
- if (! Policy::apply(*it1, *it2, strategy))
- {
- return false;
- }
- }
-
- return true;
- }
-};
-
-
-}} // namespace detail::transform
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry1, typename Geometry2,
- typename Tag1 = typename tag_cast<typename tag<Geometry1>::type, multi_tag>::type,
- typename Tag2 = typename tag_cast<typename tag<Geometry2>::type, multi_tag>::type
->
-struct transform {};
-
-template <typename Point1, typename Point2>
-struct transform<Point1, Point2, point_tag, point_tag>
- : detail::transform::transform_point
-{
-};
-
-
-template <typename Linestring1, typename Linestring2>
-struct transform
- <
- Linestring1, Linestring2,
- linestring_tag, linestring_tag
- >
- : detail::transform::transform_range
-{
-};
-
-template <typename Range1, typename Range2>
-struct transform<Range1, Range2, ring_tag, ring_tag>
- : detail::transform::transform_range
-{
-};
-
-template <typename Polygon1, typename Polygon2>
-struct transform<Polygon1, Polygon2, polygon_tag, polygon_tag>
- : detail::transform::transform_polygon
-{
-};
-
-template <typename Box1, typename Box2>
-struct transform<Box1, Box2, box_tag, box_tag>
- : detail::transform::transform_box
-{
-};
-
-template <typename Segment1, typename Segment2>
-struct transform<Segment1, Segment2, segment_tag, segment_tag>
- : detail::transform::transform_box_or_segment
-{
-};
-
-template <typename Multi1, typename Multi2>
-struct transform
- <
- Multi1, Multi2,
- multi_tag, multi_tag
- >
- : detail::transform::transform_multi
- <
- dispatch::transform
- <
- typename boost::range_value<Multi1>::type,
- typename boost::range_value<Multi2>::type
- >
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-namespace resolve_strategy {
-
-struct transform
-{
- template <typename Geometry1, typename Geometry2, typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2& geometry2,
- Strategy const& strategy)
- {
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2>();
-
- return dispatch::transform<Geometry1, Geometry2>::apply(
- geometry1,
- geometry2,
- strategy
- );
- }
-
- template <typename Geometry1, typename Geometry2>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2& geometry2,
- default_strategy)
- {
- return apply(
- geometry1,
- geometry2,
- typename detail::transform::select_strategy<Geometry1, Geometry2>::type()
- );
- }
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant {
-
-template <typename Geometry1, typename Geometry2>
-struct transform
-{
- template <typename Strategy>
- static inline bool apply(Geometry1 const& geometry1,
- Geometry2& geometry2,
- Strategy const& strategy)
- {
- return resolve_strategy::transform::apply(
- geometry1,
- geometry2,
- strategy
- );
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct transform<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename Strategy>
- struct visitor: static_visitor<bool>
- {
- Geometry2& m_geometry2;
- Strategy const& m_strategy;
-
- visitor(Geometry2& geometry2, Strategy const& strategy)
- : m_geometry2(geometry2)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1>
- inline bool operator()(Geometry1 const& geometry1) const
- {
- return transform<Geometry1, Geometry2>::apply(
- geometry1,
- m_geometry2,
- m_strategy
- );
- }
- };
-
- template <typename Strategy>
- static inline bool apply(
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2& geometry2,
- Strategy const& strategy
- )
- {
- return boost::apply_visitor(visitor<Strategy>(geometry2, strategy), geometry1);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief Transforms from one geometry to another geometry \brief_strategy
-\ingroup transform
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Strategy strategy
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param strategy The strategy to be used for transformation
-\return True if the transformation could be done
-
-\qbk{distinguish,with strategy}
-
-\qbk{[include reference/algorithms/transform_with_strategy.qbk]}
- */
-template <typename Geometry1, typename Geometry2, typename Strategy>
-inline bool transform(Geometry1 const& geometry1, Geometry2& geometry2,
- Strategy const& strategy)
-{
- return resolve_variant::transform<Geometry1, Geometry2>
- ::apply(geometry1, geometry2, strategy);
-}
-
-
-/*!
-\brief Transforms from one geometry to another geometry using a strategy
-\ingroup transform
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\return True if the transformation could be done
-
-\qbk{[include reference/algorithms/transform.qbk]}
- */
-template <typename Geometry1, typename Geometry2>
-inline bool transform(Geometry1 const& geometry1, Geometry2& geometry2)
-{
- return geometry::transform(geometry1, geometry2, default_strategy());
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_TRANSFORM_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/union.hpp b/contrib/restricted/boost/boost/geometry/algorithms/union.hpp
deleted file mode 100644
index d3a2daf66ee..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/union.hpp
+++ /dev/null
@@ -1,537 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ALGORITHMS_UNION_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_UNION_HPP
-
-
-#include <boost/range/metafunctions.hpp>
-
-#include <boost/geometry/core/is_areal.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/reverse_dispatch.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/algorithms/detail/overlay/overlay.hpp>
-#include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/algorithms/detail/overlay/linear_linear.hpp>
-#include <boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry1, typename Geometry2, typename GeometryOut,
- typename TagIn1 = typename tag<Geometry1>::type,
- typename TagIn2 = typename tag<Geometry2>::type,
- typename TagOut = typename tag<GeometryOut>::type,
- bool Areal1 = geometry::is_areal<Geometry1>::value,
- bool Areal2 = geometry::is_areal<Geometry2>::value,
- bool ArealOut = geometry::is_areal<GeometryOut>::value,
- bool Reverse1 = detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
- bool Reverse2 = detail::overlay::do_reverse<geometry::point_order<Geometry2>::value>::value,
- bool ReverseOut = detail::overlay::do_reverse<geometry::point_order<GeometryOut>::value>::value,
- bool Reverse = geometry::reverse_dispatch<Geometry1, Geometry2>::type::value
->
-struct union_insert: not_implemented<TagIn1, TagIn2, TagOut>
-{};
-
-
-// If reversal is needed, perform it first
-
-template
-<
- typename Geometry1, typename Geometry2, typename GeometryOut,
- typename TagIn1, typename TagIn2, typename TagOut,
- bool Areal1, bool Areal2, bool ArealOut,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct union_insert
- <
- Geometry1, Geometry2, GeometryOut,
- TagIn1, TagIn2, TagOut,
- Areal1, Areal2, ArealOut,
- Reverse1, Reverse2, ReverseOut,
- true
- >: union_insert<Geometry2, Geometry1, GeometryOut>
-{
- template <typename RobustPolicy, typename OutputIterator, typename Strategy>
- static inline OutputIterator apply(Geometry1 const& g1,
- Geometry2 const& g2,
- RobustPolicy const& robust_policy,
- OutputIterator out,
- Strategy const& strategy)
- {
- return union_insert
- <
- Geometry2, Geometry1, GeometryOut
- >::apply(g2, g1, robust_policy, out, strategy);
- }
-};
-
-
-template
-<
- typename Geometry1, typename Geometry2, typename GeometryOut,
- typename TagIn1, typename TagIn2, typename TagOut,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct union_insert
- <
- Geometry1, Geometry2, GeometryOut,
- TagIn1, TagIn2, TagOut,
- true, true, true,
- Reverse1, Reverse2, ReverseOut,
- false
- > : detail::overlay::overlay
- <Geometry1, Geometry2, Reverse1, Reverse2, ReverseOut, GeometryOut, overlay_union>
-{};
-
-
-// dispatch for union of non-areal geometries
-template
-<
- typename Geometry1, typename Geometry2, typename GeometryOut,
- typename TagIn1, typename TagIn2, typename TagOut,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct union_insert
- <
- Geometry1, Geometry2, GeometryOut,
- TagIn1, TagIn2, TagOut,
- false, false, false,
- Reverse1, Reverse2, ReverseOut,
- false
- > : union_insert
- <
- Geometry1, Geometry2, GeometryOut,
- typename tag_cast<TagIn1, pointlike_tag, linear_tag>::type,
- typename tag_cast<TagIn2, pointlike_tag, linear_tag>::type,
- TagOut,
- false, false, false,
- Reverse1, Reverse2, ReverseOut,
- false
- >
-{};
-
-
-// dispatch for union of linear geometries
-template
-<
- typename Linear1, typename Linear2, typename LineStringOut,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct union_insert
- <
- Linear1, Linear2, LineStringOut,
- linear_tag, linear_tag, linestring_tag,
- false, false, false,
- Reverse1, Reverse2, ReverseOut,
- false
- > : detail::overlay::linear_linear_linestring
- <
- Linear1, Linear2, LineStringOut, overlay_union
- >
-{};
-
-
-// dispatch for point-like geometries
-template
-<
- typename PointLike1, typename PointLike2, typename PointOut,
- bool Reverse1, bool Reverse2, bool ReverseOut
->
-struct union_insert
- <
- PointLike1, PointLike2, PointOut,
- pointlike_tag, pointlike_tag, point_tag,
- false, false, false,
- Reverse1, Reverse2, ReverseOut,
- false
- > : detail::overlay::union_pointlike_pointlike_point
- <
- PointLike1, PointLike2, PointOut
- >
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace union_
-{
-
-/*!
-\brief_calc2{union}
-\ingroup union
-\details \details_calc2{union_insert, spatial set theoretic union}.
- \details_insert{union}
-\tparam GeometryOut output geometry type, must be specified
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam OutputIterator output iterator
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param out \param_out{union}
-\return \return_out
-*/
-template
-<
- typename GeometryOut,
- typename Geometry1,
- typename Geometry2,
- typename OutputIterator
->
-inline OutputIterator union_insert(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- OutputIterator out)
-{
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
- concepts::check<GeometryOut>();
-
- typedef typename geometry::rescale_overlay_policy_type
- <
- Geometry1,
- Geometry2
- >::type rescale_policy_type;
-
- typename strategy::intersection::services::default_strategy
- <
- typename cs_tag<GeometryOut>::type
- >::type strategy;
-
- rescale_policy_type robust_policy
- = geometry::get_rescale_policy<rescale_policy_type>(geometry1, geometry2);
-
- return dispatch::union_insert
- <
- Geometry1, Geometry2, GeometryOut
- >::apply(geometry1, geometry2, robust_policy, out, strategy);
-}
-
-
-}} // namespace detail::union_
-#endif // DOXYGEN_NO_DETAIL
-
-
-namespace resolve_strategy {
-
-struct union_
-{
- template
- <
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename Collection,
- typename Strategy
- >
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- Collection & output_collection,
- Strategy const& strategy)
- {
- typedef typename boost::range_value<Collection>::type geometry_out;
-
- dispatch::union_insert
- <
- Geometry1, Geometry2, geometry_out
- >::apply(geometry1, geometry2, robust_policy,
- range::back_inserter(output_collection),
- strategy);
- }
-
- template
- <
- typename Geometry1,
- typename Geometry2,
- typename RobustPolicy,
- typename Collection
- >
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- RobustPolicy const& robust_policy,
- Collection & output_collection,
- default_strategy)
- {
- typedef typename boost::range_value<Collection>::type geometry_out;
-
- typedef typename strategy::intersection::services::default_strategy
- <
- typename cs_tag<geometry_out>::type
- >::type strategy_type;
-
- dispatch::union_insert
- <
- Geometry1, Geometry2, geometry_out
- >::apply(geometry1, geometry2, robust_policy,
- range::back_inserter(output_collection),
- strategy_type());
- }
-};
-
-} // resolve_strategy
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry1, typename Geometry2>
-struct union_
-{
- template <typename Collection, typename Strategy>
- static inline void apply(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- {
- concepts::check<Geometry1 const>();
- concepts::check<Geometry2 const>();
- concepts::check<typename boost::range_value<Collection>::type>();
-
- typedef typename geometry::rescale_overlay_policy_type
- <
- Geometry1,
- Geometry2
- >::type rescale_policy_type;
-
- rescale_policy_type robust_policy
- = geometry::get_rescale_policy<rescale_policy_type>(geometry1,
- geometry2);
-
- resolve_strategy::union_::apply(geometry1, geometry2,
- robust_policy,
- output_collection,
- strategy);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Geometry2>
-struct union_<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Geometry2>
-{
- template <typename Collection, typename Strategy>
- struct visitor: static_visitor<>
- {
- Geometry2 const& m_geometry2;
- Collection& m_output_collection;
- Strategy const& m_strategy;
-
- visitor(Geometry2 const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- : m_geometry2(geometry2)
- , m_output_collection(output_collection)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1>
- void operator()(Geometry1 const& geometry1) const
- {
- union_
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, m_geometry2, m_output_collection, m_strategy);
- }
- };
-
- template <typename Collection, typename Strategy>
- static inline void
- apply(variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry1,
- Geometry2 const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Collection, Strategy>(geometry2,
- output_collection,
- strategy),
- geometry1);
- }
-};
-
-
-template <typename Geometry1, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct union_<Geometry1, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename Collection, typename Strategy>
- struct visitor: static_visitor<>
- {
- Geometry1 const& m_geometry1;
- Collection& m_output_collection;
- Strategy const& m_strategy;
-
- visitor(Geometry1 const& geometry1,
- Collection& output_collection,
- Strategy const& strategy)
- : m_geometry1(geometry1)
- , m_output_collection(output_collection)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry2>
- void operator()(Geometry2 const& geometry2) const
- {
- union_
- <
- Geometry1,
- Geometry2
- >::apply(m_geometry1, geometry2, m_output_collection, m_strategy);
- }
- };
-
- template <typename Collection, typename Strategy>
- static inline void
- apply(Geometry1 const& geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Collection, Strategy>(geometry1,
- output_collection,
- strategy),
- geometry2);
- }
-};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T1), BOOST_VARIANT_ENUM_PARAMS(typename T2)>
-struct union_<variant<BOOST_VARIANT_ENUM_PARAMS(T1)>, variant<BOOST_VARIANT_ENUM_PARAMS(T2)> >
-{
- template <typename Collection, typename Strategy>
- struct visitor: static_visitor<>
- {
- Collection& m_output_collection;
- Strategy const& m_strategy;
-
- visitor(Collection& output_collection, Strategy const& strategy)
- : m_output_collection(output_collection)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry1, typename Geometry2>
- void operator()(Geometry1 const& geometry1,
- Geometry2 const& geometry2) const
- {
- union_
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, m_output_collection, m_strategy);
- }
- };
-
- template <typename Collection, typename Strategy>
- static inline void
- apply(variant<BOOST_VARIANT_ENUM_PARAMS(T1)> const& geometry1,
- variant<BOOST_VARIANT_ENUM_PARAMS(T2)> const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
- {
- boost::apply_visitor(visitor<Collection, Strategy>(output_collection,
- strategy),
- geometry1, geometry2);
- }
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief Combines two geometries which each other
-\ingroup union
-\details \details_calc2{union, spatial set theoretic union}.
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Collection output collection, either a multi-geometry,
- or a std::vector<Geometry> / std::deque<Geometry> etc
-\tparam Strategy \tparam_strategy{Union_}
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param output_collection the output collection
-\param strategy \param_strategy{union_}
-\note Called union_ because union is a reserved word.
-
-\qbk{distinguish,with strategy}
-\qbk{[include reference/algorithms/union.qbk]}
-*/
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Collection,
- typename Strategy
->
-inline void union_(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Collection& output_collection,
- Strategy const& strategy)
-{
- resolve_variant::union_
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, output_collection, strategy);
-}
-
-
-/*!
-\brief Combines two geometries which each other
-\ingroup union
-\details \details_calc2{union, spatial set theoretic union}.
-\tparam Geometry1 \tparam_geometry
-\tparam Geometry2 \tparam_geometry
-\tparam Collection output collection, either a multi-geometry,
- or a std::vector<Geometry> / std::deque<Geometry> etc
-\param geometry1 \param_geometry
-\param geometry2 \param_geometry
-\param output_collection the output collection
-\note Called union_ because union is a reserved word.
-
-\qbk{[include reference/algorithms/union.qbk]}
-*/
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Collection
->
-inline void union_(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Collection& output_collection)
-{
- resolve_variant::union_
- <
- Geometry1,
- Geometry2
- >::apply(geometry1, geometry2, output_collection, default_strategy());
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_UNION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/unique.hpp b/contrib/restricted/boost/boost/geometry/algorithms/unique.hpp
deleted file mode 100644
index f57f4505ba1..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/unique.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_UNIQUE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_UNIQUE_HPP
-
-#include <algorithm>
-
-#include <boost/range.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/policies/compare.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace unique
-{
-
-
-struct range_unique
-{
- template <typename Range, typename ComparePolicy>
- static inline void apply(Range& range, ComparePolicy const& policy)
- {
- typename boost::range_iterator<Range>::type it
- = std::unique
- (
- boost::begin(range),
- boost::end(range),
- policy
- );
-
- traits::resize<Range>::apply(range, it - boost::begin(range));
- }
-};
-
-
-struct polygon_unique
-{
- template <typename Polygon, typename ComparePolicy>
- static inline void apply(Polygon& polygon, ComparePolicy const& policy)
- {
- range_unique::apply(exterior_ring(polygon), policy);
-
- typename interior_return_type<Polygon>::type
- rings = interior_rings(polygon);
-
- for (typename detail::interior_iterator<Polygon>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- range_unique::apply(*it, policy);
- }
- }
-};
-
-
-template <typename Policy>
-struct multi_unique
-{
- template <typename MultiGeometry, typename ComparePolicy>
- static inline void apply(MultiGeometry& multi, ComparePolicy const& compare)
- {
- for (typename boost::range_iterator<MultiGeometry>::type
- it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- Policy::apply(*it, compare);
- }
- }
-};
-
-
-}} // namespace detail::unique
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type
->
-struct unique
-{
- template <typename ComparePolicy>
- static inline void apply(Geometry&, ComparePolicy const& )
- {}
-};
-
-
-template <typename Ring>
-struct unique<Ring, ring_tag>
- : detail::unique::range_unique
-{};
-
-
-template <typename LineString>
-struct unique<LineString, linestring_tag>
- : detail::unique::range_unique
-{};
-
-
-template <typename Polygon>
-struct unique<Polygon, polygon_tag>
- : detail::unique::polygon_unique
-{};
-
-
-// For points, unique is not applicable and does nothing
-// (Note that it is not "spatially unique" but that it removes duplicate coordinates,
-// like std::unique does). Spatially unique is "dissolve" which can (or will be)
-// possible for multi-points as well, removing points at the same location.
-
-
-template <typename MultiLineString>
-struct unique<MultiLineString, multi_linestring_tag>
- : detail::unique::multi_unique<detail::unique::range_unique>
-{};
-
-
-template <typename MultiPolygon>
-struct unique<MultiPolygon, multi_polygon_tag>
- : detail::unique::multi_unique<detail::unique::polygon_unique>
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-/*!
-\brief \brief_calc{minimal set}
-\ingroup unique
-\details \details_calc{unique,minimal set (where duplicate consecutive points are removed)}.
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry which will be made unique
-
-\qbk{[include reference/algorithms/unique.qbk]}
-*/
-template <typename Geometry>
-inline void unique(Geometry& geometry)
-{
- concepts::check<Geometry>();
-
- // Default strategy is the default point-comparison policy
- typedef geometry::equal_to
- <
- typename geometry::point_type<Geometry>::type
- > policy;
-
-
- dispatch::unique<Geometry>::apply(geometry, policy());
-}
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_UNIQUE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/validity_failure_type.hpp b/contrib/restricted/boost/boost/geometry/algorithms/validity_failure_type.hpp
deleted file mode 100644
index 3fbf8027b4d..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/validity_failure_type.hpp
+++ /dev/null
@@ -1,90 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_VALIDITY_FAILURE_TYPE_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_VALIDITY_FAILURE_TYPE_HPP
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
-\brief Enumerates the possible validity failure types for a geometry
-\ingroup enum
-\details The enumeration validity_failure_type enumerates the possible
- reasons for which a geometry may be found as invalid by the
- is_valid algorithm.
- Besides the values that indicate invalidity, there is an
- additional value (no_failure) that indicates validity.
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.is_valid The is_valid
-algorithm taking a reference to validity_failure_type as second argument]
-}
-*/
-enum validity_failure_type
-{
- /// The geometry is valid
- ///
- no_failure = 0,
- /// The geometry has a very small number of points, e.g., less
- /// than 2 for linestrings, less than 3 for open rings, a closed
- /// multi-polygon that contains a polygon with less than 4 points, etc.
- /// (applies to linestrings, rings, polygons, multi-linestrings
- /// and multi-polygons)
- failure_few_points = 10,
- /// The topological dimension of the geometry is smaller than its
- /// dimension, e.g., a linestring with 3 identical points, an open
- /// polygon with an interior ring consisting of 3 collinear points, etc.
- /// (applies to linear and areal geometries, including segments
- /// and boxes)
- failure_wrong_topological_dimension = 11,
- /// The geometry contains spikes
- /// (applies to linear and areal geometries)
- failure_spikes = 12,
- /// The geometry has (consecutive) duplicate points
- /// (applies to areal geometries only)
- failure_duplicate_points = 13,
- /// The geometry is defined as closed, the starting/ending points
- /// are not equal
- /// (applies to areal geometries only)
- failure_not_closed = 20, // for areal geometries
- /// The geometry has invalid self-intersections.
- /// (applies to areal geometries only)
- failure_self_intersections = 21, // for areal geometries
- /// The actual orientation of the geometry is different from the one defined
- /// (applies to areal geometries only)
- failure_wrong_orientation = 22, // for areal geometries
- /// The geometry contains interior rings that lie outside the exterior ring
- /// (applies to polygons and multi-polygons only)
- failure_interior_rings_outside = 30, // for (multi-)polygons
- /// The geometry has nested interior rings
- /// (applies to polygons and multi-polygons only)
- failure_nested_interior_rings = 31, // for (multi-)polygons
- /// The interior of the geometry is disconnected
- /// (applies to polygons and multi-polygons only)
- failure_disconnected_interior = 32, // for (multi-)polygons
- /// The multi-polygon contains polygons whose interiors are not disjoint
- /// (applies to multi-polygons only)
- failure_intersecting_interiors = 40, // for multi-polygons
- /// The top-right corner of the box is lexicographically smaller
- /// than its bottom-left corner
- /// (applies to boxes only)
- failure_wrong_corner_order = 50, // for boxes
- /// The geometry has at least one point with an invalid coordinate
- /// (for example, the coordinate is a NaN)
- failure_invalid_coordinate = 60
-};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_VALIDITY_FAILURE_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/algorithms/within.hpp b/contrib/restricted/boost/boost/geometry/algorithms/within.hpp
deleted file mode 100644
index e657bbda24f..00000000000
--- a/contrib/restricted/boost/boost/geometry/algorithms/within.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013, 2014, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_WITHIN_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_WITHIN_HPP
-
-
-#include <boost/geometry/algorithms/detail/within/interface.hpp>
-#include <boost/geometry/algorithms/detail/within/implementation.hpp>
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_WITHIN_HPP
diff --git a/contrib/restricted/boost/boost/geometry/arithmetic/arithmetic.hpp b/contrib/restricted/boost/boost/geometry/arithmetic/arithmetic.hpp
deleted file mode 100644
index 3ab66b27f53..00000000000
--- a/contrib/restricted/boost/boost/geometry/arithmetic/arithmetic.hpp
+++ /dev/null
@@ -1,335 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ARITHMETIC_ARITHMETIC_HPP
-#define BOOST_GEOMETRY_ARITHMETIC_ARITHMETIC_HPP
-
-#include <functional>
-
-#include <boost/call_traits.hpp>
-#include <boost/concept/requires.hpp>
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-#include <boost/geometry/util/for_each_coordinate.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-template <typename Point>
-struct param
-{
- typedef typename boost::call_traits
- <
- typename coordinate_type<Point>::type
- >::param_type type;
-};
-
-
-template <typename Value, template <typename> class Function>
-struct value_operation
-{
- Value m_value;
-
- inline value_operation(Value const &value)
- : m_value(value)
- {}
-
- template <typename PointDst, std::size_t Index>
- inline void apply(PointDst& point_dst) const
- {
- set<Index>(point_dst,
- Function
- <
- typename geometry::select_most_precise
- <
- Value,
- typename geometry::coordinate_type<PointDst>::type
- >::type
- >()(get<Index>(point_dst), m_value));
- }
-};
-
-template <typename PointSrc, template <typename> class Function>
-struct point_operation
-{
- PointSrc const& m_point_src;
-
- inline point_operation(PointSrc const& point)
- : m_point_src(point)
- {}
-
- template <typename PointDst, std::size_t Index>
- inline void apply(PointDst& point_dst) const
- {
- set<Index>(point_dst,
- Function
- <
- typename geometry::select_most_precise
- <
- typename geometry::coordinate_type<PointSrc>::type,
- typename geometry::coordinate_type<PointDst>::type
- >::type
- >()(get<Index>(point_dst), get<Index>(m_point_src)));
- }
-};
-
-
-template <typename Value>
-struct value_assignment
-{
- Value m_value;
-
- inline value_assignment(Value const &value)
- : m_value(value)
- {}
-
- template <typename PointDst, std::size_t Index>
- inline void apply(PointDst& point_dst) const
- {
- set<Index>(point_dst, m_value);
- }
-};
-
-template <typename PointSrc>
-struct point_assignment
-{
- PointSrc const& m_point_src;
-
- inline point_assignment(PointSrc const& point)
- : m_point_src(point)
- {}
-
- template <typename PointDst, std::size_t Index>
- inline void apply(PointDst& point_dst) const
- {
- set<Index>(point_dst, get<Index>(m_point_src));
- }
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-/*!
- \brief Adds the same value to each coordinate of a point
- \ingroup arithmetic
- \details
- \tparam Point \tparam_point
- \param p point
- \param value value to add
- */
-template <typename Point>
-inline void add_value(Point& p, typename detail::param<Point>::type value)
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
-
- for_each_coordinate(p,
- detail::value_operation
- <
- typename coordinate_type<Point>::type,
- std::plus
- >(value));
-}
-
-/*!
- \brief Adds a point to another
- \ingroup arithmetic
- \details The coordinates of the second point will be added to those of the first point.
- The second point is not modified.
- \tparam Point1 \tparam_point
- \tparam Point2 \tparam_point
- \param p1 first point
- \param p2 second point
- */
-template <typename Point1, typename Point2>
-inline void add_point(Point1& p1, Point2 const& p2)
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point1>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point2>) );
-
- for_each_coordinate(p1, detail::point_operation<Point2, std::plus>(p2));
-}
-
-/*!
- \brief Subtracts the same value to each coordinate of a point
- \ingroup arithmetic
- \details
- \tparam Point \tparam_point
- \param p point
- \param value value to subtract
- */
-template <typename Point>
-inline void subtract_value(Point& p, typename detail::param<Point>::type value)
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
-
- for_each_coordinate(p,
- detail::value_operation
- <
- typename coordinate_type<Point>::type,
- std::minus
- >(value));
-}
-
-/*!
- \brief Subtracts a point to another
- \ingroup arithmetic
- \details The coordinates of the second point will be subtracted to those of the first point.
- The second point is not modified.
- \tparam Point1 \tparam_point
- \tparam Point2 \tparam_point
- \param p1 first point
- \param p2 second point
- */
-template <typename Point1, typename Point2>
-inline void subtract_point(Point1& p1, Point2 const& p2)
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point1>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point2>) );
-
- for_each_coordinate(p1, detail::point_operation<Point2, std::minus>(p2));
-}
-
-/*!
- \brief Multiplies each coordinate of a point by the same value
- \ingroup arithmetic
- \details
- \tparam Point \tparam_point
- \param p point
- \param value value to multiply by
- */
-template <typename Point>
-inline void multiply_value(Point& p, typename detail::param<Point>::type value)
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
-
- for_each_coordinate(p,
- detail::value_operation
- <
- typename coordinate_type<Point>::type,
- std::multiplies
- >(value));
-}
-
-/*!
- \brief Multiplies a point by another
- \ingroup arithmetic
- \details The coordinates of the first point will be multiplied by those of the second point.
- The second point is not modified.
- \tparam Point1 \tparam_point
- \tparam Point2 \tparam_point
- \param p1 first point
- \param p2 second point
- \note This is *not* a dot, cross or wedge product. It is a mere field-by-field multiplication.
- */
-template <typename Point1, typename Point2>
-inline void multiply_point(Point1& p1, Point2 const& p2)
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point1>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point2>) );
-
- for_each_coordinate(p1, detail::point_operation<Point2, std::multiplies>(p2));
-}
-
-/*!
- \brief Divides each coordinate of the same point by a value
- \ingroup arithmetic
- \details
- \tparam Point \tparam_point
- \param p point
- \param value value to divide by
- */
-template <typename Point>
-inline void divide_value(Point& p, typename detail::param<Point>::type value)
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
-
- for_each_coordinate(p,
- detail::value_operation
- <
- typename coordinate_type<Point>::type,
- std::divides
- >(value));
-}
-
-/*!
- \brief Divides a point by another
- \ingroup arithmetic
- \details The coordinates of the first point will be divided by those of the second point.
- The second point is not modified.
- \tparam Point1 \tparam_point
- \tparam Point2 \tparam_point
- \param p1 first point
- \param p2 second point
- */
-template <typename Point1, typename Point2>
-inline void divide_point(Point1& p1, Point2 const& p2)
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point1>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point2>) );
-
- for_each_coordinate(p1, detail::point_operation<Point2, std::divides>(p2));
-}
-
-/*!
- \brief Assign each coordinate of a point the same value
- \ingroup arithmetic
- \details
- \tparam Point \tparam_point
- \param p point
- \param value value to assign
- */
-template <typename Point>
-inline void assign_value(Point& p, typename detail::param<Point>::type value)
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
-
- for_each_coordinate(p,
- detail::value_assignment
- <
- typename coordinate_type<Point>::type
- >(value));
-}
-
-/*!
- \brief Assign a point with another
- \ingroup arithmetic
- \details The coordinates of the first point will be assigned those of the second point.
- The second point is not modified.
- \tparam Point1 \tparam_point
- \tparam Point2 \tparam_point
- \param p1 first point
- \param p2 second point
- */
-template <typename Point1, typename Point2>
-inline void assign_point(Point1& p1, Point2 const& p2)
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point1>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point2>) );
-
- for_each_coordinate(p1, detail::point_assignment<Point2>(p2));
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ARITHMETIC_ARITHMETIC_HPP
diff --git a/contrib/restricted/boost/boost/geometry/arithmetic/cross_product.hpp b/contrib/restricted/boost/boost/geometry/arithmetic/cross_product.hpp
deleted file mode 100644
index 485c2123b67..00000000000
--- a/contrib/restricted/boost/boost/geometry/arithmetic/cross_product.hpp
+++ /dev/null
@@ -1,128 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-
-// This file was modified by Oracle on 2016.
-// Modifications copyright (c) 2016, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ARITHMETIC_CROSS_PRODUCT_HPP
-#define BOOST_GEOMETRY_ARITHMETIC_CROSS_PRODUCT_HPP
-
-
-#include <cstddef>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/size_t.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <std::size_t Dimension>
-struct cross_product
-{
- // We define cross product only for 2d (see Wolfram) and 3d.
- // In Math, it is also well-defined for 7-dimension.
- // Generalisation of cross product to n-dimension is defined as
- // wedge product but it is not direct analogue to binary cross product.
- BOOST_MPL_ASSERT_MSG((false),
- NOT_IMPLEMENTED_FOR_THIS_DIMENSION,
- (mpl::size_t<Dimension>));
-};
-
-template <>
-struct cross_product<2>
-{
- template <typename P1, typename P2, typename ResultP>
- static inline void apply(P1 const& p1, P2 const& p2, ResultP& result)
- {
- assert_dimension<P1, 2>();
- assert_dimension<P2, 2>();
- assert_dimension<ResultP, 2>();
-
- // For 2-dimensions, analog of the cross product U(x,y) and V(x,y) is
- // Ux * Vy - Uy * Vx
- // which is returned as 0-component (or X) of 2d vector, 1-component is undefined.
- set<0>(result, get<0>(p1) * get<1>(p2) - get<1>(p1) * get<0>(p2));
- }
-};
-
-template <>
-struct cross_product<3>
-{
- template <typename P1, typename P2, typename ResultP>
- static inline void apply(P1 const& p1, P2 const& p2, ResultP& result)
- {
- assert_dimension<P1, 3>();
- assert_dimension<P2, 3>();
- assert_dimension<ResultP, 3>();
-
- set<0>(result, get<1>(p1) * get<2>(p2) - get<2>(p1) * get<1>(p2));
- set<1>(result, get<2>(p1) * get<0>(p2) - get<0>(p1) * get<2>(p2));
- set<2>(result, get<0>(p1) * get<1>(p2) - get<1>(p1) * get<0>(p2));
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief Computes the cross product of two vectors.
-\details All vectors should have the same dimension, 3 or 2.
-\ingroup arithmetic
-\param p1 first vector
-\param p2 second vector
-\return the cross product vector
- */
-template <typename ResultP, typename P1, typename P2>
-inline ResultP cross_product(P1 const& p1, P2 const& p2)
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<ResultP>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<P1>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<P2>) );
-
- ResultP result;
- detail::cross_product<dimension<ResultP>::value>::apply(p1, p2, result);
- return result;
-}
-
-/*!
-\brief Computes the cross product of two vectors.
-\details All vectors should have the same dimension, 3 or 2.
-\ingroup arithmetic
-\param p1 first vector
-\param p2 second vector
-\return the cross product vector
-*/
-template <typename P>
-inline P cross_product(P const& p1, P const& p2)
-{
- BOOST_CONCEPT_ASSERT((concepts::Point<P>));
- BOOST_CONCEPT_ASSERT((concepts::ConstPoint<P>));
-
- P result;
- detail::cross_product<dimension<P>::value>::apply(p1, p2, result);
- return result;
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ARITHMETIC_CROSS_PRODUCT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/arithmetic/determinant.hpp b/contrib/restricted/boost/boost/geometry/arithmetic/determinant.hpp
deleted file mode 100644
index 59c596b1246..00000000000
--- a/contrib/restricted/boost/boost/geometry/arithmetic/determinant.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-
-// 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 BOOST_GEOMETRY_ARITHMETIC_DETERMINANT_HPP
-#define BOOST_GEOMETRY_ARITHMETIC_DETERMINANT_HPP
-
-
-#include <cstddef>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename ReturnType, typename U, typename V>
-class calculate_determinant
-{
- template <typename T>
- static inline ReturnType rt(T const& v)
- {
- return boost::numeric_cast<ReturnType>(v);
- }
-
-public :
-
- static inline ReturnType apply(U const& ux, U const& uy
- , V const& vx, V const& vy)
- {
- return rt(ux) * rt(vy) - rt(uy) * rt(vx);
- }
-};
-
-template <typename ReturnType, typename U, typename V>
-inline ReturnType determinant(U const& ux, U const& uy
- , V const& vx, V const& vy)
-{
- return calculate_determinant
- <
- ReturnType, U, V
- >::apply(ux, uy, vx, vy);
-}
-
-
-template <typename ReturnType, typename U, typename V>
-inline ReturnType determinant(U const& u, V const& v)
-{
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<U>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<V>) );
-
- return calculate_determinant
- <
- ReturnType,
- typename geometry::coordinate_type<U>::type,
- typename geometry::coordinate_type<V>::type
- >::apply(get<0>(u), get<1>(u), get<0>(v), get<1>(v));
-}
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ARITHMETIC_DETERMINANT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/arithmetic/dot_product.hpp b/contrib/restricted/boost/boost/geometry/arithmetic/dot_product.hpp
deleted file mode 100644
index 747bd01ab05..00000000000
--- a/contrib/restricted/boost/boost/geometry/arithmetic/dot_product.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ARITHMETIC_DOT_PRODUCT_HPP
-#define BOOST_GEOMETRY_ARITHMETIC_DOT_PRODUCT_HPP
-
-
-#include <cstddef>
-
-#include <boost/concept/requires.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename P1, typename P2, std::size_t Dimension, std::size_t DimensionCount>
-struct dot_product_maker
-{
- typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-
- static inline coordinate_type apply(P1 const& p1, P2 const& p2)
- {
- return get<Dimension>(p1) * get<Dimension>(p2)
- + dot_product_maker<P1, P2, Dimension+1, DimensionCount>::apply(p1, p2);
- }
-};
-
-template <typename P1, typename P2, std::size_t DimensionCount>
-struct dot_product_maker<P1, P2, DimensionCount, DimensionCount>
-{
- typedef typename select_coordinate_type<P1, P2>::type coordinate_type;
-
- static inline coordinate_type apply(P1 const& p1, P2 const& p2)
- {
- return get<DimensionCount>(p1) * get<DimensionCount>(p2);
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
- \brief Computes the dot product (or scalar product) of 2 vectors (points).
- \ingroup arithmetic
- \tparam Point1 \tparam_point
- \tparam Point2 \tparam_point
- \param p1 first point
- \param p2 second point
- \return the dot product
- */
-template <typename Point1, typename Point2>
-inline typename select_coordinate_type<Point1, Point2>::type dot_product(
- Point1 const& p1, Point2 const& p2)
-{
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point1>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point2>) );
-
- return detail::dot_product_maker
- <
- Point1, Point2,
- 0, dimension<Point1>::type::value - 1
- >::apply(p1, p2);
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ARITHMETIC_DOT_PRODUCT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/arithmetic/normalize.hpp b/contrib/restricted/boost/boost/geometry/arithmetic/normalize.hpp
deleted file mode 100644
index 7dfdbd2b039..00000000000
--- a/contrib/restricted/boost/boost/geometry/arithmetic/normalize.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2016, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_ARITHMETIC_NORMALIZE_HPP
-#define BOOST_GEOMETRY_ARITHMETIC_NORMALIZE_HPP
-
-
-#include <boost/geometry/core/coordinate_type.hpp>
-
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/arithmetic/dot_product.hpp>
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Point>
-inline typename coordinate_type<Point>::type vec_length_sqr(Point const& pt)
-{
- return dot_product(pt, pt);
-}
-
-template <typename Point>
-inline typename coordinate_type<Point>::type vec_length(Point const& pt)
-{
- // NOTE: hypot() could be used instead of sqrt()
- return math::sqrt(dot_product(pt, pt));
-}
-
-template <typename Point>
-inline bool vec_normalize(Point & pt, typename coordinate_type<Point>::type & len)
-{
- typedef typename coordinate_type<Point>::type coord_t;
-
- coord_t const c0 = 0;
- len = vec_length(pt);
-
- if (math::equals(len, c0))
- {
- return false;
- }
-
- divide_value(pt, len);
- return true;
-}
-
-template <typename Point>
-inline bool vec_normalize(Point & pt)
-{
- typedef typename coordinate_type<Point>::type coord_t;
- coord_t len;
- return vec_normalize(pt, len);
-}
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ARITHMETIC_NORMALIZE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/access.hpp b/contrib/restricted/boost/boost/geometry/core/access.hpp
deleted file mode 100644
index 866fb19a4df..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/access.hpp
+++ /dev/null
@@ -1,399 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_ACCESS_HPP
-#define BOOST_GEOMETRY_CORE_ACCESS_HPP
-
-
-#include <cstddef>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-#include <boost/type_traits/remove_pointer.hpp>
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/util/bare_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-/// Index of minimum corner of the box.
-int const min_corner = 0;
-
-/// Index of maximum corner of the box.
-int const max_corner = 1;
-
-namespace traits
-{
-
-/*!
-\brief Traits class which gives access (get,set) to points.
-\ingroup traits
-\par Geometries:
-/// @li point
-\par Specializations should provide, per Dimension
-/// @li static inline T get(G const&)
-/// @li static inline void set(G&, T const&)
-\tparam Geometry geometry-type
-\tparam Dimension dimension to access
-*/
-template <typename Geometry, std::size_t Dimension, typename Enable = void>
-struct access
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE, (types<Geometry>)
- );
-};
-
-
-/*!
-\brief Traits class defining "get" and "set" to get
- and set point coordinate values
-\tparam Geometry geometry (box, segment)
-\tparam Index index (min_corner/max_corner for box, 0/1 for segment)
-\tparam Dimension dimension
-\par Geometries:
- - box
- - segment
-\par Specializations should provide:
- - static inline T get(G const&)
- - static inline void set(G&, T const&)
-\ingroup traits
-*/
-template <typename Geometry, std::size_t Index, std::size_t Dimension>
-struct indexed_access {};
-
-
-} // namespace traits
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template
-<
- typename Geometry,
- typename CoordinateType,
- std::size_t Index,
- std::size_t Dimension
->
-struct indexed_access_non_pointer
-{
- static inline CoordinateType get(Geometry const& geometry)
- {
- return traits::indexed_access<Geometry, Index, Dimension>::get(geometry);
- }
- static inline void set(Geometry& b, CoordinateType const& value)
- {
- traits::indexed_access<Geometry, Index, Dimension>::set(b, value);
- }
-};
-
-template
-<
- typename Geometry,
- typename CoordinateType,
- std::size_t Index,
- std::size_t Dimension
->
-struct indexed_access_pointer
-{
- static inline CoordinateType get(Geometry const* geometry)
- {
- return traits::indexed_access<typename boost::remove_pointer<Geometry>::type, Index, Dimension>::get(*geometry);
- }
- static inline void set(Geometry* geometry, CoordinateType const& value)
- {
- traits::indexed_access<typename boost::remove_pointer<Geometry>::type, Index, Dimension>::set(*geometry, value);
- }
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template
-<
- typename Tag,
- typename Geometry,
- typename
- CoordinateType,
- std::size_t Dimension,
- typename IsPointer
->
-struct access
-{
- //static inline T get(G const&) {}
- //static inline void set(G& g, T const& value) {}
-};
-
-template
-<
- typename Tag,
- typename Geometry,
- typename CoordinateType,
- std::size_t Index,
- std::size_t Dimension,
- typename IsPointer
->
-struct indexed_access
-{
- //static inline T get(G const&) {}
- //static inline void set(G& g, T const& value) {}
-};
-
-template <typename Point, typename CoordinateType, std::size_t Dimension>
-struct access<point_tag, Point, CoordinateType, Dimension, boost::false_type>
-{
- static inline CoordinateType get(Point const& point)
- {
- return traits::access<Point, Dimension>::get(point);
- }
- static inline void set(Point& p, CoordinateType const& value)
- {
- traits::access<Point, Dimension>::set(p, value);
- }
-};
-
-template <typename Point, typename CoordinateType, std::size_t Dimension>
-struct access<point_tag, Point, CoordinateType, Dimension, boost::true_type>
-{
- static inline CoordinateType get(Point const* point)
- {
- return traits::access<typename boost::remove_pointer<Point>::type, Dimension>::get(*point);
- }
- static inline void set(Point* p, CoordinateType const& value)
- {
- traits::access<typename boost::remove_pointer<Point>::type, Dimension>::set(*p, value);
- }
-};
-
-
-template
-<
- typename Box,
- typename CoordinateType,
- std::size_t Index,
- std::size_t Dimension
->
-struct indexed_access<box_tag, Box, CoordinateType, Index, Dimension, boost::false_type>
- : detail::indexed_access_non_pointer<Box, CoordinateType, Index, Dimension>
-{};
-
-template
-<
- typename Box,
- typename CoordinateType,
- std::size_t Index,
- std::size_t Dimension
->
-struct indexed_access<box_tag, Box, CoordinateType, Index, Dimension, boost::true_type>
- : detail::indexed_access_pointer<Box, CoordinateType, Index, Dimension>
-{};
-
-
-template
-<
- typename Segment,
- typename CoordinateType,
- std::size_t Index,
- std::size_t Dimension
->
-struct indexed_access<segment_tag, Segment, CoordinateType, Index, Dimension, boost::false_type>
- : detail::indexed_access_non_pointer<Segment, CoordinateType, Index, Dimension>
-{};
-
-
-template
-<
- typename Segment,
- typename CoordinateType,
- std::size_t Index,
- std::size_t Dimension
->
-struct indexed_access<segment_tag, Segment, CoordinateType, Index, Dimension, boost::true_type>
- : detail::indexed_access_pointer<Segment, CoordinateType, Index, Dimension>
-{};
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-// Two dummy tags to distinguish get/set variants below.
-// They don't have to be specified by the user. The functions are distinguished
-// by template signature also, but for e.g. GCC this is not enough. So give them
-// a different signature.
-struct signature_getset_dimension {};
-struct signature_getset_index_dimension {};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief Get coordinate value of a geometry (usually a point)
-\details \details_get_set
-\ingroup get
-\tparam Dimension \tparam_dimension_required
-\tparam Geometry \tparam_geometry (usually a Point Concept)
-\param geometry \param_geometry (usually a point)
-\return The coordinate value of specified dimension of specified geometry
-
-\qbk{[include reference/core/get_point.qbk]}
-*/
-template <std::size_t Dimension, typename Geometry>
-inline typename coordinate_type<Geometry>::type get(Geometry const& geometry
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
- , detail::signature_getset_dimension* dummy = 0
-#endif
- )
-{
- boost::ignore_unused(dummy);
-
- typedef core_dispatch::access
- <
- typename tag<Geometry>::type,
- typename geometry::util::bare_type<Geometry>::type,
- typename coordinate_type<Geometry>::type,
- Dimension,
- typename boost::is_pointer<Geometry>::type
- > coord_access_type;
-
- return coord_access_type::get(geometry);
-}
-
-
-/*!
-\brief Set coordinate value of a geometry (usually a point)
-\details \details_get_set
-\tparam Dimension \tparam_dimension_required
-\tparam Geometry \tparam_geometry (usually a Point Concept)
-\param geometry geometry to assign coordinate to
-\param geometry \param_geometry (usually a point)
-\param value The coordinate value to set
-\ingroup set
-
-\qbk{[include reference/core/set_point.qbk]}
-*/
-template <std::size_t Dimension, typename Geometry>
-inline void set(Geometry& geometry
- , typename coordinate_type<Geometry>::type const& value
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
- , detail::signature_getset_dimension* dummy = 0
-#endif
- )
-{
- boost::ignore_unused(dummy);
-
- typedef core_dispatch::access
- <
- typename tag<Geometry>::type,
- typename geometry::util::bare_type<Geometry>::type,
- typename coordinate_type<Geometry>::type,
- Dimension,
- typename boost::is_pointer<Geometry>::type
- > coord_access_type;
-
- coord_access_type::set(geometry, value);
-}
-
-
-/*!
-\brief get coordinate value of a Box or Segment
-\details \details_get_set
-\tparam Index \tparam_index_required
-\tparam Dimension \tparam_dimension_required
-\tparam Geometry \tparam_box_or_segment
-\param geometry \param_geometry
-\return coordinate value
-\ingroup get
-
-\qbk{distinguish,with index}
-\qbk{[include reference/core/get_box.qbk]}
-*/
-template <std::size_t Index, std::size_t Dimension, typename Geometry>
-inline typename coordinate_type<Geometry>::type get(Geometry const& geometry
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
- , detail::signature_getset_index_dimension* dummy = 0
-#endif
- )
-{
- boost::ignore_unused(dummy);
-
- typedef core_dispatch::indexed_access
- <
- typename tag<Geometry>::type,
- typename geometry::util::bare_type<Geometry>::type,
- typename coordinate_type<Geometry>::type,
- Index,
- Dimension,
- typename boost::is_pointer<Geometry>::type
- > coord_access_type;
-
- return coord_access_type::get(geometry);
-}
-
-/*!
-\brief set coordinate value of a Box / Segment
-\details \details_get_set
-\tparam Index \tparam_index_required
-\tparam Dimension \tparam_dimension_required
-\tparam Geometry \tparam_box_or_segment
-\param geometry geometry to assign coordinate to
-\param geometry \param_geometry
-\param value The coordinate value to set
-\ingroup set
-
-\qbk{distinguish,with index}
-\qbk{[include reference/core/set_box.qbk]}
-*/
-template <std::size_t Index, std::size_t Dimension, typename Geometry>
-inline void set(Geometry& geometry
- , typename coordinate_type<Geometry>::type const& value
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
- , detail::signature_getset_index_dimension* dummy = 0
-#endif
- )
-{
- boost::ignore_unused(dummy);
-
- typedef core_dispatch::indexed_access
- <
- typename tag<Geometry>::type,
- typename geometry::util::bare_type<Geometry>::type,
- typename coordinate_type<Geometry>::type,
- Index,
- Dimension,
- typename boost::is_pointer<Geometry>::type
- > coord_access_type;
-
- coord_access_type::set(geometry, value);
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_CORE_ACCESS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/assert.hpp b/contrib/restricted/boost/boost/geometry/core/assert.hpp
deleted file mode 100644
index 0f3ae6baeae..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/assert.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
-// Copyright (c) 2007, 2014 Peter Dimov
-// Copyright (c) Beman Dawes 2011
-// Copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_CORE_ASSERT_HPP
-#define BOOST_GEOMETRY_CORE_ASSERT_HPP
-
-#include <boost/assert.hpp>
-
-#undef BOOST_GEOMETRY_ASSERT
-#undef BOOST_GEOMETRY_ASSERT_MSG
-
-#if defined(BOOST_GEOMETRY_ENABLE_ASSERT_HANDLER) || ( defined(BOOST_GEOMETRY_ENABLE_ASSERT_DEBUG_HANDLER) && !defined(NDEBUG) )
-
-#include <boost/config.hpp> // for BOOST_LIKELY
-#include <boost/current_function.hpp>
-
-namespace boost { namespace geometry
-{
- void assertion_failed(char const * expr, char const * function, char const * file, long line); // user defined
- void assertion_failed_msg(char const * expr, char const * msg, char const * function, char const * file, long line); // user defined
-}} // namespace boost::geometry
-
-#define BOOST_GEOMETRY_ASSERT(expr) (BOOST_LIKELY(!!(expr))? ((void)0): ::boost::geometry::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
-#define BOOST_GEOMETRY_ASSERT_MSG(expr, msg) (BOOST_LIKELY(!!(expr))? ((void)0): ::boost::geometry::assertion_failed_msg(#expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
-
-#else
-
-#define BOOST_GEOMETRY_ASSERT(expr) BOOST_ASSERT(expr)
-#define BOOST_GEOMETRY_ASSERT_MSG(expr, msg) BOOST_ASSERT_MSG(expr, msg)
-
-#endif
-
-#endif // BOOST_GEOMETRY_CORE_EXCEPTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/closure.hpp b/contrib/restricted/boost/boost/geometry/core/closure.hpp
deleted file mode 100644
index 405a5a5f352..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/closure.hpp
+++ /dev/null
@@ -1,202 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_CLOSURE_HPP
-#define BOOST_GEOMETRY_CORE_CLOSURE_HPP
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/size_t.hpp>
-#include <boost/range/value_type.hpp>
-
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/util/bare_type.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-/*!
-\brief Enumerates options for defining if polygons are open or closed
-\ingroup enum
-\details The enumeration closure_selector describes options for if a polygon is
- open or closed. In a closed polygon the very first point (per ring) should
- be equal to the very last point.
- The specific closing property of a polygon type is defined by the closure
- metafunction. The closure metafunction defines a value, which is one of the
- values enumerated in the closure_selector
-
-\qbk{
-[heading See also]
-[link geometry.reference.core.closure The closure metafunction]
-}
-*/
-enum closure_selector
-{
- /// Rings are open: first point and last point are different, algorithms
- /// close them explicitly on the fly
- open = 0,
- /// Rings are closed: first point and last point must be the same
- closed = 1,
- /// (Not yet implemented): algorithms first figure out if ring must be
- /// closed on the fly
- closure_undertermined = -1
-};
-
-namespace traits
-{
-
-/*!
- \brief Traits class indicating if points within a
- ring or (multi)polygon are closed (last point == first point),
- open or not known.
- \ingroup traits
- \par Geometries:
- - ring
- \tparam G geometry
-*/
-template <typename G>
-struct closure
-{
- static const closure_selector value = closed;
-};
-
-
-} // namespace traits
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace core_detail { namespace closure
-{
-
-struct closed
-{
- static const closure_selector value = geometry::closed;
-};
-
-
-/// Metafunction to define the minimum size of a ring:
-/// 3 for open rings, 4 for closed rings
-template <closure_selector Closure>
-struct minimum_ring_size {};
-
-template <>
-struct minimum_ring_size<geometry::closed> : boost::mpl::size_t<4> {};
-
-template <>
-struct minimum_ring_size<geometry::open> : boost::mpl::size_t<3> {};
-
-
-}} // namespace detail::point_order
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename Tag, typename Geometry>
-struct closure
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-template <typename Box>
-struct closure<point_tag, Box> : public core_detail::closure::closed {};
-
-template <typename Box>
-struct closure<box_tag, Box> : public core_detail::closure::closed {};
-
-template <typename Box>
-struct closure<segment_tag, Box> : public core_detail::closure::closed {};
-
-template <typename LineString>
-struct closure<linestring_tag, LineString>
- : public core_detail::closure::closed {};
-
-
-template <typename Ring>
-struct closure<ring_tag, Ring>
-{
- static const closure_selector value
- = geometry::traits::closure<Ring>::value;
-};
-
-// Specialization for Polygon: the closure is the closure of its rings
-template <typename Polygon>
-struct closure<polygon_tag, Polygon>
-{
- static const closure_selector value = core_dispatch::closure
- <
- ring_tag,
- typename ring_type<polygon_tag, Polygon>::type
- >::value ;
-};
-
-template <typename MultiPoint>
-struct closure<multi_point_tag, MultiPoint>
- : public core_detail::closure::closed {};
-
-template <typename MultiLinestring>
-struct closure<multi_linestring_tag, MultiLinestring>
- : public core_detail::closure::closed {};
-
-// Specialization for MultiPolygon: the closure is the closure of Polygon's rings
-template <typename MultiPolygon>
-struct closure<multi_polygon_tag, MultiPolygon>
-{
- static const closure_selector value = core_dispatch::closure
- <
- polygon_tag,
- typename boost::range_value<MultiPolygon>::type
- >::value ;
-};
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief \brief_meta{value, closure (clockwise\, counterclockwise),
- \meta_geometry_type}
-\tparam Geometry \tparam_geometry
-\ingroup core
-
-\qbk{[include reference/core/closure.qbk]}
-*/
-template <typename Geometry>
-struct closure
-{
- static const closure_selector value = core_dispatch::closure
- <
- typename tag<Geometry>::type,
- typename util::bare_type<Geometry>::type
- >::value;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_CLOSURE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/coordinate_dimension.hpp b/contrib/restricted/boost/boost/geometry/core/coordinate_dimension.hpp
deleted file mode 100644
index 19022f2fd23..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/coordinate_dimension.hpp
+++ /dev/null
@@ -1,127 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_COORDINATE_DIMENSION_HPP
-#define BOOST_GEOMETRY_CORE_COORDINATE_DIMENSION_HPP
-
-
-#include <cstddef>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/static_assert.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/util/bare_type.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-/*!
-\brief Traits class indicating the number of dimensions of a point
-\par Geometries:
- - point
-\par Specializations should provide:
- - value (should be derived from boost::mpl::int_<D>
-\ingroup traits
-*/
-template <typename Point, typename Enable = void>
-struct dimension
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE, (types<Point>)
- );
-};
-
-} // namespace traits
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-// Base class derive from its own specialization of point-tag
-template <typename T, typename G>
-struct dimension : dimension<point_tag, typename point_type<T, G>::type> {};
-
-template <typename P>
-struct dimension<point_tag, P>
- : traits::dimension<typename geometry::util::bare_type<P>::type>
-{
- BOOST_MPL_ASSERT_MSG(
- (traits::dimension<typename geometry::util::bare_type<P>::type>::value > 0),
- INVALID_DIMENSION_VALUE,
- (traits::dimension<typename geometry::util::bare_type<P>::type>)
- );
-};
-
-} // namespace core_dispatch
-#endif
-
-/*!
-\brief \brief_meta{value, number of coordinates (the number of axes of any geometry), \meta_point_type}
-\tparam Geometry \tparam_geometry
-\ingroup core
-
-\qbk{[include reference/core/coordinate_dimension.qbk]}
-*/
-template <typename Geometry>
-struct dimension
- : core_dispatch::dimension
- <
- typename tag<Geometry>::type,
- typename geometry::util::bare_type<Geometry>::type
- >
-{};
-
-/*!
-\brief assert_dimension, enables compile-time checking if coordinate dimensions are as expected
-\ingroup utility
-*/
-template <typename Geometry, int Dimensions>
-inline void assert_dimension()
-{
- BOOST_STATIC_ASSERT(( static_cast<int>(dimension<Geometry>::value) == Dimensions ));
-}
-
-/*!
-\brief assert_dimension, enables compile-time checking if coordinate dimensions are as expected
-\ingroup utility
-*/
-template <typename Geometry, int Dimensions>
-inline void assert_dimension_less_equal()
-{
- BOOST_STATIC_ASSERT(( static_cast<int>(dimension<Geometry>::type::value) <= Dimensions ));
-}
-
-template <typename Geometry, int Dimensions>
-inline void assert_dimension_greater_equal()
-{
- BOOST_STATIC_ASSERT(( static_cast<int>(dimension<Geometry>::type::value) >= Dimensions ));
-}
-
-/*!
-\brief assert_dimension_equal, enables compile-time checking if coordinate dimensions of two geometries are equal
-\ingroup utility
-*/
-template <typename G1, typename G2>
-inline void assert_dimension_equal()
-{
- BOOST_STATIC_ASSERT(( static_cast<size_t>(dimension<G1>::type::value) == static_cast<size_t>(dimension<G2>::type::value) ));
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_CORE_COORDINATE_DIMENSION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/coordinate_system.hpp b/contrib/restricted/boost/boost/geometry/core/coordinate_system.hpp
deleted file mode 100644
index d33353f4b4f..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/coordinate_system.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_COORDINATE_SYSTEM_HPP
-#define BOOST_GEOMETRY_CORE_COORDINATE_SYSTEM_HPP
-
-
-#include <boost/mpl/assert.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/util/bare_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace traits
-{
-
-/*!
-\brief Traits class defining the coordinate system of a point, important for strategy selection
-\ingroup traits
-\par Geometries:
- - point
-\par Specializations should provide:
- - typedef CS type; (cs::cartesian, cs::spherical, etc)
-*/
-template <typename Point, typename Enable = void>
-struct coordinate_system
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE, (types<Point>)
- );
-};
-
-} // namespace traits
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
- template <typename GeometryTag, typename G>
- struct coordinate_system
- {
- typedef typename point_type<GeometryTag, G>::type P;
-
- // Call its own specialization on point-tag
- typedef typename coordinate_system<point_tag, P>::type type;
- };
-
-
- template <typename Point>
- struct coordinate_system<point_tag, Point>
- {
- typedef typename traits::coordinate_system
- <
- typename geometry::util::bare_type<Point>::type
- >::type type;
- };
-
-
-} // namespace core_dispatch
-#endif
-
-
-/*!
-\brief \brief_meta{type, coordinate system (cartesian\, spherical\, etc), \meta_point_type}
-\tparam Geometry \tparam_geometry
-\ingroup core
-
-\qbk{[include reference/core/coordinate_system.qbk]}
-*/
-template <typename Geometry>
-struct coordinate_system
-{
- typedef typename core_dispatch::coordinate_system
- <
- typename tag<Geometry>::type,
- typename geometry::util::bare_type<Geometry>::type
- >::type type;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_COORDINATE_SYSTEM_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/coordinate_type.hpp b/contrib/restricted/boost/boost/geometry/core/coordinate_type.hpp
deleted file mode 100644
index 47c028fec25..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/coordinate_type.hpp
+++ /dev/null
@@ -1,108 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_COORDINATE_TYPE_HPP
-#define BOOST_GEOMETRY_CORE_COORDINATE_TYPE_HPP
-
-
-#include <boost/mpl/assert.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/util/bare_type.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-/*!
-\brief Traits class which indicate the coordinate type (double,float,...) of a point
-\ingroup traits
-\par Geometries:
- - point
-\par Specializations should provide:
- - typedef T type; (double,float,int,etc)
-*/
-template <typename Point, typename Enable = void>
-struct coordinate_type
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE, (types<Point>)
- );
-};
-
-} // namespace traits
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename GeometryTag, typename Geometry>
-struct coordinate_type
-{
- typedef typename point_type<GeometryTag, Geometry>::type point_type;
-
- // Call its own specialization on point-tag
- typedef typename coordinate_type<point_tag, point_type>::type type;
-};
-
-template <typename Point>
-struct coordinate_type<point_tag, Point>
-{
- typedef typename traits::coordinate_type
- <
- typename geometry::util::bare_type<Point>::type
- >::type type;
-};
-
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief \brief_meta{type, coordinate type (int\, float\, double\, etc), \meta_point_type}
-\tparam Geometry \tparam_geometry
-\ingroup core
-
-\qbk{[include reference/core/coordinate_type.qbk]}
-*/
-template <typename Geometry>
-struct coordinate_type
-{
- typedef typename core_dispatch::coordinate_type
- <
- typename tag<Geometry>::type,
- typename geometry::util::bare_type<Geometry>::type
- >::type type;
-};
-
-template <typename Geometry>
-struct fp_coordinate_type
-{
- typedef typename promote_floating_point
- <
- typename coordinate_type<Geometry>::type
- >::type type;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_COORDINATE_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/cs.hpp b/contrib/restricted/boost/boost/geometry/core/cs.hpp
deleted file mode 100644
index 301fb6b76fe..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/cs.hpp
+++ /dev/null
@@ -1,269 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_CS_HPP
-#define BOOST_GEOMETRY_CORE_CS_HPP
-
-#include <cstddef>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-/*!
-\brief Unit of plane angle: Degrees
-\details Tag defining the unit of plane angle for spherical coordinate systems.
- This tag specifies that coordinates are defined in degrees (-180 .. 180).
- It has to be specified for some coordinate systems.
-\qbk{[include reference/core/degree_radian.qbk]}
-*/
-struct degree {};
-
-
-/*!
-\brief Unit of plane angle: Radians
-\details Tag defining the unit of plane angle for spherical coordinate systems.
- This tag specifies that coordinates are defined in radians (-PI .. PI).
- It has to be specified for some coordinate systems.
-\qbk{[include reference/core/degree_radian.qbk]}
-*/
-struct radian {};
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace core_detail
-{
-
-template <typename DegreeOrRadian>
-struct coordinate_system_units
-{
- BOOST_MPL_ASSERT_MSG
- ((false),
- COORDINATE_SYSTEM_UNITS_MUST_BE_DEGREES_OR_RADIANS,
- (types<DegreeOrRadian>));
-};
-
-template <>
-struct coordinate_system_units<geometry::degree>
-{
- typedef geometry::degree units;
-};
-
-template <>
-struct coordinate_system_units<geometry::radian>
-{
- typedef geometry::radian units;
-};
-
-} // namespace core_detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-namespace cs
-{
-
-/*!
-\brief Cartesian coordinate system
-\details Defines the Cartesian or rectangular coordinate system
- where points are defined in 2 or 3 (or more)
-dimensions and usually (but not always) known as x,y,z
-\see http://en.wikipedia.org/wiki/Cartesian_coordinate_system
-\ingroup cs
-*/
-struct cartesian {};
-
-
-
-
-/*!
-\brief Geographic coordinate system, in degree or in radian
-\details Defines the geographic coordinate system where points
- are defined in two angles and usually
-known as lat,long or lo,la or phi,lambda
-\see http://en.wikipedia.org/wiki/Geographic_coordinate_system
-\ingroup cs
-\note might be moved to extensions/gis/geographic
-*/
-template<typename DegreeOrRadian>
-struct geographic
-{
- typedef typename core_detail::coordinate_system_units
- <
- DegreeOrRadian
- >::units units;
-};
-
-
-
-/*!
-\brief Spherical (polar) coordinate system, in degree or in radian
-\details Defines the spherical coordinate system where points are
- defined in two angles
- and an optional radius usually known as r, theta, phi
-\par Coordinates:
-- coordinate 0:
- 0 <= phi < 2pi is the angle between the positive x-axis and the
- line from the origin to the P projected onto the xy-plane.
-- coordinate 1:
- 0 <= theta <= pi is the angle between the positive z-axis and the
- line formed between the origin and P.
-- coordinate 2 (if specified):
- r >= 0 is the distance from the origin to a given point P.
-
-\see http://en.wikipedia.org/wiki/Spherical_coordinates
-\ingroup cs
-*/
-template<typename DegreeOrRadian>
-struct spherical
-{
- typedef typename core_detail::coordinate_system_units
- <
- DegreeOrRadian
- >::units units;
-};
-
-
-/*!
-\brief Spherical equatorial coordinate system, in degree or in radian
-\details This one resembles the geographic coordinate system, and has latitude
- up from zero at the equator, to 90 at the pole
- (opposite to the spherical(polar) coordinate system).
- Used in astronomy and in GIS (but there is also the geographic)
-
-\see http://en.wikipedia.org/wiki/Spherical_coordinates
-\ingroup cs
-*/
-template<typename DegreeOrRadian>
-struct spherical_equatorial
-{
- typedef typename core_detail::coordinate_system_units
- <
- DegreeOrRadian
- >::units units;
-};
-
-
-
-/*!
-\brief Polar coordinate system
-\details Defines the polar coordinate system "in which each point
- on a plane is determined by an angle and a distance"
-\see http://en.wikipedia.org/wiki/Polar_coordinates
-\ingroup cs
-*/
-template<typename DegreeOrRadian>
-struct polar
-{
- typedef typename core_detail::coordinate_system_units
- <
- DegreeOrRadian
- >::units units;
-};
-
-
-} // namespace cs
-
-
-namespace traits
-{
-
-/*!
-\brief Traits class defining coordinate system tag, bound to coordinate system
-\ingroup traits
-\tparam CoordinateSystem coordinate system
-*/
-template <typename CoordinateSystem>
-struct cs_tag
-{
-};
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-template<typename DegreeOrRadian>
-struct cs_tag<cs::geographic<DegreeOrRadian> >
-{
- typedef geographic_tag type;
-};
-
-template<typename DegreeOrRadian>
-struct cs_tag<cs::spherical<DegreeOrRadian> >
-{
- typedef spherical_polar_tag type;
-};
-
-template<typename DegreeOrRadian>
-struct cs_tag<cs::spherical_equatorial<DegreeOrRadian> >
-{
- typedef spherical_equatorial_tag type;
-};
-
-
-template<>
-struct cs_tag<cs::cartesian>
-{
- typedef cartesian_tag type;
-};
-
-
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-} // namespace traits
-
-/*!
-\brief Meta-function returning coordinate system tag (cs family) of any geometry
-\tparam Geometry \tparam_geometry
-\ingroup core
-*/
-template <typename Geometry>
-struct cs_tag
-{
- typedef typename traits::cs_tag
- <
- typename geometry::coordinate_system<Geometry>::type
- >::type type;
-};
-
-
-/*!
-\brief Meta-function to verify if a coordinate system is radian
-\tparam CoordinateSystem Any coordinate system.
-\ingroup core
-*/
-template <typename CoordinateSystem>
-struct is_radian : boost::true_type {};
-
-
-#ifndef DOXYGEN_NO_SPECIALIZATIONS
-
-// Specialization for any degree coordinate systems
-template <template<typename> class CoordinateSystem>
-struct is_radian< CoordinateSystem<degree> > : boost::false_type
-{
-};
-
-#endif // DOXYGEN_NO_SPECIALIZATIONS
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_CORE_CS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/exception.hpp b/contrib/restricted/boost/boost/geometry/core/exception.hpp
deleted file mode 100644
index a81af0bce2f..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/exception.hpp
+++ /dev/null
@@ -1,108 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015, 2017.
-// Modifications copyright (c) 2015-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_EXCEPTION_HPP
-#define BOOST_GEOMETRY_CORE_EXCEPTION_HPP
-
-#include <exception>
-
-namespace boost { namespace geometry
-{
-
-/*!
-\brief Base exception class for Boost.Geometry algorithms
-\ingroup core
-\details This class is never thrown. All exceptions thrown in Boost.Geometry
- are derived from exception, so it might be convenient to catch it.
-*/
-class exception : public std::exception
-{
-public:
- virtual char const* what() const noexcept
- {
- return "Boost.Geometry exception";
- }
-};
-
-/*!
-\brief Invalid Input Exception
-\ingroup core
-\details The invalid_input_exception is thrown if an invalid attribute
- is passed into a function, e.g. a DE-9IM mask string code containing
- invalid characters passed into a de9im::mask constructor.
- */
-class invalid_input_exception : public geometry::exception
-{
-public:
-
- inline invalid_input_exception() {}
-
- virtual char const* what() const noexcept
- {
- return "Boost.Geometry Invalid-Input exception";
- }
-};
-
-/*!
-\brief Empty Input Exception
-\ingroup core
-\details The empty_input_exception is thrown if free functions, e.g. distance,
- are called with empty geometries, e.g. a linestring
- without points, a polygon without points, an empty multi-geometry.
-\qbk{
-[heading See also]
-\* [link geometry.reference.algorithms.area the area function]
-\* [link geometry.reference.algorithms.distance the distance function]
-\* [link geometry.reference.algorithms.length the length function]
-}
- */
-class empty_input_exception : public geometry::invalid_input_exception
-{
-public:
-
- inline empty_input_exception() {}
-
- virtual char const* what() const noexcept
- {
- return "Boost.Geometry Empty-Input exception";
- }
-};
-
-/*!
-\brief Invalid Output Exception
-\ingroup core
-\details The invalid_output_exception is thrown if valid output cannot be
- generated by a function even if arguments are valid, e.g. union of
- geographic polygons covering more than half of the area of the globe.
- */
-class invalid_output_exception : public geometry::exception
-{
-public:
-
- inline invalid_output_exception() {}
-
- virtual char const* what() const noexcept
- {
- return "Boost.Geometry Invalid-Output exception";
- }
-};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_CORE_EXCEPTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/exterior_ring.hpp b/contrib/restricted/boost/boost/geometry/core/exterior_ring.hpp
deleted file mode 100644
index fa5a0a2b98c..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/exterior_ring.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_EXTERIOR_RING_HPP
-#define BOOST_GEOMETRY_CORE_EXTERIOR_RING_HPP
-
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/util/add_const_if_c.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-
-/*!
- \brief Traits class defining access to exterior_ring of a polygon
- \details Should define const and non const access
- \ingroup traits
- \tparam Polygon the polygon type
- \par Geometries:
- - polygon
- \par Specializations should provide:
- - static inline RING& get(POLY& )
- - static inline RING const& get(POLY const& )
-*/
-template <typename Polygon>
-struct exterior_ring
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_POLYGON_TYPE
- , (types<Polygon>)
- );
-};
-
-
-} // namespace traits
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-
-template <typename Tag, typename Geometry>
-struct exterior_ring
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-
-template <typename Polygon>
-struct exterior_ring<polygon_tag, Polygon>
-{
- static
- typename geometry::ring_return_type<Polygon>::type
- apply(typename add_const_if_c
- <
- boost::is_const<Polygon>::type::value,
- Polygon
- >::type& polygon)
- {
- return traits::exterior_ring
- <
- typename boost::remove_const<Polygon>::type
- >::get(polygon);
- }
-};
-
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
- \brief Function to get the exterior_ring ring of a polygon
- \ingroup exterior_ring
- \note OGC compliance: instead of ExteriorRing
- \tparam Polygon polygon type
- \param polygon the polygon to get the exterior ring from
- \return a reference to the exterior ring
-*/
-template <typename Polygon>
-inline typename ring_return_type<Polygon>::type exterior_ring(Polygon& polygon)
-{
- return core_dispatch::exterior_ring
- <
- typename tag<Polygon>::type,
- Polygon
- >::apply(polygon);
-}
-
-
-/*!
-\brief Function to get the exterior ring of a polygon (const version)
-\ingroup exterior_ring
-\note OGC compliance: instead of ExteriorRing
-\tparam Polygon polygon type
-\param polygon the polygon to get the exterior ring from
-\return a const reference to the exterior ring
-
-\qbk{distinguish,const version}
-*/
-template <typename Polygon>
-inline typename ring_return_type<Polygon const>::type exterior_ring(
- Polygon const& polygon)
-{
- return core_dispatch::exterior_ring
- <
- typename tag<Polygon>::type,
- Polygon const
- >::apply(polygon);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_EXTERIOR_RING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/geometry_id.hpp b/contrib/restricted/boost/boost/geometry/core/geometry_id.hpp
deleted file mode 100644
index 5fc5a800500..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/geometry_id.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_GEOMETRY_ID_HPP
-#define BOOST_GEOMETRY_CORE_GEOMETRY_ID_HPP
-
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/int.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename GeometryTag>
-struct geometry_id
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<GeometryTag>)
- );
-};
-
-
-template <>
-struct geometry_id<point_tag> : boost::mpl::int_<1> {};
-
-
-template <>
-struct geometry_id<linestring_tag> : boost::mpl::int_<2> {};
-
-
-template <>
-struct geometry_id<polygon_tag> : boost::mpl::int_<3> {};
-
-
-template <>
-struct geometry_id<multi_point_tag> : boost::mpl::int_<4> {};
-
-
-template <>
-struct geometry_id<multi_linestring_tag> : boost::mpl::int_<5> {};
-
-
-template <>
-struct geometry_id<multi_polygon_tag> : boost::mpl::int_<6> {};
-
-
-template <>
-struct geometry_id<segment_tag> : boost::mpl::int_<92> {};
-
-
-template <>
-struct geometry_id<ring_tag> : boost::mpl::int_<93> {};
-
-
-template <>
-struct geometry_id<box_tag> : boost::mpl::int_<94> {};
-
-
-} // namespace core_dispatch
-#endif
-
-
-
-/*!
-\brief Meta-function returning the id of a geometry type
-\details The meta-function geometry_id defines a numerical ID (based on
- boost::mpl::int_<...> ) for each geometry concept. A numerical ID is
- sometimes useful, and within Boost.Geometry it is used for the
- reverse_dispatch metafuntion.
-\note Used for e.g. reverse meta-function
-\ingroup core
-*/
-template <typename Geometry>
-struct geometry_id : core_dispatch::geometry_id<typename tag<Geometry>::type>
-{};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_GEOMETRY_ID_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/interior_rings.hpp b/contrib/restricted/boost/boost/geometry/core/interior_rings.hpp
deleted file mode 100644
index 798f4157791..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/interior_rings.hpp
+++ /dev/null
@@ -1,150 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_INTERIOR_RINGS_HPP
-#define BOOST_GEOMETRY_CORE_INTERIOR_RINGS_HPP
-
-#include <cstddef>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/range/value_type.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/interior_type.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-
-/*!
- \brief Traits class defining access to interior_rings of a polygon
- \details defines access (const and non const) to interior ring
- \ingroup traits
- \par Geometries:
- - polygon
- \par Specializations should provide:
- - static inline INTERIOR& get(POLY&)
- - static inline const INTERIOR& get(POLY const&)
- \tparam Geometry geometry
-*/
-template <typename Geometry>
-struct interior_rings
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-
-} // namespace traits
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template
-<
- typename GeometryTag,
- typename Geometry
->
-struct interior_rings {};
-
-
-template <typename Polygon>
-struct interior_rings<polygon_tag, Polygon>
-{
- static inline
- typename geometry::interior_return_type<Polygon>::type
- apply(Polygon& polygon)
- {
- return traits::interior_rings
- <
- typename boost::remove_const<Polygon>::type
- >::get(polygon);
- }
-};
-
-
-template <typename MultiPolygon>
-struct interior_type<multi_polygon_tag, MultiPolygon>
-{
- typedef typename core_dispatch::interior_type
- <
- polygon_tag,
- typename boost::range_value<MultiPolygon>::type
- >::type type;
-};
-
-
-} // namespace core_dispatch
-#endif
-
-
-
-/*!
-\brief Function to get the interior rings of a polygon (non const version)
-\ingroup interior_rings
-\note OGC compliance: instead of InteriorRingN
-\tparam Polygon polygon type
-\param polygon the polygon to get the interior rings from
-\return the interior rings (possibly a reference)
-*/
-
-template <typename Polygon>
-inline typename interior_return_type<Polygon>::type interior_rings(Polygon& polygon)
-{
- return core_dispatch::interior_rings
- <
- typename tag<Polygon>::type,
- Polygon
- >::apply(polygon);
-}
-
-
-/*!
-\brief Function to get the interior rings of a polygon (const version)
-\ingroup interior_rings
-\note OGC compliance: instead of InteriorRingN
-\tparam Polygon polygon type
-\param polygon the polygon to get the interior rings from
-\return the interior rings (possibly a const reference)
-
-\qbk{distinguish,const version}
-*/
-template <typename Polygon>
-inline typename interior_return_type<Polygon const>::type interior_rings(
- Polygon const& polygon)
-{
- return core_dispatch::interior_rings
- <
- typename tag<Polygon>::type,
- Polygon const
- >::apply(polygon);
-}
-
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_INTERIOR_RINGS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/interior_type.hpp b/contrib/restricted/boost/boost/geometry/core/interior_type.hpp
deleted file mode 100644
index 66544b79afb..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/interior_type.hpp
+++ /dev/null
@@ -1,164 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_INTERIOR_TYPE_HPP
-#define BOOST_GEOMETRY_CORE_INTERIOR_TYPE_HPP
-
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/remove_const.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-/*!
-\brief Traits class indicating interior container type of a polygon
-\details defines inner container type, so the container containing
- the interior rings
-\ingroup traits
-\par Geometries:
- - polygon
-\par Specializations should provide:
- - typedef X type ( e.g. std::vector&lt;myring&lt;P&gt;&gt; )
-\tparam Geometry geometry
-*/
-template <typename Geometry>
-struct interior_const_type
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-template <typename Geometry>
-struct interior_mutable_type
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-
-} // namespace traits
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-
-template <typename GeometryTag, typename Geometry>
-struct interior_return_type
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-
-template <typename Polygon>
-struct interior_return_type<polygon_tag, Polygon>
-{
- typedef typename boost::remove_const<Polygon>::type nc_polygon_type;
-
- typedef typename boost::mpl::if_
- <
- boost::is_const<Polygon>,
- typename traits::interior_const_type<nc_polygon_type>::type,
- typename traits::interior_mutable_type<nc_polygon_type>::type
- >::type type;
-};
-
-
-
-
-template <typename GeometryTag, typename Geometry>
-struct interior_type
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-
-template <typename Polygon>
-struct interior_type<polygon_tag, Polygon>
-{
- typedef typename boost::remove_reference
- <
- typename interior_return_type<polygon_tag, Polygon>::type
- >::type type;
-};
-
-
-} // namespace core_dispatch
-#endif
-
-
-/*!
-\brief \brief_meta{type, interior_type (container type
- of inner rings), \meta_geometry_type}
-\details Interior rings should be organized as a container
- (std::vector, std::deque, boost::array) with
- Boost.Range support. This metafunction defines the type
- of the container.
-\tparam Geometry A type fullfilling the Polygon or MultiPolygon concept.
-\ingroup core
-
-\qbk{[include reference/core/interior_type.qbk]}
-*/
-template <typename Geometry>
-struct interior_type
-{
- typedef typename core_dispatch::interior_type
- <
- typename tag<Geometry>::type,
- Geometry
- >::type type;
-};
-
-template <typename Geometry>
-struct interior_return_type
-{
- typedef typename core_dispatch::interior_return_type
- <
- typename tag<Geometry>::type,
- Geometry
- >::type type;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_INTERIOR_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/is_areal.hpp b/contrib/restricted/boost/boost/geometry/core/is_areal.hpp
deleted file mode 100644
index 23858605f49..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/is_areal.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_IS_AREAL_HPP
-#define BOOST_GEOMETRY_CORE_IS_AREAL_HPP
-
-
-#include <boost/type_traits/integral_constant.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename GeometryTag> struct is_areal : boost::false_type {};
-
-template <> struct is_areal<ring_tag> : boost::true_type {};
-template <> struct is_areal<box_tag> : boost::true_type {};
-template <> struct is_areal<polygon_tag> : boost::true_type {};
-template <> struct is_areal<multi_polygon_tag> : boost::true_type {};
-
-} // namespace core_dispatch
-#endif
-
-
-
-/*!
- \brief Meta-function defining "true" for areal types (box, (multi)polygon, ring),
- \note Used for tag dispatching and meta-function finetuning
- \note Also a "ring" has areal properties within Boost.Geometry
- \ingroup core
-*/
-template <typename Geometry>
-struct is_areal : core_dispatch::is_areal<typename tag<Geometry>::type>
-{};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_IS_AREAL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/mutable_range.hpp b/contrib/restricted/boost/boost/geometry/core/mutable_range.hpp
deleted file mode 100644
index 7cb5137830c..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/mutable_range.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_MUTABLE_RANGE_HPP
-#define BOOST_GEOMETRY_CORE_MUTABLE_RANGE_HPP
-
-
-#include <cstddef>
-
-#include <boost/range/value_type.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace traits
-{
-
-/*!
-\brief Metafunction to define the argument passed to the three
- traits classes clear, push_back and resize
-\ingroup mutable_range
- */
-template <typename Range>
-struct rvalue_type
-{
- typedef typename boost::remove_reference<Range>::type& type;
-};
-
-
-/*!
-\brief Traits class to clear a geometry
-\ingroup mutable_range
- */
-template <typename Range>
-struct clear
-{
- static inline void apply(typename rvalue_type<Range>::type range)
- {
- range.clear();
- }
-};
-
-
-/*!
-\brief Traits class to append a point to a range (ring, linestring, multi*)
-\ingroup mutable_range
- */
-template <typename Range>
-struct push_back
-{
- typedef typename boost::range_value
- <
- typename boost::remove_reference<Range>::type
- >::type item_type;
-
- static inline void apply(typename rvalue_type<Range>::type range,
- item_type const& item)
- {
- range.push_back(item);
- }
-};
-
-
-/*!
-\brief Traits class to append a point to a range (ring, linestring, multi*)
-\ingroup mutable_range
- */
-template <typename Range>
-struct resize
-{
- static inline void apply(typename rvalue_type<Range>::type range,
- std::size_t new_size)
- {
- range.resize(new_size);
- }
-};
-
-
-} // namespace traits
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_MUTABLE_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/point_order.hpp b/contrib/restricted/boost/boost/geometry/core/point_order.hpp
deleted file mode 100644
index df6d4bbfffc..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/point_order.hpp
+++ /dev/null
@@ -1,187 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_POINT_ORDER_HPP
-#define BOOST_GEOMETRY_CORE_POINT_ORDER_HPP
-
-
-#include <boost/mpl/assert.hpp>
-#include <boost/range/value_type.hpp>
-
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/util/bare_type.hpp>
-
-namespace boost { namespace geometry
-{
-
-/*!
-\brief Enumerates options for the order of points within polygons
-\ingroup enum
-\details The enumeration order_selector describes options for the order of
- points within a polygon. Polygons can be ordered either clockwise or
- counterclockwise. The specific order of a polygon type is defined by the
- point_order metafunction. The point_order metafunction defines a value,
- which is one of the values enumerated in the order_selector
-
-\qbk{
-[heading See also]
-[link geometry.reference.core.point_order The point_order metafunction]
-}
-*/
-enum order_selector
-{
- /// Points are ordered clockwise
- clockwise = 1,
- /// Points are ordered counter clockwise
- counterclockwise = 2,
- /// Points might be stored in any order, algorithms will determine it on the
- /// fly (not yet supported)
- order_undetermined = 0
-};
-
-namespace traits
-{
-
-/*!
-\brief Traits class indicating the order of contained points within a
- ring or (multi)polygon, clockwise, counter clockwise or not known.
-\ingroup traits
-\tparam Ring ring
-*/
-template <typename Ring>
-struct point_order
-{
- static const order_selector value = clockwise;
-};
-
-
-} // namespace traits
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace point_order
-{
-
-struct clockwise
-{
- static const order_selector value = geometry::clockwise;
-};
-
-
-}} // namespace detail::point_order
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename Tag, typename Geometry>
-struct point_order
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-template <typename Point>
-struct point_order<point_tag, Point>
- : public detail::point_order::clockwise {};
-
-template <typename Segment>
-struct point_order<segment_tag, Segment>
- : public detail::point_order::clockwise {};
-
-
-template <typename Box>
-struct point_order<box_tag, Box>
- : public detail::point_order::clockwise {};
-
-template <typename LineString>
-struct point_order<linestring_tag, LineString>
- : public detail::point_order::clockwise {};
-
-
-template <typename Ring>
-struct point_order<ring_tag, Ring>
-{
- static const order_selector value
- = geometry::traits::point_order<Ring>::value;
-};
-
-// Specialization for polygon: the order is the order of its rings
-template <typename Polygon>
-struct point_order<polygon_tag, Polygon>
-{
- static const order_selector value = core_dispatch::point_order
- <
- ring_tag,
- typename ring_type<polygon_tag, Polygon>::type
- >::value ;
-};
-
-template <typename MultiPoint>
-struct point_order<multi_point_tag, MultiPoint>
- : public detail::point_order::clockwise {};
-
-template <typename MultiLinestring>
-struct point_order<multi_linestring_tag, MultiLinestring>
- : public detail::point_order::clockwise {};
-
-
-// Specialization for multi_polygon: the order is the order of its polygons
-template <typename MultiPolygon>
-struct point_order<multi_polygon_tag, MultiPolygon>
-{
- static const order_selector value = core_dispatch::point_order
- <
- polygon_tag,
- typename boost::range_value<MultiPolygon>::type
- >::value ;
-};
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief \brief_meta{value, point order (clockwise\, counterclockwise),
- \meta_geometry_type}
-\tparam Geometry \tparam_geometry
-\ingroup core
-
-\qbk{[include reference/core/point_order.qbk]}
-*/
-template <typename Geometry>
-struct point_order
-{
- static const order_selector value = core_dispatch::point_order
- <
- typename tag<Geometry>::type,
- typename util::bare_type<Geometry>::type
- >::value;
-};
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_CORE_POINT_ORDER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/point_type.hpp b/contrib/restricted/boost/boost/geometry/core/point_type.hpp
deleted file mode 100644
index f70e1fedd57..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/point_type.hpp
+++ /dev/null
@@ -1,162 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_POINT_TYPE_HPP
-#define BOOST_GEOMETRY_CORE_POINT_TYPE_HPP
-
-
-#include <boost/mpl/assert.hpp>
-#include <boost/range/value_type.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/util/bare_type.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-/*!
-\brief Traits class indicating the type of contained points
-\ingroup traits
-\par Geometries:
- - all geometries except point
-\par Specializations should provide:
- - typedef P type (where P should fulfil the Point concept)
-\tparam Geometry geometry
-*/
-template <typename Geometry>
-struct point_type
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE, (types<Geometry>)
- );
-};
-
-
-} // namespace traits
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename Tag, typename Geometry>
-struct point_type
-{
- // Default: call traits to get point type
- typedef typename boost::remove_const
- <
- typename traits::point_type<Geometry>::type
- >::type type;
-};
-
-
-// Specialization for point: the point itself
-template <typename Point>
-struct point_type<point_tag, Point>
-{
- typedef Point type;
-};
-
-
-// Specializations for linestring/ring, via boost::range
-template <typename Linestring>
-struct point_type<linestring_tag, Linestring>
-{
- typedef typename boost::range_value<Linestring>::type type;
-};
-
-
-template <typename Ring>
-struct point_type<ring_tag, Ring>
-{
- typedef typename boost::range_value<Ring>::type type;
-};
-
-
-// Specialization for polygon: the point-type is the point-type of its rings
-template <typename Polygon>
-struct point_type<polygon_tag, Polygon>
-{
- typedef typename point_type
- <
- ring_tag,
- typename ring_type<polygon_tag, Polygon>::type
- >::type type;
-};
-
-
-template <typename MultiPoint>
-struct point_type<multi_point_tag, MultiPoint>
-{
- typedef typename boost::range_value
- <
- MultiPoint
- >::type type;
-};
-
-
-template <typename MultiLinestring>
-struct point_type<multi_linestring_tag, MultiLinestring>
-{
- typedef typename point_type
- <
- linestring_tag,
- typename boost::range_value<MultiLinestring>::type
- >::type type;
-};
-
-
-template <typename MultiPolygon>
-struct point_type<multi_polygon_tag, MultiPolygon>
-{
- typedef typename point_type
- <
- polygon_tag,
- typename boost::range_value<MultiPolygon>::type
- >::type type;
-};
-
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief \brief_meta{type, point_type, \meta_geometry_type}
-\tparam Geometry \tparam_geometry
-\ingroup core
-
-\qbk{[include reference/core/point_type.qbk]}
-*/
-template <typename Geometry>
-struct point_type
-{
- typedef typename core_dispatch::point_type
- <
- typename tag<Geometry>::type,
- typename boost::geometry::util::bare_type<Geometry>::type
- >::type type;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_POINT_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/radian_access.hpp b/contrib/restricted/boost/boost/geometry/core/radian_access.hpp
deleted file mode 100644
index 993a6cc4c4d..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/radian_access.hpp
+++ /dev/null
@@ -1,263 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_RADIAN_ACCESS_HPP
-#define BOOST_GEOMETRY_CORE_RADIAN_ACCESS_HPP
-
-
-#include <cstddef>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-
-
-#include <boost/geometry/util/math.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template<std::size_t Dimension, typename Geometry>
-struct degree_radian_converter
-{
- typedef typename fp_coordinate_type<Geometry>::type coordinate_type;
-
- static inline coordinate_type get(Geometry const& geometry)
- {
- return boost::numeric_cast
- <
- coordinate_type
- >(geometry::get<Dimension>(geometry)
- * math::d2r<coordinate_type>());
- }
-
- static inline void set(Geometry& geometry, coordinate_type const& radians)
- {
- geometry::set<Dimension>(geometry, boost::numeric_cast
- <
- coordinate_type
- >(radians * math::r2d<coordinate_type>()));
- }
-
-};
-
-
-// Default, radian (or any other coordinate system) just works like "get"
-template <std::size_t Dimension, typename Geometry, typename DegreeOrRadian>
-struct radian_access
-{
- typedef typename fp_coordinate_type<Geometry>::type coordinate_type;
-
- static inline coordinate_type get(Geometry const& geometry)
- {
- return geometry::get<Dimension>(geometry);
- }
-
- static inline void set(Geometry& geometry, coordinate_type const& radians)
- {
- geometry::set<Dimension>(geometry, radians);
- }
-};
-
-// Specialize, any "degree" coordinate system will be converted to radian
-// but only for dimension 0,1 (so: dimension 2 and heigher are untouched)
-
-template
-<
- typename Geometry,
- template<typename> class CoordinateSystem
->
-struct radian_access<0, Geometry, CoordinateSystem<degree> >
- : degree_radian_converter<0, Geometry>
-{};
-
-
-template
-<
- typename Geometry,
- template<typename> class CoordinateSystem
->
-struct radian_access<1, Geometry, CoordinateSystem<degree> >
- : degree_radian_converter<1, Geometry>
-{};
-
-
-template<std::size_t Index, std::size_t Dimension, typename Geometry>
-struct degree_radian_converter_box_segment
-{
- typedef typename fp_coordinate_type<Geometry>::type coordinate_type;
-
- static inline coordinate_type get(Geometry const& geometry)
- {
- return boost::numeric_cast
- <
- coordinate_type
- >(geometry::get<Index, Dimension>(geometry)
- * math::d2r<coordinate_type>());
- }
-
- static inline void set(Geometry& geometry, coordinate_type const& radians)
- {
- geometry::set<Index, Dimension>(geometry, boost::numeric_cast
- <
- coordinate_type
- >(radians * math::r2d<coordinate_type>()));
- }
-
-};
-
-
-// Default, radian (or any other coordinate system) just works like "get"
-template <std::size_t Index, std::size_t Dimension, typename Geometry, typename DegreeOrRadian>
-struct radian_access_box_segment
-{
- typedef typename fp_coordinate_type<Geometry>::type coordinate_type;
-
- static inline coordinate_type get(Geometry const& geometry)
- {
- return geometry::get<Index, Dimension>(geometry);
- }
-
- static inline void set(Geometry& geometry, coordinate_type const& radians)
- {
- geometry::set<Index, Dimension>(geometry, radians);
- }
-};
-
-// Specialize, any "degree" coordinate system will be converted to radian
-// but only for dimension 0,1 (so: dimension 2 and heigher are untouched)
-
-template
-<
- typename Geometry,
- template<typename> class CoordinateSystem,
- std::size_t Index
->
-struct radian_access_box_segment<Index, 0, Geometry, CoordinateSystem<degree> >
- : degree_radian_converter_box_segment<Index, 0, Geometry>
-{};
-
-
-template
-<
- typename Geometry,
- template<typename> class CoordinateSystem,
- std::size_t Index
->
-struct radian_access_box_segment<Index, 1, Geometry, CoordinateSystem<degree> >
- : degree_radian_converter_box_segment<Index, 1, Geometry>
-{};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief get coordinate value of a point, result is in Radian
-\details Result is in Radian, even if source coordinate system
- is in Degrees
-\return coordinate value
-\ingroup get
-\tparam Dimension dimension
-\tparam Geometry geometry
-\param geometry geometry to get coordinate value from
-\note Only applicable to coordinate systems templatized by units,
- e.g. spherical or geographic coordinate systems
-*/
-template <std::size_t Dimension, typename Geometry>
-inline typename fp_coordinate_type<Geometry>::type get_as_radian(Geometry const& geometry)
-{
- return detail::radian_access<Dimension, Geometry,
- typename coordinate_system<Geometry>::type>::get(geometry);
-}
-
-/*!
-\brief set coordinate value (in radian) to a point
-\details Coordinate value will be set correctly, if coordinate system of
- point is in Degree, Radian value will be converted to Degree
-\ingroup set
-\tparam Dimension dimension
-\tparam Geometry geometry
-\param geometry geometry to assign coordinate to
-\param radians coordinate value to assign
-\note Only applicable to coordinate systems templatized by units,
- e.g. spherical or geographic coordinate systems
-*/
-template <std::size_t Dimension, typename Geometry>
-inline void set_from_radian(Geometry& geometry,
- typename fp_coordinate_type<Geometry>::type const& radians)
-{
- detail::radian_access<Dimension, Geometry,
- typename coordinate_system<Geometry>::type>::set(geometry, radians);
-}
-
-/*!
-\brief get coordinate value of a segment or box, result is in Radian
-\details Result is in Radian, even if source coordinate system
- is in Degrees
-\return coordinate value
-\ingroup get
-\tparam Index index
-\tparam Dimension dimension
-\tparam Geometry geometry
-\param geometry geometry to get coordinate value from
-\note Only applicable to coordinate systems templatized by units,
- e.g. spherical or geographic coordinate systems
-*/
-template <std::size_t Index, std::size_t Dimension, typename Geometry>
-inline typename fp_coordinate_type<Geometry>::type get_as_radian(Geometry const& geometry)
-{
- return detail::radian_access_box_segment<Index, Dimension, Geometry,
- typename coordinate_system<Geometry>::type>::get(geometry);
-}
-
-/*!
-\brief set coordinate value (in radian) to a segment or box
-\details Coordinate value will be set correctly, if coordinate system of
- point is in Degree, Radian value will be converted to Degree
-\ingroup set
-\tparam Index index
-\tparam Dimension dimension
-\tparam Geometry geometry
-\param geometry geometry to assign coordinate to
-\param radians coordinate value to assign
-\note Only applicable to coordinate systems templatized by units,
- e.g. spherical or geographic coordinate systems
-*/
-template <std::size_t Index, std::size_t Dimension, typename Geometry>
-inline void set_from_radian(Geometry& geometry,
- typename fp_coordinate_type<Geometry>::type const& radians)
-{
- detail::radian_access_box_segment<Index, Dimension, Geometry,
- typename coordinate_system<Geometry>::type>::set(geometry, radians);
-}
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_RADIAN_ACCESS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/radius.hpp b/contrib/restricted/boost/boost/geometry/core/radius.hpp
deleted file mode 100644
index eef812e9aed..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/radius.hpp
+++ /dev/null
@@ -1,251 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_RADIUS_HPP
-#define BOOST_GEOMETRY_CORE_RADIUS_HPP
-
-
-#include <cstddef>
-
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/is_pointer.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/util/bare_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-/*!
- \brief Traits class to get/set radius of a circle/sphere/(ellipse)
- \details the radius access meta-functions give read/write access to the radius of a circle or a sphere,
- or to the major/minor axis or an ellipse, or to one of the 3 equatorial radii of an ellipsoid.
-
- It should be specialized per geometry, in namespace core_dispatch. Those specializations should
- forward the call via traits to the geometry class, which could be specified by the user.
-
- There is a corresponding generic radius_get and radius_set function
- \par Geometries:
- - n-sphere (circle,sphere)
- - upcoming ellipse
- \par Specializations should provide:
- - inline static T get(Geometry const& geometry)
- - inline static void set(Geometry& geometry, T const& radius)
- \ingroup traits
-*/
-template <typename Geometry, std::size_t Dimension>
-struct radius_access {};
-
-
-/*!
- \brief Traits class indicating the type (double,float,...) of the radius of a circle or a sphere
- \par Geometries:
- - n-sphere (circle,sphere)
- - upcoming ellipse
- \par Specializations should provide:
- - typedef T type (double,float,int,etc)
- \ingroup traits
-*/
-template <typename Geometry>
-struct radius_type {};
-
-} // namespace traits
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename Tag, typename Geometry>
-struct radius_type
-{
- //typedef core_dispatch_specialization_required type;
-};
-
-/*!
- \brief radius access meta-functions, used by concept n-sphere and upcoming ellipse.
-*/
-template <typename Tag,
- typename Geometry,
- std::size_t Dimension,
- typename IsPointer>
-struct radius_access
-{
- //static inline CoordinateType get(Geometry const& ) {}
- //static inline void set(Geometry& g, CoordinateType const& value) {}
-};
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
- \brief Metafunction to get the type of radius of a circle / sphere / ellipse / etc.
- \ingroup access
- \tparam Geometry the type of geometry
-*/
-template <typename Geometry>
-struct radius_type
-{
- typedef typename core_dispatch::radius_type
- <
- typename tag<Geometry>::type,
- typename util::bare_type<Geometry>::type
- >::type type;
-};
-
-/*!
- \brief Function to get radius of a circle / sphere / ellipse / etc.
- \return radius The radius for a given axis
- \ingroup access
- \param geometry the geometry to get the radius from
- \tparam I index of the axis
-*/
-template <std::size_t I, typename Geometry>
-inline typename radius_type<Geometry>::type get_radius(Geometry const& geometry)
-{
- return core_dispatch::radius_access
- <
- typename tag<Geometry>::type,
- typename util::bare_type<Geometry>::type,
- I,
- typename boost::is_pointer<Geometry>::type
- >::get(geometry);
-}
-
-/*!
- \brief Function to set the radius of a circle / sphere / ellipse / etc.
- \ingroup access
- \tparam I index of the axis
- \param geometry the geometry to change
- \param radius the radius to set
-*/
-template <std::size_t I, typename Geometry>
-inline void set_radius(Geometry& geometry,
- typename radius_type<Geometry>::type const& radius)
-{
- core_dispatch::radius_access
- <
- typename tag<Geometry>::type,
- typename util::bare_type<Geometry>::type,
- I,
- typename boost::is_pointer<Geometry>::type
- >::set(geometry, radius);
-}
-
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Tag, typename Geometry, std::size_t Dimension>
-struct radius_access
-{
- static inline typename radius_type<Geometry>::type get(Geometry const& geometry)
- {
- return traits::radius_access<Geometry, Dimension>::get(geometry);
- }
- static inline void set(Geometry& geometry,
- typename radius_type<Geometry>::type const& value)
- {
- traits::radius_access<Geometry, Dimension>::set(geometry, value);
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename Tag,
- typename Geometry,
- std::size_t Dimension>
-struct radius_access<Tag, Geometry, Dimension, boost::true_type>
-{
- typedef typename geometry::radius_type<Geometry>::type radius_type;
-
- static inline radius_type get(const Geometry * geometry)
- {
- return radius_access
- <
- Tag,
- Geometry,
- Dimension,
- typename boost::is_pointer<Geometry>::type
- >::get(*geometry);
- }
-
- static inline void set(Geometry * geometry, radius_type const& value)
- {
- return radius_access
- <
- Tag,
- Geometry,
- Dimension,
- typename boost::is_pointer<Geometry>::type
- >::set(*geometry, value);
- }
-};
-
-
-template <typename Geometry>
-struct radius_type<srs_sphere_tag, Geometry>
-{
- typedef typename traits::radius_type<Geometry>::type type;
-};
-
-template <typename Geometry, std::size_t Dimension>
-struct radius_access<srs_sphere_tag, Geometry, Dimension, boost::false_type>
- : detail::radius_access<srs_sphere_tag, Geometry, Dimension>
-{
- //BOOST_STATIC_ASSERT(Dimension == 0);
- BOOST_STATIC_ASSERT(Dimension < 3);
-};
-
-template <typename Geometry>
-struct radius_type<srs_spheroid_tag, Geometry>
-{
- typedef typename traits::radius_type<Geometry>::type type;
-};
-
-template <typename Geometry, std::size_t Dimension>
-struct radius_access<srs_spheroid_tag, Geometry, Dimension, boost::false_type>
- : detail::radius_access<srs_spheroid_tag, Geometry, Dimension>
-{
- //BOOST_STATIC_ASSERT(Dimension == 0 || Dimension == 2);
- BOOST_STATIC_ASSERT(Dimension < 3);
-};
-
-} // namespace core_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_RADIUS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/reverse_dispatch.hpp b/contrib/restricted/boost/boost/geometry/core/reverse_dispatch.hpp
deleted file mode 100644
index c95182a34d5..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/reverse_dispatch.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_REVERSE_DISPATCH_HPP
-#define BOOST_GEOMETRY_CORE_REVERSE_DISPATCH_HPP
-
-
-#include <cstddef>
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-
-#include <boost/geometry/core/geometry_id.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-// Different geometries: reverse_dispatch if second ID < first ID
-template <std::size_t GeometryId1, std::size_t GeometryId2>
-struct reverse_dispatch : boost::mpl::if_c
- <
- (GeometryId1 > GeometryId2),
- boost::true_type,
- boost::false_type
- >
-{};
-
-
-// Same geometry: never reverse_dispatch
-template <std::size_t GeometryId>
-struct reverse_dispatch<GeometryId, GeometryId> : boost::false_type {};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-template <typename Geometry1, typename Geometry2>
-struct reverse_dispatch : detail::reverse_dispatch
- <
- geometry_id<Geometry1>::type::value,
- geometry_id<Geometry2>::type::value
- >
-{};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_CORE_REVERSE_DISPATCH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/ring_type.hpp b/contrib/restricted/boost/boost/geometry/core/ring_type.hpp
deleted file mode 100644
index c0079311263..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/ring_type.hpp
+++ /dev/null
@@ -1,226 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_RING_TYPE_HPP
-#define BOOST_GEOMETRY_CORE_RING_TYPE_HPP
-
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/range/value_type.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/remove_const.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-
-/*!
-\brief Traits class to indicate ring-type of a polygon's exterior ring/interior rings
-\ingroup traits
-\par Geometries:
- - polygon
-\par Specializations should provide:
- - typedef XXX type ( e.g. ring<P> )
-\tparam Geometry geometry
-*/
-template <typename Geometry>
-struct ring_const_type
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-template <typename Geometry>
-struct ring_mutable_type
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-
-} // namespace traits
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-template <typename GeometryTag, typename Geometry>
-struct ring_return_type
-{};
-
-
-template <typename LineString>
-struct ring_return_type<linestring_tag, LineString>
-{
- typedef LineString& type;
-};
-
-
-template <typename Ring>
-struct ring_return_type<ring_tag, Ring>
-{
- typedef Ring& type;
-};
-
-
-template <typename Polygon>
-struct ring_return_type<polygon_tag, Polygon>
-{
- typedef typename boost::remove_const<Polygon>::type nc_polygon_type;
-
- typedef typename boost::mpl::if_
- <
- boost::is_const<Polygon>,
- typename traits::ring_const_type<nc_polygon_type>::type,
- typename traits::ring_mutable_type<nc_polygon_type>::type
- >::type type;
-};
-
-
-template <typename MultiLinestring>
-struct ring_return_type<multi_linestring_tag, MultiLinestring>
-{
- typedef typename ring_return_type
- <
- linestring_tag,
- typename boost::mpl::if_
- <
- boost::is_const<MultiLinestring>,
- typename boost::range_value<MultiLinestring>::type const,
- typename boost::range_value<MultiLinestring>::type
- >::type
- >::type type;
-};
-
-
-template <typename MultiPolygon>
-struct ring_return_type<multi_polygon_tag, MultiPolygon>
-{
- typedef typename ring_return_type
- <
- polygon_tag,
- typename boost::mpl::if_
- <
- boost::is_const<MultiPolygon>,
- typename boost::range_value<MultiPolygon>::type const,
- typename boost::range_value<MultiPolygon>::type
- >::type
- >::type type;
-};
-
-
-template <typename GeometryTag, typename Geometry>
-struct ring_type
-{};
-
-
-template <typename Ring>
-struct ring_type<ring_tag, Ring>
-{
- typedef Ring type;
-};
-
-
-template <typename Polygon>
-struct ring_type<polygon_tag, Polygon>
-{
- typedef typename boost::remove_reference
- <
- typename ring_return_type<polygon_tag, Polygon>::type
- >::type type;
-};
-
-
-template <typename MultiLinestring>
-struct ring_type<multi_linestring_tag, MultiLinestring>
-{
- typedef typename boost::remove_reference
- <
- typename ring_return_type<multi_linestring_tag, MultiLinestring>::type
- >::type type;
-};
-
-
-template <typename MultiPolygon>
-struct ring_type<multi_polygon_tag, MultiPolygon>
-{
- typedef typename boost::remove_reference
- <
- typename ring_return_type<multi_polygon_tag, MultiPolygon>::type
- >::type type;
-};
-
-
-} // namespace core_dispatch
-#endif
-
-
-/*!
-\brief \brief_meta{type, ring_type, \meta_geometry_type}
-\details A polygon contains one exterior ring
- and zero or more interior rings (holes).
- This metafunction retrieves the type of the rings.
- Exterior ring and each of the interior rings all have the same ring_type.
-\tparam Geometry A type fullfilling the Ring, Polygon or MultiPolygon concept.
-\ingroup core
-
-\qbk{[include reference/core/ring_type.qbk]}
-*/
-template <typename Geometry>
-struct ring_type
-{
- typedef typename core_dispatch::ring_type
- <
- typename tag<Geometry>::type,
- Geometry
- >::type type;
-};
-
-
-template <typename Geometry>
-struct ring_return_type
-{
- typedef typename core_dispatch::ring_return_type
- <
- typename tag<Geometry>::type,
- Geometry
- >::type type;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_RING_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/tag.hpp b/contrib/restricted/boost/boost/geometry/core/tag.hpp
deleted file mode 100644
index 14a22427086..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/tag.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_TAG_HPP
-#define BOOST_GEOMETRY_CORE_TAG_HPP
-
-
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/util/bare_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-/*!
-\brief Traits class to attach a tag to a geometry
-\details All geometries should implement a traits::tag<G>::type metafunction to indicate their
- own geometry type.
-\ingroup traits
-\par Geometries:
- - all geometries
-\par Specializations should provide:
- - typedef XXX_tag type; (point_tag, box_tag, ...)
-\tparam Geometry geometry
-*/
-template <typename Geometry, typename Enable = void>
-struct tag
-{
- typedef void type;
-};
-
-} // namespace traits
-
-
-
-/*!
-\brief \brief_meta{type, tag, \meta_geometry_type}
-\details With Boost.Geometry, tags are the driving force of the tag dispatching
- mechanism. The tag metafunction is therefore used in every free function.
-\tparam Geometry \tparam_geometry
-\ingroup core
-
-\qbk{[include reference/core/tag.qbk]}
-*/
-template <typename Geometry>
-struct tag
-{
- typedef typename traits::tag
- <
- typename geometry::util::bare_type<Geometry>::type
- >::type type;
-};
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_CORE_TAG_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/tag_cast.hpp b/contrib/restricted/boost/boost/geometry/core/tag_cast.hpp
deleted file mode 100644
index e03d841f49a..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/tag_cast.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_TAG_CAST_HPP
-#define BOOST_GEOMETRY_CORE_TAG_CAST_HPP
-
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_base_of.hpp>
-
-namespace boost { namespace geometry
-{
-
-/*!
-\brief Metafunction defining a type being either the specified tag, or one
- of the specified basetags if the type inherits from them.
-\details Tags can inherit each other. A multi_point inherits, for example,
- both the multi_tag and the pointlike_tag. Often behaviour can be shared
- between different geometry types. A tag, found by the metafunction tag,
- can be casted to a more basic tag, and then dispatched by that tag.
-\ingroup core
-\tparam Tag The tag to be casted to one of the base tags
-\tparam BaseTag First base tag
-\tparam BaseTag2 Optional second base tag
-\tparam BaseTag3 Optional third base tag
-\tparam BaseTag4 Optional fourth base tag
-\tparam BaseTag5 Optional fifth base tag
-\tparam BaseTag6 Optional sixth base tag
-\tparam BaseTag7 Optional seventh base tag
-
-\qbk{[include reference/core/tag_cast.qbk]}
-*/
-template
-<
- typename Tag,
- typename BaseTag,
- typename BaseTag2 = void,
- typename BaseTag3 = void,
- typename BaseTag4 = void,
- typename BaseTag5 = void,
- typename BaseTag6 = void,
- typename BaseTag7 = void
->
-struct tag_cast
-{
- typedef typename boost::mpl::if_
- <
- typename boost::is_base_of<BaseTag, Tag>::type,
- BaseTag,
- // Try next one in line:
- typename tag_cast
- <
- Tag, BaseTag2, BaseTag3, BaseTag4,
- BaseTag5, BaseTag6, BaseTag7, void
- >::type
- >::type type;
-};
-
-#ifndef DOXYGEN_NO_SPECIALIZATIONS
-
-// Specialization for last one
-template <typename Tag>
-struct tag_cast<Tag, void, void, void, void, void, void, void>
-{
- // If not found, take specified tag, so do not cast
- typedef Tag type;
-};
-
-#endif // DOXYGEN_NO_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_CORE_TAG_CAST_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/tags.hpp b/contrib/restricted/boost/boost/geometry/core/tags.hpp
deleted file mode 100644
index 5d6acb18780..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/tags.hpp
+++ /dev/null
@@ -1,150 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_TAGS_HPP
-#define BOOST_GEOMETRY_CORE_TAGS_HPP
-
-
-namespace boost { namespace geometry
-{
-
-// Tags defining strategies linked to coordinate systems
-
-/// Tag used for casting spherical/geographic coordinate systems
-struct spherical_tag {};
-
-
-/// Tag indicating Cartesian coordinate system family (cartesian,epsg)
-struct cartesian_tag {};
-
-/// Tag indicating Spherical polar coordinate system family
-struct spherical_polar_tag : spherical_tag {};
-
-/// Tag indicating Spherical equatorial coordinate system family
-struct spherical_equatorial_tag : spherical_tag {};
-
-/// Tag indicating Geographic coordinate system family (geographic)
-struct geographic_tag : spherical_tag {};
-
-
-// Tags defining coordinate systems reference models
-
-/// For reference spheroid defining parameters of geographical coordinate system
-struct srs_spheroid_tag {};
-
-/// For reference sphere defining parameters of spherical coordinate system
-struct srs_sphere_tag : srs_spheroid_tag {};
-
-
-// Tags defining tag hierarchy
-
-/// For single-geometries (point, linestring, polygon, box, ring, segment)
-struct single_tag {};
-
-
-/// For multiple-geometries (multi_point, multi_linestring, multi_polygon)
-struct multi_tag {};
-
-/// For point-like types (point, multi_point)
-struct pointlike_tag {};
-
-/// For linear types (linestring, multi-linestring, segment)
-struct linear_tag {};
-
-/// For areal types (polygon, multi_polygon, box, ring)
-struct areal_tag {};
-
-// Subset of areal types (polygon, multi_polygon, ring)
-struct polygonal_tag : areal_tag {};
-
-/// For volume types (also box (?), polyhedron)
-struct volumetric_tag {};
-
-
-// Tags defining geometry types
-
-
-/// "default" tag
-struct geometry_not_recognized_tag {};
-
-/// OGC Point identifying tag
-struct point_tag : single_tag, pointlike_tag {};
-
-/// OGC Linestring identifying tag
-struct linestring_tag : single_tag, linear_tag {};
-
-/// OGC Polygon identifying tag
-struct polygon_tag : single_tag, polygonal_tag {};
-
-/// Convenience (linear) ring identifying tag
-struct ring_tag : single_tag, polygonal_tag {};
-
-/// Convenience 2D or 3D box (mbr / aabb) identifying tag
-struct box_tag : single_tag, areal_tag {};
-
-/// Convenience segment (2-points) identifying tag
-struct segment_tag : single_tag, linear_tag {};
-
-
-/// OGC Multi point identifying tag
-struct multi_point_tag : multi_tag, pointlike_tag {};
-
-/// OGC Multi linestring identifying tag
-struct multi_linestring_tag : multi_tag, linear_tag {};
-
-/// OGC Multi polygon identifying tag
-struct multi_polygon_tag : multi_tag, polygonal_tag {};
-
-/// OGC Geometry Collection identifying tag
-struct geometry_collection_tag : multi_tag {};
-
-
-/*!
-\brief Meta-function to get for a tag of a multi-geometry
- the tag of the corresponding single-geometry
-*/
-template <typename Tag>
-struct single_tag_of
-{};
-
-#ifndef DOXYGEN_NO_DETAIL
-
-template <>
-struct single_tag_of<multi_point_tag>
-{
- typedef point_tag type;
-};
-
-template <>
-struct single_tag_of<multi_linestring_tag>
-{
- typedef linestring_tag type;
-};
-
-template <>
-struct single_tag_of<multi_polygon_tag>
-{
- typedef polygon_tag type;
-};
-
-#endif
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_CORE_TAGS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/core/topological_dimension.hpp b/contrib/restricted/boost/boost/geometry/core/topological_dimension.hpp
deleted file mode 100644
index 22ed676fc61..00000000000
--- a/contrib/restricted/boost/boost/geometry/core/topological_dimension.hpp
+++ /dev/null
@@ -1,101 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_CORE_TOPOLOGICAL_DIMENSION_HPP
-#define BOOST_GEOMETRY_CORE_TOPOLOGICAL_DIMENSION_HPP
-
-
-#include <boost/mpl/int.hpp>
-
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace core_dispatch
-{
-
-
-template <typename GeometryTag>
-struct top_dim {};
-
-
-template <>
-struct top_dim<point_tag> : boost::mpl::int_<0> {};
-
-
-template <>
-struct top_dim<linestring_tag> : boost::mpl::int_<1> {};
-
-
-template <>
-struct top_dim<segment_tag> : boost::mpl::int_<1> {};
-
-
-// ring: topological dimension of two, but some people say: 1 !!
-// NOTE: This is not OGC LinearRing!
-template <>
-struct top_dim<ring_tag> : boost::mpl::int_<2> {};
-
-
-// TODO: This is wrong! Boxes may have various topological dimensions
-template <>
-struct top_dim<box_tag> : boost::mpl::int_<2> {};
-
-
-template <>
-struct top_dim<polygon_tag> : boost::mpl::int_<2> {};
-
-
-template <>
-struct top_dim<multi_point_tag> : boost::mpl::int_<0> {};
-
-
-template <>
-struct top_dim<multi_linestring_tag> : boost::mpl::int_<1> {};
-
-
-template <>
-struct top_dim<multi_polygon_tag> : boost::mpl::int_<2> {};
-
-
-} // namespace core_dispatch
-#endif
-
-
-
-
-
-/*!
- \brief Meta-function returning the topological dimension of a geometry
- \details The topological dimension defines a point as 0-dimensional,
- a linestring as 1-dimensional,
- and a ring or polygon as 2-dimensional.
- \see http://www.math.okstate.edu/mathdept/dynamics/lecnotes/node36.html
- \ingroup core
-*/
-template <typename Geometry>
-struct topological_dimension
- : core_dispatch::top_dim<typename tag<Geometry>::type> {};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_CORE_TOPOLOGICAL_DIMENSION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/andoyer_inverse.hpp b/contrib/restricted/boost/boost/geometry/formulas/andoyer_inverse.hpp
deleted file mode 100644
index 7513e3b70d8..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/andoyer_inverse.hpp
+++ /dev/null
@@ -1,282 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2018 Adam Wulkiewicz, Lodz, Poland.
-
-// Copyright (c) 2015-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_ANDOYER_INVERSE_HPP
-#define BOOST_GEOMETRY_FORMULAS_ANDOYER_INVERSE_HPP
-
-
-#include <boost/math/constants/constants.hpp>
-
-#include <boost/geometry/core/radius.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/formulas/differential_quantities.hpp>
-#include <boost/geometry/formulas/flattening.hpp>
-#include <boost/geometry/formulas/result_inverse.hpp>
-
-
-namespace boost { namespace geometry { namespace formula
-{
-
-/*!
-\brief The solution of the inverse problem of geodesics on latlong coordinates,
- Forsyth-Andoyer-Lambert type approximation with first order terms.
-\author See
- - Technical Report: PAUL D. THOMAS, MATHEMATICAL MODELS FOR NAVIGATION SYSTEMS, 1965
- http://www.dtic.mil/docs/citations/AD0627893
- - Technical Report: PAUL D. THOMAS, SPHEROIDAL GEODESICS, REFERENCE SYSTEMS, AND LOCAL GEOMETRY, 1970
- http://www.dtic.mil/docs/citations/AD703541
-*/
-template <
- typename CT,
- bool EnableDistance,
- bool EnableAzimuth,
- bool EnableReverseAzimuth = false,
- bool EnableReducedLength = false,
- bool EnableGeodesicScale = false
->
-class andoyer_inverse
-{
- static const bool CalcQuantities = EnableReducedLength || EnableGeodesicScale;
- static const bool CalcAzimuths = EnableAzimuth || EnableReverseAzimuth || CalcQuantities;
- static const bool CalcFwdAzimuth = EnableAzimuth || CalcQuantities;
- static const bool CalcRevAzimuth = EnableReverseAzimuth || CalcQuantities;
-
-public:
- typedef result_inverse<CT> result_type;
-
- template <typename T1, typename T2, typename Spheroid>
- static inline result_type apply(T1 const& lon1,
- T1 const& lat1,
- T2 const& lon2,
- T2 const& lat2,
- Spheroid const& spheroid)
- {
- result_type result;
-
- // coordinates in radians
-
- if ( math::equals(lon1, lon2) && math::equals(lat1, lat2) )
- {
- return result;
- }
-
- CT const c0 = CT(0);
- CT const c1 = CT(1);
- CT const pi = math::pi<CT>();
- CT const f = formula::flattening<CT>(spheroid);
-
- CT const dlon = lon2 - lon1;
- CT const sin_dlon = sin(dlon);
- CT const cos_dlon = cos(dlon);
- CT const sin_lat1 = sin(lat1);
- CT const cos_lat1 = cos(lat1);
- CT const sin_lat2 = sin(lat2);
- CT const cos_lat2 = cos(lat2);
-
- // H,G,T = infinity if cos_d = 1 or cos_d = -1
- // lat1 == +-90 && lat2 == +-90
- // lat1 == lat2 && lon1 == lon2
- CT cos_d = sin_lat1*sin_lat2 + cos_lat1*cos_lat2*cos_dlon;
- // on some platforms cos_d may be outside valid range
- if (cos_d < -c1)
- cos_d = -c1;
- else if (cos_d > c1)
- cos_d = c1;
-
- CT const d = acos(cos_d); // [0, pi]
- CT const sin_d = sin(d); // [-1, 1]
-
- if ( BOOST_GEOMETRY_CONDITION(EnableDistance) )
- {
- CT const K = math::sqr(sin_lat1-sin_lat2);
- CT const L = math::sqr(sin_lat1+sin_lat2);
- CT const three_sin_d = CT(3) * sin_d;
-
- CT const one_minus_cos_d = c1 - cos_d;
- CT const one_plus_cos_d = c1 + cos_d;
- // cos_d = 1 or cos_d = -1 means that the points are antipodal
-
- CT const H = math::equals(one_minus_cos_d, c0) ?
- c0 :
- (d + three_sin_d) / one_minus_cos_d;
- CT const G = math::equals(one_plus_cos_d, c0) ?
- c0 :
- (d - three_sin_d) / one_plus_cos_d;
-
- CT const dd = -(f/CT(4))*(H*K+G*L);
-
- CT const a = CT(get_radius<0>(spheroid));
-
- result.distance = a * (d + dd);
- }
-
- if ( BOOST_GEOMETRY_CONDITION(CalcAzimuths) )
- {
- // sin_d = 0 <=> antipodal points (incl. poles)
- if (math::equals(sin_d, c0))
- {
- // T = inf
- // dA = inf
- // azimuth = -inf
-
- // TODO: The following azimuths are inconsistent with distance
- // i.e. according to azimuths below a segment with antipodal endpoints
- // travels through the north pole, however the distance returned above
- // is the length of a segment traveling along the equator.
- // Furthermore, this special case handling is only done in andoyer
- // formula.
- // The most correct way of fixing it is to handle antipodal regions
- // correctly and consistently across all formulas.
-
- // Set azimuth to 0 unless the first endpoint is the north pole
- if (! math::equals(sin_lat1, c1))
- {
- result.azimuth = c0;
- result.reverse_azimuth = pi;
- }
- else
- {
- result.azimuth = pi;
- result.reverse_azimuth = 0;
- }
- }
- else
- {
- CT const c2 = CT(2);
-
- CT A = c0;
- CT U = c0;
- if (math::equals(cos_lat2, c0))
- {
- if (sin_lat2 < c0)
- {
- A = pi;
- }
- }
- else
- {
- CT const tan_lat2 = sin_lat2/cos_lat2;
- CT const M = cos_lat1*tan_lat2-sin_lat1*cos_dlon;
- A = atan2(sin_dlon, M);
- CT const sin_2A = sin(c2*A);
- U = (f/ c2)*math::sqr(cos_lat1)*sin_2A;
- }
-
- CT B = c0;
- CT V = c0;
- if (math::equals(cos_lat1, c0))
- {
- if (sin_lat1 < c0)
- {
- B = pi;
- }
- }
- else
- {
- CT const tan_lat1 = sin_lat1/cos_lat1;
- CT const N = cos_lat2*tan_lat1-sin_lat2*cos_dlon;
- B = atan2(sin_dlon, N);
- CT const sin_2B = sin(c2*B);
- V = (f/ c2)*math::sqr(cos_lat2)*sin_2B;
- }
-
- CT const T = d / sin_d;
-
- // even with sin_d == 0 checked above if the second point
- // is somewhere in the antipodal area T may still be great
- // therefore dA and dB may be great and the resulting azimuths
- // may be some more or less arbitrary angles
-
- if (BOOST_GEOMETRY_CONDITION(CalcFwdAzimuth))
- {
- CT const dA = V*T - U;
- result.azimuth = A - dA;
- normalize_azimuth(result.azimuth, A, dA);
- }
-
- if (BOOST_GEOMETRY_CONDITION(CalcRevAzimuth))
- {
- CT const dB = -U*T + V;
- if (B >= 0)
- result.reverse_azimuth = pi - B - dB;
- else
- result.reverse_azimuth = -pi - B - dB;
- normalize_azimuth(result.reverse_azimuth, B, dB);
- }
- }
- }
-
- if (BOOST_GEOMETRY_CONDITION(CalcQuantities))
- {
- CT const b = CT(get_radius<2>(spheroid));
-
- typedef differential_quantities<CT, EnableReducedLength, EnableGeodesicScale, 1> quantities;
- quantities::apply(dlon, sin_lat1, cos_lat1, sin_lat2, cos_lat2,
- result.azimuth, result.reverse_azimuth,
- b, f,
- result.reduced_length, result.geodesic_scale);
- }
-
- return result;
- }
-
-private:
- static inline void normalize_azimuth(CT & azimuth, CT const& A, CT const& dA)
- {
- CT const c0 = 0;
-
- if (A >= c0) // A indicates Eastern hemisphere
- {
- if (dA >= c0) // A altered towards 0
- {
- if (azimuth < c0)
- {
- azimuth = c0;
- }
- }
- else // dA < 0, A altered towards pi
- {
- CT const pi = math::pi<CT>();
- if (azimuth > pi)
- {
- azimuth = pi;
- }
- }
- }
- else // A indicates Western hemisphere
- {
- if (dA <= c0) // A altered towards 0
- {
- if (azimuth > c0)
- {
- azimuth = c0;
- }
- }
- else // dA > 0, A altered towards -pi
- {
- CT const minus_pi = -math::pi<CT>();
- if (azimuth < minus_pi)
- {
- azimuth = minus_pi;
- }
- }
- }
- }
-};
-
-}}} // namespace boost::geometry::formula
-
-
-#endif // BOOST_GEOMETRY_FORMULAS_ANDOYER_INVERSE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/area_formulas.hpp b/contrib/restricted/boost/boost/geometry/formulas/area_formulas.hpp
deleted file mode 100644
index 9243c7f749d..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/area_formulas.hpp
+++ /dev/null
@@ -1,573 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2015-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_AREA_FORMULAS_HPP
-#define BOOST_GEOMETRY_FORMULAS_AREA_FORMULAS_HPP
-
-#include <boost/geometry/formulas/flattening.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-namespace boost { namespace geometry { namespace formula
-{
-
-/*!
-\brief Formulas for computing spherical and ellipsoidal polygon area.
- The current class computes the area of the trapezoid defined by a segment
- the two meridians passing by the endpoints and the equator.
-\author See
-- Danielsen JS, The area under the geodesic. Surv Rev 30(232):
-61–66, 1989
-- Charles F.F Karney, Algorithms for geodesics, 2011
-https://arxiv.org/pdf/1109.4448.pdf
-*/
-
-template <
- typename CT,
- std::size_t SeriesOrder = 2,
- bool ExpandEpsN = true
->
-class area_formulas
-{
-
-public:
-
- //TODO: move the following to a more general space to be used by other
- // classes as well
- /*
- Evaluate the polynomial in x using Horner's method.
- */
- template <typename NT, typename IteratorType>
- static inline NT horner_evaluate(NT x,
- IteratorType begin,
- IteratorType end)
- {
- NT result(0);
- IteratorType it = end;
- do
- {
- result = result * x + *--it;
- }
- while (it != begin);
- return result;
- }
-
- /*
- Clenshaw algorithm for summing trigonometric series
- https://en.wikipedia.org/wiki/Clenshaw_algorithm
- */
- template <typename NT, typename IteratorType>
- static inline NT clenshaw_sum(NT cosx,
- IteratorType begin,
- IteratorType end)
- {
- IteratorType it = end;
- bool odd = true;
- CT b_k, b_k1(0), b_k2(0);
- do
- {
- CT c_k = odd ? *--it : NT(0);
- b_k = c_k + NT(2) * cosx * b_k1 - b_k2;
- b_k2 = b_k1;
- b_k1 = b_k;
- odd = !odd;
- }
- while (it != begin);
-
- return *begin + b_k1 * cosx - b_k2;
- }
-
- template<typename T>
- static inline void normalize(T& x, T& y)
- {
- T h = boost::math::hypot(x, y);
- x /= h;
- y /= h;
- }
-
- /*
- Generate and evaluate the series expansion of the following integral
-
- I4 = -integrate( (t(ep2) - t(k2*sin(sigma1)^2)) / (ep2 - k2*sin(sigma1)^2)
- * sin(sigma1)/2, sigma1, pi/2, sigma )
- where
-
- t(x) = sqrt(1+1/x)*asinh(sqrt(x)) + x
-
- valid for ep2 and k2 small. We substitute k2 = 4 * eps / (1 - eps)^2
- and ep2 = 4 * n / (1 - n)^2 and expand in eps and n.
-
- The resulting sum of the series is of the form
-
- sum(C4[l] * cos((2*l+1)*sigma), l, 0, maxpow-1) )
-
- The above expansion is performed in Computer Algebra System Maxima.
- The C++ code (that yields the function evaluate_coeffs_n below) is generated
- by the following Maxima script and is based on script:
- http://geographiclib.sourceforge.net/html/geod.mac
-
- // Maxima script begin
- taylordepth:5$
- ataylor(expr,var,ord):=expand(ratdisrep(taylor(expr,var,0,ord)))$
- jtaylor(expr,var1,var2,ord):=block([zz],expand(subst([zz=1],
- ratdisrep(taylor(subst([var1=zz*var1,var2=zz*var2],expr),zz,0,ord)))))$
-
- compute(maxpow):=block([int,t,intexp,area, x,ep2,k2],
- maxpow:maxpow-1,
- t : sqrt(1+1/x) * asinh(sqrt(x)) + x,
- int:-(tf(ep2) - tf(k2*sin(sigma)^2)) / (ep2 - k2*sin(sigma)^2)
- * sin(sigma)/2,
- int:subst([tf(ep2)=subst([x=ep2],t),
- tf(k2*sin(sigma)^2)=subst([x=k2*sin(sigma)^2],t)],
- int),
- int:subst([abs(sin(sigma))=sin(sigma)],int),
- int:subst([k2=4*eps/(1-eps)^2,ep2=4*n/(1-n)^2],int),
- intexp:jtaylor(int,n,eps,maxpow),
- area:trigreduce(integrate(intexp,sigma)),
- area:expand(area-subst(sigma=%pi/2,area)),
- for i:0 thru maxpow do C4[i]:coeff(area,cos((2*i+1)*sigma)),
- if expand(area-sum(C4[i]*cos((2*i+1)*sigma),i,0,maxpow)) # 0
- then error("left over terms in I4"),
- 'done)$
-
- printcode(maxpow):=
- block([tab2:" ",tab3:" "],
- print(" switch (SeriesOrder) {"),
- for nn:1 thru maxpow do block([c],
- print(concat(tab2,"case ",string(nn-1),":")),
- c:0,
- for m:0 thru nn-1 do block(
- [q:jtaylor(subst([n=n],C4[m]),n,eps,nn-1),
- linel:1200],
- for j:m thru nn-1 do (
- print(concat(tab3,"coeffs_n[",c,"] = ",
- string(horner(coeff(q,eps,j))),";")),
- c:c+1)
- ),
- print(concat(tab3,"break;"))),
- print(" }"),
- 'done)$
-
- maxpow:6$
- compute(maxpow)$
- printcode(maxpow)$
- // Maxima script end
-
- In the resulting code we should replace each number x by CT(x)
- e.g. using the following scirpt:
- sed -e 's/[0-9]\+/CT(&)/g; s/\[CT(/\[/g; s/)\]/\]/g;
- s/case\sCT(/case /g; s/):/:/g'
- */
-
- static inline void evaluate_coeffs_n(CT n, CT coeffs_n[])
- {
-
- switch (SeriesOrder) {
- case 0:
- coeffs_n[0] = CT(2)/CT(3);
- break;
- case 1:
- coeffs_n[0] = (CT(10)-CT(4)*n)/CT(15);
- coeffs_n[1] = -CT(1)/CT(5);
- coeffs_n[2] = CT(1)/CT(45);
- break;
- case 2:
- coeffs_n[0] = (n*(CT(8)*n-CT(28))+CT(70))/CT(105);
- coeffs_n[1] = (CT(16)*n-CT(7))/CT(35);
- coeffs_n[2] = -CT(2)/CT(105);
- coeffs_n[3] = (CT(7)-CT(16)*n)/CT(315);
- coeffs_n[4] = -CT(2)/CT(105);
- coeffs_n[5] = CT(4)/CT(525);
- break;
- case 3:
- coeffs_n[0] = (n*(n*(CT(4)*n+CT(24))-CT(84))+CT(210))/CT(315);
- coeffs_n[1] = ((CT(48)-CT(32)*n)*n-CT(21))/CT(105);
- coeffs_n[2] = (-CT(32)*n-CT(6))/CT(315);
- coeffs_n[3] = CT(11)/CT(315);
- coeffs_n[4] = (n*(CT(32)*n-CT(48))+CT(21))/CT(945);
- coeffs_n[5] = (CT(64)*n-CT(18))/CT(945);
- coeffs_n[6] = -CT(1)/CT(105);
- coeffs_n[7] = (CT(12)-CT(32)*n)/CT(1575);
- coeffs_n[8] = -CT(8)/CT(1575);
- coeffs_n[9] = CT(8)/CT(2205);
- break;
- case 4:
- coeffs_n[0] = (n*(n*(n*(CT(16)*n+CT(44))+CT(264))-CT(924))+CT(2310))/CT(3465);
- coeffs_n[1] = (n*(n*(CT(48)*n-CT(352))+CT(528))-CT(231))/CT(1155);
- coeffs_n[2] = (n*(CT(1088)*n-CT(352))-CT(66))/CT(3465);
- coeffs_n[3] = (CT(121)-CT(368)*n)/CT(3465);
- coeffs_n[4] = CT(4)/CT(1155);
- coeffs_n[5] = (n*((CT(352)-CT(48)*n)*n-CT(528))+CT(231))/CT(10395);
- coeffs_n[6] = ((CT(704)-CT(896)*n)*n-CT(198))/CT(10395);
- coeffs_n[7] = (CT(80)*n-CT(99))/CT(10395);
- coeffs_n[8] = CT(4)/CT(1155);
- coeffs_n[9] = (n*(CT(320)*n-CT(352))+CT(132))/CT(17325);
- coeffs_n[10] = (CT(384)*n-CT(88))/CT(17325);
- coeffs_n[11] = -CT(8)/CT(1925);
- coeffs_n[12] = (CT(88)-CT(256)*n)/CT(24255);
- coeffs_n[13] = -CT(16)/CT(8085);
- coeffs_n[14] = CT(64)/CT(31185);
- break;
- case 5:
- coeffs_n[0] = (n*(n*(n*(n*(CT(100)*n+CT(208))+CT(572))+CT(3432))-CT(12012))+CT(30030))
- /CT(45045);
- coeffs_n[1] = (n*(n*(n*(CT(64)*n+CT(624))-CT(4576))+CT(6864))-CT(3003))/CT(15015);
- coeffs_n[2] = (n*((CT(14144)-CT(10656)*n)*n-CT(4576))-CT(858))/CT(45045);
- coeffs_n[3] = ((-CT(224)*n-CT(4784))*n+CT(1573))/CT(45045);
- coeffs_n[4] = (CT(1088)*n+CT(156))/CT(45045);
- coeffs_n[5] = CT(97)/CT(15015);
- coeffs_n[6] = (n*(n*((-CT(64)*n-CT(624))*n+CT(4576))-CT(6864))+CT(3003))/CT(135135);
- coeffs_n[7] = (n*(n*(CT(5952)*n-CT(11648))+CT(9152))-CT(2574))/CT(135135);
- coeffs_n[8] = (n*(CT(5792)*n+CT(1040))-CT(1287))/CT(135135);
- coeffs_n[9] = (CT(468)-CT(2944)*n)/CT(135135);
- coeffs_n[10] = CT(1)/CT(9009);
- coeffs_n[11] = (n*((CT(4160)-CT(1440)*n)*n-CT(4576))+CT(1716))/CT(225225);
- coeffs_n[12] = ((CT(4992)-CT(8448)*n)*n-CT(1144))/CT(225225);
- coeffs_n[13] = (CT(1856)*n-CT(936))/CT(225225);
- coeffs_n[14] = CT(8)/CT(10725);
- coeffs_n[15] = (n*(CT(3584)*n-CT(3328))+CT(1144))/CT(315315);
- coeffs_n[16] = (CT(1024)*n-CT(208))/CT(105105);
- coeffs_n[17] = -CT(136)/CT(63063);
- coeffs_n[18] = (CT(832)-CT(2560)*n)/CT(405405);
- coeffs_n[19] = -CT(128)/CT(135135);
- coeffs_n[20] = CT(128)/CT(99099);
- break;
- }
- }
-
- /*
- Expand in k2 and ep2.
- */
- static inline void evaluate_coeffs_ep(CT ep, CT coeffs_n[])
- {
- switch (SeriesOrder) {
- case 0:
- coeffs_n[0] = CT(2)/CT(3);
- break;
- case 1:
- coeffs_n[0] = (CT(10)-ep)/CT(15);
- coeffs_n[1] = -CT(1)/CT(20);
- coeffs_n[2] = CT(1)/CT(180);
- break;
- case 2:
- coeffs_n[0] = (ep*(CT(4)*ep-CT(7))+CT(70))/CT(105);
- coeffs_n[1] = (CT(4)*ep-CT(7))/CT(140);
- coeffs_n[2] = CT(1)/CT(42);
- coeffs_n[3] = (CT(7)-CT(4)*ep)/CT(1260);
- coeffs_n[4] = -CT(1)/CT(252);
- coeffs_n[5] = CT(1)/CT(2100);
- break;
- case 3:
- coeffs_n[0] = (ep*((CT(12)-CT(8)*ep)*ep-CT(21))+CT(210))/CT(315);
- coeffs_n[1] = ((CT(12)-CT(8)*ep)*ep-CT(21))/CT(420);
- coeffs_n[2] = (CT(3)-CT(2)*ep)/CT(126);
- coeffs_n[3] = -CT(1)/CT(72);
- coeffs_n[4] = (ep*(CT(8)*ep-CT(12))+CT(21))/CT(3780);
- coeffs_n[5] = (CT(2)*ep-CT(3))/CT(756);
- coeffs_n[6] = CT(1)/CT(360);
- coeffs_n[7] = (CT(3)-CT(2)*ep)/CT(6300);
- coeffs_n[8] = -CT(1)/CT(1800);
- coeffs_n[9] = CT(1)/CT(17640);
- break;
- case 4:
- coeffs_n[0] = (ep*(ep*(ep*(CT(64)*ep-CT(88))+CT(132))-CT(231))+CT(2310))/CT(3465);
- coeffs_n[1] = (ep*(ep*(CT(64)*ep-CT(88))+CT(132))-CT(231))/CT(4620);
- coeffs_n[2] = (ep*(CT(16)*ep-CT(22))+CT(33))/CT(1386);
- coeffs_n[3] = (CT(8)*ep-CT(11))/CT(792);
- coeffs_n[4] = CT(1)/CT(110);
- coeffs_n[5] = (ep*((CT(88)-CT(64)*ep)*ep-CT(132))+CT(231))/CT(41580);
- coeffs_n[6] = ((CT(22)-CT(16)*ep)*ep-CT(33))/CT(8316);
- coeffs_n[7] = (CT(11)-CT(8)*ep)/CT(3960);
- coeffs_n[8] = -CT(1)/CT(495);
- coeffs_n[9] = (ep*(CT(16)*ep-CT(22))+CT(33))/CT(69300);
- coeffs_n[10] = (CT(8)*ep-CT(11))/CT(19800);
- coeffs_n[11] = CT(1)/CT(1925);
- coeffs_n[12] = (CT(11)-CT(8)*ep)/CT(194040);
- coeffs_n[13] = -CT(1)/CT(10780);
- coeffs_n[14] = CT(1)/CT(124740);
- break;
- case 5:
- coeffs_n[0] = (ep*(ep*(ep*((CT(832)-CT(640)*ep)*ep-CT(1144))+CT(1716))-CT(3003))+CT(30030))/CT(45045);
- coeffs_n[1] = (ep*(ep*((CT(832)-CT(640)*ep)*ep-CT(1144))+CT(1716))-CT(3003))/CT(60060);
- coeffs_n[2] = (ep*((CT(208)-CT(160)*ep)*ep-CT(286))+CT(429))/CT(18018);
- coeffs_n[3] = ((CT(104)-CT(80)*ep)*ep-CT(143))/CT(10296);
- coeffs_n[4] = (CT(13)-CT(10)*ep)/CT(1430);
- coeffs_n[5] = -CT(1)/CT(156);
- coeffs_n[6] = (ep*(ep*(ep*(CT(640)*ep-CT(832))+CT(1144))-CT(1716))+CT(3003))/CT(540540);
- coeffs_n[7] = (ep*(ep*(CT(160)*ep-CT(208))+CT(286))-CT(429))/CT(108108);
- coeffs_n[8] = (ep*(CT(80)*ep-CT(104))+CT(143))/CT(51480);
- coeffs_n[9] = (CT(10)*ep-CT(13))/CT(6435);
- coeffs_n[10] = CT(5)/CT(3276);
- coeffs_n[11] = (ep*((CT(208)-CT(160)*ep)*ep-CT(286))+CT(429))/CT(900900);
- coeffs_n[12] = ((CT(104)-CT(80)*ep)*ep-CT(143))/CT(257400);
- coeffs_n[13] = (CT(13)-CT(10)*ep)/CT(25025);
- coeffs_n[14] = -CT(1)/CT(2184);
- coeffs_n[15] = (ep*(CT(80)*ep-CT(104))+CT(143))/CT(2522520);
- coeffs_n[16] = (CT(10)*ep-CT(13))/CT(140140);
- coeffs_n[17] = CT(5)/CT(45864);
- coeffs_n[18] = (CT(13)-CT(10)*ep)/CT(1621620);
- coeffs_n[19] = -CT(1)/CT(58968);
- coeffs_n[20] = CT(1)/CT(792792);
- break;
- }
- }
-
- /*
- Given the set of coefficients coeffs1[] evaluate on var2 and return
- the set of coefficients coeffs2[]
- */
- static inline void evaluate_coeffs_var2(CT var2,
- CT coeffs1[],
- CT coeffs2[]){
- std::size_t begin(0), end(0);
- for(std::size_t i = 0; i <= SeriesOrder; i++){
- end = begin + SeriesOrder + 1 - i;
- coeffs2[i] = ((i==0) ? CT(1) : pow(var2,int(i)))
- * horner_evaluate(var2, coeffs1 + begin, coeffs1 + end);
- begin = end;
- }
- }
-
- /*
- Compute the spherical excess of a geodesic (or shperical) segment
- */
- template <
- bool LongSegment,
- typename PointOfSegment
- >
- static inline CT spherical(PointOfSegment const& p1,
- PointOfSegment const& p2)
- {
- CT excess;
-
- if(LongSegment) // not for segments parallel to equator
- {
- CT cbet1 = cos(geometry::get_as_radian<1>(p1));
- CT sbet1 = sin(geometry::get_as_radian<1>(p1));
- CT cbet2 = cos(geometry::get_as_radian<1>(p2));
- CT sbet2 = sin(geometry::get_as_radian<1>(p2));
-
- CT omg12 = geometry::get_as_radian<0>(p1)
- - geometry::get_as_radian<0>(p2);
- CT comg12 = cos(omg12);
- CT somg12 = sin(omg12);
-
- CT alp1 = atan2(cbet1 * sbet2
- - sbet1 * cbet2 * comg12,
- cbet2 * somg12);
-
- CT alp2 = atan2(cbet1 * sbet2 * comg12
- - sbet1 * cbet2,
- cbet1 * somg12);
-
- excess = alp2 - alp1;
-
- } else {
-
- // Trapezoidal formula
-
- CT tan_lat1 =
- tan(geometry::get_as_radian<1>(p1) / 2.0);
- CT tan_lat2 =
- tan(geometry::get_as_radian<1>(p2) / 2.0);
-
- excess = CT(2.0)
- * atan(((tan_lat1 + tan_lat2) / (CT(1) + tan_lat1 * tan_lat2))
- * tan((geometry::get_as_radian<0>(p2)
- - geometry::get_as_radian<0>(p1)) / 2));
- }
-
- return excess;
- }
-
- struct return_type_ellipsoidal
- {
- return_type_ellipsoidal()
- : spherical_term(0),
- ellipsoidal_term(0)
- {}
-
- CT spherical_term;
- CT ellipsoidal_term;
- };
-
- /*
- Compute the ellipsoidal correction of a geodesic (or shperical) segment
- */
- template <
- template <typename, bool, bool, bool, bool, bool> class Inverse,
- //typename AzimuthStrategy,
- typename PointOfSegment,
- typename SpheroidConst
- >
- static inline return_type_ellipsoidal ellipsoidal(PointOfSegment const& p1,
- PointOfSegment const& p2,
- SpheroidConst spheroid_const)
- {
- return_type_ellipsoidal result;
-
- // Azimuth Approximation
-
- typedef Inverse<CT, false, true, true, false, false> inverse_type;
- typedef typename inverse_type::result_type inverse_result;
-
- inverse_result i_res = inverse_type::apply(get_as_radian<0>(p1),
- get_as_radian<1>(p1),
- get_as_radian<0>(p2),
- get_as_radian<1>(p2),
- spheroid_const.m_spheroid);
-
- CT alp1 = i_res.azimuth;
- CT alp2 = i_res.reverse_azimuth;
-
- // Constants
-
- CT const ep = spheroid_const.m_ep;
- CT const f = formula::flattening<CT>(spheroid_const.m_spheroid);
- CT const one_minus_f = CT(1) - f;
- std::size_t const series_order_plus_one = SeriesOrder + 1;
- std::size_t const series_order_plus_two = SeriesOrder + 2;
-
- // Basic trigonometric computations
-
- CT tan_bet1 = tan(get_as_radian<1>(p1)) * one_minus_f;
- CT tan_bet2 = tan(get_as_radian<1>(p2)) * one_minus_f;
- CT cos_bet1 = cos(atan(tan_bet1));
- CT cos_bet2 = cos(atan(tan_bet2));
- CT sin_bet1 = tan_bet1 * cos_bet1;
- CT sin_bet2 = tan_bet2 * cos_bet2;
- CT sin_alp1 = sin(alp1);
- CT cos_alp1 = cos(alp1);
- CT cos_alp2 = cos(alp2);
- CT sin_alp0 = sin_alp1 * cos_bet1;
-
- // Spherical term computation
-
- CT sin_omg1 = sin_alp0 * sin_bet1;
- CT cos_omg1 = cos_alp1 * cos_bet1;
- CT sin_omg2 = sin_alp0 * sin_bet2;
- CT cos_omg2 = cos_alp2 * cos_bet2;
- CT cos_omg12 = cos_omg1 * cos_omg2 + sin_omg1 * sin_omg2;
- CT excess;
-
- bool meridian = get<0>(p2) - get<0>(p1) == CT(0)
- || get<1>(p1) == CT(90) || get<1>(p1) == -CT(90)
- || get<1>(p2) == CT(90) || get<1>(p2) == -CT(90);
-
- if (!meridian && cos_omg12 > -CT(0.7)
- && sin_bet2 - sin_bet1 < CT(1.75)) // short segment
- {
- CT sin_omg12 = cos_omg1 * sin_omg2 - sin_omg1 * cos_omg2;
- normalize(sin_omg12, cos_omg12);
-
- CT cos_omg12p1 = CT(1) + cos_omg12;
- CT cos_bet1p1 = CT(1) + cos_bet1;
- CT cos_bet2p1 = CT(1) + cos_bet2;
- excess = CT(2) * atan2(sin_omg12 * (sin_bet1 * cos_bet2p1 + sin_bet2 * cos_bet1p1),
- cos_omg12p1 * (sin_bet1 * sin_bet2 + cos_bet1p1 * cos_bet2p1));
- }
- else
- {
- /*
- CT sin_alp2 = sin(alp2);
- CT sin_alp12 = sin_alp2 * cos_alp1 - cos_alp2 * sin_alp1;
- CT cos_alp12 = cos_alp2 * cos_alp1 + sin_alp2 * sin_alp1;
- excess = atan2(sin_alp12, cos_alp12);
- */
- excess = alp2 - alp1;
- }
-
- result.spherical_term = excess;
-
- // Ellipsoidal term computation (uses integral approximation)
-
- CT cos_alp0 = math::sqrt(CT(1) - math::sqr(sin_alp0));
- CT cos_sig1 = cos_alp1 * cos_bet1;
- CT cos_sig2 = cos_alp2 * cos_bet2;
- CT sin_sig1 = sin_bet1;
- CT sin_sig2 = sin_bet2;
-
- normalize(sin_sig1, cos_sig1);
- normalize(sin_sig2, cos_sig2);
-
- CT coeffs[SeriesOrder + 1];
- const std::size_t coeffs_var_size = (series_order_plus_two
- * series_order_plus_one) / 2;
- CT coeffs_var[coeffs_var_size];
-
- if(ExpandEpsN){ // expand by eps and n
-
- CT k2 = math::sqr(ep * cos_alp0);
- CT sqrt_k2_plus_one = math::sqrt(CT(1) + k2);
- CT eps = (sqrt_k2_plus_one - CT(1)) / (sqrt_k2_plus_one + CT(1));
- CT n = f / (CT(2) - f);
-
- // Generate and evaluate the polynomials on n
- // to get the series coefficients (that depend on eps)
- evaluate_coeffs_n(n, coeffs_var);
-
- // Generate and evaluate the polynomials on eps (i.e. var2 = eps)
- // to get the final series coefficients
- evaluate_coeffs_var2(eps, coeffs_var, coeffs);
-
- }else{ // expand by k2 and ep
-
- CT k2 = math::sqr(ep * cos_alp0);
- CT ep2 = math::sqr(ep);
-
- // Generate and evaluate the polynomials on ep2
- evaluate_coeffs_ep(ep2, coeffs_var);
-
- // Generate and evaluate the polynomials on k2 (i.e. var2 = k2)
- evaluate_coeffs_var2(k2, coeffs_var, coeffs);
-
- }
-
- // Evaluate the trigonometric sum
- CT I12 = clenshaw_sum(cos_sig2, coeffs, coeffs + series_order_plus_one)
- - clenshaw_sum(cos_sig1, coeffs, coeffs + series_order_plus_one);
-
- // The part of the ellipsodal correction that depends on
- // point coordinates
- result.ellipsoidal_term = cos_alp0 * sin_alp0 * I12;
-
- return result;
- }
-
- // Check whenever a segment crosses the prime meridian
- // First normalize to [0,360)
- template <typename PointOfSegment>
- static inline bool crosses_prime_meridian(PointOfSegment const& p1,
- PointOfSegment const& p2)
- {
- CT const pi
- = geometry::math::pi<CT>();
- CT const two_pi
- = geometry::math::two_pi<CT>();
-
- CT p1_lon = get_as_radian<0>(p1)
- - ( floor( get_as_radian<0>(p1) / two_pi )
- * two_pi );
- CT p2_lon = get_as_radian<0>(p2)
- - ( floor( get_as_radian<0>(p2) / two_pi )
- * two_pi );
-
- CT max_lon = (std::max)(p1_lon, p2_lon);
- CT min_lon = (std::min)(p1_lon, p2_lon);
-
- return max_lon > pi && min_lon < pi && max_lon - min_lon > pi;
- }
-
-};
-
-}}} // namespace boost::geometry::formula
-
-
-#endif // BOOST_GEOMETRY_FORMULAS_AREA_FORMULAS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/authalic_radius_sqr.hpp b/contrib/restricted/boost/boost/geometry/formulas/authalic_radius_sqr.hpp
deleted file mode 100644
index 54da3176110..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/authalic_radius_sqr.hpp
+++ /dev/null
@@ -1,96 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_AUTHALIC_RADIUS_SQR_HPP
-#define BOOST_GEOMETRY_FORMULAS_AUTHALIC_RADIUS_SQR_HPP
-
-#include <boost/geometry/core/radius.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/formulas/eccentricity_sqr.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/math/special_functions/atanh.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace formula_dispatch
-{
-
-template <typename ResultType, typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct authalic_radius_sqr
- : not_implemented<Tag>
-{};
-
-template <typename ResultType, typename Geometry>
-struct authalic_radius_sqr<ResultType, Geometry, srs_sphere_tag>
-{
- static inline ResultType apply(Geometry const& geometry)
- {
- return math::sqr<ResultType>(get_radius<0>(geometry));
- }
-};
-
-template <typename ResultType, typename Geometry>
-struct authalic_radius_sqr<ResultType, Geometry, srs_spheroid_tag>
-{
- static inline ResultType apply(Geometry const& geometry)
- {
- ResultType const a2 = math::sqr<ResultType>(get_radius<0>(geometry));
- ResultType const e2 = formula::eccentricity_sqr<ResultType>(geometry);
-
- return apply(a2, e2);
- }
-
- static inline ResultType apply(ResultType const& a2, ResultType const& e2)
- {
- ResultType const c0 = 0;
-
- if (math::equals(e2, c0))
- {
- return a2;
- }
-
- ResultType const e = math::sqrt(e2);
- ResultType const c2 = 2;
-
- //ResultType const b2 = math::sqr(get_radius<2>(geometry));
- //return a2 / c2 + b2 * boost::math::atanh(e) / (c2 * e);
-
- ResultType const c1 = 1;
- return (a2 / c2) * ( c1 + (c1 - e2) * boost::math::atanh(e) / e );
- }
-};
-
-} // namespace formula_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace formula
-{
-
-template <typename ResultType, typename Geometry>
-inline ResultType authalic_radius_sqr(Geometry const& geometry)
-{
- return formula_dispatch::authalic_radius_sqr<ResultType, Geometry>::apply(geometry);
-}
-
-} // namespace formula
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_FORMULAS_AUTHALIC_RADIUS_SQR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/differential_quantities.hpp b/contrib/restricted/boost/boost/geometry/formulas/differential_quantities.hpp
deleted file mode 100644
index ff2ec539db5..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/differential_quantities.hpp
+++ /dev/null
@@ -1,303 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_INVERSE_DIFFERENTIAL_QUANTITIES_HPP
-#define BOOST_GEOMETRY_FORMULAS_INVERSE_DIFFERENTIAL_QUANTITIES_HPP
-
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry { namespace formula
-{
-
-/*!
-\brief The solution of a part of the inverse problem - differential quantities.
-\author See
-- Charles F.F Karney, Algorithms for geodesics, 2011
-https://arxiv.org/pdf/1109.4448.pdf
-*/
-template <
- typename CT,
- bool EnableReducedLength,
- bool EnableGeodesicScale,
- unsigned int Order = 2,
- bool ApproxF = true
->
-class differential_quantities
-{
-public:
- static inline void apply(CT const& lon1, CT const& lat1,
- CT const& lon2, CT const& lat2,
- CT const& azimuth, CT const& reverse_azimuth,
- CT const& b, CT const& f,
- CT & reduced_length, CT & geodesic_scale)
- {
- CT const dlon = lon2 - lon1;
- CT const sin_lat1 = sin(lat1);
- CT const cos_lat1 = cos(lat1);
- CT const sin_lat2 = sin(lat2);
- CT const cos_lat2 = cos(lat2);
-
- apply(dlon, sin_lat1, cos_lat1, sin_lat2, cos_lat2,
- azimuth, reverse_azimuth,
- b, f,
- reduced_length, geodesic_scale);
- }
-
- static inline void apply(CT const& dlon,
- CT const& sin_lat1, CT const& cos_lat1,
- CT const& sin_lat2, CT const& cos_lat2,
- CT const& azimuth, CT const& reverse_azimuth,
- CT const& b, CT const& f,
- CT & reduced_length, CT & geodesic_scale)
- {
- CT const c0 = 0;
- CT const c1 = 1;
- CT const one_minus_f = c1 - f;
-
- CT sin_bet1 = one_minus_f * sin_lat1;
- CT sin_bet2 = one_minus_f * sin_lat2;
-
- // equator
- if (math::equals(sin_bet1, c0) && math::equals(sin_bet2, c0))
- {
- CT const sig_12 = math::abs(dlon) / one_minus_f;
- if (BOOST_GEOMETRY_CONDITION(EnableReducedLength))
- {
- CT m12 = sin(sig_12) * b;
- reduced_length = m12;
- }
-
- if (BOOST_GEOMETRY_CONDITION(EnableGeodesicScale))
- {
- CT M12 = cos(sig_12);
- geodesic_scale = M12;
- }
- }
- else
- {
- CT const c2 = 2;
- CT const e2 = f * (c2 - f);
- CT const ep2 = e2 / math::sqr(one_minus_f);
-
- CT const sin_alp1 = sin(azimuth);
- CT const cos_alp1 = cos(azimuth);
- //CT const sin_alp2 = sin(reverse_azimuth);
- CT const cos_alp2 = cos(reverse_azimuth);
-
- CT cos_bet1 = cos_lat1;
- CT cos_bet2 = cos_lat2;
-
- normalize(sin_bet1, cos_bet1);
- normalize(sin_bet2, cos_bet2);
-
- CT sin_sig1 = sin_bet1;
- CT cos_sig1 = cos_alp1 * cos_bet1;
- CT sin_sig2 = sin_bet2;
- CT cos_sig2 = cos_alp2 * cos_bet2;
-
- normalize(sin_sig1, cos_sig1);
- normalize(sin_sig2, cos_sig2);
-
- CT const sin_alp0 = sin_alp1 * cos_bet1;
- CT const cos_alp0_sqr = c1 - math::sqr(sin_alp0);
-
- CT const J12 = BOOST_GEOMETRY_CONDITION(ApproxF) ?
- J12_f(sin_sig1, cos_sig1, sin_sig2, cos_sig2, cos_alp0_sqr, f) :
- J12_ep_sqr(sin_sig1, cos_sig1, sin_sig2, cos_sig2, cos_alp0_sqr, ep2) ;
-
- CT const dn1 = math::sqrt(c1 + ep2 * math::sqr(sin_bet1));
- CT const dn2 = math::sqrt(c1 + ep2 * math::sqr(sin_bet2));
-
- if (BOOST_GEOMETRY_CONDITION(EnableReducedLength))
- {
- CT const m12_b = dn2 * (cos_sig1 * sin_sig2)
- - dn1 * (sin_sig1 * cos_sig2)
- - cos_sig1 * cos_sig2 * J12;
- CT const m12 = m12_b * b;
-
- reduced_length = m12;
- }
-
- if (BOOST_GEOMETRY_CONDITION(EnableGeodesicScale))
- {
- CT const cos_sig12 = cos_sig1 * cos_sig2 + sin_sig1 * sin_sig2;
- CT const t = ep2 * (cos_bet1 - cos_bet2) * (cos_bet1 + cos_bet2) / (dn1 + dn2);
- CT const M12 = cos_sig12 + (t * sin_sig2 - cos_sig2 * J12) * sin_sig1 / dn1;
-
- geodesic_scale = M12;
- }
- }
- }
-
-private:
- /*! Approximation of J12, expanded into taylor series in f
- Maxima script:
- ep2: f * (2-f) / ((1-f)^2);
- k2: ca02 * ep2;
- assume(f < 1);
- assume(sig > 0);
- I1(sig):= integrate(sqrt(1 + k2 * sin(s)^2), s, 0, sig);
- I2(sig):= integrate(1/sqrt(1 + k2 * sin(s)^2), s, 0, sig);
- J(sig):= I1(sig) - I2(sig);
- S: taylor(J(sig), f, 0, 3);
- S1: factor( 2*integrate(sin(s)^2,s,0,sig)*ca02*f );
- S2: factor( ((integrate(-6*ca02^2*sin(s)^4+6*ca02*sin(s)^2,s,0,sig)+integrate(-2*ca02^2*sin(s)^4+6*ca02*sin(s)^2,s,0,sig))*f^2)/4 );
- S3: factor( ((integrate(30*ca02^3*sin(s)^6-54*ca02^2*sin(s)^4+24*ca02*sin(s)^2,s,0,sig)+integrate(6*ca02^3*sin(s)^6-18*ca02^2*sin(s)^4+24*ca02*sin(s)^2,s,0,sig))*f^3)/12 );
- */
- static inline CT J12_f(CT const& sin_sig1, CT const& cos_sig1,
- CT const& sin_sig2, CT const& cos_sig2,
- CT const& cos_alp0_sqr, CT const& f)
- {
- if (Order == 0)
- {
- return 0;
- }
-
- CT const c2 = 2;
-
- CT const sig_12 = atan2(cos_sig1 * sin_sig2 - sin_sig1 * cos_sig2,
- cos_sig1 * cos_sig2 + sin_sig1 * sin_sig2);
- CT const sin_2sig1 = c2 * cos_sig1 * sin_sig1; // sin(2sig1)
- CT const sin_2sig2 = c2 * cos_sig2 * sin_sig2; // sin(2sig2)
- CT const sin_2sig_12 = sin_2sig2 - sin_2sig1;
- CT const L1 = sig_12 - sin_2sig_12 / c2;
-
- if (Order == 1)
- {
- return cos_alp0_sqr * f * L1;
- }
-
- CT const sin_4sig1 = c2 * sin_2sig1 * (math::sqr(cos_sig1) - math::sqr(sin_sig1)); // sin(4sig1)
- CT const sin_4sig2 = c2 * sin_2sig2 * (math::sqr(cos_sig2) - math::sqr(sin_sig2)); // sin(4sig2)
- CT const sin_4sig_12 = sin_4sig2 - sin_4sig1;
-
- CT const c8 = 8;
- CT const c12 = 12;
- CT const c16 = 16;
- CT const c24 = 24;
-
- CT const L2 = -( cos_alp0_sqr * sin_4sig_12
- + (-c8 * cos_alp0_sqr + c12) * sin_2sig_12
- + (c12 * cos_alp0_sqr - c24) * sig_12)
- / c16;
-
- if (Order == 2)
- {
- return cos_alp0_sqr * f * (L1 + f * L2);
- }
-
- CT const c4 = 4;
- CT const c9 = 9;
- CT const c48 = 48;
- CT const c60 = 60;
- CT const c64 = 64;
- CT const c96 = 96;
- CT const c128 = 128;
- CT const c144 = 144;
-
- CT const cos_alp0_quad = math::sqr(cos_alp0_sqr);
- CT const sin3_2sig1 = math::sqr(sin_2sig1) * sin_2sig1;
- CT const sin3_2sig2 = math::sqr(sin_2sig2) * sin_2sig2;
- CT const sin3_2sig_12 = sin3_2sig2 - sin3_2sig1;
-
- CT const A = (c9 * cos_alp0_quad - c12 * cos_alp0_sqr) * sin_4sig_12;
- CT const B = c4 * cos_alp0_quad * sin3_2sig_12;
- CT const C = (-c48 * cos_alp0_quad + c96 * cos_alp0_sqr - c64) * sin_2sig_12;
- CT const D = (c60 * cos_alp0_quad - c144 * cos_alp0_sqr + c128) * sig_12;
-
- CT const L3 = (A + B + C + D) / c64;
-
- // Order 3 and higher
- return cos_alp0_sqr * f * (L1 + f * (L2 + f * L3));
- }
-
- /*! Approximation of J12, expanded into taylor series in e'^2
- Maxima script:
- k2: ca02 * ep2;
- assume(sig > 0);
- I1(sig):= integrate(sqrt(1 + k2 * sin(s)^2), s, 0, sig);
- I2(sig):= integrate(1/sqrt(1 + k2 * sin(s)^2), s, 0, sig);
- J(sig):= I1(sig) - I2(sig);
- S: taylor(J(sig), ep2, 0, 3);
- S1: factor( integrate(sin(s)^2,s,0,sig)*ca02*ep2 );
- S2: factor( (integrate(sin(s)^4,s,0,sig)*ca02^2*ep2^2)/2 );
- S3: factor( (3*integrate(sin(s)^6,s,0,sig)*ca02^3*ep2^3)/8 );
- */
- static inline CT J12_ep_sqr(CT const& sin_sig1, CT const& cos_sig1,
- CT const& sin_sig2, CT const& cos_sig2,
- CT const& cos_alp0_sqr, CT const& ep_sqr)
- {
- if (Order == 0)
- {
- return 0;
- }
-
- CT const c2 = 2;
- CT const c4 = 4;
-
- CT const c2a0ep2 = cos_alp0_sqr * ep_sqr;
-
- CT const sig_12 = atan2(cos_sig1 * sin_sig2 - sin_sig1 * cos_sig2,
- cos_sig1 * cos_sig2 + sin_sig1 * sin_sig2); // sig2 - sig1
- CT const sin_2sig1 = c2 * cos_sig1 * sin_sig1; // sin(2sig1)
- CT const sin_2sig2 = c2 * cos_sig2 * sin_sig2; // sin(2sig2)
- CT const sin_2sig_12 = sin_2sig2 - sin_2sig1;
-
- CT const L1 = (c2 * sig_12 - sin_2sig_12) / c4;
-
- if (Order == 1)
- {
- return c2a0ep2 * L1;
- }
-
- CT const c8 = 8;
- CT const c64 = 64;
-
- CT const sin_4sig1 = c2 * sin_2sig1 * (math::sqr(cos_sig1) - math::sqr(sin_sig1)); // sin(4sig1)
- CT const sin_4sig2 = c2 * sin_2sig2 * (math::sqr(cos_sig2) - math::sqr(sin_sig2)); // sin(4sig2)
- CT const sin_4sig_12 = sin_4sig2 - sin_4sig1;
-
- CT const L2 = (sin_4sig_12 - c8 * sin_2sig_12 + 12 * sig_12) / c64;
-
- if (Order == 2)
- {
- return c2a0ep2 * (L1 + c2a0ep2 * L2);
- }
-
- CT const sin3_2sig1 = math::sqr(sin_2sig1) * sin_2sig1;
- CT const sin3_2sig2 = math::sqr(sin_2sig2) * sin_2sig2;
- CT const sin3_2sig_12 = sin3_2sig2 - sin3_2sig1;
-
- CT const c9 = 9;
- CT const c48 = 48;
- CT const c60 = 60;
- CT const c512 = 512;
-
- CT const L3 = (c9 * sin_4sig_12 + c4 * sin3_2sig_12 - c48 * sin_2sig_12 + c60 * sig_12) / c512;
-
- // Order 3 and higher
- return c2a0ep2 * (L1 + c2a0ep2 * (L2 + c2a0ep2 * L3));
- }
-
- static inline void normalize(CT & x, CT & y)
- {
- CT const len = math::sqrt(math::sqr(x) + math::sqr(y));
- x /= len;
- y /= len;
- }
-};
-
-}}} // namespace boost::geometry::formula
-
-
-#endif // BOOST_GEOMETRY_FORMULAS_INVERSE_DIFFERENTIAL_QUANTITIES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/eccentricity_sqr.hpp b/contrib/restricted/boost/boost/geometry/formulas/eccentricity_sqr.hpp
deleted file mode 100644
index 01a9beacb94..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/eccentricity_sqr.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_ECCENCRICITY_SQR_HPP
-#define BOOST_GEOMETRY_FORMULAS_ECCENCRICITY_SQR_HPP
-
-#include <boost/geometry/core/radius.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace formula_dispatch
-{
-
-template <typename ResultType, typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct eccentricity_sqr
- : not_implemented<Tag>
-{};
-
-template <typename ResultType, typename Geometry>
-struct eccentricity_sqr<ResultType, Geometry, srs_sphere_tag>
-{
- static inline ResultType apply(Geometry const& /*geometry*/)
- {
- return ResultType(0);
- }
-};
-
-template <typename ResultType, typename Geometry>
-struct eccentricity_sqr<ResultType, Geometry, srs_spheroid_tag>
-{
- static inline ResultType apply(Geometry const& geometry)
- {
- // 1 - (b / a)^2
- return ResultType(1) - math::sqr(ResultType(get_radius<2>(geometry))
- / ResultType(get_radius<0>(geometry)));
- }
-};
-
-} // namespace formula_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace formula
-{
-
-template <typename ResultType, typename Geometry>
-ResultType eccentricity_sqr(Geometry const& geometry)
-{
- return formula_dispatch::eccentricity_sqr<ResultType, Geometry>::apply(geometry);
-}
-
-} // namespace formula
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_FORMULAS_ECCENCRICITY_SQR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/elliptic_arc_length.hpp b/contrib/restricted/boost/boost/geometry/formulas/elliptic_arc_length.hpp
deleted file mode 100644
index 65c8f60226a..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/elliptic_arc_length.hpp
+++ /dev/null
@@ -1,234 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_ELLIPTIC_ARC_LENGTH_HPP
-#define BOOST_GEOMETRY_FORMULAS_ELLIPTIC_ARC_LENGTH_HPP
-
-#include <boost/math/constants/constants.hpp>
-
-#include <boost/geometry/core/radius.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-
-#include <boost/geometry/formulas/flattening.hpp>
-
-namespace boost { namespace geometry { namespace formula
-{
-
-/*!
-\brief Compute the arc length of an ellipse.
-*/
-
-template <typename CT, unsigned int Order = 1>
-class elliptic_arc_length
-{
-
-public :
-
- struct result
- {
- result()
- : distance(0)
- , meridian(false)
- {}
-
- CT distance;
- bool meridian;
- };
-
- template <typename T>
- static bool meridian_not_crossing_pole(T lat1, T lat2, CT diff)
- {
- CT half_pi = math::pi<CT>()/CT(2);
- return math::equals(diff, CT(0)) ||
- (math::equals(lat2, half_pi) && math::equals(lat1, -half_pi));
- }
-
- static bool meridian_crossing_pole(CT diff)
- {
- return math::equals(math::abs(diff), math::pi<CT>());
- }
-
-
- template <typename T, typename Spheroid>
- static CT meridian_not_crossing_pole_dist(T lat1, T lat2, Spheroid const& spheroid)
- {
- return math::abs(apply(lat2, spheroid) - apply(lat1, spheroid));
- }
-
- template <typename T, typename Spheroid>
- static CT meridian_crossing_pole_dist(T lat1, T lat2, Spheroid const& spheroid)
- {
- CT c0 = 0;
- CT half_pi = math::pi<CT>()/CT(2);
- CT lat_sign = 1;
- if (lat1+lat2 < c0)
- {
- lat_sign = CT(-1);
- }
- return math::abs(lat_sign * CT(2) * apply(half_pi, spheroid)
- - apply(lat1, spheroid) - apply(lat2, spheroid));
- }
-
- template <typename T, typename Spheroid>
- static result apply(T lon1, T lat1, T lon2, T lat2, Spheroid const& spheroid)
- {
- result res;
-
- CT diff = geometry::math::longitude_distance_signed<geometry::radian>(lon1, lon2);
-
- if (lat1 > lat2)
- {
- std::swap(lat1, lat2);
- }
-
- if ( meridian_not_crossing_pole(lat1, lat2, diff) )
- {
- res.distance = meridian_not_crossing_pole_dist(lat1, lat2, spheroid);
- res.meridian = true;
- }
- else if ( meridian_crossing_pole(diff) )
- {
- res.distance = meridian_crossing_pole_dist(lat1, lat2, spheroid);
- res.meridian = true;
- }
- return res;
- }
-
- // Distance computation on meridians using series approximations
- // to elliptic integrals. Formula to compute distance from lattitude 0 to lat
- // https://en.wikipedia.org/wiki/Meridian_arc
- // latitudes are assumed to be in radians and in [-pi/2,pi/2]
- template <typename T, typename Spheroid>
- static CT apply(T lat, Spheroid const& spheroid)
- {
- CT const a = get_radius<0>(spheroid);
- CT const f = formula::flattening<CT>(spheroid);
- CT n = f / (CT(2) - f);
- CT M = a/(1+n);
- CT C0 = 1;
-
- if (Order == 0)
- {
- return M * C0 * lat;
- }
-
- CT C2 = -1.5 * n;
-
- if (Order == 1)
- {
- return M * (C0 * lat + C2 * sin(2*lat));
- }
-
- CT n2 = n * n;
- C0 += .25 * n2;
- CT C4 = 0.9375 * n2;
-
- if (Order == 2)
- {
- return M * (C0 * lat + C2 * sin(2*lat) + C4 * sin(4*lat));
- }
-
- CT n3 = n2 * n;
- C2 += 0.1875 * n3;
- CT C6 = -0.729166667 * n3;
-
- if (Order == 3)
- {
- return M * (C0 * lat + C2 * sin(2*lat) + C4 * sin(4*lat)
- + C6 * sin(6*lat));
- }
-
- CT n4 = n2 * n2;
- C4 -= 0.234375 * n4;
- CT C8 = 0.615234375 * n4;
-
- if (Order == 4)
- {
- return M * (C0 * lat + C2 * sin(2*lat) + C4 * sin(4*lat)
- + C6 * sin(6*lat) + C8 * sin(8*lat));
- }
-
- CT n5 = n4 * n;
- C6 += 0.227864583 * n5;
- CT C10 = -0.54140625 * n5;
-
- // Order 5 or higher
- return M * (C0 * lat + C2 * sin(2*lat) + C4 * sin(4*lat)
- + C6 * sin(6*lat) + C8 * sin(8*lat) + C10 * sin(10*lat));
-
- }
-
- // Iterative method to elliptic arc length based on
- // http://www.codeguru.com/cpp/cpp/algorithms/article.php/c5115/
- // Geographic-Distance-and-Azimuth-Calculations.htm
- // latitudes are assumed to be in radians and in [-pi/2,pi/2]
- template <typename T1, typename T2, typename Spheroid>
- CT interative_method(T1 lat1,
- T2 lat2,
- Spheroid const& spheroid)
- {
- CT result = 0;
- CT const zero = 0;
- CT const one = 1;
- CT const c1 = 2;
- CT const c2 = 0.5;
- CT const c3 = 4000;
-
- CT const a = get_radius<0>(spheroid);
- CT const f = formula::flattening<CT>(spheroid);
-
- // how many steps to use
-
- CT lat1_deg = lat1 * geometry::math::r2d<CT>();
- CT lat2_deg = lat2 * geometry::math::r2d<CT>();
-
- int steps = c1 + (c2 + (lat2_deg > lat1_deg) ? CT(lat2_deg - lat1_deg)
- : CT(lat1_deg - lat2_deg));
- steps = (steps > c3) ? c3 : steps;
-
- //std::cout << "Steps=" << steps << std::endl;
-
- CT snLat1 = sin(lat1);
- CT snLat2 = sin(lat2);
- CT twoF = 2 * f - f * f;
-
- // limits of integration
- CT x1 = a * cos(lat1) /
- sqrt(1 - twoF * snLat1 * snLat1);
- CT x2 = a * cos(lat2) /
- sqrt(1 - twoF * snLat2 * snLat2);
-
- CT dx = (x2 - x1) / (steps - one);
- CT x, y1, y2, dy, dydx;
- CT adx = (dx < zero) ? -dx : dx; // absolute value of dx
-
- CT a2 = a * a;
- CT oneF = 1 - f;
-
- // now loop through each step adding up all the little
- // hypotenuses
- for (int i = 0; i < (steps - 1); i++){
- x = x1 + dx * i;
- dydx = ((a * oneF * sqrt((one - ((x+dx)*(x+dx))/a2))) -
- (a * oneF * sqrt((one - (x*x)/a2)))) / dx;
- result += adx * sqrt(one + dydx*dydx);
- }
-
- return result;
- }
-};
-
-}}} // namespace boost::geometry::formula
-
-
-#endif // BOOST_GEOMETRY_FORMULAS_ELLIPTIC_ARC_LENGTH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/flattening.hpp b/contrib/restricted/boost/boost/geometry/formulas/flattening.hpp
deleted file mode 100644
index f94ead65b05..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/flattening.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2014-2016 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_FLATTENING_HPP
-#define BOOST_GEOMETRY_FORMULAS_FLATTENING_HPP
-
-#include <boost/geometry/core/radius.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace formula_dispatch
-{
-
-template <typename ResultType, typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct flattening
- : not_implemented<Tag>
-{};
-
-template <typename ResultType, typename Geometry>
-struct flattening<ResultType, Geometry, srs_sphere_tag>
-{
- static inline ResultType apply(Geometry const& /*geometry*/)
- {
- return ResultType(0);
- }
-};
-
-template <typename ResultType, typename Geometry>
-struct flattening<ResultType, Geometry, srs_spheroid_tag>
-{
- static inline ResultType apply(Geometry const& geometry)
- {
- // (a - b) / a
- return ResultType(get_radius<0>(geometry) - get_radius<2>(geometry))
- / ResultType(get_radius<0>(geometry));
- }
-};
-
-} // namespace formula_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace formula
-{
-
-template <typename ResultType, typename Geometry>
-ResultType flattening(Geometry const& geometry)
-{
- return formula_dispatch::flattening<ResultType, Geometry>::apply(geometry);
-}
-
-} // namespace formula
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_FORMULAS_FLATTENING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/geographic.hpp b/contrib/restricted/boost/boost/geometry/formulas/geographic.hpp
deleted file mode 100644
index b338273f303..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/geographic.hpp
+++ /dev/null
@@ -1,458 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016-2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_GEOGRAPHIC_HPP
-#define BOOST_GEOMETRY_FORMULAS_GEOGRAPHIC_HPP
-
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/arithmetic/cross_product.hpp>
-#include <boost/geometry/arithmetic/dot_product.hpp>
-#include <boost/geometry/arithmetic/normalize.hpp>
-
-#include <boost/geometry/formulas/eccentricity_sqr.hpp>
-#include <boost/geometry/formulas/flattening.hpp>
-#include <boost/geometry/formulas/unit_spheroid.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-namespace boost { namespace geometry {
-
-namespace formula {
-
-template <typename Point3d, typename PointGeo, typename Spheroid>
-inline Point3d geo_to_cart3d(PointGeo const& point_geo, Spheroid const& spheroid)
-{
- typedef typename coordinate_type<Point3d>::type calc_t;
-
- calc_t const c1 = 1;
- calc_t const e_sqr = eccentricity_sqr<calc_t>(spheroid);
-
- calc_t const lon = get_as_radian<0>(point_geo);
- calc_t const lat = get_as_radian<1>(point_geo);
-
- Point3d res;
-
- calc_t const sin_lat = sin(lat);
-
- // "unit" spheroid, a = 1
- calc_t const N = c1 / math::sqrt(c1 - e_sqr * math::sqr(sin_lat));
- calc_t const N_cos_lat = N * cos(lat);
-
- set<0>(res, N_cos_lat * cos(lon));
- set<1>(res, N_cos_lat * sin(lon));
- set<2>(res, N * (c1 - e_sqr) * sin_lat);
-
- return res;
-}
-
-template <typename PointGeo, typename Spheroid, typename Point3d>
-inline void geo_to_cart3d(PointGeo const& point_geo, Point3d & result, Point3d & north, Point3d & east, Spheroid const& spheroid)
-{
- typedef typename coordinate_type<Point3d>::type calc_t;
-
- calc_t const c1 = 1;
- calc_t const e_sqr = eccentricity_sqr<calc_t>(spheroid);
-
- calc_t const lon = get_as_radian<0>(point_geo);
- calc_t const lat = get_as_radian<1>(point_geo);
-
- calc_t const sin_lon = sin(lon);
- calc_t const cos_lon = cos(lon);
- calc_t const sin_lat = sin(lat);
- calc_t const cos_lat = cos(lat);
-
- // "unit" spheroid, a = 1
- calc_t const N = c1 / math::sqrt(c1 - e_sqr * math::sqr(sin_lat));
- calc_t const N_cos_lat = N * cos_lat;
-
- set<0>(result, N_cos_lat * cos_lon);
- set<1>(result, N_cos_lat * sin_lon);
- set<2>(result, N * (c1 - e_sqr) * sin_lat);
-
- set<0>(east, -sin_lon);
- set<1>(east, cos_lon);
- set<2>(east, 0);
-
- set<0>(north, -sin_lat * cos_lon);
- set<1>(north, -sin_lat * sin_lon);
- set<2>(north, cos_lat);
-}
-
-template <typename PointGeo, typename Point3d, typename Spheroid>
-inline PointGeo cart3d_to_geo(Point3d const& point_3d, Spheroid const& spheroid)
-{
- typedef typename coordinate_type<PointGeo>::type coord_t;
- typedef typename coordinate_type<Point3d>::type calc_t;
-
- calc_t const c1 = 1;
- //calc_t const c2 = 2;
- calc_t const e_sqr = eccentricity_sqr<calc_t>(spheroid);
-
- calc_t const x = get<0>(point_3d);
- calc_t const y = get<1>(point_3d);
- calc_t const z = get<2>(point_3d);
- calc_t const xy_l = math::sqrt(math::sqr(x) + math::sqr(y));
-
- calc_t const lonr = atan2(y, x);
-
- // NOTE: Alternative version
- // http://www.iag-aig.org/attach/989c8e501d9c5b5e2736955baf2632f5/V60N2_5FT.pdf
- // calc_t const lonr = c2 * atan2(y, x + xy_l);
-
- calc_t const latr = atan2(z, (c1 - e_sqr) * xy_l);
-
- // NOTE: If h is equal to 0 then there is no need to improve value of latitude
- // because then N_i / (N_i + h_i) = 1
- // http://www.navipedia.net/index.php/Ellipsoidal_and_Cartesian_Coordinates_Conversion
-
- PointGeo res;
-
- set_from_radian<0>(res, lonr);
- set_from_radian<1>(res, latr);
-
- coord_t lon = get<0>(res);
- coord_t lat = get<1>(res);
-
- math::normalize_spheroidal_coordinates
- <
- typename coordinate_system<PointGeo>::type::units,
- coord_t
- >(lon, lat);
-
- set<0>(res, lon);
- set<1>(res, lat);
-
- return res;
-}
-
-template <typename Point3d, typename Spheroid>
-inline Point3d projected_to_xy(Point3d const& point_3d, Spheroid const& spheroid)
-{
- typedef typename coordinate_type<Point3d>::type coord_t;
-
- // len_xy = sqrt(x^2 + y^2)
- // r = len_xy - |z / tan(lat)|
- // assuming h = 0
- // lat = atan2(z, (1 - e^2) * len_xy);
- // |z / tan(lat)| = (1 - e^2) * len_xy
- // r = e^2 * len_xy
- // x_res = r * cos(lon) = e^2 * len_xy * x / len_xy = e^2 * x
- // y_res = r * sin(lon) = e^2 * len_xy * y / len_xy = e^2 * y
-
- coord_t const c0 = 0;
- coord_t const e_sqr = formula::eccentricity_sqr<coord_t>(spheroid);
-
- Point3d res;
-
- set<0>(res, e_sqr * get<0>(point_3d));
- set<1>(res, e_sqr * get<1>(point_3d));
- set<2>(res, c0);
-
- return res;
-}
-
-template <typename Point3d, typename Spheroid>
-inline Point3d projected_to_surface(Point3d const& direction, Spheroid const& spheroid)
-{
- typedef typename coordinate_type<Point3d>::type coord_t;
-
- //coord_t const c0 = 0;
- coord_t const c2 = 2;
- coord_t const c4 = 4;
-
- // calculate the point of intersection of a ray and spheroid's surface
- // the origin is the origin of the coordinate system
- //(x*x+y*y)/(a*a) + z*z/(b*b) = 1
- // x = d.x * t
- // y = d.y * t
- // z = d.z * t
- coord_t const dx = get<0>(direction);
- coord_t const dy = get<1>(direction);
- coord_t const dz = get<2>(direction);
-
- //coord_t const a_sqr = math::sqr(get_radius<0>(spheroid));
- //coord_t const b_sqr = math::sqr(get_radius<2>(spheroid));
- // "unit" spheroid, a = 1
- coord_t const a_sqr = 1;
- coord_t const b_sqr = math::sqr(formula::unit_spheroid_b<coord_t>(spheroid));
-
- coord_t const param_a = (dx*dx + dy*dy) / a_sqr + dz*dz / b_sqr;
- coord_t const delta = c4 * param_a;
- // delta >= 0
- coord_t const t = math::sqrt(delta) / (c2 * param_a);
-
- // result = direction * t
- Point3d result = direction;
- multiply_value(result, t);
-
- return result;
-}
-
-template <typename Point3d, typename Spheroid>
-inline bool projected_to_surface(Point3d const& origin, Point3d const& direction, Point3d & result1, Point3d & result2, Spheroid const& spheroid)
-{
- typedef typename coordinate_type<Point3d>::type coord_t;
-
- coord_t const c0 = 0;
- coord_t const c1 = 1;
- coord_t const c2 = 2;
- coord_t const c4 = 4;
-
- // calculate the point of intersection of a ray and spheroid's surface
- //(x*x+y*y)/(a*a) + z*z/(b*b) = 1
- // x = o.x + d.x * t
- // y = o.y + d.y * t
- // z = o.z + d.z * t
- coord_t const ox = get<0>(origin);
- coord_t const oy = get<1>(origin);
- coord_t const oz = get<2>(origin);
- coord_t const dx = get<0>(direction);
- coord_t const dy = get<1>(direction);
- coord_t const dz = get<2>(direction);
-
- //coord_t const a_sqr = math::sqr(get_radius<0>(spheroid));
- //coord_t const b_sqr = math::sqr(get_radius<2>(spheroid));
- // "unit" spheroid, a = 1
- coord_t const a_sqr = 1;
- coord_t const b_sqr = math::sqr(formula::unit_spheroid_b<coord_t>(spheroid));
-
- coord_t const param_a = (dx*dx + dy*dy) / a_sqr + dz*dz / b_sqr;
- coord_t const param_b = c2 * ((ox*dx + oy*dy) / a_sqr + oz*dz / b_sqr);
- coord_t const param_c = (ox*ox + oy*oy) / a_sqr + oz*oz / b_sqr - c1;
-
- coord_t const delta = math::sqr(param_b) - c4 * param_a*param_c;
-
- // equals() ?
- if (delta < c0 || param_a == 0)
- {
- return false;
- }
-
- // result = origin + direction * t
-
- coord_t const sqrt_delta = math::sqrt(delta);
- coord_t const two_a = c2 * param_a;
-
- coord_t const t1 = (-param_b + sqrt_delta) / two_a;
- result1 = direction;
- multiply_value(result1, t1);
- add_point(result1, origin);
-
- coord_t const t2 = (-param_b - sqrt_delta) / two_a;
- result2 = direction;
- multiply_value(result2, t2);
- add_point(result2, origin);
-
- return true;
-}
-
-template <typename Point3d, typename Spheroid>
-inline bool great_elliptic_intersection(Point3d const& a1, Point3d const& a2,
- Point3d const& b1, Point3d const& b2,
- Point3d & result,
- Spheroid const& spheroid)
-{
- typedef typename coordinate_type<Point3d>::type coord_t;
-
- coord_t c0 = 0;
- coord_t c1 = 1;
-
- Point3d n1 = cross_product(a1, a2);
- Point3d n2 = cross_product(b1, b2);
-
- // intersection direction
- Point3d id = cross_product(n1, n2);
- coord_t id_len_sqr = dot_product(id, id);
-
- if (math::equals(id_len_sqr, c0))
- {
- return false;
- }
-
- // no need to normalize a1 and a2 because the intersection point on
- // the opposite side of the globe is at the same distance from the origin
- coord_t cos_a1i = dot_product(a1, id);
- coord_t cos_a2i = dot_product(a2, id);
- coord_t gri = math::detail::greatest(cos_a1i, cos_a2i);
- Point3d neg_id = id;
- multiply_value(neg_id, -c1);
- coord_t cos_a1ni = dot_product(a1, neg_id);
- coord_t cos_a2ni = dot_product(a2, neg_id);
- coord_t grni = math::detail::greatest(cos_a1ni, cos_a2ni);
-
- if (gri >= grni)
- {
- result = projected_to_surface(id, spheroid);
- }
- else
- {
- result = projected_to_surface(neg_id, spheroid);
- }
-
- return true;
-}
-
-template <typename Point3d1, typename Point3d2>
-static inline int elliptic_side_value(Point3d1 const& origin, Point3d1 const& norm, Point3d2 const& pt)
-{
- typedef typename coordinate_type<Point3d1>::type calc_t;
- calc_t c0 = 0;
-
- // vector oposite to pt - origin
- // only for the purpose of assigning origin
- Point3d1 vec = origin;
- subtract_point(vec, pt);
-
- calc_t d = dot_product(norm, vec);
-
- // since the vector is opposite the signs are opposite
- return math::equals(d, c0) ? 0
- : d < c0 ? 1
- : -1; // d > 0
-}
-
-template <typename Point3d, typename Spheroid>
-inline bool planes_spheroid_intersection(Point3d const& o1, Point3d const& n1,
- Point3d const& o2, Point3d const& n2,
- Point3d & ip1, Point3d & ip2,
- Spheroid const& spheroid)
-{
- typedef typename coordinate_type<Point3d>::type coord_t;
-
- coord_t c0 = 0;
- coord_t c1 = 1;
-
- // Below
- // n . (p - o) = 0
- // n . p - n . o = 0
- // n . p + d = 0
- // n . p = h
-
- // intersection direction
- Point3d id = cross_product(n1, n2);
-
- if (math::equals(dot_product(id, id), c0))
- {
- return false;
- }
-
- coord_t dot_n1_n2 = dot_product(n1, n2);
- coord_t dot_n1_n2_sqr = math::sqr(dot_n1_n2);
-
- coord_t h1 = dot_product(n1, o1);
- coord_t h2 = dot_product(n2, o2);
-
- coord_t denom = c1 - dot_n1_n2_sqr;
- coord_t C1 = (h1 - h2 * dot_n1_n2) / denom;
- coord_t C2 = (h2 - h1 * dot_n1_n2) / denom;
-
- // C1 * n1 + C2 * n2
- Point3d C1_n1 = n1;
- multiply_value(C1_n1, C1);
- Point3d C2_n2 = n2;
- multiply_value(C2_n2, C2);
- Point3d io = C1_n1;
- add_point(io, C2_n2);
-
- if (! projected_to_surface(io, id, ip1, ip2, spheroid))
- {
- return false;
- }
-
- return true;
-}
-
-
-template <typename Point3d, typename Spheroid>
-inline void experimental_elliptic_plane(Point3d const& p1, Point3d const& p2,
- Point3d & v1, Point3d & v2,
- Point3d & origin, Point3d & normal,
- Spheroid const& spheroid)
-{
- typedef typename coordinate_type<Point3d>::type coord_t;
-
- Point3d xy1 = projected_to_xy(p1, spheroid);
- Point3d xy2 = projected_to_xy(p2, spheroid);
-
- // origin = (xy1 + xy2) / 2
- origin = xy1;
- add_point(origin, xy2);
- multiply_value(origin, coord_t(0.5));
-
- // v1 = p1 - origin
- v1 = p1;
- subtract_point(v1, origin);
- // v2 = p2 - origin
- v2 = p2;
- subtract_point(v2, origin);
-
- normal = cross_product(v1, v2);
-}
-
-template <typename Point3d, typename Spheroid>
-inline void experimental_elliptic_plane(Point3d const& p1, Point3d const& p2,
- Point3d & origin, Point3d & normal,
- Spheroid const& spheroid)
-{
- Point3d v1, v2;
- experimental_elliptic_plane(p1, p2, v1, v2, origin, normal, spheroid);
-}
-
-template <typename Point3d, typename Spheroid>
-inline bool experimental_elliptic_intersection(Point3d const& a1, Point3d const& a2,
- Point3d const& b1, Point3d const& b2,
- Point3d & result,
- Spheroid const& spheroid)
-{
- typedef typename coordinate_type<Point3d>::type coord_t;
-
- coord_t c0 = 0;
- coord_t c1 = 1;
-
- Point3d a1v, a2v, o1, n1;
- experimental_elliptic_plane(a1, a2, a1v, a2v, o1, n1, spheroid);
- Point3d b1v, b2v, o2, n2;
- experimental_elliptic_plane(b1, b2, b1v, b2v, o2, n2, spheroid);
-
- if (! detail::vec_normalize(n1) || ! detail::vec_normalize(n2))
- {
- return false;
- }
-
- Point3d ip1_s, ip2_s;
- if (! planes_spheroid_intersection(o1, n1, o2, n2, ip1_s, ip2_s, spheroid))
- {
- return false;
- }
-
- // NOTE: simplified test, may not work in all cases
- coord_t dot_a1i1 = dot_product(a1, ip1_s);
- coord_t dot_a2i1 = dot_product(a2, ip1_s);
- coord_t gri1 = math::detail::greatest(dot_a1i1, dot_a2i1);
- coord_t dot_a1i2 = dot_product(a1, ip2_s);
- coord_t dot_a2i2 = dot_product(a2, ip2_s);
- coord_t gri2 = math::detail::greatest(dot_a1i2, dot_a2i2);
-
- result = gri1 >= gri2 ? ip1_s : ip2_s;
-
- return true;
-}
-
-} // namespace formula
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_FORMULAS_GEOGRAPHIC_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/gnomonic_intersection.hpp b/contrib/restricted/boost/boost/geometry/formulas/gnomonic_intersection.hpp
deleted file mode 100644
index 7e1b7bcdab1..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/gnomonic_intersection.hpp
+++ /dev/null
@@ -1,148 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_GNOMONIC_INTERSECTION_HPP
-#define BOOST_GEOMETRY_FORMULAS_GNOMONIC_INTERSECTION_HPP
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/cs.hpp>
-
-#include <boost/geometry/arithmetic/cross_product.hpp>
-#include <boost/geometry/formulas/gnomonic_spheroid.hpp>
-#include <boost/geometry/geometries/point.hpp>
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry { namespace formula
-{
-
-/*!
-\brief The intersection of two geodesics using spheroidal gnomonic projection
- as proposed by Karney.
-\author See
- - Charles F.F Karney, Algorithms for geodesics, 2011
- https://arxiv.org/pdf/1109.4448.pdf
- - GeographicLib forum thread: Intersection between two geodesic lines
- https://sourceforge.net/p/geographiclib/discussion/1026621/thread/21aaff9f/
-*/
-template
-<
- typename CT,
- template <typename, bool, bool, bool, bool, bool> class Inverse,
- template <typename, bool, bool, bool, bool> class Direct
->
-class gnomonic_intersection
-{
-public:
- template <typename T1, typename T2, typename Spheroid>
- static inline bool apply(T1 const& lona1, T1 const& lata1,
- T1 const& lona2, T1 const& lata2,
- T2 const& lonb1, T2 const& latb1,
- T2 const& lonb2, T2 const& latb2,
- CT & lon, CT & lat,
- Spheroid const& spheroid)
- {
- CT const lon_a1 = lona1;
- CT const lat_a1 = lata1;
- CT const lon_a2 = lona2;
- CT const lat_a2 = lata2;
- CT const lon_b1 = lonb1;
- CT const lat_b1 = latb1;
- CT const lon_b2 = lonb2;
- CT const lat_b2 = latb2;
-
- return apply(lon_a1, lat_a1, lon_a2, lat_a2, lon_b1, lat_b1, lon_b2, lat_b2, lon, lat, spheroid);
- }
-
- template <typename Spheroid>
- static inline bool apply(CT const& lona1, CT const& lata1,
- CT const& lona2, CT const& lata2,
- CT const& lonb1, CT const& latb1,
- CT const& lonb2, CT const& latb2,
- CT & lon, CT & lat,
- Spheroid const& spheroid)
- {
- typedef gnomonic_spheroid<CT, Inverse, Direct> gnom_t;
-
- lon = (lona1 + lona2 + lonb1 + lonb2) / 4;
- lat = (lata1 + lata2 + latb1 + latb2) / 4;
- // TODO: consider normalizing lon
-
- for (int i = 0; i < 10; ++i)
- {
- CT xa1, ya1, xa2, ya2;
- CT xb1, yb1, xb2, yb2;
- CT x, y;
- double lat1, lon1;
-
- bool ok = gnom_t::forward(lon, lat, lona1, lata1, xa1, ya1, spheroid)
- && gnom_t::forward(lon, lat, lona2, lata2, xa2, ya2, spheroid)
- && gnom_t::forward(lon, lat, lonb1, latb1, xb1, yb1, spheroid)
- && gnom_t::forward(lon, lat, lonb2, latb2, xb2, yb2, spheroid)
- && intersect(xa1, ya1, xa2, ya2, xb1, yb1, xb2, yb2, x, y)
- && gnom_t::inverse(lon, lat, x, y, lon1, lat1, spheroid);
-
- if (! ok)
- {
- return false;
- }
-
- if (math::equals(lat1, lat) && math::equals(lon1, lon))
- {
- break;
- }
-
- lat = lat1;
- lon = lon1;
- }
-
- // NOTE: true is also returned if the number of iterations is too great
- // which means that the accuracy of the result is low
- return true;
- }
-
-private:
- static inline bool intersect(CT const& xa1, CT const& ya1, CT const& xa2, CT const& ya2,
- CT const& xb1, CT const& yb1, CT const& xb2, CT const& yb2,
- CT & x, CT & y)
- {
- typedef model::point<CT, 3, cs::cartesian> v3d_t;
-
- CT const c0 = 0;
- CT const c1 = 1;
-
- v3d_t const va1(xa1, ya1, c1);
- v3d_t const va2(xa2, ya2, c1);
- v3d_t const vb1(xb1, yb1, c1);
- v3d_t const vb2(xb2, yb2, c1);
-
- v3d_t const la = cross_product(va1, va2);
- v3d_t const lb = cross_product(vb1, vb2);
- v3d_t const p = cross_product(la, lb);
-
- CT const z = get<2>(p);
-
- if (math::equals(z, c0))
- {
- // degenerated or collinear segments
- return false;
- }
-
- x = get<0>(p) / z;
- y = get<1>(p) / z;
-
- return true;
- }
-};
-
-}}} // namespace boost::geometry::formula
-
-
-#endif // BOOST_GEOMETRY_FORMULAS_GNOMONIC_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/gnomonic_spheroid.hpp b/contrib/restricted/boost/boost/geometry/formulas/gnomonic_spheroid.hpp
deleted file mode 100644
index 4710c6c0631..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/gnomonic_spheroid.hpp
+++ /dev/null
@@ -1,125 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_GNOMONIC_SPHEROID_HPP
-#define BOOST_GEOMETRY_FORMULAS_GNOMONIC_SPHEROID_HPP
-
-
-#include <boost/geometry/core/radius.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/formulas/andoyer_inverse.hpp>
-#include <boost/geometry/formulas/flattening.hpp>
-#include <boost/geometry/formulas/thomas_inverse.hpp>
-#include <boost/geometry/formulas/vincenty_direct.hpp>
-#include <boost/geometry/formulas/vincenty_inverse.hpp>
-
-
-namespace boost { namespace geometry { namespace formula
-{
-
-/*!
-\brief Gnomonic projection on spheroid (ellipsoid of revolution).
-\author See
-- Charles F.F Karney, Algorithms for geodesics, 2011
-https://arxiv.org/pdf/1109.4448.pdf
-*/
-template <
- typename CT,
- template <typename, bool, bool, bool, bool ,bool> class Inverse,
- template <typename, bool, bool, bool, bool> class Direct
->
-class gnomonic_spheroid
-{
- typedef Inverse<CT, false, true, true, true, true> inverse_type;
- typedef typename inverse_type::result_type inverse_result;
-
- typedef Direct<CT, false, false, true, true> direct_quantities_type;
- typedef Direct<CT, true, false, false, false> direct_coordinates_type;
- typedef typename direct_coordinates_type::result_type direct_result;
-
-public:
- template <typename Spheroid>
- static inline bool forward(CT const& lon0, CT const& lat0,
- CT const& lon, CT const& lat,
- CT & x, CT & y,
- Spheroid const& spheroid)
- {
- inverse_result i_res = inverse_type::apply(lon0, lat0, lon, lat, spheroid);
- CT const& m = i_res.reduced_length;
- CT const& M = i_res.geodesic_scale;
-
- if (math::smaller_or_equals(M, CT(0)))
- {
- return false;
- }
-
- CT rho = m / M;
- x = sin(i_res.azimuth) * rho;
- y = cos(i_res.azimuth) * rho;
-
- return true;
- }
-
- template <typename Spheroid>
- static inline bool inverse(CT const& lon0, CT const& lat0,
- CT const& x, CT const& y,
- CT & lon, CT & lat,
- Spheroid const& spheroid)
- {
- CT const a = get_radius<0>(spheroid);
- CT const ds_threshold = a * std::numeric_limits<CT>::epsilon(); // TODO: 0 for non-fundamental type
-
- CT const azimuth = atan2(x, y);
- CT const rho = math::sqrt(math::sqr(x) + math::sqr(y)); // use hypot?
- CT distance = a * atan(rho / a);
-
- bool found = false;
- for (int i = 0 ; i < 10 ; ++i)
- {
- direct_result d_res = direct_quantities_type::apply(lon0, lat0, distance, azimuth, spheroid);
- CT const& m = d_res.reduced_length;
- CT const& M = d_res.geodesic_scale;
-
- if (math::smaller_or_equals(M, CT(0)))
- {
- // found = false;
- return found;
- }
-
- CT const drho = m / M - rho; // rho = m / M
- CT const ds = drho * math::sqr(M); // drho/ds = 1/M^2
- distance -= ds;
-
- // ds_threshold may be 0
- if (math::abs(ds) <= ds_threshold)
- {
- found = true;
- break;
- }
- }
-
- if (found)
- {
- direct_result d_res = direct_coordinates_type::apply(lon0, lat0, distance, azimuth, spheroid);
- lon = d_res.lon2;
- lat = d_res.lat2;
- }
-
- return found;
- }
-};
-
-}}} // namespace boost::geometry::formula
-
-
-#endif // BOOST_GEOMETRY_FORMULAS_GNOMONIC_SPHEROID_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/mean_radius.hpp b/contrib/restricted/boost/boost/geometry/formulas/mean_radius.hpp
deleted file mode 100644
index 83c9b5403fd..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/mean_radius.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_MEAN_RADIUS_HPP
-#define BOOST_GEOMETRY_FORMULAS_MEAN_RADIUS_HPP
-
-#include <boost/geometry/core/radius.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace formula_dispatch
-{
-
-template <typename ResultType, typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct mean_radius
- : not_implemented<Tag>
-{};
-
-template <typename ResultType, typename Geometry>
-struct mean_radius<ResultType, Geometry, srs_sphere_tag>
-{
- static inline ResultType apply(Geometry const& geometry)
- {
- return ResultType(get_radius<0>(geometry));
- }
-};
-
-template <typename ResultType, typename Geometry>
-struct mean_radius<ResultType, Geometry, srs_spheroid_tag>
-{
- static inline ResultType apply(Geometry const& geometry)
- {
- // (2*a + b) / 3
- return (ResultType(2) * ResultType(get_radius<0>(geometry))
- + ResultType(get_radius<2>(geometry)))
- / ResultType(3);
- }
-};
-
-} // namespace formula_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace formula
-{
-
-template <typename ResultType, typename Geometry>
-inline ResultType mean_radius(Geometry const& geometry)
-{
- return formula_dispatch::mean_radius<ResultType, Geometry>::apply(geometry);
-}
-
-} // namespace formula
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_FORMULAS_MEAN_RADIUS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/result_direct.hpp b/contrib/restricted/boost/boost/geometry/formulas/result_direct.hpp
deleted file mode 100644
index 8461d8ac9b6..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/result_direct.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_RESULT_DIRECT_HPP
-#define BOOST_GEOMETRY_FORMULAS_RESULT_DIRECT_HPP
-
-
-namespace boost { namespace geometry { namespace formula
-{
-
-template <typename T>
-struct result_direct
-{
- result_direct()
- : lon2(0)
- , lat2(0)
- , reverse_azimuth(0)
- , reduced_length(0)
- , geodesic_scale(1)
- {}
-
- T lon2;
- T lat2;
- T reverse_azimuth;
- T reduced_length;
- T geodesic_scale;
-};
-
-}}} // namespace boost::geometry::formula
-
-
-#endif // BOOST_GEOMETRY_FORMULAS_RESULT_DIRECT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/result_inverse.hpp b/contrib/restricted/boost/boost/geometry/formulas/result_inverse.hpp
deleted file mode 100644
index b6faae6eaae..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/result_inverse.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2015-2016 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_RESULT_INVERSE_HPP
-#define BOOST_GEOMETRY_FORMULAS_RESULT_INVERSE_HPP
-
-
-namespace boost { namespace geometry { namespace formula
-{
-
-template <typename T>
-struct result_inverse
-{
- result_inverse()
- : distance(0)
- , azimuth(0)
- , reverse_azimuth(0)
- , reduced_length(0)
- , geodesic_scale(1)
- {}
-
- T distance;
- T azimuth;
- T reverse_azimuth;
- T reduced_length;
- T geodesic_scale;
-};
-
-}}} // namespace boost::geometry::formula
-
-
-#endif // BOOST_GEOMETRY_FORMULAS_RESULT_INVERSE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/sjoberg_intersection.hpp b/contrib/restricted/boost/boost/geometry/formulas/sjoberg_intersection.hpp
deleted file mode 100644
index 54478e30620..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/sjoberg_intersection.hpp
+++ /dev/null
@@ -1,1265 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_SJOBERG_INTERSECTION_HPP
-#define BOOST_GEOMETRY_FORMULAS_SJOBERG_INTERSECTION_HPP
-
-
-#include <boost/math/constants/constants.hpp>
-
-#include <boost/geometry/core/radius.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-
-#include <boost/geometry/formulas/flattening.hpp>
-#include <boost/geometry/formulas/spherical.hpp>
-
-
-namespace boost { namespace geometry { namespace formula
-{
-
-/*!
-\brief The intersection of two great circles as proposed by Sjoberg.
-\see See
- - [Sjoberg02] Lars E. Sjoberg, Intersections on the sphere and ellipsoid, 2002
- http://link.springer.com/article/10.1007/s00190-001-0230-9
-*/
-template <typename CT>
-struct sjoberg_intersection_spherical_02
-{
- // TODO: if it will be used as standalone formula
- // support segments on equator and endpoints on poles
-
- static inline bool apply(CT const& lon1, CT const& lat1, CT const& lon_a2, CT const& lat_a2,
- CT const& lon2, CT const& lat2, CT const& lon_b2, CT const& lat_b2,
- CT & lon, CT & lat)
- {
- CT tan_lat = 0;
- bool res = apply_alt(lon1, lat1, lon_a2, lat_a2,
- lon2, lat2, lon_b2, lat_b2,
- lon, tan_lat);
-
- if (res)
- {
- lat = atan(tan_lat);
- }
-
- return res;
- }
-
- static inline bool apply_alt(CT const& lon1, CT const& lat1, CT const& lon_a2, CT const& lat_a2,
- CT const& lon2, CT const& lat2, CT const& lon_b2, CT const& lat_b2,
- CT & lon, CT & tan_lat)
- {
- CT const cos_lon1 = cos(lon1);
- CT const sin_lon1 = sin(lon1);
- CT const cos_lon2 = cos(lon2);
- CT const sin_lon2 = sin(lon2);
- CT const sin_lat1 = sin(lat1);
- CT const sin_lat2 = sin(lat2);
- CT const cos_lat1 = cos(lat1);
- CT const cos_lat2 = cos(lat2);
-
- CT const tan_lat_a2 = tan(lat_a2);
- CT const tan_lat_b2 = tan(lat_b2);
-
- return apply(lon1, lon_a2, lon2, lon_b2,
- sin_lon1, cos_lon1, sin_lat1, cos_lat1,
- sin_lon2, cos_lon2, sin_lat2, cos_lat2,
- tan_lat_a2, tan_lat_b2,
- lon, tan_lat);
- }
-
-private:
- static inline bool apply(CT const& lon1, CT const& lon_a2, CT const& lon2, CT const& lon_b2,
- CT const& sin_lon1, CT const& cos_lon1, CT const& sin_lat1, CT const& cos_lat1,
- CT const& sin_lon2, CT const& cos_lon2, CT const& sin_lat2, CT const& cos_lat2,
- CT const& tan_lat_a2, CT const& tan_lat_b2,
- CT & lon, CT & tan_lat)
- {
- // NOTE:
- // cos_lat_ = 0 <=> segment on equator
- // tan_alpha_ = 0 <=> segment vertical
-
- CT const tan_lat1 = sin_lat1 / cos_lat1; //tan(lat1);
- CT const tan_lat2 = sin_lat2 / cos_lat2; //tan(lat2);
-
- CT const dlon1 = lon_a2 - lon1;
- CT const sin_dlon1 = sin(dlon1);
- CT const dlon2 = lon_b2 - lon2;
- CT const sin_dlon2 = sin(dlon2);
-
- CT const cos_dlon1 = cos(dlon1);
- CT const cos_dlon2 = cos(dlon2);
-
- CT const tan_alpha1_x = cos_lat1 * tan_lat_a2 - sin_lat1 * cos_dlon1;
- CT const tan_alpha2_x = cos_lat2 * tan_lat_b2 - sin_lat2 * cos_dlon2;
-
- CT const c0 = 0;
- bool const is_vertical1 = math::equals(sin_dlon1, c0) || math::equals(tan_alpha1_x, c0);
- bool const is_vertical2 = math::equals(sin_dlon2, c0) || math::equals(tan_alpha2_x, c0);
-
- CT tan_alpha1 = 0;
- CT tan_alpha2 = 0;
-
- if (is_vertical1 && is_vertical2)
- {
- // circles intersect at one of the poles or are collinear
- return false;
- }
- else if (is_vertical1)
- {
- tan_alpha2 = sin_dlon2 / tan_alpha2_x;
-
- lon = lon1;
- }
- else if (is_vertical2)
- {
- tan_alpha1 = sin_dlon1 / tan_alpha1_x;
-
- lon = lon2;
- }
- else
- {
- tan_alpha1 = sin_dlon1 / tan_alpha1_x;
- tan_alpha2 = sin_dlon2 / tan_alpha2_x;
-
- CT const T1 = tan_alpha1 * cos_lat1;
- CT const T2 = tan_alpha2 * cos_lat2;
- CT const T1T2 = T1*T2;
- CT const tan_lon_y = T1 * sin_lon2 - T2 * sin_lon1 + T1T2 * (tan_lat1 * cos_lon1 - tan_lat2 * cos_lon2);
- CT const tan_lon_x = T1 * cos_lon2 - T2 * cos_lon1 - T1T2 * (tan_lat1 * sin_lon1 - tan_lat2 * sin_lon2);
-
- lon = atan2(tan_lon_y, tan_lon_x);
- }
-
- // choose closer result
- CT const pi = math::pi<CT>();
- CT const lon_2 = lon > c0 ? lon - pi : lon + pi;
- CT const lon_dist1 = (std::max)((std::min)(math::longitude_difference<radian>(lon1, lon),
- math::longitude_difference<radian>(lon_a2, lon)),
- (std::min)(math::longitude_difference<radian>(lon2, lon),
- math::longitude_difference<radian>(lon_b2, lon)));
- CT const lon_dist2 = (std::max)((std::min)(math::longitude_difference<radian>(lon1, lon_2),
- math::longitude_difference<radian>(lon_a2, lon_2)),
- (std::min)(math::longitude_difference<radian>(lon2, lon_2),
- math::longitude_difference<radian>(lon_b2, lon_2)));
- if (lon_dist2 < lon_dist1)
- {
- lon = lon_2;
- }
-
- CT const sin_lon = sin(lon);
- CT const cos_lon = cos(lon);
-
- if (math::abs(tan_alpha1) >= math::abs(tan_alpha2)) // pick less vertical segment
- {
- CT const sin_dlon_1 = sin_lon * cos_lon1 - cos_lon * sin_lon1;
- CT const cos_dlon_1 = cos_lon * cos_lon1 + sin_lon * sin_lon1;
- CT const lat_y_1 = sin_dlon_1 + tan_alpha1 * sin_lat1 * cos_dlon_1;
- CT const lat_x_1 = tan_alpha1 * cos_lat1;
- tan_lat = lat_y_1 / lat_x_1;
- }
- else
- {
- CT const sin_dlon_2 = sin_lon * cos_lon2 - cos_lon * sin_lon2;
- CT const cos_dlon_2 = cos_lon * cos_lon2 + sin_lon * sin_lon2;
- CT const lat_y_2 = sin_dlon_2 + tan_alpha2 * sin_lat2 * cos_dlon_2;
- CT const lat_x_2 = tan_alpha2 * cos_lat2;
- tan_lat = lat_y_2 / lat_x_2;
- }
-
- return true;
- }
-};
-
-
-/*! Approximation of dLambda_j [Sjoberg07], expanded into taylor series in e^2
- Maxima script:
- dLI_j(c_j, sinB_j, sinB) := integrate(1 / (sqrt(1 - c_j ^ 2 - x ^ 2)*(1 + sqrt(1 - e2*(1 - x ^ 2)))), x, sinB_j, sinB);
- dL_j(c_j, B_j, B) := -e2 * c_j * dLI_j(c_j, B_j, B);
- S: taylor(dLI_j(c_j, sinB_j, sinB), e2, 0, 3);
- assume(c_j < 1);
- assume(c_j > 0);
- L1: factor(integrate(sqrt(-x ^ 2 - c_j ^ 2 + 1) / (x ^ 2 + c_j ^ 2 - 1), x));
- L2: factor(integrate(((x ^ 2 - 1)*sqrt(-x ^ 2 - c_j ^ 2 + 1)) / (x ^ 2 + c_j ^ 2 - 1), x));
- L3: factor(integrate(((x ^ 4 - 2 * x ^ 2 + 1)*sqrt(-x ^ 2 - c_j ^ 2 + 1)) / (x ^ 2 + c_j ^ 2 - 1), x));
- L4: factor(integrate(((x ^ 6 - 3 * x ^ 4 + 3 * x ^ 2 - 1)*sqrt(-x ^ 2 - c_j ^ 2 + 1)) / (x ^ 2 + c_j ^ 2 - 1), x));
-
-\see See
- - [Sjoberg07] Lars E. Sjoberg, Geodetic intersection on the ellipsoid, 2007
- http://link.springer.com/article/10.1007/s00190-007-0204-7
-*/
-template <unsigned int Order, typename CT>
-inline CT sjoberg_d_lambda_e_sqr(CT const& sin_betaj, CT const& sin_beta,
- CT const& Cj, CT const& sqrt_1_Cj_sqr,
- CT const& e_sqr)
-{
- using math::detail::bounded;
-
- if (Order == 0)
- {
- return 0;
- }
-
- CT const c1 = 1;
- CT const c2 = 2;
-
- CT const asin_B = asin(bounded(sin_beta / sqrt_1_Cj_sqr, -c1, c1));
- CT const asin_Bj = asin(sin_betaj / sqrt_1_Cj_sqr);
- CT const L0 = (asin_B - asin_Bj) / c2;
-
- if (Order == 1)
- {
- return -Cj * e_sqr * L0;
- }
-
- CT const c0 = 0;
- CT const c16 = 16;
-
- CT const X = sin_beta;
- CT const Xj = sin_betaj;
- CT const X_sqr = math::sqr(X);
- CT const Xj_sqr = math::sqr(Xj);
- CT const Cj_sqr = math::sqr(Cj);
- CT const Cj_sqr_plus_one = Cj_sqr + c1;
- CT const one_minus_Cj_sqr = c1 - Cj_sqr;
- CT const sqrt_Y = math::sqrt(bounded(-X_sqr + one_minus_Cj_sqr, c0));
- CT const sqrt_Yj = math::sqrt(-Xj_sqr + one_minus_Cj_sqr);
- CT const L1 = (Cj_sqr_plus_one * (asin_B - asin_Bj) + X * sqrt_Y - Xj * sqrt_Yj) / c16;
-
- if (Order == 2)
- {
- return -Cj * e_sqr * (L0 + e_sqr * L1);
- }
-
- CT const c3 = 3;
- CT const c5 = 5;
- CT const c128 = 128;
-
- CT const E = Cj_sqr * (c3 * Cj_sqr + c2) + c3;
- CT const F = X * (-c2 * X_sqr + c3 * Cj_sqr + c5);
- CT const Fj = Xj * (-c2 * Xj_sqr + c3 * Cj_sqr + c5);
- CT const L2 = (E * (asin_B - asin_Bj) + F * sqrt_Y - Fj * sqrt_Yj) / c128;
-
- if (Order == 3)
- {
- return -Cj * e_sqr * (L0 + e_sqr * (L1 + e_sqr * L2));
- }
-
- CT const c8 = 8;
- CT const c9 = 9;
- CT const c10 = 10;
- CT const c15 = 15;
- CT const c24 = 24;
- CT const c26 = 26;
- CT const c33 = 33;
- CT const c6144 = 6144;
-
- CT const G = Cj_sqr * (Cj_sqr * (Cj_sqr * c15 + c9) + c9) + c15;
- CT const H = -c10 * Cj_sqr - c26;
- CT const I = Cj_sqr * (Cj_sqr * c15 + c24) + c33;
- CT const J = X_sqr * (X * (c8 * X_sqr + H)) + X * I;
- CT const Jj = Xj_sqr * (Xj * (c8 * Xj_sqr + H)) + Xj * I;
- CT const L3 = (G * (asin_B - asin_Bj) + J * sqrt_Y - Jj * sqrt_Yj) / c6144;
-
- // Order 4 and higher
- return -Cj * e_sqr * (L0 + e_sqr * (L1 + e_sqr * (L2 + e_sqr * L3)));
-}
-
-/*!
-\brief The representation of geodesic as proposed by Sjoberg.
-\see See
- - [Sjoberg07] Lars E. Sjoberg, Geodetic intersection on the ellipsoid, 2007
- http://link.springer.com/article/10.1007/s00190-007-0204-7
- - [Sjoberg12] Lars E. Sjoberg, Solutions to the ellipsoidal Clairaut constant
- and the inverse geodetic problem by numerical integration, 2012
- https://www.degruyter.com/view/j/jogs.2012.2.issue-3/v10156-011-0037-4/v10156-011-0037-4.xml
-*/
-template <typename CT, unsigned int Order>
-class sjoberg_geodesic
-{
- sjoberg_geodesic() {}
-
- static int sign_C(CT const& alphaj)
- {
- CT const c0 = 0;
- CT const c2 = 2;
- CT const pi = math::pi<CT>();
- CT const pi_half = pi / c2;
-
- return (pi_half < alphaj && alphaj < pi) || (-pi_half < alphaj && alphaj < c0) ? -1 : 1;
- }
-
-public:
- sjoberg_geodesic(CT const& lon, CT const& lat, CT const& alpha, CT const& f)
- : lonj(lon)
- , latj(lat)
- , alphaj(alpha)
- {
- CT const c0 = 0;
- CT const c1 = 1;
- CT const c2 = 2;
- //CT const pi = math::pi<CT>();
- //CT const pi_half = pi / c2;
-
- one_minus_f = c1 - f;
- e_sqr = f * (c2 - f);
-
- tan_latj = tan(lat);
- tan_betaj = one_minus_f * tan_latj;
- betaj = atan(tan_betaj);
- sin_betaj = sin(betaj);
-
- cos_betaj = cos(betaj);
- sin_alphaj = sin(alphaj);
- // Clairaut constant (lower-case in the paper)
- Cj = sign_C(alphaj) * cos_betaj * sin_alphaj;
- Cj_sqr = math::sqr(Cj);
- sqrt_1_Cj_sqr = math::sqrt(c1 - Cj_sqr);
-
- sign_lon_diff = alphaj >= 0 ? 1 : -1; // || alphaj == -pi ?
- //sign_lon_diff = 1;
-
- is_on_equator = math::equals(sqrt_1_Cj_sqr, c0);
- is_Cj_zero = math::equals(Cj, c0);
-
- t0j = c0;
- asin_tj_t0j = c0;
-
- if (! is_Cj_zero)
- {
- t0j = sqrt_1_Cj_sqr / Cj;
- }
-
- if (! is_on_equator)
- {
- //asin_tj_t0j = asin(tan_betaj / t0j);
- asin_tj_t0j = asin(tan_betaj * Cj / sqrt_1_Cj_sqr);
- }
- }
-
- struct vertex_data
- {
- //CT beta0j;
- CT sin_beta0j;
- CT dL0j;
- CT lon0j;
- };
-
- vertex_data get_vertex_data() const
- {
- CT const c2 = 2;
- CT const pi = math::pi<CT>();
- CT const pi_half = pi / c2;
-
- vertex_data res;
-
- if (! is_Cj_zero)
- {
- //res.beta0j = atan(t0j);
- //res.sin_beta0j = sin(res.beta0j);
- res.sin_beta0j = math::sign(t0j) * sqrt_1_Cj_sqr;
- res.dL0j = d_lambda(res.sin_beta0j);
- res.lon0j = lonj + sign_lon_diff * (pi_half - asin_tj_t0j + res.dL0j);
- }
- else
- {
- //res.beta0j = pi_half;
- //res.sin_beta0j = betaj >= 0 ? 1 : -1;
- res.sin_beta0j = 1;
- res.dL0j = 0;
- res.lon0j = lonj;
- }
-
- return res;
- }
-
- bool is_sin_beta_ok(CT const& sin_beta) const
- {
- CT const c1 = 1;
- return math::abs(sin_beta / sqrt_1_Cj_sqr) <= c1;
- }
-
- bool k_diff(CT const& sin_beta,
- CT & delta_k) const
- {
- if (is_Cj_zero)
- {
- delta_k = 0;
- return true;
- }
-
- // beta out of bounds and not close
- if (! (is_sin_beta_ok(sin_beta)
- || math::equals(math::abs(sin_beta), sqrt_1_Cj_sqr)) )
- {
- return false;
- }
-
- // NOTE: beta may be slightly out of bounds here but d_lambda handles that
- CT const dLj = d_lambda(sin_beta);
- delta_k = sign_lon_diff * (/*asin_t_t0j*/ - asin_tj_t0j + dLj);
-
- return true;
- }
-
- bool lon_diff(CT const& sin_beta, CT const& t,
- CT & delta_lon) const
- {
- using math::detail::bounded;
- CT const c1 = 1;
-
- if (is_Cj_zero)
- {
- delta_lon = 0;
- return true;
- }
-
- CT delta_k = 0;
- if (! k_diff(sin_beta, delta_k))
- {
- return false;
- }
-
- CT const t_t0j = t / t0j;
- // NOTE: t may be slightly out of bounds here
- CT const asin_t_t0j = asin(bounded(t_t0j, -c1, c1));
- delta_lon = sign_lon_diff * asin_t_t0j + delta_k;
-
- return true;
- }
-
- bool k_diffs(CT const& sin_beta, vertex_data const& vd,
- CT & delta_k_before, CT & delta_k_behind,
- bool check_sin_beta = true) const
- {
- CT const pi = math::pi<CT>();
-
- if (is_Cj_zero)
- {
- delta_k_before = 0;
- delta_k_behind = sign_lon_diff * pi;
- return true;
- }
-
- // beta out of bounds and not close
- if (check_sin_beta
- && ! (is_sin_beta_ok(sin_beta)
- || math::equals(math::abs(sin_beta), sqrt_1_Cj_sqr)) )
- {
- return false;
- }
-
- // NOTE: beta may be slightly out of bounds here but d_lambda handles that
- CT const dLj = d_lambda(sin_beta);
- delta_k_before = sign_lon_diff * (/*asin_t_t0j*/ - asin_tj_t0j + dLj);
-
- // This version require no additional dLj calculation
- delta_k_behind = sign_lon_diff * (pi /*- asin_t_t0j*/ - asin_tj_t0j + vd.dL0j + (vd.dL0j - dLj));
-
- // [Sjoberg12]
- //CT const dL101 = d_lambda(sin_betaj, vd.sin_beta0j);
- // WARNING: the following call might not work if beta was OoB because only the second argument is bounded
- //CT const dL_01 = d_lambda(sin_beta, vd.sin_beta0j);
- //delta_k_behind = sign_lon_diff * (pi /*- asin_t_t0j*/ - asin_tj_t0j + dL101 + dL_01);
-
- return true;
- }
-
- bool lon_diffs(CT const& sin_beta, CT const& t, vertex_data const& vd,
- CT & delta_lon_before, CT & delta_lon_behind) const
- {
- using math::detail::bounded;
- CT const c1 = 1;
- CT const pi = math::pi<CT>();
-
- if (is_Cj_zero)
- {
- delta_lon_before = 0;
- delta_lon_behind = sign_lon_diff * pi;
- return true;
- }
-
- CT delta_k_before = 0, delta_k_behind = 0;
- if (! k_diffs(sin_beta, vd, delta_k_before, delta_k_behind))
- {
- return false;
- }
-
- CT const t_t0j = t / t0j;
- // NOTE: t may be slightly out of bounds here
- CT const asin_t_t0j = asin(bounded(t_t0j, -c1, c1));
- CT const sign_asin_t_t0j = sign_lon_diff * asin_t_t0j;
- delta_lon_before = sign_asin_t_t0j + delta_k_before;
- delta_lon_behind = -sign_asin_t_t0j + delta_k_behind;
-
- return true;
- }
-
- bool lon(CT const& sin_beta, CT const& t, vertex_data const& vd,
- CT & lon_before, CT & lon_behind) const
- {
- using math::detail::bounded;
- CT const c1 = 1;
- CT const pi = math::pi<CT>();
-
- if (is_Cj_zero)
- {
- lon_before = lonj;
- lon_behind = lonj + sign_lon_diff * pi;
- return true;
- }
-
- if (! (is_sin_beta_ok(sin_beta)
- || math::equals(math::abs(sin_beta), sqrt_1_Cj_sqr)) )
- {
- return false;
- }
-
- CT const t_t0j = t / t0j;
- CT const asin_t_t0j = asin(bounded(t_t0j, -c1, c1));
- CT const dLj = d_lambda(sin_beta);
- lon_before = lonj + sign_lon_diff * (asin_t_t0j - asin_tj_t0j + dLj);
- lon_behind = vd.lon0j + (vd.lon0j - lon_before);
-
- return true;
- }
-
-
- CT lon(CT const& delta_lon) const
- {
- return lonj + delta_lon;
- }
-
- CT lat(CT const& t) const
- {
- // t = tan(beta) = (1-f)tan(lat)
- return atan(t / one_minus_f);
- }
-
- void vertex(CT & lon, CT & lat) const
- {
- lon = get_vertex_data().lon0j;
- if (! is_Cj_zero)
- {
- lat = sjoberg_geodesic::lat(t0j);
- }
- else
- {
- CT const c2 = 2;
- lat = math::pi<CT>() / c2;
- }
- }
-
- CT lon_of_equator_intersection() const
- {
- CT const c0 = 0;
- CT const dLj = d_lambda(c0);
- CT const asin_tj_t0j = asin(Cj * tan_betaj / sqrt_1_Cj_sqr);
- return lonj - asin_tj_t0j + dLj;
- }
-
- CT d_lambda(CT const& sin_beta) const
- {
- return sjoberg_d_lambda_e_sqr<Order>(sin_betaj, sin_beta, Cj, sqrt_1_Cj_sqr, e_sqr);
- }
-
- // [Sjoberg12]
- /*CT d_lambda(CT const& sin_beta1, CT const& sin_beta2) const
- {
- return sjoberg_d_lambda_e_sqr<Order>(sin_beta1, sin_beta2, Cj, sqrt_1_Cj_sqr, e_sqr);
- }*/
-
- CT lonj;
- CT latj;
- CT alphaj;
-
- CT one_minus_f;
- CT e_sqr;
-
- CT tan_latj;
- CT tan_betaj;
- CT betaj;
- CT sin_betaj;
- CT cos_betaj;
- CT sin_alphaj;
- CT Cj;
- CT Cj_sqr;
- CT sqrt_1_Cj_sqr;
-
- int sign_lon_diff;
-
- bool is_on_equator;
- bool is_Cj_zero;
-
- CT t0j;
- CT asin_tj_t0j;
-};
-
-
-/*!
-\brief The intersection of two geodesics as proposed by Sjoberg.
-\see See
- - [Sjoberg02] Lars E. Sjoberg, Intersections on the sphere and ellipsoid, 2002
- http://link.springer.com/article/10.1007/s00190-001-0230-9
- - [Sjoberg07] Lars E. Sjoberg, Geodetic intersection on the ellipsoid, 2007
- http://link.springer.com/article/10.1007/s00190-007-0204-7
- - [Sjoberg12] Lars E. Sjoberg, Solutions to the ellipsoidal Clairaut constant
- and the inverse geodetic problem by numerical integration, 2012
- https://www.degruyter.com/view/j/jogs.2012.2.issue-3/v10156-011-0037-4/v10156-011-0037-4.xml
-*/
-template
-<
- typename CT,
- template <typename, bool, bool, bool, bool, bool> class Inverse,
- unsigned int Order = 4
->
-class sjoberg_intersection
-{
- typedef sjoberg_geodesic<CT, Order> geodesic_type;
- typedef Inverse<CT, false, true, false, false, false> inverse_type;
- typedef typename inverse_type::result_type inverse_result;
-
- static bool const enable_02 = true;
- static int const max_iterations_02 = 10;
- static int const max_iterations_07 = 20;
-
-public:
- template <typename T1, typename T2, typename Spheroid>
- static inline bool apply(T1 const& lona1, T1 const& lata1,
- T1 const& lona2, T1 const& lata2,
- T2 const& lonb1, T2 const& latb1,
- T2 const& lonb2, T2 const& latb2,
- CT & lon, CT & lat,
- Spheroid const& spheroid)
- {
- CT const lon_a1 = lona1;
- CT const lat_a1 = lata1;
- CT const lon_a2 = lona2;
- CT const lat_a2 = lata2;
- CT const lon_b1 = lonb1;
- CT const lat_b1 = latb1;
- CT const lon_b2 = lonb2;
- CT const lat_b2 = latb2;
-
- inverse_result const res1 = inverse_type::apply(lon_a1, lat_a1, lon_a2, lat_a2, spheroid);
- inverse_result const res2 = inverse_type::apply(lon_b1, lat_b1, lon_b2, lat_b2, spheroid);
-
- return apply(lon_a1, lat_a1, lon_a2, lat_a2, res1.azimuth,
- lon_b1, lat_b1, lon_b2, lat_b2, res2.azimuth,
- lon, lat, spheroid);
- }
-
- // TODO: Currently may not work correctly if one of the endpoints is the pole
- template <typename Spheroid>
- static inline bool apply(CT const& lon_a1, CT const& lat_a1, CT const& lon_a2, CT const& lat_a2, CT const& alpha_a1,
- CT const& lon_b1, CT const& lat_b1, CT const& lon_b2, CT const& lat_b2, CT const& alpha_b1,
- CT & lon, CT & lat,
- Spheroid const& spheroid)
- {
- // coordinates in radians
-
- CT const c0 = 0;
- CT const c1 = 1;
-
- CT const f = formula::flattening<CT>(spheroid);
- CT const one_minus_f = c1 - f;
-
- geodesic_type geod1(lon_a1, lat_a1, alpha_a1, f);
- geodesic_type geod2(lon_b1, lat_b1, alpha_b1, f);
-
- // Cj = 1 if on equator <=> sqrt_1_Cj_sqr = 0
- // Cj = 0 if vertical <=> sqrt_1_Cj_sqr = 1
-
- if (geod1.is_on_equator && geod2.is_on_equator)
- {
- return false;
- }
- else if (geod1.is_on_equator)
- {
- lon = geod2.lon_of_equator_intersection();
- lat = c0;
- return true;
- }
- else if (geod2.is_on_equator)
- {
- lon = geod1.lon_of_equator_intersection();
- lat = c0;
- return true;
- }
-
- // (lon1 - lon2) normalized to (-180, 180]
- CT const lon1_minus_lon2 = math::longitude_distance_signed<radian>(geod2.lonj, geod1.lonj);
-
- // vertical segments
- if (geod1.is_Cj_zero && geod2.is_Cj_zero)
- {
- CT const pi = math::pi<CT>();
-
- // the geodesics are parallel, the intersection point cannot be calculated
- if ( math::equals(lon1_minus_lon2, c0)
- || math::equals(lon1_minus_lon2 + (lon1_minus_lon2 < c0 ? pi : -pi), c0) )
- {
- return false;
- }
-
- lon = c0;
-
- // the geodesics intersect at one of the poles
- CT const pi_half = pi / CT(2);
- CT const abs_lat_a1 = math::abs(lat_a1);
- CT const abs_lat_a2 = math::abs(lat_a2);
- if (math::equals(abs_lat_a1, abs_lat_a2))
- {
- lat = pi_half;
- }
- else
- {
- // pick the pole closest to one of the points of the first segment
- CT const& closer_lat = abs_lat_a1 > abs_lat_a2 ? lat_a1 : lat_a2;
- lat = closer_lat >= 0 ? pi_half : -pi_half;
- }
-
- return true;
- }
-
- CT lon_sph = 0;
-
- // Starting tan(beta)
- CT t = 0;
-
- /*if (geod1.is_Cj_zero)
- {
- CT const k_base = lon1_minus_lon2 + geod2.sign_lon_diff * geod2.asin_tj_t0j;
- t = sin(k_base) * geod2.t0j;
- lon_sph = vertical_intersection_longitude(geod1.lonj, lon_b1, lon_b2);
- }
- else if (geod2.is_Cj_zero)
- {
- CT const k_base = lon1_minus_lon2 - geod1.sign_lon_diff * geod1.asin_tj_t0j;
- t = sin(-k_base) * geod1.t0j;
- lon_sph = vertical_intersection_longitude(geod2.lonj, lon_a1, lon_a2);
- }
- else*/
- {
- // TODO: Consider using betas instead of latitudes.
- // Some function calls might be saved this way.
- CT tan_lat_sph = 0;
- sjoberg_intersection_spherical_02<CT>::apply_alt(lon_a1, lat_a1, lon_a2, lat_a2,
- lon_b1, lat_b1, lon_b2, lat_b2,
- lon_sph, tan_lat_sph);
-
- // Return for sphere
- if (math::equals(f, c0))
- {
- lon = lon_sph;
- lat = atan(tan_lat_sph);
- return true;
- }
-
- t = one_minus_f * tan_lat_sph; // tan(beta)
- }
-
- // TODO: no need to calculate atan here if reduced latitudes were used
- // instead of latitudes above, in sjoberg_intersection_spherical_02
- CT const beta = atan(t);
-
- if (enable_02 && newton_method(geod1, geod2, beta, t, lon1_minus_lon2, lon_sph, lon, lat))
- {
- // TODO: Newton's method may return wrong result in some specific cases
- // Detected for sphere and nearly sphere, e.g. A=6371228, B=6371227
- // and segments s1=(-121 -19,37 8) and s2=(-19 -15,-104 -58)
- // It's unclear if this is a bug or a characteristic of this method
- // so until this is investigated check if the resulting longitude is
- // between endpoints of the segments. It should be since before calling
- // this formula sides of endpoints WRT other segments are checked.
- if ( is_result_longitude_ok(geod1, lon_a1, lon_a2, lon)
- && is_result_longitude_ok(geod2, lon_b1, lon_b2, lon) )
- {
- return true;
- }
- }
-
- return converge_07(geod1, geod2, beta, t, lon1_minus_lon2, lon_sph, lon, lat);
- }
-
-private:
- static inline bool newton_method(geodesic_type const& geod1, geodesic_type const& geod2, // in
- CT beta, CT t, CT const& lon1_minus_lon2, CT const& lon_sph, // in
- CT & lon, CT & lat) // out
- {
- CT const c0 = 0;
- CT const c1 = 1;
-
- CT const e_sqr = geod1.e_sqr;
-
- CT lon1_diff = 0;
- CT lon2_diff = 0;
-
- // The segment is vertical and intersection point is behind the vertex
- // this method is unable to calculate correct result
- if (geod1.is_Cj_zero && math::abs(geod1.lonj - lon_sph) > math::half_pi<CT>())
- return false;
- if (geod2.is_Cj_zero && math::abs(geod2.lonj - lon_sph) > math::half_pi<CT>())
- return false;
-
- CT abs_dbeta_last = 0;
-
- // [Sjoberg02] converges faster than solution in [Sjoberg07]
- // Newton-Raphson method
- for (int i = 0; i < max_iterations_02; ++i)
- {
- CT const sin_beta = sin(beta);
- CT const cos_beta = cos(beta);
- CT const cos_beta_sqr = math::sqr(cos_beta);
- CT const G = c1 - e_sqr * cos_beta_sqr;
-
- CT f1 = 0;
- CT f2 = 0;
-
- if (!geod1.is_Cj_zero)
- {
- bool is_beta_ok = geod1.lon_diff(sin_beta, t, lon1_diff);
-
- if (is_beta_ok)
- {
- CT const H = cos_beta_sqr - geod1.Cj_sqr;
- f1 = geod1.Cj / cos_beta * math::sqrt(G / H);
- }
- else
- {
- return false;
- }
- }
-
- if (!geod2.is_Cj_zero)
- {
- bool is_beta_ok = geod2.lon_diff(sin_beta, t, lon2_diff);
-
- if (is_beta_ok)
- {
- CT const H = cos_beta_sqr - geod2.Cj_sqr;
- f2 = geod2.Cj / cos_beta * math::sqrt(G / H);
- }
- else
- {
- return false;
- }
- }
-
- // NOTE: Things may go wrong if the IP is near the vertex
- // 1. May converge into the wrong direction (from the other way around).
- // This happens when the starting point is on the other side than the vertex
- // 2. During converging may "jump" into the other side of the vertex.
- // In this case sin_beta/sqrt_1_Cj_sqr and t/t0j is not in [-1, 1]
- // 3. f1-f2 may be 0 which means that the intermediate point is on the vertex
- // In this case it's not possible to check if this is the correct result
-
- CT const dbeta_denom = f1 - f2;
- //CT const dbeta_denom = math::abs(f1) + math::abs(f2);
-
- if (math::equals(dbeta_denom, c0))
- {
- return false;
- }
-
- // The sign of dbeta is changed WRT [Sjoberg02]
- CT const dbeta = (lon1_minus_lon2 + lon1_diff - lon2_diff) / dbeta_denom;
-
- CT const abs_dbeta = math::abs(dbeta);
- if (i > 0 && abs_dbeta > abs_dbeta_last)
- {
- // The algorithm is not converging
- // The intersection may be on the other side of the vertex
- return false;
- }
- abs_dbeta_last = abs_dbeta;
-
- if (math::equals(dbeta, c0))
- {
- // Result found
- break;
- }
-
- // Because the sign of dbeta is changed WRT [Sjoberg02] dbeta is subtracted here
- beta = beta - dbeta;
-
- t = tan(beta);
- }
-
- lat = geod1.lat(t);
- // NOTE: if Cj is 0 then the result is lonj or lonj+180
- lon = ! geod1.is_Cj_zero
- ? geod1.lon(lon1_diff)
- : geod2.lon(lon2_diff);
-
- return true;
- }
-
- static inline bool is_result_longitude_ok(geodesic_type const& geod,
- CT const& lon1, CT const& lon2, CT const& lon)
- {
- CT const c0 = 0;
-
- if (geod.is_Cj_zero)
- return true; // don't check vertical segment
-
- CT dist1p = math::longitude_distance_signed<radian>(lon1, lon);
- CT dist12 = math::longitude_distance_signed<radian>(lon1, lon2);
-
- if (dist12 < c0)
- {
- dist1p = -dist1p;
- dist12 = -dist12;
- }
-
- return (c0 <= dist1p && dist1p <= dist12)
- || math::equals(dist1p, c0)
- || math::equals(dist1p, dist12);
- }
-
- struct geodesics_type
- {
- geodesics_type(geodesic_type const& g1, geodesic_type const& g2)
- : geod1(g1)
- , geod2(g2)
- , vertex1(geod1.get_vertex_data())
- , vertex2(geod2.get_vertex_data())
- {}
-
- geodesic_type const& geod1;
- geodesic_type const& geod2;
- typename geodesic_type::vertex_data vertex1;
- typename geodesic_type::vertex_data vertex2;
- };
-
- struct converge_07_result
- {
- converge_07_result()
- : lon1(0), lon2(0), k1_diff(0), k2_diff(0), t1(0), t2(0)
- {}
-
- CT lon1, lon2;
- CT k1_diff, k2_diff;
- CT t1, t2;
- };
-
- static inline bool converge_07(geodesic_type const& geod1, geodesic_type const& geod2,
- CT beta, CT t,
- CT const& lon1_minus_lon2, CT const& lon_sph,
- CT & lon, CT & lat)
- {
- //CT const c0 = 0;
- //CT const c1 = 1;
- //CT const c2 = 2;
- //CT const pi = math::pi<CT>();
-
- geodesics_type geodesics(geod1, geod2);
- converge_07_result result;
-
- // calculate first pair of longitudes
- if (!converge_07_step_one(CT(sin(beta)), t, lon1_minus_lon2, geodesics, lon_sph, result, false))
- {
- return false;
- }
-
- int t_direction = 0;
-
- CT lon_diff_prev = math::longitude_difference<radian>(result.lon1, result.lon2);
-
- // [Sjoberg07]
- for (int i = 2; i < max_iterations_07; ++i)
- {
- // pick t candidates from previous result based on dir
- CT t_cand1 = result.t1;
- CT t_cand2 = result.t2;
- // if direction is 0 the closer one is the first
- if (t_direction < 0)
- {
- t_cand1 = (std::min)(result.t1, result.t2);
- t_cand2 = (std::max)(result.t1, result.t2);
- }
- else if (t_direction > 0)
- {
- t_cand1 = (std::max)(result.t1, result.t2);
- t_cand2 = (std::min)(result.t1, result.t2);
- }
- else
- {
- t_direction = t_cand1 < t_cand2 ? -1 : 1;
- }
-
- CT t1 = t;
- CT beta1 = beta;
- // check if the further calculation is needed
- if (converge_07_update(t1, beta1, t_cand1))
- {
- break;
- }
-
- bool try_t2 = false;
- converge_07_result result_curr;
- if (converge_07_step_one(CT(sin(beta1)), t1, lon1_minus_lon2, geodesics, lon_sph, result_curr))
- {
- CT const lon_diff1 = math::longitude_difference<radian>(result_curr.lon1, result_curr.lon2);
- if (lon_diff_prev > lon_diff1)
- {
- t = t1;
- beta = beta1;
- lon_diff_prev = lon_diff1;
- result = result_curr;
- }
- else if (t_cand1 != t_cand2)
- {
- try_t2 = true;
- }
- else
- {
- // the result is not fully correct but it won't be more accurate
- break;
- }
- }
- // ! converge_07_step_one
- else
- {
- if (t_cand1 != t_cand2)
- {
- try_t2 = true;
- }
- else
- {
- return false;
- }
- }
-
-
- if (try_t2)
- {
- CT t2 = t;
- CT beta2 = beta;
- // check if the further calculation is needed
- if (converge_07_update(t2, beta2, t_cand2))
- {
- break;
- }
-
- if (! converge_07_step_one(CT(sin(beta2)), t2, lon1_minus_lon2, geodesics, lon_sph, result_curr))
- {
- return false;
- }
-
- CT const lon_diff2 = math::longitude_difference<radian>(result_curr.lon1, result_curr.lon2);
- if (lon_diff_prev > lon_diff2)
- {
- t_direction *= -1;
- t = t2;
- beta = beta2;
- lon_diff_prev = lon_diff2;
- result = result_curr;
- }
- else
- {
- // the result is not fully correct but it won't be more accurate
- break;
- }
- }
- }
-
- lat = geod1.lat(t);
- lon = ! geod1.is_Cj_zero ? result.lon1 : result.lon2;
- math::normalize_longitude<radian>(lon);
-
- return true;
- }
-
- static inline bool converge_07_update(CT & t, CT & beta, CT const& t_new)
- {
- CT const c0 = 0;
-
- CT const beta_new = atan(t_new);
- CT const dbeta = beta_new - beta;
- beta = beta_new;
- t = t_new;
-
- return math::equals(dbeta, c0);
- }
-
- static inline CT const& pick_t(CT const& t1, CT const& t2, int direction)
- {
- return direction < 0 ? (std::min)(t1, t2) : (std::max)(t1, t2);
- }
-
- static inline bool converge_07_step_one(CT const& sin_beta,
- CT const& t,
- CT const& lon1_minus_lon2,
- geodesics_type const& geodesics,
- CT const& lon_sph,
- converge_07_result & result,
- bool check_sin_beta = true)
- {
- bool ok = converge_07_one_geod(sin_beta, t, geodesics.geod1, geodesics.vertex1, lon_sph,
- result.lon1, result.k1_diff, check_sin_beta)
- && converge_07_one_geod(sin_beta, t, geodesics.geod2, geodesics.vertex2, lon_sph,
- result.lon2, result.k2_diff, check_sin_beta);
-
- if (!ok)
- {
- return false;
- }
-
- CT const k = lon1_minus_lon2 + result.k1_diff - result.k2_diff;
-
- // get 2 possible ts one lesser and one greater than t
- // t1 is the closer one
- calc_ts(t, k, geodesics.geod1, geodesics.geod2, result.t1, result.t2);
-
- return true;
- }
-
- static inline bool converge_07_one_geod(CT const& sin_beta, CT const& t,
- geodesic_type const& geod,
- typename geodesic_type::vertex_data const& vertex,
- CT const& lon_sph,
- CT & lon, CT & k_diff,
- bool check_sin_beta)
- {
- using math::detail::bounded;
- CT const c1 = 1;
-
- CT k_diff_before = 0;
- CT k_diff_behind = 0;
-
- bool is_beta_ok = geod.k_diffs(sin_beta, vertex, k_diff_before, k_diff_behind, check_sin_beta);
-
- if (! is_beta_ok)
- {
- return false;
- }
-
- CT const asin_t_t0j = ! geod.is_Cj_zero ? asin(bounded(t / geod.t0j, -c1, c1)) : 0;
- CT const sign_asin_t_t0j = geod.sign_lon_diff * asin_t_t0j;
-
- CT const lon_before = geod.lonj + sign_asin_t_t0j + k_diff_before;
- CT const lon_behind = geod.lonj - sign_asin_t_t0j + k_diff_behind;
-
- CT const lon_dist_before = math::longitude_distance_signed<radian>(lon_before, lon_sph);
- CT const lon_dist_behind = math::longitude_distance_signed<radian>(lon_behind, lon_sph);
- if (math::abs(lon_dist_before) <= math::abs(lon_dist_behind))
- {
- k_diff = k_diff_before;
- lon = lon_before;
- }
- else
- {
- k_diff = k_diff_behind;
- lon = lon_behind;
- }
-
- return true;
- }
-
- static inline void calc_ts(CT const& t, CT const& k,
- geodesic_type const& geod1, geodesic_type const& geod2,
- CT & t1, CT& t2)
- {
- CT const c1 = 1;
- CT const c2 = 2;
-
- CT const K = sin(k);
-
- BOOST_GEOMETRY_ASSERT(!geod1.is_Cj_zero || !geod2.is_Cj_zero);
- if (geod1.is_Cj_zero)
- {
- t1 = K * geod2.t0j;
- t2 = -t1;
- }
- else if (geod2.is_Cj_zero)
- {
- t1 = -K * geod1.t0j;
- t2 = -t1;
- }
- else
- {
- CT const A = math::sqr(geod1.t0j) + math::sqr(geod2.t0j);
- CT const B = c2 * geod1.t0j * geod2.t0j * math::sqrt(c1 - math::sqr(K));
-
- CT const K_t01_t02 = K * geod1.t0j * geod2.t0j;
- CT const D1 = math::sqrt(A + B);
- CT const D2 = math::sqrt(A - B);
- CT const t_new1 = K_t01_t02 / D1;
- CT const t_new2 = K_t01_t02 / D2;
- CT const t_new3 = -t_new1;
- CT const t_new4 = -t_new2;
-
- // Pick 2 nearest t_new, one greater and one lesser than current t
- CT const abs_t_new1 = math::abs(t_new1);
- CT const abs_t_new2 = math::abs(t_new2);
- CT const abs_t_max = (std::max)(abs_t_new1, abs_t_new2);
- t1 = -abs_t_max; // lesser
- t2 = abs_t_max; // greater
- if (t1 < t)
- {
- if (t_new1 < t && t_new1 > t1)
- t1 = t_new1;
- if (t_new2 < t && t_new2 > t1)
- t1 = t_new2;
- if (t_new3 < t && t_new3 > t1)
- t1 = t_new3;
- if (t_new4 < t && t_new4 > t1)
- t1 = t_new4;
- }
- if (t2 > t)
- {
- if (t_new1 > t && t_new1 < t2)
- t2 = t_new1;
- if (t_new2 > t && t_new2 < t2)
- t2 = t_new2;
- if (t_new3 > t && t_new3 < t2)
- t2 = t_new3;
- if (t_new4 > t && t_new4 < t2)
- t2 = t_new4;
- }
- }
-
- // the first one is the closer one
- if (math::abs(t - t2) < math::abs(t - t1))
- {
- std::swap(t2, t1);
- }
- }
-
- static inline CT fj(CT const& cos_beta, CT const& cos2_beta, CT const& Cj, CT const& e_sqr)
- {
- CT const c1 = 1;
- CT const Cj_sqr = math::sqr(Cj);
- return Cj / cos_beta * math::sqrt((c1 - e_sqr * cos2_beta) / (cos2_beta - Cj_sqr));
- }
-
- /*static inline CT vertical_intersection_longitude(CT const& ip_lon, CT const& seg_lon1, CT const& seg_lon2)
- {
- CT const c0 = 0;
- CT const lon_2 = ip_lon > c0 ? ip_lon - pi : ip_lon + pi;
-
- return (std::min)(math::longitude_difference<radian>(ip_lon, seg_lon1),
- math::longitude_difference<radian>(ip_lon, seg_lon2))
- <=
- (std::min)(math::longitude_difference<radian>(lon_2, seg_lon1),
- math::longitude_difference<radian>(lon_2, seg_lon2))
- ? ip_lon : lon_2;
- }*/
-};
-
-}}} // namespace boost::geometry::formula
-
-
-#endif // BOOST_GEOMETRY_FORMULAS_SJOBERG_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/spherical.hpp b/contrib/restricted/boost/boost/geometry/formulas/spherical.hpp
deleted file mode 100644
index ff24c51a880..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/spherical.hpp
+++ /dev/null
@@ -1,224 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016, Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_SPHERICAL_HPP
-#define BOOST_GEOMETRY_FORMULAS_SPHERICAL_HPP
-
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-
-//#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/arithmetic/cross_product.hpp>
-#include <boost/geometry/arithmetic/dot_product.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-namespace boost { namespace geometry {
-
-namespace formula {
-
-template <typename T>
-struct result_spherical
-{
- result_spherical()
- : azimuth(0)
- , reverse_azimuth(0)
- {}
-
- T azimuth;
- T reverse_azimuth;
-};
-
-template <typename T>
-static inline void sph_to_cart3d(T const& lon, T const& lat, T & x, T & y, T & z)
-{
- T const cos_lat = cos(lat);
- x = cos_lat * cos(lon);
- y = cos_lat * sin(lon);
- z = sin(lat);
-}
-
-template <typename Point3d, typename PointSph>
-static inline Point3d sph_to_cart3d(PointSph const& point_sph)
-{
- typedef typename coordinate_type<Point3d>::type calc_t;
-
- calc_t const lon = get_as_radian<0>(point_sph);
- calc_t const lat = get_as_radian<1>(point_sph);
- calc_t x, y, z;
- sph_to_cart3d(lon, lat, x, y, z);
-
- Point3d res;
- set<0>(res, x);
- set<1>(res, y);
- set<2>(res, z);
-
- return res;
-}
-
-template <typename T>
-static inline void cart3d_to_sph(T const& x, T const& y, T const& z, T & lon, T & lat)
-{
- lon = atan2(y, x);
- lat = asin(z);
-}
-
-template <typename PointSph, typename Point3d>
-static inline PointSph cart3d_to_sph(Point3d const& point_3d)
-{
- typedef typename coordinate_type<PointSph>::type coord_t;
- typedef typename coordinate_type<Point3d>::type calc_t;
-
- calc_t const x = get<0>(point_3d);
- calc_t const y = get<1>(point_3d);
- calc_t const z = get<2>(point_3d);
- calc_t lonr, latr;
- cart3d_to_sph(x, y, z, lonr, latr);
-
- PointSph res;
- set_from_radian<0>(res, lonr);
- set_from_radian<1>(res, latr);
-
- coord_t lon = get<0>(res);
- coord_t lat = get<1>(res);
-
- math::normalize_spheroidal_coordinates
- <
- typename coordinate_system<PointSph>::type::units,
- coord_t
- >(lon, lat);
-
- set<0>(res, lon);
- set<1>(res, lat);
-
- return res;
-}
-
-// -1 right
-// 1 left
-// 0 on
-template <typename Point3d1, typename Point3d2>
-static inline int sph_side_value(Point3d1 const& norm, Point3d2 const& pt)
-{
- typedef typename select_coordinate_type<Point3d1, Point3d2>::type calc_t;
- calc_t c0 = 0;
- calc_t d = dot_product(norm, pt);
- return math::equals(d, c0) ? 0
- : d > c0 ? 1
- : -1; // d < 0
-}
-
-template <typename CT, bool ReverseAzimuth, typename T1, typename T2>
-static inline result_spherical<CT> spherical_azimuth(T1 const& lon1,
- T1 const& lat1,
- T2 const& lon2,
- T2 const& lat2)
-{
- typedef result_spherical<CT> result_type;
- result_type result;
-
- // http://williams.best.vwh.net/avform.htm#Crs
- // https://en.wikipedia.org/wiki/Great-circle_navigation
- CT dlon = lon2 - lon1;
-
- // An optimization which should kick in often for Boxes
- //if ( math::equals(dlon, ReturnType(0)) )
- //if ( get<0>(p1) == get<0>(p2) )
- //{
- // return - sin(get_as_radian<1>(p1)) * cos_p2lat);
- //}
-
- CT const cos_dlon = cos(dlon);
- CT const sin_dlon = sin(dlon);
- CT const cos_lat1 = cos(lat1);
- CT const cos_lat2 = cos(lat2);
- CT const sin_lat1 = sin(lat1);
- CT const sin_lat2 = sin(lat2);
-
- {
- // "An alternative formula, not requiring the pre-computation of d"
- // In the formula below dlon is used as "d"
- CT const y = sin_dlon * cos_lat2;
- CT const x = cos_lat1 * sin_lat2 - sin_lat1 * cos_lat2 * cos_dlon;
- result.azimuth = atan2(y, x);
- }
-
- if (ReverseAzimuth)
- {
- CT const y = sin_dlon * cos_lat1;
- CT const x = sin_lat2 * cos_lat1 * cos_dlon - cos_lat2 * sin_lat1;
- result.reverse_azimuth = atan2(y, x);
- }
-
- return result;
-}
-
-template <typename ReturnType, typename T1, typename T2>
-inline ReturnType spherical_azimuth(T1 const& lon1, T1 const& lat1,
- T2 const& lon2, T2 const& lat2)
-{
- return spherical_azimuth<ReturnType, false>(lon1, lat1, lon2, lat2).azimuth;
-}
-
-template <typename T>
-inline T spherical_azimuth(T const& lon1, T const& lat1, T const& lon2, T const& lat2)
-{
- return spherical_azimuth<T, false>(lon1, lat1, lon2, lat2).azimuth;
-}
-
-template <typename T>
-inline int azimuth_side_value(T const& azi_a1_p, T const& azi_a1_a2)
-{
- T const pi = math::pi<T>();
- T const two_pi = math::two_pi<T>();
-
- // instead of the formula from XTD
- //calc_t a_diff = asin(sin(azi_a1_p - azi_a1_a2));
-
- T a_diff = azi_a1_p - azi_a1_a2;
- // normalize, angle in [-pi, pi]
- while (a_diff > pi)
- a_diff -= two_pi;
- while (a_diff < -pi)
- a_diff += two_pi;
-
- // NOTE: in general it shouldn't be required to support the pi/-pi case
- // because in non-cartesian systems it makes sense to check the side
- // only "between" the endpoints.
- // However currently the winding strategy calls the side strategy
- // for vertical segments to check if the point is "between the endpoints.
- // This could be avoided since the side strategy is not required for that
- // because meridian is the shortest path. So a difference of
- // longitudes would be sufficient (of course normalized to [-pi, pi]).
-
- // NOTE: with the above said, the pi/-pi check is temporary
- // however in case if this was required
- // the geodesics on ellipsoid aren't "symmetrical"
- // therefore instead of comparing a_diff to pi and -pi
- // one should probably use inverse azimuths and compare
- // the difference to 0 as well
-
- // positive azimuth is on the right side
- return math::equals(a_diff, 0)
- || math::equals(a_diff, pi)
- || math::equals(a_diff, -pi) ? 0
- : a_diff > 0 ? -1 // right
- : 1; // left
-}
-
-} // namespace formula
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_FORMULAS_SPHERICAL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/thomas_direct.hpp b/contrib/restricted/boost/boost/geometry/formulas/thomas_direct.hpp
deleted file mode 100644
index 6a7ac3e4145..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/thomas_direct.hpp
+++ /dev/null
@@ -1,248 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_THOMAS_DIRECT_HPP
-#define BOOST_GEOMETRY_FORMULAS_THOMAS_DIRECT_HPP
-
-
-#include <boost/math/constants/constants.hpp>
-
-#include <boost/geometry/core/radius.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/formulas/differential_quantities.hpp>
-#include <boost/geometry/formulas/flattening.hpp>
-#include <boost/geometry/formulas/result_direct.hpp>
-
-
-namespace boost { namespace geometry { namespace formula
-{
-
-
-/*!
-\brief The solution of the direct problem of geodesics on latlong coordinates,
- Forsyth-Andoyer-Lambert type approximation with second order terms.
-\author See
- - Technical Report: PAUL D. THOMAS, MATHEMATICAL MODELS FOR NAVIGATION SYSTEMS, 1965
- http://www.dtic.mil/docs/citations/AD0627893
- - Technical Report: PAUL D. THOMAS, SPHEROIDAL GEODESICS, REFERENCE SYSTEMS, AND LOCAL GEOMETRY, 1970
- http://www.dtic.mil/docs/citations/AD0703541
-
-*/
-template <
- typename CT,
- bool EnableCoordinates = true,
- bool EnableReverseAzimuth = false,
- bool EnableReducedLength = false,
- bool EnableGeodesicScale = false
->
-class thomas_direct
-{
- static const bool CalcQuantities = EnableReducedLength || EnableGeodesicScale;
- static const bool CalcCoordinates = EnableCoordinates || CalcQuantities;
- static const bool CalcRevAzimuth = EnableReverseAzimuth || CalcCoordinates || CalcQuantities;
-
-public:
- typedef result_direct<CT> result_type;
-
- template <typename T, typename Dist, typename Azi, typename Spheroid>
- static inline result_type apply(T const& lo1,
- T const& la1,
- Dist const& distance,
- Azi const& azimuth12,
- Spheroid const& spheroid)
- {
- result_type result;
-
- CT const lon1 = lo1;
- CT const lat1 = la1;
-
- if ( math::equals(distance, Dist(0)) || distance < Dist(0) )
- {
- result.lon2 = lon1;
- result.lat2 = lat1;
- return result;
- }
-
- CT const c0 = 0;
- CT const c1 = 1;
- CT const c2 = 2;
- CT const c4 = 4;
-
- CT const a = CT(get_radius<0>(spheroid));
- CT const b = CT(get_radius<2>(spheroid));
- CT const f = formula::flattening<CT>(spheroid);
- CT const one_minus_f = c1 - f;
-
- CT const pi = math::pi<CT>();
- CT const pi_half = pi / c2;
-
- // keep azimuth small - experiments show low accuracy
- // if the azimuth is closer to (+-)180 deg.
- CT azi12_alt = azimuth12;
- CT lat1_alt = lat1;
- bool alter_result = vflip_if_south(lat1, azimuth12, lat1_alt, azi12_alt);
-
- CT const theta1 = math::equals(lat1_alt, pi_half) ? lat1_alt :
- math::equals(lat1_alt, -pi_half) ? lat1_alt :
- atan(one_minus_f * tan(lat1_alt));
- CT const sin_theta1 = sin(theta1);
- CT const cos_theta1 = cos(theta1);
-
- CT const sin_a12 = sin(azi12_alt);
- CT const cos_a12 = cos(azi12_alt);
-
- CT const M = cos_theta1 * sin_a12; // cos_theta0
- CT const theta0 = acos(M);
- CT const sin_theta0 = sin(theta0);
-
- CT const N = cos_theta1 * cos_a12;
- CT const C1 = f * M; // lower-case c1 in the technical report
- CT const C2 = f * (c1 - math::sqr(M)) / c4; // lower-case c2 in the technical report
- CT const D = (c1 - C2) * (c1 - C2 - C1 * M);
- CT const P = C2 * (c1 + C1 * M / c2) / D;
-
- // special case for equator:
- // sin_theta0 = 0 <=> lat1 = 0 ^ |azimuth12| = pi/2
- // NOTE: in this case it doesn't matter what's the value of cos_sigma1 because
- // theta1=0, theta0=0, M=1|-1, C2=0 so X=0 and Y=0 so d_sigma=d
- // cos_a12=0 so N=0, therefore
- // lat2=0, azi21=pi/2|-pi/2
- // d_eta = atan2(sin_d_sigma, cos_d_sigma)
- // H = C1 * d_sigma
- CT const cos_sigma1 = math::equals(sin_theta0, c0)
- ? c1
- : normalized1_1(sin_theta1 / sin_theta0);
- CT const sigma1 = acos(cos_sigma1);
- CT const d = distance / (a * D);
- CT const u = 2 * (sigma1 - d);
- CT const cos_d = cos(d);
- CT const sin_d = sin(d);
- CT const cos_u = cos(u);
- CT const sin_u = sin(u);
-
- CT const W = c1 - c2 * P * cos_u;
- CT const V = cos_u * cos_d - sin_u * sin_d;
- CT const X = math::sqr(C2) * sin_d * cos_d * (2 * math::sqr(V) - c1);
- CT const Y = c2 * P * V * W * sin_d;
- CT const d_sigma = d + X - Y;
- CT const sin_d_sigma = sin(d_sigma);
- CT const cos_d_sigma = cos(d_sigma);
-
- if (BOOST_GEOMETRY_CONDITION(CalcRevAzimuth))
- {
- result.reverse_azimuth = atan2(M, N * cos_d_sigma - sin_theta1 * sin_d_sigma);
-
- if (alter_result)
- {
- vflip_rev_azi(result.reverse_azimuth, azimuth12);
- }
- }
-
- if (BOOST_GEOMETRY_CONDITION(CalcCoordinates))
- {
- CT const S_sigma = c2 * sigma1 - d_sigma;
- CT const cos_S_sigma = cos(S_sigma);
- CT const d_eta = atan2(sin_d_sigma * sin_a12, cos_theta1 * cos_d_sigma - sin_theta1 * sin_d_sigma * cos_a12);
- CT const H = C1 * (c1 - C2) * d_sigma - C1 * C2 * sin_d_sigma * cos_S_sigma;
- CT const d_lambda = d_eta - H;
-
- result.lon2 = lon1 + d_lambda;
-
- if (! math::equals(M, c0))
- {
- CT const sin_a21 = sin(result.reverse_azimuth);
- CT const tan_theta2 = (sin_theta1 * cos_d_sigma + N * sin_d_sigma) * sin_a21 / M;
- result.lat2 = atan(tan_theta2 / one_minus_f);
- }
- else
- {
- CT const sigma2 = S_sigma - sigma1;
- //theta2 = asin(cos(sigma2)) <=> sin_theta0 = 1
- // NOTE: cos(sigma2) defines the sign of tan_theta2
- CT const tan_theta2 = cos(sigma2) / math::abs(sin(sigma2));
- result.lat2 = atan(tan_theta2 / one_minus_f);
- }
-
- if (alter_result)
- {
- result.lat2 = -result.lat2;
- }
- }
-
- if (BOOST_GEOMETRY_CONDITION(CalcQuantities))
- {
- typedef differential_quantities<CT, EnableReducedLength, EnableGeodesicScale, 2> quantities;
- quantities::apply(lon1, lat1, result.lon2, result.lat2,
- azimuth12, result.reverse_azimuth,
- b, f,
- result.reduced_length, result.geodesic_scale);
- }
-
- return result;
- }
-
-private:
- static inline bool vflip_if_south(CT const& lat1, CT const& azi12, CT & lat1_alt, CT & azi12_alt)
- {
- CT const c2 = 2;
- CT const pi = math::pi<CT>();
- CT const pi_half = pi / c2;
-
- if (azi12 > pi_half)
- {
- azi12_alt = pi - azi12;
- lat1_alt = -lat1;
- return true;
- }
- else if (azi12 < -pi_half)
- {
- azi12_alt = -pi - azi12;
- lat1_alt = -lat1;
- return true;
- }
-
- return false;
- }
-
- static inline void vflip_rev_azi(CT & rev_azi, CT const& azimuth12)
- {
- CT const c0 = 0;
- CT const pi = math::pi<CT>();
-
- if (rev_azi == c0)
- {
- rev_azi = azimuth12 >= 0 ? pi : -pi;
- }
- else if (rev_azi > c0)
- {
- rev_azi = pi - rev_azi;
- }
- else
- {
- rev_azi = -pi - rev_azi;
- }
- }
-
- static inline CT normalized1_1(CT const& value)
- {
- CT const c1 = 1;
- return value > c1 ? c1 :
- value < -c1 ? -c1 :
- value;
- }
-};
-
-}}} // namespace boost::geometry::formula
-
-
-#endif // BOOST_GEOMETRY_FORMULAS_THOMAS_DIRECT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/thomas_inverse.hpp b/contrib/restricted/boost/boost/geometry/formulas/thomas_inverse.hpp
deleted file mode 100644
index cf69c9df1df..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/thomas_inverse.hpp
+++ /dev/null
@@ -1,220 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2015-2018 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_THOMAS_INVERSE_HPP
-#define BOOST_GEOMETRY_FORMULAS_THOMAS_INVERSE_HPP
-
-
-#include <boost/math/constants/constants.hpp>
-
-#include <boost/geometry/core/radius.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/formulas/differential_quantities.hpp>
-#include <boost/geometry/formulas/flattening.hpp>
-#include <boost/geometry/formulas/result_inverse.hpp>
-
-
-namespace boost { namespace geometry { namespace formula
-{
-
-/*!
-\brief The solution of the inverse problem of geodesics on latlong coordinates,
- Forsyth-Andoyer-Lambert type approximation with second order terms.
-\author See
- - Technical Report: PAUL D. THOMAS, MATHEMATICAL MODELS FOR NAVIGATION SYSTEMS, 1965
- http://www.dtic.mil/docs/citations/AD0627893
- - Technical Report: PAUL D. THOMAS, SPHEROIDAL GEODESICS, REFERENCE SYSTEMS, AND LOCAL GEOMETRY, 1970
- http://www.dtic.mil/docs/citations/AD0703541
-*/
-template <
- typename CT,
- bool EnableDistance,
- bool EnableAzimuth,
- bool EnableReverseAzimuth = false,
- bool EnableReducedLength = false,
- bool EnableGeodesicScale = false
->
-class thomas_inverse
-{
- static const bool CalcQuantities = EnableReducedLength || EnableGeodesicScale;
- static const bool CalcAzimuths = EnableAzimuth || EnableReverseAzimuth || CalcQuantities;
- static const bool CalcFwdAzimuth = EnableAzimuth || CalcQuantities;
- static const bool CalcRevAzimuth = EnableReverseAzimuth || CalcQuantities;
-
-public:
- typedef result_inverse<CT> result_type;
-
- template <typename T1, typename T2, typename Spheroid>
- static inline result_type apply(T1 const& lon1,
- T1 const& lat1,
- T2 const& lon2,
- T2 const& lat2,
- Spheroid const& spheroid)
- {
- result_type result;
-
- // coordinates in radians
-
- if ( math::equals(lon1, lon2) && math::equals(lat1, lat2) )
- {
- return result;
- }
-
- CT const c0 = 0;
- CT const c1 = 1;
- CT const c2 = 2;
- CT const c4 = 4;
-
- CT const pi_half = math::pi<CT>() / c2;
- CT const f = formula::flattening<CT>(spheroid);
- CT const one_minus_f = c1 - f;
-
-// CT const tan_theta1 = one_minus_f * tan(lat1);
-// CT const tan_theta2 = one_minus_f * tan(lat2);
-// CT const theta1 = atan(tan_theta1);
-// CT const theta2 = atan(tan_theta2);
-
- CT const theta1 = math::equals(lat1, pi_half) ? lat1 :
- math::equals(lat1, -pi_half) ? lat1 :
- atan(one_minus_f * tan(lat1));
- CT const theta2 = math::equals(lat2, pi_half) ? lat2 :
- math::equals(lat2, -pi_half) ? lat2 :
- atan(one_minus_f * tan(lat2));
-
- CT const theta_m = (theta1 + theta2) / c2;
- CT const d_theta_m = (theta2 - theta1) / c2;
- CT const d_lambda = lon2 - lon1;
- CT const d_lambda_m = d_lambda / c2;
-
- CT const sin_theta_m = sin(theta_m);
- CT const cos_theta_m = cos(theta_m);
- CT const sin_d_theta_m = sin(d_theta_m);
- CT const cos_d_theta_m = cos(d_theta_m);
- CT const sin2_theta_m = math::sqr(sin_theta_m);
- CT const cos2_theta_m = math::sqr(cos_theta_m);
- CT const sin2_d_theta_m = math::sqr(sin_d_theta_m);
- CT const cos2_d_theta_m = math::sqr(cos_d_theta_m);
- CT const sin_d_lambda_m = sin(d_lambda_m);
- CT const sin2_d_lambda_m = math::sqr(sin_d_lambda_m);
-
- CT const H = cos2_theta_m - sin2_d_theta_m;
- CT const L = sin2_d_theta_m + H * sin2_d_lambda_m;
- CT const cos_d = c1 - c2 * L;
- CT const d = acos(cos_d);
- CT const sin_d = sin(d);
-
- CT const one_minus_L = c1 - L;
-
- if ( math::equals(sin_d, c0)
- || math::equals(L, c0)
- || math::equals(one_minus_L, c0) )
- {
- return result;
- }
-
- CT const U = c2 * sin2_theta_m * cos2_d_theta_m / one_minus_L;
- CT const V = c2 * sin2_d_theta_m * cos2_theta_m / L;
- CT const X = U + V;
- CT const Y = U - V;
- CT const T = d / sin_d;
- CT const D = c4 * math::sqr(T);
- CT const E = c2 * cos_d;
- CT const A = D * E;
- CT const B = c2 * D;
- CT const C = T - (A - E) / c2;
-
- CT const f_sqr = math::sqr(f);
- CT const f_sqr_per_64 = f_sqr / CT(64);
-
- if ( BOOST_GEOMETRY_CONDITION(EnableDistance) )
- {
- CT const n1 = X * (A + C*X);
- CT const n2 = Y * (B + E*Y);
- CT const n3 = D*X*Y;
-
- CT const delta1d = f * (T*X-Y) / c4;
- CT const delta2d = f_sqr_per_64 * (n1 - n2 + n3);
-
- CT const a = get_radius<0>(spheroid);
-
- //result.distance = a * sin_d * (T - delta1d);
- result.distance = a * sin_d * (T - delta1d + delta2d);
- }
-
- if ( BOOST_GEOMETRY_CONDITION(CalcAzimuths) )
- {
- // NOTE: if both cos_latX == 0 then below we'd have 0 * INF
- // it's a situation when the endpoints are on the poles +-90 deg
- // in this case the azimuth could either be 0 or +-pi
- // but above always 0 is returned
-
- CT const F = c2*Y-E*(c4-X);
- CT const M = CT(32)*T-(CT(20)*T-A)*X-(B+c4)*Y;
- CT const G = f*T/c2 + f_sqr_per_64 * M;
-
- // TODO:
- // If d_lambda is close to 90 or -90 deg then tan(d_lambda) is big
- // and F is small. The result is not accurate.
- // In the edge case the result may be 2 orders of magnitude less
- // accurate than Andoyer's.
- CT const tan_d_lambda = tan(d_lambda);
- CT const Q = -(F*G*tan_d_lambda) / c4;
- CT const d_lambda_m_p = (d_lambda + Q) / c2;
- CT const tan_d_lambda_m_p = tan(d_lambda_m_p);
-
- CT const v = atan2(cos_d_theta_m, sin_theta_m * tan_d_lambda_m_p);
- CT const u = atan2(-sin_d_theta_m, cos_theta_m * tan_d_lambda_m_p);
-
- CT const pi = math::pi<CT>();
-
- if (BOOST_GEOMETRY_CONDITION(CalcFwdAzimuth))
- {
- CT alpha1 = v + u;
- if (alpha1 > pi)
- {
- alpha1 -= c2 * pi;
- }
-
- result.azimuth = alpha1;
- }
-
- if (BOOST_GEOMETRY_CONDITION(CalcRevAzimuth))
- {
- CT alpha2 = pi - (v - u);
- if (alpha2 > pi)
- {
- alpha2 -= c2 * pi;
- }
-
- result.reverse_azimuth = alpha2;
- }
- }
-
- if (BOOST_GEOMETRY_CONDITION(CalcQuantities))
- {
- typedef differential_quantities<CT, EnableReducedLength, EnableGeodesicScale, 2> quantities;
- quantities::apply(lon1, lat1, lon2, lat2,
- result.azimuth, result.reverse_azimuth,
- get_radius<2>(spheroid), f,
- result.reduced_length, result.geodesic_scale);
- }
-
- return result;
- }
-};
-
-}}} // namespace boost::geometry::formula
-
-
-#endif // BOOST_GEOMETRY_FORMULAS_THOMAS_INVERSE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/unit_spheroid.hpp b/contrib/restricted/boost/boost/geometry/formulas/unit_spheroid.hpp
deleted file mode 100644
index 7fdedb45811..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/unit_spheroid.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_UNIT_SPHEROID_HPP
-#define BOOST_GEOMETRY_FORMULAS_UNIT_SPHEROID_HPP
-
-#include <boost/geometry/core/radius.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace formula
-{
-
-template <typename ResultType, typename Spheroid>
-inline ResultType unit_spheroid_b(Spheroid const& spheroid)
-{
- return ResultType(get_radius<2>(spheroid))
- / ResultType(get_radius<0>(spheroid));
-}
-
-template <typename ResultSpheroid, typename Spheroid>
-inline ResultSpheroid unit_spheroid(Spheroid const& spheroid)
-{
- typedef typename radius_type<ResultSpheroid>::type radius_t;
- return ResultSpheroid(radius_t(1),
- unit_spheroid_b<radius_t>(spheroid));
-}
-
-} // namespace formula
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_FORMULAS_UNIT_SPHEROID_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/vertex_latitude.hpp b/contrib/restricted/boost/boost/geometry/formulas/vertex_latitude.hpp
deleted file mode 100644
index 92822e01a38..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/vertex_latitude.hpp
+++ /dev/null
@@ -1,150 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_MAXIMUM_LATITUDE_HPP
-#define BOOST_GEOMETRY_FORMULAS_MAXIMUM_LATITUDE_HPP
-
-
-#include <boost/geometry/formulas/flattening.hpp>
-#include <boost/geometry/formulas/spherical.hpp>
-
-#include <boost/mpl/assert.hpp>
-
-
-namespace boost { namespace geometry { namespace formula
-{
-
-/*!
-\brief Algorithm to compute the vertex latitude of a geodesic segment. Vertex is
-a point on the geodesic that maximizes (or minimizes) the latitude.
-\author See
- [Wood96] Wood - Vertex Latitudes on Ellipsoid Geodesics, SIAM Rev., 38(4),
- 637–644, 1996
-*/
-
-template <typename CT>
-class vertex_latitude_on_sphere
-{
-
-public:
- template<typename T1, typename T2>
- static inline CT apply(T1 const& lat1,
- T2 const& alp1)
- {
- return std::acos( math::abs(cos(lat1) * sin(alp1)) );
- }
-};
-
-template <typename CT>
-class vertex_latitude_on_spheroid
-{
-
-public:
-/*
- * formula based on paper
- * [Wood96] Wood - Vertex Latitudes on Ellipsoid Geodesics, SIAM Rev., 38(4),
- * 637–644, 1996
- template <typename T1, typename T2, typename Spheroid>
- static inline CT apply(T1 const& lat1,
- T2 const& alp1,
- Spheroid const& spheroid)
- {
- CT const f = formula::flattening<CT>(spheroid);
-
- CT const e2 = f * (CT(2) - f);
- CT const sin_alp1 = sin(alp1);
- CT const sin2_lat1 = math::sqr(sin(lat1));
- CT const cos2_lat1 = CT(1) - sin2_lat1;
-
- CT const e2_sin2 = CT(1) - e2 * sin2_lat1;
- CT const cos2_sin2 = cos2_lat1 * math::sqr(sin_alp1);
- CT const vertex_lat = std::asin( math::sqrt((e2_sin2 - cos2_sin2)
- / (e2_sin2 - e2 * cos2_sin2)));
- return vertex_lat;
- }
-*/
-
- // simpler formula based on Clairaut relation for spheroids
- template <typename T1, typename T2, typename Spheroid>
- static inline CT apply(T1 const& lat1,
- T2 const& alp1,
- Spheroid const& spheroid)
- {
- CT const f = formula::flattening<CT>(spheroid);
-
- CT const one_minus_f = (CT(1) - f);
-
- //get the reduced latitude
- CT const bet1 = atan( one_minus_f * tan(lat1) );
-
- //apply Clairaut relation
- CT const betv = vertex_latitude_on_sphere<CT>::apply(bet1, alp1);
-
- //return the spheroid latitude
- return atan( tan(betv) / one_minus_f );
- }
-
- /*
- template <typename T>
- inline static void sign_adjustment(CT lat1, CT lat2, CT vertex_lat, T& vrt_result)
- {
- // signbit returns a non-zero value (true) if the sign is negative;
- // and zero (false) otherwise.
- bool sign = std::signbit(std::abs(lat1) > std::abs(lat2) ? lat1 : lat2);
-
- vrt_result.north = sign ? std::max(lat1, lat2) : vertex_lat;
- vrt_result.south = sign ? vertex_lat * CT(-1) : std::min(lat1, lat2);
- }
-
- template <typename T>
- inline static bool vertex_on_segment(CT alp1, CT alp2, CT lat1, CT lat2, T& vrt_result)
- {
- CT const half_pi = math::pi<CT>() / CT(2);
-
- // if the segment does not contain the vertex of the geodesic
- // then return the endpoint of max (min) latitude
- if ((alp1 < half_pi && alp2 < half_pi)
- || (alp1 > half_pi && alp2 > half_pi))
- {
- vrt_result.north = std::max(lat1, lat2);
- vrt_result.south = std::min(lat1, lat2);
- return false;
- }
- return true;
- }
- */
-};
-
-
-template <typename CT, typename CS_Tag>
-struct vertex_latitude
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_COORDINATE_SYSTEM, (types<CS_Tag>)
- );
-
-};
-
-template <typename CT>
-struct vertex_latitude<CT, spherical_equatorial_tag>
- : vertex_latitude_on_sphere<CT>
-{};
-
-template <typename CT>
-struct vertex_latitude<CT, geographic_tag>
- : vertex_latitude_on_spheroid<CT>
-{};
-
-
-}}} // namespace boost::geometry::formula
-
-#endif // BOOST_GEOMETRY_FORMULAS_MAXIMUM_LATITUDE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/vertex_longitude.hpp b/contrib/restricted/boost/boost/geometry/formulas/vertex_longitude.hpp
deleted file mode 100644
index cf63c10a0a1..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/vertex_longitude.hpp
+++ /dev/null
@@ -1,337 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_MAXIMUM_LONGITUDE_HPP
-#define BOOST_GEOMETRY_FORMULAS_MAXIMUM_LONGITUDE_HPP
-
-#include <boost/geometry/formulas/spherical.hpp>
-#include <boost/geometry/formulas/flattening.hpp>
-
-#include <boost/mpl/assert.hpp>
-
-#include <boost/math/special_functions/hypot.hpp>
-
-namespace boost { namespace geometry { namespace formula
-{
-
-/*!
-\brief Algorithm to compute the vertex longitude of a geodesic segment. Vertex is
-a point on the geodesic that maximizes (or minimizes) the latitude. The algorithm
-is given the vertex latitude.
-*/
-
-//Classes for spesific CS
-
-template <typename CT>
-class vertex_longitude_on_sphere
-{
-
-public:
-
- template <typename T>
- static inline CT apply(T const& lat1, //segment point 1
- T const& lat2, //segment point 2
- T const& lat3, //vertex latitude
- T const& sin_l12,
- T const& cos_l12) //lon1 -lon2
- {
- //https://en.wikipedia.org/wiki/Great-circle_navigation#Finding_way-points
- CT const A = sin(lat1) * cos(lat2) * cos(lat3) * sin_l12;
- CT const B = sin(lat1) * cos(lat2) * cos(lat3) * cos_l12
- - cos(lat1) * sin(lat2) * cos(lat3);
- CT lon = atan2(B, A);
- return lon + math::pi<CT>();
- }
-};
-
-template <typename CT>
-class vertex_longitude_on_spheroid
-{
- template<typename T>
- static inline void normalize(T& x, T& y)
- {
- T h = boost::math::hypot(x, y);
- x /= h;
- y /= h;
- }
-
-public:
-
- template <typename T, typename Spheroid>
- static inline CT apply(T const& lat1, //segment point 1
- T const& lat2, //segment point 2
- T const& lat3, //vertex latitude
- T& alp1,
- Spheroid const& spheroid)
- {
- // We assume that segment points lay on different side w.r.t.
- // the vertex
-
- // Constants
- CT const c0 = 0;
- CT const c2 = 2;
- CT const half_pi = math::pi<CT>() / c2;
- if (math::equals(lat1, half_pi)
- || math::equals(lat2, half_pi)
- || math::equals(lat1, -half_pi)
- || math::equals(lat2, -half_pi))
- {
- // one segment point is the pole
- return c0;
- }
-
- // More constants
- CT const f = flattening<CT>(spheroid);
- CT const pi = math::pi<CT>();
- CT const c1 = 1;
- CT const cminus1 = -1;
-
- // First, compute longitude on auxiliary sphere
-
- CT const one_minus_f = c1 - f;
- CT const bet1 = atan(one_minus_f * tan(lat1));
- CT const bet2 = atan(one_minus_f * tan(lat2));
- CT const bet3 = atan(one_minus_f * tan(lat3));
-
- CT cos_bet1 = cos(bet1);
- CT cos_bet2 = cos(bet2);
- CT const sin_bet1 = sin(bet1);
- CT const sin_bet2 = sin(bet2);
- CT const sin_bet3 = sin(bet3);
-
- CT omg12 = 0;
-
- if (bet1 < c0)
- {
- cos_bet1 *= cminus1;
- omg12 += pi;
- }
- if (bet2 < c0)
- {
- cos_bet2 *= cminus1;
- omg12 += pi;
- }
-
- CT const sin_alp1 = sin(alp1);
- CT const cos_alp1 = math::sqrt(c1 - math::sqr(sin_alp1));
-
- CT const norm = math::sqrt(math::sqr(cos_alp1) + math::sqr(sin_alp1 * sin_bet1));
- CT const sin_alp0 = sin(atan2(sin_alp1 * cos_bet1, norm));
-
- BOOST_ASSERT(cos_bet2 != c0);
- CT const sin_alp2 = sin_alp1 * cos_bet1 / cos_bet2;
-
- CT const cos_alp0 = math::sqrt(c1 - math::sqr(sin_alp0));
- CT const cos_alp2 = math::sqrt(c1 - math::sqr(sin_alp2));
-
- CT const sig1 = atan2(sin_bet1, cos_alp1 * cos_bet1);
- CT const sig2 = atan2(sin_bet2, -cos_alp2 * cos_bet2); //lat3 is a vertex
-
- CT const cos_sig1 = cos(sig1);
- CT const sin_sig1 = math::sqrt(c1 - math::sqr(cos_sig1));
-
- CT const cos_sig2 = cos(sig2);
- CT const sin_sig2 = math::sqrt(c1 - math::sqr(cos_sig2));
-
- CT const omg1 = atan2(sin_alp0 * sin_sig1, cos_sig1);
- CT const omg2 = atan2(sin_alp0 * sin_sig2, cos_sig2);
-
- omg12 += omg1 - omg2;
-
- CT const sin_omg12 = sin(omg12);
- CT const cos_omg12 = cos(omg12);
-
- CT omg13 = geometry::formula::vertex_longitude_on_sphere<CT>
- ::apply(bet1, bet2, bet3, sin_omg12, cos_omg12);
-
- if (lat1 * lat2 < c0)//different hemispheres
- {
- if ((lat2 - lat1) * lat3 > c0)// ascending segment
- {
- omg13 = pi - omg13;
- }
- }
-
- // Second, compute the ellipsoidal longitude
-
- CT const e2 = f * (c2 - f);
- CT const ep = math::sqrt(e2 / (c1 - e2));
- CT const k2 = math::sqr(ep * cos_alp0);
- CT const sqrt_k2_plus_one = math::sqrt(c1 + k2);
- CT const eps = (sqrt_k2_plus_one - c1) / (sqrt_k2_plus_one + c1);
- CT const eps2 = eps * eps;
- CT const n = f / (c2 - f);
-
- // sig3 is the length from equator to the vertex
- CT sig3;
- if(sin_bet3 > c0)
- {
- sig3 = half_pi;
- } else {
- sig3 = -half_pi;
- }
- CT const cos_sig3 = 0;
- CT const sin_sig3 = 1;
-
- CT sig13 = sig3 - sig1;
- if (sig13 > pi)
- {
- sig13 -= 2 * pi;
- }
-
- // Order 2 approximation
- CT const c1over2 = 0.5;
- CT const c1over4 = 0.25;
- CT const c1over8 = 0.125;
- CT const c1over16 = 0.0625;
- CT const c4 = 4;
- CT const c8 = 8;
-
- CT const A3 = 1 - (c1over2 - c1over2 * n) * eps - c1over4 * eps2;
- CT const C31 = (c1over4 - c1over4 * n) * eps + c1over8 * eps2;
- CT const C32 = c1over16 * eps2;
-
- CT const sin2_sig3 = c2 * cos_sig3 * sin_sig3;
- CT const sin4_sig3 = sin_sig3 * (-c4 * cos_sig3
- + c8 * cos_sig3 * cos_sig3 * cos_sig3);
- CT const sin2_sig1 = c2 * cos_sig1 * sin_sig1;
- CT const sin4_sig1 = sin_sig1 * (-c4 * cos_sig1
- + c8 * cos_sig1 * cos_sig1 * cos_sig1);
- CT const I3 = A3 * (sig13
- + C31 * (sin2_sig3 - sin2_sig1)
- + C32 * (sin4_sig3 - sin4_sig1));
-
- CT const sign = bet3 >= c0
- ? c1
- : cminus1;
-
- CT const dlon_max = omg13 - sign * f * sin_alp0 * I3;
-
- return dlon_max;
- }
-};
-
-//CS_tag dispatching
-
-template <typename CT, typename CS_Tag>
-struct compute_vertex_lon
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_COORDINATE_SYSTEM, (types<CS_Tag>)
- );
-
-};
-
-template <typename CT>
-struct compute_vertex_lon<CT, spherical_equatorial_tag>
-{
- template <typename Strategy>
- static inline CT apply(CT const& lat1,
- CT const& lat2,
- CT const& vertex_lat,
- CT const& sin_l12,
- CT const& cos_l12,
- CT,
- Strategy)
- {
- return vertex_longitude_on_sphere<CT>
- ::apply(lat1,
- lat2,
- vertex_lat,
- sin_l12,
- cos_l12);
- }
-};
-
-template <typename CT>
-struct compute_vertex_lon<CT, geographic_tag>
-{
- template <typename Strategy>
- static inline CT apply(CT const& lat1,
- CT const& lat2,
- CT const& vertex_lat,
- CT,
- CT,
- CT& alp1,
- Strategy const& azimuth_strategy)
- {
- return vertex_longitude_on_spheroid<CT>
- ::apply(lat1,
- lat2,
- vertex_lat,
- alp1,
- azimuth_strategy.model());
- }
-};
-
-// Vertex longitude interface
-// Assume that lon1 < lon2 and vertex_lat is the latitude of the vertex
-
-template <typename CT, typename CS_Tag>
-class vertex_longitude
-{
-public :
- template <typename Strategy>
- static inline CT apply(CT& lon1,
- CT& lat1,
- CT& lon2,
- CT& lat2,
- CT const& vertex_lat,
- CT& alp1,
- Strategy const& azimuth_strategy)
- {
- CT const c0 = 0;
- CT pi = math::pi<CT>();
-
- //Vertex is a segment's point
- if (math::equals(vertex_lat, lat1))
- {
- return lon1;
- }
- if (math::equals(vertex_lat, lat2))
- {
- return lon2;
- }
-
- //Segment lay on meridian
- if (math::equals(lon1, lon2))
- {
- return (std::max)(lat1, lat2);
- }
- BOOST_ASSERT(lon1 < lon2);
-
- CT dlon = compute_vertex_lon<CT, CS_Tag>::apply(lat1, lat2,
- vertex_lat,
- sin(lon1 - lon2),
- cos(lon1 - lon2),
- alp1,
- azimuth_strategy);
-
- CT vertex_lon = std::fmod(lon1 + dlon, 2 * pi);
-
- if (vertex_lat < c0)
- {
- vertex_lon -= pi;
- }
-
- if (std::abs(lon1 - lon2) > pi)
- {
- vertex_lon -= pi;
- }
-
- return vertex_lon;
- }
-};
-
-}}} // namespace boost::geometry::formula
-#endif // BOOST_GEOMETRY_FORMULAS_MAXIMUM_LONGITUDE_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/formulas/vincenty_direct.hpp b/contrib/restricted/boost/boost/geometry/formulas/vincenty_direct.hpp
deleted file mode 100644
index b72379defe6..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/vincenty_direct.hpp
+++ /dev/null
@@ -1,183 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014, 2016, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_VINCENTY_DIRECT_HPP
-#define BOOST_GEOMETRY_FORMULAS_VINCENTY_DIRECT_HPP
-
-
-#include <boost/math/constants/constants.hpp>
-
-#include <boost/geometry/core/radius.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/formulas/differential_quantities.hpp>
-#include <boost/geometry/formulas/flattening.hpp>
-#include <boost/geometry/formulas/result_direct.hpp>
-
-
-#ifndef BOOST_GEOMETRY_DETAIL_VINCENTY_MAX_STEPS
-#define BOOST_GEOMETRY_DETAIL_VINCENTY_MAX_STEPS 1000
-#endif
-
-
-namespace boost { namespace geometry { namespace formula
-{
-
-/*!
-\brief The solution of the direct problem of geodesics on latlong coordinates, after Vincenty, 1975
-\author See
- - http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf
- - http://www.icsm.gov.au/gda/gdav2.3.pdf
-\author Adapted from various implementations to get it close to the original document
- - http://www.movable-type.co.uk/scripts/LatLongVincenty.html
- - http://exogen.case.edu/projects/geopy/source/geopy.distance.html
- - http://futureboy.homeip.net/fsp/colorize.fsp?fileName=navigation.frink
-
-*/
-template <
- typename CT,
- bool EnableCoordinates = true,
- bool EnableReverseAzimuth = false,
- bool EnableReducedLength = false,
- bool EnableGeodesicScale = false
->
-class vincenty_direct
-{
- static const bool CalcQuantities = EnableReducedLength || EnableGeodesicScale;
- static const bool CalcCoordinates = EnableCoordinates || CalcQuantities;
- static const bool CalcRevAzimuth = EnableReverseAzimuth || CalcQuantities;
-
-public:
- typedef result_direct<CT> result_type;
-
- template <typename T, typename Dist, typename Azi, typename Spheroid>
- static inline result_type apply(T const& lo1,
- T const& la1,
- Dist const& distance,
- Azi const& azimuth12,
- Spheroid const& spheroid)
- {
- result_type result;
-
- CT const lon1 = lo1;
- CT const lat1 = la1;
-
- if ( math::equals(distance, Dist(0)) || distance < Dist(0) )
- {
- result.lon2 = lon1;
- result.lat2 = lat1;
- return result;
- }
-
- CT const radius_a = CT(get_radius<0>(spheroid));
- CT const radius_b = CT(get_radius<2>(spheroid));
- CT const flattening = formula::flattening<CT>(spheroid);
-
- CT const sin_azimuth12 = sin(azimuth12);
- CT const cos_azimuth12 = cos(azimuth12);
-
- // U: reduced latitude, defined by tan U = (1-f) tan phi
- CT const one_min_f = CT(1) - flattening;
- CT const tan_U1 = one_min_f * tan(lat1);
- CT const sigma1 = atan2(tan_U1, cos_azimuth12); // (1)
-
- // may be calculated from tan using 1 sqrt()
- CT const U1 = atan(tan_U1);
- CT const sin_U1 = sin(U1);
- CT const cos_U1 = cos(U1);
-
- CT const sin_alpha = cos_U1 * sin_azimuth12; // (2)
- CT const sin_alpha_sqr = math::sqr(sin_alpha);
- CT const cos_alpha_sqr = CT(1) - sin_alpha_sqr;
-
- CT const b_sqr = radius_b * radius_b;
- CT const u_sqr = cos_alpha_sqr * (radius_a * radius_a - b_sqr) / b_sqr;
- CT const A = CT(1) + (u_sqr/CT(16384)) * (CT(4096) + u_sqr*(CT(-768) + u_sqr*(CT(320) - u_sqr*CT(175)))); // (3)
- CT const B = (u_sqr/CT(1024))*(CT(256) + u_sqr*(CT(-128) + u_sqr*(CT(74) - u_sqr*CT(47)))); // (4)
-
- CT s_div_bA = distance / (radius_b * A);
- CT sigma = s_div_bA; // (7)
-
- CT previous_sigma;
- CT sin_sigma;
- CT cos_sigma;
- CT cos_2sigma_m;
- CT cos_2sigma_m_sqr;
-
- int counter = 0; // robustness
-
- do
- {
- previous_sigma = sigma;
-
- CT const two_sigma_m = CT(2) * sigma1 + sigma; // (5)
-
- sin_sigma = sin(sigma);
- cos_sigma = cos(sigma);
- CT const sin_sigma_sqr = math::sqr(sin_sigma);
- cos_2sigma_m = cos(two_sigma_m);
- cos_2sigma_m_sqr = math::sqr(cos_2sigma_m);
-
- CT const delta_sigma = B * sin_sigma * (cos_2sigma_m
- + (B/CT(4)) * ( cos_sigma * (CT(-1) + CT(2)*cos_2sigma_m_sqr)
- - (B/CT(6) * cos_2sigma_m * (CT(-3)+CT(4)*sin_sigma_sqr) * (CT(-3)+CT(4)*cos_2sigma_m_sqr)) )); // (6)
-
- sigma = s_div_bA + delta_sigma; // (7)
-
- ++counter; // robustness
-
- } while ( geometry::math::abs(previous_sigma - sigma) > CT(1e-12)
- //&& geometry::math::abs(sigma) < pi
- && counter < BOOST_GEOMETRY_DETAIL_VINCENTY_MAX_STEPS ); // robustness
-
- if (BOOST_GEOMETRY_CONDITION(CalcCoordinates))
- {
- result.lat2
- = atan2( sin_U1 * cos_sigma + cos_U1 * sin_sigma * cos_azimuth12,
- one_min_f * math::sqrt(sin_alpha_sqr + math::sqr(sin_U1 * sin_sigma - cos_U1 * cos_sigma * cos_azimuth12))); // (8)
-
- CT const lambda = atan2( sin_sigma * sin_azimuth12,
- cos_U1 * cos_sigma - sin_U1 * sin_sigma * cos_azimuth12); // (9)
- CT const C = (flattening/CT(16)) * cos_alpha_sqr * ( CT(4) + flattening * ( CT(4) - CT(3) * cos_alpha_sqr ) ); // (10)
- CT const L = lambda - (CT(1) - C) * flattening * sin_alpha
- * ( sigma + C * sin_sigma * ( cos_2sigma_m + C * cos_sigma * ( CT(-1) + CT(2) * cos_2sigma_m_sqr ) ) ); // (11)
-
- result.lon2 = lon1 + L;
- }
-
- if (BOOST_GEOMETRY_CONDITION(CalcRevAzimuth))
- {
- result.reverse_azimuth
- = atan2(sin_alpha, -sin_U1 * sin_sigma + cos_U1 * cos_sigma * cos_azimuth12); // (12)
- }
-
- if (BOOST_GEOMETRY_CONDITION(CalcQuantities))
- {
- typedef differential_quantities<CT, EnableReducedLength, EnableGeodesicScale, 2> quantities;
- quantities::apply(lon1, lat1, result.lon2, result.lat2,
- azimuth12, result.reverse_azimuth,
- radius_b, flattening,
- result.reduced_length, result.geodesic_scale);
- }
-
- return result;
- }
-
-};
-
-}}} // namespace boost::geometry::formula
-
-
-#endif // BOOST_GEOMETRY_FORMULAS_VINCENTY_DIRECT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/formulas/vincenty_inverse.hpp b/contrib/restricted/boost/boost/geometry/formulas/vincenty_inverse.hpp
deleted file mode 100644
index e58ac66dafa..00000000000
--- a/contrib/restricted/boost/boost/geometry/formulas/vincenty_inverse.hpp
+++ /dev/null
@@ -1,226 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2018 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014, 2016, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_FORMULAS_VINCENTY_INVERSE_HPP
-#define BOOST_GEOMETRY_FORMULAS_VINCENTY_INVERSE_HPP
-
-
-#include <boost/math/constants/constants.hpp>
-
-#include <boost/geometry/core/radius.hpp>
-
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/formulas/differential_quantities.hpp>
-#include <boost/geometry/formulas/flattening.hpp>
-#include <boost/geometry/formulas/result_inverse.hpp>
-
-#include <util/system/compiler.h>
-
-Y_PRAGMA_DIAGNOSTIC_PUSH
-Y_PRAGMA_NO_WSHADOW
-
-#ifndef BOOST_GEOMETRY_DETAIL_VINCENTY_MAX_STEPS
-#define BOOST_GEOMETRY_DETAIL_VINCENTY_MAX_STEPS 1000
-#endif
-
-
-namespace boost { namespace geometry { namespace formula
-{
-
-/*!
-\brief The solution of the inverse problem of geodesics on latlong coordinates, after Vincenty, 1975
-\author See
- - http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf
- - http://www.icsm.gov.au/gda/gda-v_2.4.pdf
-\author Adapted from various implementations to get it close to the original document
- - http://www.movable-type.co.uk/scripts/LatLongVincenty.html
- - http://exogen.case.edu/projects/geopy/source/geopy.distance.html
- - http://futureboy.homeip.net/fsp/colorize.fsp?fileName=navigation.frink
-
-*/
-template <
- typename CT,
- bool EnableDistance,
- bool EnableAzimuth,
- bool EnableReverseAzimuth = false,
- bool EnableReducedLength = false,
- bool EnableGeodesicScale = false
->
-struct vincenty_inverse
-{
- static const bool CalcQuantities = EnableReducedLength || EnableGeodesicScale;
- static const bool CalcAzimuths = EnableAzimuth || EnableReverseAzimuth || CalcQuantities;
- static const bool CalcFwdAzimuth = EnableAzimuth || CalcQuantities;
- static const bool CalcRevAzimuth = EnableReverseAzimuth || CalcQuantities;
-
-public:
- typedef result_inverse<CT> result_type;
-
- template <typename T1, typename T2, typename Spheroid>
- static inline result_type apply(T1 const& lon1,
- T1 const& lat1,
- T2 const& lon2,
- T2 const& lat2,
- Spheroid const& spheroid)
- {
- result_type result;
-
- if (math::equals(lat1, lat2) && math::equals(lon1, lon2))
- {
- return result;
- }
-
- CT const c0 = 0;
- CT const c1 = 1;
- CT const c2 = 2;
- CT const c3 = 3;
- CT const c4 = 4;
- CT const c16 = 16;
- CT const c_e_12 = CT(1e-12);
-
- CT const pi = geometry::math::pi<CT>();
- CT const two_pi = c2 * pi;
-
- // lambda: difference in longitude on an auxiliary sphere
- CT L = lon2 - lon1;
- CT lambda = L;
-
- if (L < -pi) L += two_pi;
- if (L > pi) L -= two_pi;
-
- CT const radius_a = CT(get_radius<0>(spheroid));
- CT const radius_b = CT(get_radius<2>(spheroid));
- CT const f = formula::flattening<CT>(spheroid);
-
- // U: reduced latitude, defined by tan U = (1-f) tan phi
- CT const one_min_f = c1 - f;
- CT const tan_U1 = one_min_f * tan(lat1); // above (1)
- CT const tan_U2 = one_min_f * tan(lat2); // above (1)
-
- // calculate sin U and cos U using trigonometric identities
- CT const temp_den_U1 = math::sqrt(c1 + math::sqr(tan_U1));
- CT const temp_den_U2 = math::sqrt(c1 + math::sqr(tan_U2));
- // cos = 1 / sqrt(1 + tan^2)
- CT const cos_U1 = c1 / temp_den_U1;
- CT const cos_U2 = c1 / temp_den_U2;
- // sin = tan / sqrt(1 + tan^2)
- // sin = tan * cos
- CT const sin_U1 = tan_U1 * cos_U1;
- CT const sin_U2 = tan_U2 * cos_U2;
-
- // calculate sin U and cos U directly
- //CT const U1 = atan(tan_U1);
- //CT const U2 = atan(tan_U2);
- //cos_U1 = cos(U1);
- //cos_U2 = cos(U2);
- //sin_U1 = tan_U1 * cos_U1; // sin(U1);
- //sin_U2 = tan_U2 * cos_U2; // sin(U2);
-
- CT previous_lambda;
- CT sin_lambda;
- CT cos_lambda;
- CT sin_sigma;
- CT sin_alpha;
- CT cos2_alpha;
- CT cos_2sigma_m;
- CT cos2_2sigma_m;
- CT sigma;
-
- int counter = 0; // robustness
-
- do
- {
- previous_lambda = lambda; // (13)
- sin_lambda = sin(lambda);
- cos_lambda = cos(lambda);
- sin_sigma = math::sqrt(math::sqr(cos_U2 * sin_lambda) + math::sqr(cos_U1 * sin_U2 - sin_U1 * cos_U2 * cos_lambda)); // (14)
- CT cos_sigma = sin_U1 * sin_U2 + cos_U1 * cos_U2 * cos_lambda; // (15)
- sin_alpha = cos_U1 * cos_U2 * sin_lambda / sin_sigma; // (17)
- cos2_alpha = c1 - math::sqr(sin_alpha);
- cos_2sigma_m = math::equals(cos2_alpha, c0) ? c0 : cos_sigma - c2 * sin_U1 * sin_U2 / cos2_alpha; // (18)
- cos2_2sigma_m = math::sqr(cos_2sigma_m);
-
- CT C = f/c16 * cos2_alpha * (c4 + f * (c4 - c3 * cos2_alpha)); // (10)
- sigma = atan2(sin_sigma, cos_sigma); // (16)
- lambda = L + (c1 - C) * f * sin_alpha *
- (sigma + C * sin_sigma * (cos_2sigma_m + C * cos_sigma * (-c1 + c2 * cos2_2sigma_m))); // (11)
-
- ++counter; // robustness
-
- } while ( geometry::math::abs(previous_lambda - lambda) > c_e_12
- && geometry::math::abs(lambda) < pi
- && counter < BOOST_GEOMETRY_DETAIL_VINCENTY_MAX_STEPS ); // robustness
-
- if ( BOOST_GEOMETRY_CONDITION(EnableDistance) )
- {
- // Oops getting hard here
- // (again, problem is that ttmath cannot divide by doubles, which is OK)
- CT const c6 = 6;
- CT const c47 = 47;
- CT const c74 = 74;
- CT const c128 = 128;
- CT const c256 = 256;
- CT const c175 = 175;
- CT const c320 = 320;
- CT const c768 = 768;
- CT const c1024 = 1024;
- CT const c4096 = 4096;
- CT const c16384 = 16384;
-
- //CT sqr_u = cos2_alpha * (math::sqr(radius_a) - math::sqr(radius_b)) / math::sqr(radius_b); // above (1)
- CT sqr_u = cos2_alpha * ( math::sqr(radius_a / radius_b) - c1 ); // above (1)
-
- CT A = c1 + sqr_u/c16384 * (c4096 + sqr_u * (-c768 + sqr_u * (c320 - c175 * sqr_u))); // (3)
- CT B = sqr_u/c1024 * (c256 + sqr_u * ( -c128 + sqr_u * (c74 - c47 * sqr_u))); // (4)
- CT const cos_sigma = cos(sigma);
- CT const sin2_sigma = math::sqr(sin_sigma);
- CT delta_sigma = B * sin_sigma * (cos_2sigma_m + (B/c4) * (cos_sigma* (-c1 + c2 * cos2_2sigma_m)
- - (B/c6) * cos_2sigma_m * (-c3 + c4 * sin2_sigma) * (-c3 + c4 * cos2_2sigma_m))); // (6)
-
- result.distance = radius_b * A * (sigma - delta_sigma); // (19)
- }
-
- if ( BOOST_GEOMETRY_CONDITION(CalcAzimuths) )
- {
- if (BOOST_GEOMETRY_CONDITION(CalcFwdAzimuth))
- {
- result.azimuth = atan2(cos_U2 * sin_lambda, cos_U1 * sin_U2 - sin_U1 * cos_U2 * cos_lambda); // (20)
- }
-
- if (BOOST_GEOMETRY_CONDITION(CalcRevAzimuth))
- {
- result.reverse_azimuth = atan2(cos_U1 * sin_lambda, -sin_U1 * cos_U2 + cos_U1 * sin_U2 * cos_lambda); // (21)
- }
- }
-
- if (BOOST_GEOMETRY_CONDITION(CalcQuantities))
- {
- typedef differential_quantities<CT, EnableReducedLength, EnableGeodesicScale, 2> quantities;
- quantities::apply(lon1, lat1, lon2, lat2,
- result.azimuth, result.reverse_azimuth,
- radius_b, f,
- result.reduced_length, result.geodesic_scale);
- }
-
- return result;
- }
-};
-
-}}} // namespace boost::geometry::formula
-
-Y_PRAGMA_DIAGNOSTIC_POP
-
-#endif // BOOST_GEOMETRY_FORMULAS_VINCENTY_INVERSE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_array.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_array.hpp
deleted file mode 100644
index 275ccb5c2b7..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_array.hpp
+++ /dev/null
@@ -1,120 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010 Alfredo Correa
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_ARRAY_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_ARRAY_HPP
-
-
-#ifdef BOOST_GEOMETRY_ADAPTED_BOOST_ARRAY_TAG_DEFINED
-#error Include either "boost_array_as_point" or \
- "boost_array_as_linestring" or "boost_array_as_ring" \
- or "boost_array_as_multi_point" to adapt a boost_array
-#endif
-
-#define BOOST_GEOMETRY_ADAPTED_BOOST_ARRAY_TAG_DEFINED
-
-
-#include <cstddef>
-
-#include <boost/type_traits/is_arithmetic.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/array.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-// Create class and specialization to indicate the tag
-// for normal cases and the case that the type of the c-array is arithmetic
-template <bool>
-struct boost_array_tag
-{
- typedef geometry_not_recognized_tag type;
-};
-
-
-template <>
-struct boost_array_tag<true>
-{
- typedef point_tag type;
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-// Assign the point-tag, preventing arrays of points getting a point-tag
-template <typename CoordinateType, std::size_t DimensionCount>
-struct tag<boost::array<CoordinateType, DimensionCount> >
- : detail::boost_array_tag<boost::is_arithmetic<CoordinateType>::value> {};
-
-
-template <typename CoordinateType, std::size_t DimensionCount>
-struct coordinate_type<boost::array<CoordinateType, DimensionCount> >
-{
- typedef CoordinateType type;
-};
-
-
-template <typename CoordinateType, std::size_t DimensionCount>
-struct dimension<boost::array<CoordinateType, DimensionCount> >: boost::mpl::int_<DimensionCount> {};
-
-
-template <typename CoordinateType, std::size_t DimensionCount, std::size_t Dimension>
-struct access<boost::array<CoordinateType, DimensionCount>, Dimension>
-{
- static inline CoordinateType get(boost::array<CoordinateType, DimensionCount> const& a)
- {
- return a[Dimension];
- }
-
- static inline void set(boost::array<CoordinateType, DimensionCount>& a,
- CoordinateType const& value)
- {
- a[Dimension] = value;
- }
-};
-
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-#define BOOST_GEOMETRY_REGISTER_BOOST_ARRAY_CS(CoordinateSystem) \
- namespace boost { namespace geometry { namespace traits { \
- template <class T, std::size_t N> \
- struct coordinate_system<boost::array<T, N> > \
- { \
- typedef CoordinateSystem type; \
- }; \
- }}}
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_ARRAY_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_fusion.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_fusion.hpp
deleted file mode 100644
index 2f3594e4e70..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_fusion.hpp
+++ /dev/null
@@ -1,178 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2011-2015 Akira Takahashi
-// Copyright (c) 2011-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_FUSION_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_FUSION_HPP
-
-
-#include <cstddef>
-
-#include <boost/core/enable_if.hpp>
-
-#include <boost/fusion/include/is_sequence.hpp>
-#include <boost/fusion/include/size.hpp>
-#include <boost/fusion/include/tag_of.hpp>
-#include <boost/fusion/include/front.hpp>
-#include <boost/fusion/include/at.hpp>
-#include <boost/fusion/mpl.hpp>
-
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/count_if.hpp>
-#include <boost/mpl/front.hpp>
-#include <boost/mpl/placeholders.hpp>
-#include <boost/mpl/pop_front.hpp>
-#include <boost/mpl/size.hpp>
-
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace fusion_adapt_detail
-{
-
-template <class Sequence>
-struct all_same :
- boost::mpl::bool_<
- boost::mpl::count_if<
- Sequence,
- boost::is_same<
- typename boost::mpl::front<Sequence>::type,
- boost::mpl::_
- >
- >::value == boost::mpl::size<Sequence>::value
- >
-{};
-
-template <class Sequence>
-struct is_coordinate_size : boost::mpl::bool_<
- boost::fusion::result_of::size<Sequence>::value == 2 ||
- boost::fusion::result_of::size<Sequence>::value == 3> {};
-
-template<typename Sequence>
-struct is_fusion_sequence
- : boost::mpl::and_<boost::fusion::traits::is_sequence<Sequence>,
- fusion_adapt_detail::is_coordinate_size<Sequence>,
- fusion_adapt_detail::all_same<Sequence> >
-{};
-
-
-} // namespace fusion_adapt_detail
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-// Boost Fusion Sequence, 2D or 3D
-template <typename Sequence>
-struct coordinate_type
- <
- Sequence,
- typename boost::enable_if
- <
- fusion_adapt_detail::is_fusion_sequence<Sequence>
- >::type
- >
-{
- typedef typename boost::mpl::front<Sequence>::type type;
-};
-
-
-template <typename Sequence>
-struct dimension
- <
- Sequence,
- typename boost::enable_if
- <
- fusion_adapt_detail::is_fusion_sequence<Sequence>
- >::type
- > : boost::mpl::size<Sequence>
-{};
-
-
-template <typename Sequence, std::size_t Dimension>
-struct access
- <
- Sequence,
- Dimension,
- typename boost::enable_if
- <
- fusion_adapt_detail::is_fusion_sequence<Sequence>
- >::type
- >
-{
- typedef typename coordinate_type<Sequence>::type ctype;
-
- static inline ctype get(Sequence const& point)
- {
- return boost::fusion::at_c<Dimension>(point);
- }
-
- template <class CoordinateType>
- static inline void set(Sequence& point, CoordinateType const& value)
- {
- boost::fusion::at_c<Dimension>(point) = value;
- }
-};
-
-
-template <typename Sequence>
-struct tag
- <
- Sequence,
- typename boost::enable_if
- <
- fusion_adapt_detail::is_fusion_sequence<Sequence>
- >::type
- >
-{
- typedef point_tag type;
-};
-
-
-} // namespace traits
-
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-// Convenience registration macro to bind a Fusion sequence to a CS
-#define BOOST_GEOMETRY_REGISTER_BOOST_FUSION_CS(CoordinateSystem) \
- namespace boost { namespace geometry { namespace traits { \
- template <typename Sequence> \
- struct coordinate_system \
- < \
- Sequence, \
- typename boost::enable_if \
- < \
- fusion_adapt_detail::is_fusion_sequence<Sequence> \
- >::type \
- > \
- { typedef CoordinateSystem type; }; \
- }}}
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_FUSION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon.hpp
deleted file mode 100644
index fed2362b6e1..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HPP
-
-#include <boost/geometry/geometries/adapted/boost_polygon/point.hpp>
-#include <boost/geometry/geometries/adapted/boost_polygon/box.hpp>
-#include <boost/geometry/geometries/adapted/boost_polygon/ring.hpp>
-#include <boost/geometry/geometries/adapted/boost_polygon/polygon.hpp>
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/box.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/box.hpp
deleted file mode 100644
index 87c3b60650c..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/box.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_BOX_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_BOX_HPP
-
-// Adapts Geometries from Boost.Polygon for usage in Boost.Geometry
-// boost::polygon::rectangle_data -> boost::geometry::box
-
-
-#include <boost/polygon/polygon.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-
-template <typename CoordinateType>
-struct tag<boost::polygon::rectangle_data<CoordinateType> >
-{
- typedef box_tag type;
-};
-
-
-template <typename CoordinateType>
-struct point_type<boost::polygon::rectangle_data<CoordinateType> >
-{
- // Not sure what to do here. Boost.Polygon's rectangle does NOT define its
- // point_type (but uses it...)
- typedef boost::polygon::point_data<CoordinateType> type;
-};
-
-
-template <typename CoordinateType>
-struct indexed_access
-<
- boost::polygon::rectangle_data<CoordinateType>,
- min_corner, 0
->
-{
- typedef boost::polygon::rectangle_data<CoordinateType> box_type;
-
- static inline CoordinateType get(box_type const& b)
- {
- return boost::polygon::xl(b);
- }
-
- static inline void set(box_type& b, CoordinateType const& value)
- {
- boost::polygon::xl(b, value);
- }
-};
-
-
-template <typename CoordinateType>
-struct indexed_access
-<
- boost::polygon::rectangle_data<CoordinateType>,
- min_corner, 1
->
-{
- typedef boost::polygon::rectangle_data<CoordinateType> box_type;
-
- static inline CoordinateType get(box_type const& b)
- {
- return boost::polygon::yl(b);
- }
-
- static inline void set(box_type& b, CoordinateType const& value)
- {
- boost::polygon::yl(b, value);
- }
-};
-
-
-template <typename CoordinateType>
-struct indexed_access
-<
- boost::polygon::rectangle_data<CoordinateType>,
- max_corner, 0
->
-{
- typedef boost::polygon::rectangle_data<CoordinateType> box_type;
-
- static inline CoordinateType get(box_type const& b)
- {
- return boost::polygon::xh(b);
- }
-
- static inline void set(box_type& b, CoordinateType const& value)
- {
- boost::polygon::xh(b, value);
- }
-};
-
-
-template <typename CoordinateType>
-struct indexed_access
-<
- boost::polygon::rectangle_data<CoordinateType>,
- max_corner, 1
->
-{
- typedef boost::polygon::rectangle_data<CoordinateType> box_type;
-
- static inline CoordinateType get(box_type const& b)
- {
- return boost::polygon::yh(b);
- }
-
- static inline void set(box_type& b, CoordinateType const& value)
- {
- boost::polygon::yh(b, value);
- }
-};
-
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp
deleted file mode 100644
index fb7446c3983..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HOLE_ITERATOR_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HOLE_ITERATOR_HPP
-
-// Adapts Geometries from Boost.Polygon for usage in Boost.Geometry
-// boost::polygon::polygon_with_holes_data -> boost::geometry::polygon
-// hole_iterator -> returning ring_proxy's instead of normal polygon_data
-
-#include <boost/polygon/polygon.hpp>
-
-#include <boost/iterator/iterator_facade.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace adapt { namespace bp
-{
-
-
-template <typename Polygon, typename RingProxy>
-class hole_iterator
- : public ::boost::iterator_facade
- <
- hole_iterator<Polygon, RingProxy>,
- RingProxy, // value type
- boost::forward_traversal_tag,
- RingProxy // reference type
- >
-{
-public :
- typedef typename boost::polygon::polygon_with_holes_traits
- <
- Polygon
- >::iterator_holes_type ith_type;
-
- explicit inline hole_iterator(Polygon& polygon, ith_type const it)
- : m_polygon(polygon)
- , m_base(it)
- {
- }
-
- typedef std::ptrdiff_t difference_type;
-
-private:
- friend class boost::iterator_core_access;
-
- inline RingProxy dereference() const
- {
- return RingProxy(m_polygon, this->m_base);
- }
-
- inline void increment() { ++m_base; }
- inline void decrement() { --m_base; }
- inline void advance(difference_type n)
- {
- for (int i = 0; i < n; i++)
- {
- ++m_base;
- }
- }
-
- inline bool equal(hole_iterator<Polygon, RingProxy> const& other) const
- {
- return this->m_base == other.m_base;
- }
-
- Polygon& m_polygon;
- ith_type m_base;
-};
-
-
-}}}}
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HOLE_ITERATOR_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp
deleted file mode 100644
index c2a6a44dba9..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp
+++ /dev/null
@@ -1,204 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HOLES_PROXY_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HOLES_PROXY_HPP
-
-// Adapts Geometries from Boost.Polygon for usage in Boost.Geometry
-// boost::polygon::polygon_with_holes_data -> boost::geometry::polygon
-// pair{begin_holes, begin_holes} -> interior_proxy
-
-#include <boost/polygon/polygon.hpp>
-
-#include <boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp>
-#include <boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace adapt { namespace bp
-{
-
-
-// Polygon should implement the boost::polygon::polygon_with_holes_concept
-// Specify constness in the template parameter if necessary
-template<typename Polygon>
-struct holes_proxy
-{
- typedef ring_proxy
- <
- typename boost::mpl::if_
- <
- typename boost::is_const<Polygon>,
- Polygon const,
- Polygon
- >::type
- > proxy_type;
- typedef hole_iterator<Polygon, proxy_type> iterator_type;
-
- // The next line does not work probably because coordinate_type is part of the
- // polygon_traits, but not of the polygon_with_holes_traits
- // typedef typename boost::polygon::polygon_traits<Polygon>::coordinate_type coordinate_type;
-
- // So we use:
- typedef typename Polygon::coordinate_type coordinate_type;
-
- inline holes_proxy(Polygon& p)
- : polygon(p)
- {}
-
- inline void clear()
- {
- Polygon empty;
- // Clear the holes
- polygon.set_holes
- (
- boost::polygon::begin_holes(empty),
- boost::polygon::end_holes(empty)
- );
- }
-
- inline void resize(std::size_t new_size)
- {
- std::vector<boost::polygon::polygon_data<coordinate_type> > temporary_copy
- (
- boost::polygon::begin_holes(polygon),
- boost::polygon::end_holes(polygon)
- );
- temporary_copy.resize(new_size);
- polygon.set_holes(temporary_copy.begin(), temporary_copy.end());
- }
-
- template <typename Ring>
- inline void push_back(Ring const& ring)
- {
- std::vector<boost::polygon::polygon_data<coordinate_type> > temporary_copy
- (
- boost::polygon::begin_holes(polygon),
- boost::polygon::end_holes(polygon)
- );
- boost::polygon::polygon_data<coordinate_type> added;
- boost::polygon::set_points(added, ring.begin(), ring.end());
- temporary_copy.push_back(added);
- polygon.set_holes(temporary_copy.begin(), temporary_copy.end());
- }
-
-
- Polygon& polygon;
-};
-
-
-// Support holes_proxy for Boost.Range ADP
-
-// Const versions
-template<typename Polygon>
-inline typename boost::geometry::adapt::bp::holes_proxy<Polygon const>::iterator_type
- range_begin(boost::geometry::adapt::bp::holes_proxy<Polygon const> const& proxy)
-{
- typename boost::geometry::adapt::bp::holes_proxy<Polygon const>::iterator_type
- begin(proxy.polygon, boost::polygon::begin_holes(proxy.polygon));
- return begin;
-}
-
-template<typename Polygon>
-inline typename boost::geometry::adapt::bp::holes_proxy<Polygon const>::iterator_type
- range_end(boost::geometry::adapt::bp::holes_proxy<Polygon const> const& proxy)
-{
- typename boost::geometry::adapt::bp::holes_proxy<Polygon const>::iterator_type
- end(proxy.polygon, boost::polygon::end_holes(proxy.polygon));
- return end;
-}
-
-// Mutable versions
-template<typename Polygon>
-inline typename boost::geometry::adapt::bp::holes_proxy<Polygon>::iterator_type
- range_begin(boost::geometry::adapt::bp::holes_proxy<Polygon>& proxy)
-{
- typename boost::geometry::adapt::bp::holes_proxy<Polygon>::iterator_type
- begin(proxy.polygon, boost::polygon::begin_holes(proxy.polygon));
- return begin;
-}
-
-template<typename Polygon>
-inline typename boost::geometry::adapt::bp::holes_proxy<Polygon>::iterator_type
- range_end(boost::geometry::adapt::bp::holes_proxy<Polygon>& proxy)
-{
- typename boost::geometry::adapt::bp::holes_proxy<Polygon>::iterator_type
- end(proxy.polygon, boost::polygon::end_holes(proxy.polygon));
- return end;
-}
-
-
-}}
-
-namespace traits
-{
-
-template <typename Polygon>
-struct rvalue_type<adapt::bp::holes_proxy<Polygon> >
-{
- typedef adapt::bp::holes_proxy<Polygon> type;
-};
-
-
-template <typename Polygon>
-struct clear<adapt::bp::holes_proxy<Polygon> >
-{
- static inline void apply(adapt::bp::holes_proxy<Polygon> proxy)
- {
- proxy.clear();
- }
-};
-
-template <typename Polygon>
-struct resize<adapt::bp::holes_proxy<Polygon> >
-{
- static inline void apply(adapt::bp::holes_proxy<Polygon> proxy, std::size_t new_size)
- {
- proxy.resize(new_size);
- }
-};
-
-template <typename Polygon>
-struct push_back<adapt::bp::holes_proxy<Polygon> >
-{
- template <typename Ring>
- static inline void apply(adapt::bp::holes_proxy<Polygon> proxy, Ring const& ring)
- {
- proxy.push_back(ring);
- }
-};
-
-
-
-} // namespace traits
-
-
-}}
-
-
-// Specialize holes_proxy for Boost.Range
-namespace boost
-{
- template<typename Polygon>
- struct range_mutable_iterator<geometry::adapt::bp::holes_proxy<Polygon> >
- {
- typedef typename geometry::adapt::bp::holes_proxy<Polygon>::iterator_type type;
- };
-
- template<typename Polygon>
- struct range_const_iterator<geometry::adapt::bp::holes_proxy<Polygon> >
- {
- typedef typename geometry::adapt::bp::holes_proxy<Polygon const>::iterator_type type;
- };
-
-} // namespace boost
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_HOLES_PROXY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/point.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/point.hpp
deleted file mode 100644
index 2aabb5663c7..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/point.hpp
+++ /dev/null
@@ -1,102 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_POINT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_POINT_HPP
-
-// Adapts Geometries from Boost.Polygon for usage in Boost.Geometry
-// boost::polygon::point_data -> boost::geometry::point
-
-
-#include <boost/polygon/polygon.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-
-template <typename CoordinateType>
-struct tag<boost::polygon::point_data<CoordinateType> >
-{
- typedef point_tag type;
-};
-
-
-template <typename CoordinateType>
-struct coordinate_type<boost::polygon::point_data<CoordinateType> >
-{
- typedef CoordinateType type;
-};
-
-
-template <typename CoordinateType>
-struct coordinate_system<boost::polygon::point_data<CoordinateType> >
-{
- typedef cs::cartesian type;
-};
-
-
-template <typename CoordinateType>
-struct dimension<boost::polygon::point_data<CoordinateType> >
- : boost::mpl::int_<2>
-{};
-
-
-template <typename CoordinateType>
-struct access<boost::polygon::point_data<CoordinateType>, 0>
-{
- typedef boost::polygon::point_data<CoordinateType> point_type;
-
- static inline CoordinateType get(point_type const& p)
- {
- return p.x();
- }
-
- static inline void set(point_type& p, CoordinateType const& value)
- {
- p.x(value);
- }
-};
-
-
-template <typename CoordinateType>
-struct access<boost::polygon::point_data<CoordinateType>, 1>
-{
- typedef boost::polygon::point_data<CoordinateType> point_type;
-
- static inline CoordinateType get(point_type const& p)
- {
- return p.y();
- }
-
- static inline void set(point_type& p, CoordinateType const& value)
- {
- p.y(value);
- }
-};
-
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/polygon.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/polygon.hpp
deleted file mode 100644
index 5703601e056..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/polygon.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_POLYGON_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_POLYGON_HPP
-
-// Adapts Geometries from Boost.Polygon for usage in Boost.Geometry
-// boost::polygon::polygon_with_holes_data -> boost::geometry::polygon
-
-#include <boost/polygon/polygon.hpp>
-
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-
-#include <boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp>
-#include <boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp>
-#include <boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename CoordinateType>
-struct tag<boost::polygon::polygon_with_holes_data<CoordinateType> >
-{
- typedef polygon_tag type;
-};
-
-template <typename CoordinateType>
-struct ring_const_type<boost::polygon::polygon_with_holes_data<CoordinateType> >
-{
- typedef adapt::bp::ring_proxy<boost::polygon::polygon_with_holes_data<CoordinateType> const> type;
-};
-
-template <typename CoordinateType>
-struct ring_mutable_type<boost::polygon::polygon_with_holes_data<CoordinateType> >
-{
- typedef adapt::bp::ring_proxy<boost::polygon::polygon_with_holes_data<CoordinateType> > type;
-};
-
-template <typename CoordinateType>
-struct interior_const_type<boost::polygon::polygon_with_holes_data<CoordinateType> >
-{
- typedef adapt::bp::holes_proxy<boost::polygon::polygon_with_holes_data<CoordinateType> const> type;
-};
-
-template <typename CoordinateType>
-struct interior_mutable_type<boost::polygon::polygon_with_holes_data<CoordinateType> >
-{
- typedef adapt::bp::holes_proxy<boost::polygon::polygon_with_holes_data<CoordinateType> > type;
-};
-
-
-template <typename CoordinateType>
-struct exterior_ring<boost::polygon::polygon_with_holes_data<CoordinateType> >
-{
- typedef boost::polygon::polygon_with_holes_data<CoordinateType> polygon_type;
- typedef adapt::bp::ring_proxy<polygon_type> proxy;
- typedef adapt::bp::ring_proxy<polygon_type const> const_proxy;
-
- static inline proxy get(polygon_type& p)
- {
- return proxy(p);
- }
-
- static inline const_proxy get(polygon_type const& p)
- {
- return const_proxy(p);
- }
-};
-
-template <typename CoordinateType>
-struct interior_rings<boost::polygon::polygon_with_holes_data<CoordinateType> >
-{
- typedef boost::polygon::polygon_with_holes_data<CoordinateType> polygon_type;
- typedef adapt::bp::holes_proxy<polygon_type> proxy;
- typedef adapt::bp::holes_proxy<polygon_type const> const_proxy;
-
- static inline proxy get(polygon_type& p)
- {
- return proxy(p);
- }
-
- static inline const_proxy get(polygon_type const& p)
- {
- return const_proxy(p);
- }
-};
-
-
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_POLYGON_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp
deleted file mode 100644
index 490fa45fe9a..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/ring.hpp
+++ /dev/null
@@ -1,182 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_RING_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_RING_HPP
-
-// Adapts Geometries from Boost.Polygon for usage in Boost.Geometry
-// boost::polygon::polygon_data -> boost::geometry::ring
-
-#include <cstddef>
-#include <boost/polygon/polygon.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-template <typename CoordinateType>
-struct tag<boost::polygon::polygon_data<CoordinateType> >
-{
- typedef ring_tag type;
-};
-
-template <typename CoordinateType>
-struct clear<boost::polygon::polygon_data<CoordinateType> >
-{
- static inline void apply(boost::polygon::polygon_data<CoordinateType>& data)
- {
- // There is no "clear" function but we can assign
- // a newly (and therefore empty) constructed polygon
- boost::polygon::assign(data, boost::polygon::polygon_data<CoordinateType>());
- }
-};
-
-template <typename CoordinateType>
-struct push_back<boost::polygon::polygon_data<CoordinateType> >
-{
- typedef boost::polygon::point_data<CoordinateType> point_type;
-
- static inline void apply(boost::polygon::polygon_data<CoordinateType>& data,
- point_type const& point)
- {
- // Boost.Polygon's polygons are not appendable. So create a temporary vector,
- // add a record and set it to the original. Of course: this is not efficient.
- // But there seems no other way (without using a wrapper)
- std::vector<point_type> temporary_vector
- (
- boost::polygon::begin_points(data),
- boost::polygon::end_points(data)
- );
- temporary_vector.push_back(point);
- data.set(temporary_vector.begin(), temporary_vector.end());
- }
-};
-
-template <typename CoordinateType>
-struct resize<boost::polygon::polygon_data<CoordinateType> >
-{
- typedef boost::polygon::point_data<CoordinateType> point_type;
-
- static inline void apply(boost::polygon::polygon_data<CoordinateType>& data,
- std::size_t new_size)
- {
- // Boost.Polygon's polygons are not resizable. So create a temporary vector,
- // resize it and set it to the original. Of course: this is not efficient.
- // But there seems no other way (without using a wrapper)
- std::vector<point_type> temporary_vector
- (
- boost::polygon::begin_points(data),
- boost::polygon::end_points(data)
- );
- temporary_vector.resize(new_size);
- data.set(temporary_vector.begin(), temporary_vector.end());
- }
-};
-
-
-} // namespace traits
-
-}} // namespace boost::geometry
-
-
-// Adapt Boost.Polygon's polygon_data to Boost.Range
-// This just translates to
-// polygon_data.begin() and polygon_data.end()
-namespace boost
-{
- template<typename CoordinateType>
- struct range_mutable_iterator<boost::polygon::polygon_data<CoordinateType> >
- {
- typedef typename boost::polygon::polygon_traits
- <
- boost::polygon::polygon_data<CoordinateType>
- >::iterator_type type;
- };
-
- template<typename CoordinateType>
- struct range_const_iterator<boost::polygon::polygon_data<CoordinateType> >
- {
- typedef typename boost::polygon::polygon_traits
- <
- boost::polygon::polygon_data<CoordinateType>
- >::iterator_type type;
- };
-
- template<typename CoordinateType>
- struct range_size<boost::polygon::polygon_data<CoordinateType> >
- {
- typedef std::size_t type;
- };
-
-} // namespace boost
-
-
-// Support Boost.Polygon's polygon_data for Boost.Range ADP
-namespace boost { namespace polygon
-{
-
-template<typename CoordinateType>
-inline typename polygon_traits
- <
- polygon_data<CoordinateType>
- >::iterator_type range_begin(polygon_data<CoordinateType>& polygon)
-{
- return polygon.begin();
-}
-
-template<typename CoordinateType>
-inline typename polygon_traits
- <
- polygon_data<CoordinateType>
- >::iterator_type range_begin(polygon_data<CoordinateType> const& polygon)
-{
- return polygon.begin();
-}
-
-template<typename CoordinateType>
-inline typename polygon_traits
- <
- polygon_data<CoordinateType>
- >::iterator_type range_end(polygon_data<CoordinateType>& polygon)
-{
- return polygon.end();
-}
-
-template<typename CoordinateType>
-inline typename polygon_traits
- <
- polygon_data<CoordinateType>
- >::iterator_type range_end(polygon_data<CoordinateType> const& polygon)
-{
- return polygon.end();
-}
-
-template<typename CoordinateType>
-inline std::size_t range_calculate_size(polygon_data<CoordinateType> const& polygon)
-{
- return polygon.size();
-}
-
-}}
-
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_RING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp
deleted file mode 100644
index 84f72aadcb8..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp
+++ /dev/null
@@ -1,301 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_RING_PROXY_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_RING_PROXY_HPP
-
-// Adapts Geometries from Boost.Polygon for usage in Boost.Geometry
-// boost::polygon::polygon_with_holes_data -> boost::geometry::polygon
-// pair{begin_points, end_points} -> ring_proxy
-
-#include <boost/polygon/polygon.hpp>
-#include <boost/range.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-namespace adapt { namespace bp
-{
-
-namespace detail
-{
-
-template <bool Mutable>
-struct modify
-{};
-
-template <>
-struct modify<true>
-{
- template <typename Ring, typename Point>
- static inline void push_back(Ring& ring, Point const& point)
- {
- // Boost.Polygon's polygons are not appendable. So create a temporary vector,
- // add a record and set it to the original. Of course: this is not efficient.
- // But there seems no other way (without using a wrapper)
- std::vector<Point> temporary_vector
- (
- boost::polygon::begin_points(ring),
- boost::polygon::end_points(ring)
- );
- temporary_vector.push_back(point);
- boost::polygon::set_points(ring, temporary_vector.begin(), temporary_vector.end());
- }
-
-};
-
-template <>
-struct modify<false>
-{
- template <typename Ring, typename Point>
- static inline void push_back(Ring& /*ring*/, Point const& /*point*/)
- {
- }
-
-};
-
-
-}
-
-
-// Polygon should implement the boost::polygon::polygon_with_holes_concept
-// Specify constness in the template parameter if necessary
-template<typename Polygon>
-class ring_proxy
-{
-public :
- typedef typename boost::polygon::polygon_traits
- <
- typename boost::remove_const<Polygon>::type
- >::iterator_type iterator_type;
-
- typedef typename boost::polygon::polygon_with_holes_traits
- <
- typename boost::remove_const<Polygon>::type
- >::iterator_holes_type hole_iterator_type;
-
- static const bool is_mutable = !boost::is_const<Polygon>::type::value;
-
- inline ring_proxy(Polygon& p)
- : m_polygon_pointer(&p)
- , m_do_hole(false)
- {}
-
- // Constructor used from hole_iterator
- inline ring_proxy(Polygon& p, hole_iterator_type hole_it)
- : m_polygon_pointer(&p)
- , m_do_hole(true)
- , m_hole_it(hole_it)
- {}
-
- // Default constructor, for mutable polygons / appending (interior) rings
- inline ring_proxy()
- : m_polygon_pointer(&m_polygon_for_default_constructor)
- , m_do_hole(false)
- {}
-
-
- iterator_type begin() const
- {
- return m_do_hole
- ? boost::polygon::begin_points(*m_hole_it)
- : boost::polygon::begin_points(*m_polygon_pointer)
- ;
- }
-
- iterator_type begin()
- {
- return m_do_hole
- ? boost::polygon::begin_points(*m_hole_it)
- : boost::polygon::begin_points(*m_polygon_pointer)
- ;
- }
-
- iterator_type end() const
- {
- return m_do_hole
- ? boost::polygon::end_points(*m_hole_it)
- : boost::polygon::end_points(*m_polygon_pointer)
- ;
- }
-
- iterator_type end()
- {
- return m_do_hole
- ? boost::polygon::end_points(*m_hole_it)
- : boost::polygon::end_points(*m_polygon_pointer)
- ;
- }
-
- // Mutable
- void clear()
- {
- Polygon p;
- if (m_do_hole)
- {
- // Does NOT work see comment above
- }
- else
- {
- boost::polygon::set_points(*m_polygon_pointer,
- boost::polygon::begin_points(p),
- boost::polygon::end_points(p));
- }
- }
-
- void resize(std::size_t /*new_size*/)
- {
- if (m_do_hole)
- {
- // Does NOT work see comment above
- }
- else
- {
- // TODO: implement this by resizing the container
- }
- }
-
-
-
- template <typename Point>
- void push_back(Point const& point)
- {
- if (m_do_hole)
- {
- //detail::modify<is_mutable>::push_back(*m_hole_it, point);
- //std::cout << "HOLE: " << typeid(*m_hole_it).name() << std::endl;
- //std::cout << "HOLE: " << typeid(m_hole_it).name() << std::endl;
- //std::cout << "HOLE: " << typeid(hole_iterator_type).name() << std::endl;
-
- // Note, ths does NOT work because hole_iterator_type is defined
- // as a const_iterator by Boost.Polygon
-
- }
- else
- {
- detail::modify<is_mutable>::push_back(*m_polygon_pointer, point);
- }
- }
-
-private :
- Polygon* m_polygon_pointer;
- bool m_do_hole;
- hole_iterator_type m_hole_it;
-
- Polygon m_polygon_for_default_constructor;
-};
-
-
-
-
-// Support geometry::adapt::bp::ring_proxy for Boost.Range ADP
-template<typename Polygon>
-inline typename boost::geometry::adapt::bp::ring_proxy<Polygon>::iterator_type
- range_begin(boost::geometry::adapt::bp::ring_proxy<Polygon>& proxy)
-{
- return proxy.begin();
-}
-
-template<typename Polygon>
-inline typename boost::geometry::adapt::bp::ring_proxy<Polygon const>::iterator_type
- range_begin(boost::geometry::adapt::bp::ring_proxy<Polygon const> const& proxy)
-{
- return proxy.begin();
-}
-
-template<typename Polygon>
-inline typename boost::geometry::adapt::bp::ring_proxy<Polygon>::iterator_type
- range_end(boost::geometry::adapt::bp::ring_proxy<Polygon>& proxy)
-{
- return proxy.end();
-}
-
-template<typename Polygon>
-inline typename boost::geometry::adapt::bp::ring_proxy<Polygon const>::iterator_type
- range_end(boost::geometry::adapt::bp::ring_proxy<Polygon const> const& proxy)
-{
- return proxy.end();
-}
-
-
-
-
-}} // namespace adapt::bp
-
-
-namespace traits
-{
-
-template <typename Polygon>
-struct tag<adapt::bp::ring_proxy<Polygon> >
-{
- typedef ring_tag type;
-};
-
-
-template <typename Polygon>
-struct rvalue_type<adapt::bp::ring_proxy<Polygon> >
-{
- typedef adapt::bp::ring_proxy<Polygon> type;
-};
-
-template <typename Polygon>
-struct clear<adapt::bp::ring_proxy<Polygon> >
-{
- static inline void apply(adapt::bp::ring_proxy<Polygon> proxy)
- {
- proxy.clear();
- }
-};
-
-
-template <typename Polygon>
-struct resize<adapt::bp::ring_proxy<Polygon> >
-{
- static inline void apply(adapt::bp::ring_proxy<Polygon> proxy, std::size_t new_size)
- {
- proxy.resize(new_size);
- }
-};
-
-template <typename Polygon>
-struct push_back<adapt::bp::ring_proxy<Polygon> >
-{
- static inline void apply(adapt::bp::ring_proxy<Polygon> proxy,
- typename boost::polygon::polygon_traits<Polygon>::point_type const& point)
- {
- proxy.push_back(point);
- }
-};
-
-
-} // namespace traits
-
-}} // namespace boost::geometry
-
-// Specialize ring_proxy for Boost.Range
-namespace boost
-{
- template<typename Polygon>
- struct range_mutable_iterator<geometry::adapt::bp::ring_proxy<Polygon> >
- {
- typedef typename geometry::adapt::bp::ring_proxy<Polygon>::iterator_type type;
- };
-
- template<typename Polygon>
- struct range_const_iterator<geometry::adapt::bp::ring_proxy<Polygon> >
- {
- typedef typename geometry::adapt::bp::ring_proxy<Polygon const>::iterator_type type;
- };
-
-} // namespace boost
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_POLYGON_RING_PROXY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp
deleted file mode 100644
index 496dbeaec6c..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_ADJACENT_FILTERED_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_ADJACENT_FILTERED_HPP
-
-
-#include <boost/range/adaptor/adjacent_filtered.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-template<typename Filter, typename Geometry, bool DefaultPass>
-#if BOOST_VERSION > 104500
-struct tag<boost::adjacent_filtered_range<Filter, Geometry, DefaultPass> >
-#else
-struct tag<boost::range_detail::adjacent_filter_range<Filter, Geometry, DefaultPass> >
-#endif
-{
- typedef typename geometry::tag<Geometry>::type type;
-};
-
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_ADJACENT_FILTERED_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/filtered.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/filtered.hpp
deleted file mode 100644
index 990d608460b..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/filtered.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_FILTERED_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_FILTERED_HPP
-
-
-#include <boost/range/adaptor/filtered.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-template<typename Filter, typename Geometry>
-#if BOOST_VERSION > 104500
-struct tag<boost::filtered_range<Filter, Geometry> >
-#else
-struct tag<boost::range_detail::filter_range<Filter, Geometry> >
-#endif
-{
- typedef typename geometry::tag<Geometry>::type type;
-};
-
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_FILTERED_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/reversed.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/reversed.hpp
deleted file mode 100644
index 3c8601fe195..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/reversed.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_REVERSED_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_REVERSED_HPP
-
-
-#include <boost/range/adaptor/reversed.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-template<typename Geometry>
-#if BOOST_VERSION > 104500
-struct tag<boost::reversed_range<Geometry> >
-#else
-struct tag<boost::range_detail::reverse_range<Geometry> >
-#endif
-{
- typedef typename geometry::tag<Geometry>::type type;
-};
-
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_REVERSED_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/sliced.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/sliced.hpp
deleted file mode 100644
index 70189819cae..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/sliced.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_SLICED_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_SLICED_HPP
-
-
-#include <boost/range/adaptor/sliced.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-template<typename Geometry>
-struct tag<boost::adaptors::sliced_range<Geometry> >
-{
- typedef typename geometry::tag<Geometry>::type type;
-};
-
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_SLICED_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/strided.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/strided.hpp
deleted file mode 100644
index 5c9cdd6a827..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/strided.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_STRIDED_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_STRIDED_HPP
-
-
-#include <boost/range/adaptor/strided.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-template<typename Geometry>
-struct tag<boost::strided_range<Geometry> >
-{
- typedef typename geometry::tag<Geometry>::type type;
-};
-
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_STRIDED_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/uniqued.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/uniqued.hpp
deleted file mode 100644
index beb51fe0b82..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_range/uniqued.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_UNIQUED_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_UNIQUED_HPP
-
-
-#include <boost/range/adaptor/uniqued.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace traits
-{
-
-template<typename Geometry>
-#if BOOST_VERSION > 104500
-struct tag<boost::uniqued_range<Geometry> >
-#else
-struct tag<boost::range_detail::unique_range<Geometry> >
-#endif
-{
- typedef typename geometry::tag<Geometry>::type type;
-};
-
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_RANGE_UNIQUED_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_tuple.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_tuple.hpp
deleted file mode 100644
index 58065fe9af3..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/boost_tuple.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_TUPLE_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_BOOST_TUPLE_HPP
-
-
-#include <cstddef>
-
-#include <boost/tuple/tuple.hpp>
-
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
- typename T6, typename T7, typename T8, typename T9, typename T10>
-struct tag<boost::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >
-{
- typedef point_tag type;
-};
-
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
- typename T6, typename T7, typename T8, typename T9, typename T10>
-struct coordinate_type<boost::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >
-{
- typedef T1 type;
-};
-
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
- typename T6, typename T7, typename T8, typename T9, typename T10>
-struct dimension<boost::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >
- : boost::mpl::int_
- <
- boost::tuples::length
- <
- boost::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
- >::value
- >
-{};
-
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
- typename T6, typename T7, typename T8, typename T9, typename T10,
- std::size_t Dimension>
-struct access
- <
- boost::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>,
- Dimension
- >
-{
- static inline T1 get(
- boost::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> const& point)
- {
- return point.template get<Dimension>();
- }
-
- static inline void set(
- boost::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>& point,
- T1 const& value)
- {
- point.template get<Dimension>() = value;
- }
-};
-
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-// Convenience registration macro to bind boost::tuple to a CS
-#define BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS(CoordinateSystem) \
- namespace boost { namespace geometry { namespace traits { \
- template <typename T1, typename T2, typename T3, typename T4, typename T5, \
- typename T6, typename T7, typename T8, typename T9, typename T10> \
- struct coordinate_system<boost::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> > \
- { \
- typedef CoordinateSystem type; \
- }; \
- }}}
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_TUPLE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/c_array.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/c_array.hpp
deleted file mode 100644
index 1b4523d9691..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/c_array.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_C_ARRAY_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_C_ARRAY_HPP
-
-#include <cstddef>
-
-#include <boost/type_traits/is_arithmetic.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-// Create class and specialization to indicate the tag
-// for normal cases and the case that the type of the c-array is arithmetic
-template <bool>
-struct c_array_tag
-{
- typedef geometry_not_recognized_tag type;
-};
-
-
-template <>
-struct c_array_tag<true>
-{
- typedef point_tag type;
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-// Assign the point-tag, preventing arrays of points getting a point-tag
-template <typename CoordinateType, std::size_t DimensionCount>
-struct tag<CoordinateType[DimensionCount]>
- : detail::c_array_tag<boost::is_arithmetic<CoordinateType>::value> {};
-
-
-template <typename CoordinateType, std::size_t DimensionCount>
-struct coordinate_type<CoordinateType[DimensionCount]>
-{
- typedef CoordinateType type;
-};
-
-
-template <typename CoordinateType, std::size_t DimensionCount>
-struct dimension<CoordinateType[DimensionCount]>: boost::mpl::int_<DimensionCount> {};
-
-
-template <typename CoordinateType, std::size_t DimensionCount, std::size_t Dimension>
-struct access<CoordinateType[DimensionCount], Dimension>
-{
- static inline CoordinateType get(CoordinateType const p[DimensionCount])
- {
- return p[Dimension];
- }
-
- static inline void set(CoordinateType p[DimensionCount],
- CoordinateType const& value)
- {
- p[Dimension] = value;
- }
-};
-
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-#define BOOST_GEOMETRY_REGISTER_C_ARRAY_CS(CoordinateSystem) \
- namespace boost { namespace geometry { namespace traits { \
- template <typename T, std::size_t N> \
- struct coordinate_system<T[N]> \
- { \
- typedef CoordinateSystem type; \
- }; \
- }}}
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_C_ARRAY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/std_array.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/std_array.hpp
deleted file mode 100644
index 4f5cbe0d328..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/std_array.hpp
+++ /dev/null
@@ -1,115 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2010 Alfredo Correa
-// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2016 Norbert Wenzel
-
-// 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_STD_ARRAY_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_STD_ARRAY_HPP
-
-
-#define BOOST_GEOMETRY_ADAPTED_STD_ARRAY_TAG_DEFINED
-
-
-#include <cstddef>
-
-#include <boost/type_traits/is_arithmetic.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <array>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-// Create class and specialization to indicate the tag
-// for normal cases and the case that the type of the std-array is arithmetic
-template <bool>
-struct std_array_tag
-{
- typedef geometry_not_recognized_tag type;
-};
-
-
-template <>
-struct std_array_tag<true>
-{
- typedef point_tag type;
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-// Assign the point-tag, preventing arrays of points getting a point-tag
-template <typename CoordinateType, std::size_t DimensionCount>
-struct tag<std::array<CoordinateType, DimensionCount> >
- : detail::std_array_tag<boost::is_arithmetic<CoordinateType>::value> {};
-
-
-template <typename CoordinateType, std::size_t DimensionCount>
-struct coordinate_type<std::array<CoordinateType, DimensionCount> >
-{
- typedef CoordinateType type;
-};
-
-
-template <typename CoordinateType, std::size_t DimensionCount>
-struct dimension<std::array<CoordinateType, DimensionCount> >: boost::mpl::int_<DimensionCount> {};
-
-
-template <typename CoordinateType, std::size_t DimensionCount, std::size_t Dimension>
-struct access<std::array<CoordinateType, DimensionCount>, Dimension>
-{
- static inline CoordinateType get(std::array<CoordinateType, DimensionCount> const& a)
- {
- return a[Dimension];
- }
-
- static inline void set(std::array<CoordinateType, DimensionCount>& a,
- CoordinateType const& value)
- {
- a[Dimension] = value;
- }
-};
-
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-#define BOOST_GEOMETRY_REGISTER_STD_ARRAY_CS(CoordinateSystem) \
- namespace boost { namespace geometry { namespace traits { \
- template <class T, std::size_t N> \
- struct coordinate_system<std::array<T, N> > \
- { \
- typedef CoordinateSystem type; \
- }; \
- }}}
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_STD_ARRAY_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/geometries/adapted/std_pair_as_segment.hpp b/contrib/restricted/boost/boost/geometry/geometries/adapted/std_pair_as_segment.hpp
deleted file mode 100644
index e9200e0fd04..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/adapted/std_pair_as_segment.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_ADAPTED_STD_PAIR_AS_SEGMENT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_ADAPTED_STD_PAIR_AS_SEGMENT_HPP
-
-// Only possible if the std::pair is not used for iterator/pair
-// (maybe it is possible to avoid that by detecting in the other file
-// if an iterator was used in the pair)
-
-#ifdef BOOST_GEOMETRY_ADAPTED_STD_RANGE_TAG_DEFINED
-#error Include only one headerfile to register tag for adapted std:: containers or iterator pair
-#endif
-
-#define BOOST_GEOMETRY_ADAPTED_STD_RANGE_TAG_DEFINED
-
-
-#include <cstddef>
-
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-
-template <typename Point>
-struct tag<std::pair<Point, Point> >
-{
- typedef segment_tag type;
-};
-
-template <typename Point>
-struct point_type<std::pair<Point, Point> >
-{
- typedef Point type;
-};
-
-template <typename Point, std::size_t Dimension>
-struct indexed_access<std::pair<Point, Point>, 0, Dimension>
-{
- typedef typename geometry::coordinate_type<Point>::type coordinate_type;
-
- static inline coordinate_type get(std::pair<Point, Point> const& s)
- {
- return geometry::get<Dimension>(s.first);
- }
-
- static inline void set(std::pair<Point, Point>& s, coordinate_type const& value)
- {
- geometry::set<Dimension>(s.first, value);
- }
-};
-
-
-template <typename Point, std::size_t Dimension>
-struct indexed_access<std::pair<Point, Point>, 1, Dimension>
-{
- typedef typename geometry::coordinate_type<Point>::type coordinate_type;
-
- static inline coordinate_type get(std::pair<Point, Point> const& s)
- {
- return geometry::get<Dimension>(s.second);
- }
-
- static inline void set(std::pair<Point, Point>& s, coordinate_type const& value)
- {
- geometry::set<Dimension>(s.second, value);
- }
-};
-
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_ADAPTED_STD_PAIR_AS_SEGMENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/box.hpp b/contrib/restricted/boost/boost/geometry/geometries/box.hpp
deleted file mode 100644
index 23fd098f651..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/box.hpp
+++ /dev/null
@@ -1,191 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_BOX_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_BOX_HPP
-
-#include <cstddef>
-
-#include <boost/concept/assert.hpp>
-#include <boost/config.hpp>
-
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
-#include <boost/geometry/core/assert.hpp>
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-namespace model
-{
-
-/*!
-\brief Class box: defines a box made of two describing points
-\ingroup geometries
-\details Box is always described by a min_corner() and a max_corner() point. If another
- rectangle is used, use linear_ring or polygon.
-\note Boxes are for selections and for calculating the envelope of geometries. Not all algorithms
-are implemented for box. Boxes are also used in Spatial Indexes.
-\tparam Point point type. The box takes a point type as template parameter.
-The point type can be any point type.
-It can be 2D but can also be 3D or more dimensional.
-The box can also take a latlong point type as template parameter.
-
-\qbk{[include reference/geometries/box.qbk]}
-\qbk{before.synopsis, [heading Model of]}
-\qbk{before.synopsis, [link geometry.reference.concepts.concept_box Box Concept]}
- */
-
-template<typename Point>
-class box
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
-
-public:
-
-#if !defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
-#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
- /// \constructor_default_no_init
- box() = default;
-#else
- /// \constructor_default_no_init
- inline box()
- {}
-#endif
-#else // defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- inline box()
- {
- m_created = 1;
- }
- ~box()
- {
- m_created = 0;
- }
-#endif
-
- /*!
- \brief Constructor taking the minimum corner point and the maximum corner point
- */
- inline box(Point const& min_corner, Point const& max_corner)
- {
- geometry::convert(min_corner, m_min_corner);
- geometry::convert(max_corner, m_max_corner);
-
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- m_created = 1;
-#endif
- }
-
- inline Point const& min_corner() const
- {
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- BOOST_GEOMETRY_ASSERT(m_created == 1);
-#endif
- return m_min_corner;
- }
- inline Point const& max_corner() const
- {
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- BOOST_GEOMETRY_ASSERT(m_created == 1);
-#endif
- return m_max_corner;
- }
-
- inline Point& min_corner()
- {
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- BOOST_GEOMETRY_ASSERT(m_created == 1);
-#endif
- return m_min_corner;
- }
- inline Point& max_corner()
- {
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- BOOST_GEOMETRY_ASSERT(m_created == 1);
-#endif
- return m_max_corner;
- }
-
-private:
-
- Point m_min_corner;
- Point m_max_corner;
-
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- int m_created;
-#endif
-};
-
-
-} // namespace model
-
-
-// Traits specializations for box above
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename Point>
-struct tag<model::box<Point> >
-{
- typedef box_tag type;
-};
-
-template <typename Point>
-struct point_type<model::box<Point> >
-{
- typedef Point type;
-};
-
-template <typename Point, std::size_t Dimension>
-struct indexed_access<model::box<Point>, min_corner, Dimension>
-{
- typedef typename geometry::coordinate_type<Point>::type coordinate_type;
-
- static inline coordinate_type get(model::box<Point> const& b)
- {
- return geometry::get<Dimension>(b.min_corner());
- }
-
- static inline void set(model::box<Point>& b, coordinate_type const& value)
- {
- geometry::set<Dimension>(b.min_corner(), value);
- }
-};
-
-template <typename Point, std::size_t Dimension>
-struct indexed_access<model::box<Point>, max_corner, Dimension>
-{
- typedef typename geometry::coordinate_type<Point>::type coordinate_type;
-
- static inline coordinate_type get(model::box<Point> const& b)
- {
- return geometry::get<Dimension>(b.max_corner());
- }
-
- static inline void set(model::box<Point>& b, coordinate_type const& value)
- {
- geometry::set<Dimension>(b.max_corner(), value);
- }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/concepts/box_concept.hpp b/contrib/restricted/boost/boost/geometry/geometries/concepts/box_concept.hpp
deleted file mode 100644
index 816a90f63e5..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/concepts/box_concept.hpp
+++ /dev/null
@@ -1,136 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_BOX_CONCEPT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_BOX_CONCEPT_HPP
-
-
-#include <cstddef>
-
-#include <boost/concept_check.hpp>
-
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
-\brief Box concept
-\ingroup concepts
-\par Formal definition:
-The box concept is defined as following:
-- there must be a specialization of traits::tag defining box_tag as type
-- there must be a specialization of traits::point_type to define the
- underlying point type (even if it does not consist of points, it should define
- this type, to indicate the points it can work with)
-- there must be a specialization of traits::indexed_access, per index
- (min_corner, max_corner) and per dimension, with two functions:
- - get to get a coordinate value
- - set to set a coordinate value (this one is not checked for ConstBox)
-*/
-template <typename Geometry>
-class Box
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename point_type<Geometry>::type point_type;
-
-
- template
- <
- std::size_t Index,
- std::size_t Dimension,
- std::size_t DimensionCount
- >
- struct dimension_checker
- {
- static void apply()
- {
- Geometry* b = 0;
- geometry::set<Index, Dimension>(*b, geometry::get<Index, Dimension>(*b));
- dimension_checker<Index, Dimension + 1, DimensionCount>::apply();
- }
- };
-
- template <std::size_t Index, std::size_t DimensionCount>
- struct dimension_checker<Index, DimensionCount, DimensionCount>
- {
- static void apply() {}
- };
-
-public :
- BOOST_CONCEPT_USAGE(Box)
- {
- static const std::size_t n = dimension<Geometry>::type::value;
- dimension_checker<min_corner, 0, n>::apply();
- dimension_checker<max_corner, 0, n>::apply();
- }
-#endif
-};
-
-
-/*!
-\brief Box concept (const version)
-\ingroup const_concepts
-\details The ConstBox concept apply the same as the Box concept,
-but does not apply write access.
-*/
-template <typename Geometry>
-class ConstBox
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename point_type<Geometry>::type point_type;
- typedef typename coordinate_type<Geometry>::type coordinate_type;
-
- template
- <
- std::size_t Index,
- std::size_t Dimension,
- std::size_t DimensionCount
- >
- struct dimension_checker
- {
- static void apply()
- {
- const Geometry* b = 0;
- coordinate_type coord(geometry::get<Index, Dimension>(*b));
- boost::ignore_unused_variable_warning(coord);
- dimension_checker<Index, Dimension + 1, DimensionCount>::apply();
- }
- };
-
- template <std::size_t Index, std::size_t DimensionCount>
- struct dimension_checker<Index, DimensionCount, DimensionCount>
- {
- static void apply() {}
- };
-
-public :
- BOOST_CONCEPT_USAGE(ConstBox)
- {
- static const std::size_t n = dimension<Geometry>::type::value;
- dimension_checker<min_corner, 0, n>::apply();
- dimension_checker<max_corner, 0, n>::apply();
- }
-#endif
-};
-
-}}} // namespace boost::geometry::concepts
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_BOX_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/concepts/check.hpp b/contrib/restricted/boost/boost/geometry/geometries/concepts/check.hpp
deleted file mode 100644
index f609d5f1315..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/concepts/check.hpp
+++ /dev/null
@@ -1,243 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_CHECK_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_CHECK_HPP
-
-
-#include <boost/concept_check.hpp>
-#include <boost/concept/requires.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/box_concept.hpp>
-#include <boost/geometry/geometries/concepts/linestring_concept.hpp>
-#include <boost/geometry/geometries/concepts/multi_point_concept.hpp>
-#include <boost/geometry/geometries/concepts/multi_linestring_concept.hpp>
-#include <boost/geometry/geometries/concepts/multi_polygon_concept.hpp>
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-#include <boost/geometry/geometries/concepts/polygon_concept.hpp>
-#include <boost/geometry/geometries/concepts/ring_concept.hpp>
-#include <boost/geometry/geometries/concepts/segment_concept.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace concept_check
-{
-
-template <typename Concept>
-class check
-{
- BOOST_CONCEPT_ASSERT((Concept ));
-};
-
-}} // namespace detail::concept_check
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template
-<
- typename Geometry,
- typename GeometryTag = typename geometry::tag<Geometry>::type,
- bool IsConst = boost::is_const<Geometry>::type::value
->
-struct check : not_implemented<GeometryTag>
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, point_tag, true>
- : detail::concept_check::check<concepts::ConstPoint<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, point_tag, false>
- : detail::concept_check::check<concepts::Point<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, linestring_tag, true>
- : detail::concept_check::check<concepts::ConstLinestring<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, linestring_tag, false>
- : detail::concept_check::check<concepts::Linestring<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, ring_tag, true>
- : detail::concept_check::check<concepts::ConstRing<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, ring_tag, false>
- : detail::concept_check::check<concepts::Ring<Geometry> >
-{};
-
-template <typename Geometry>
-struct check<Geometry, polygon_tag, true>
- : detail::concept_check::check<concepts::ConstPolygon<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, polygon_tag, false>
- : detail::concept_check::check<concepts::Polygon<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, box_tag, true>
- : detail::concept_check::check<concepts::ConstBox<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, box_tag, false>
- : detail::concept_check::check<concepts::Box<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, segment_tag, true>
- : detail::concept_check::check<concepts::ConstSegment<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, segment_tag, false>
- : detail::concept_check::check<concepts::Segment<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, multi_point_tag, true>
- : detail::concept_check::check<concepts::ConstMultiPoint<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, multi_point_tag, false>
- : detail::concept_check::check<concepts::MultiPoint<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, multi_linestring_tag, true>
- : detail::concept_check::check<concepts::ConstMultiLinestring<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, multi_linestring_tag, false>
- : detail::concept_check::check<concepts::MultiLinestring<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, multi_polygon_tag, true>
- : detail::concept_check::check<concepts::ConstMultiPolygon<Geometry> >
-{};
-
-
-template <typename Geometry>
-struct check<Geometry, multi_polygon_tag, false>
- : detail::concept_check::check<concepts::MultiPolygon<Geometry> >
-{};
-
-
-} // namespace dispatch
-#endif
-
-
-
-
-namespace concepts
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-template <typename Geometry>
-struct checker : dispatch::check<Geometry>
-{};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct checker<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct checker<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const>
-{};
-
-
-}
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
- \brief Checks, in compile-time, the concept of any geometry
- \ingroup concepts
-*/
-template <typename Geometry>
-inline void check()
-{
- detail::checker<Geometry> c;
- boost::ignore_unused_variable_warning(c);
-}
-
-
-/*!
- \brief Checks, in compile-time, the concept of two geometries, and if they
- have equal dimensions
- \ingroup concepts
-*/
-template <typename Geometry1, typename Geometry2>
-inline void check_concepts_and_equal_dimensions()
-{
- check<Geometry1>();
- check<Geometry2>();
- assert_dimension_equal<Geometry1, Geometry2>();
-}
-
-
-} // namespace concepts
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_CHECK_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/concepts/linestring_concept.hpp b/contrib/restricted/boost/boost/geometry/geometries/concepts/linestring_concept.hpp
deleted file mode 100644
index 6775239d050..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/concepts/linestring_concept.hpp
+++ /dev/null
@@ -1,125 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_LINESTRING_CONCEPT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_LINESTRING_CONCEPT_HPP
-
-
-#include <boost/concept_check.hpp>
-#include <boost/range/concepts.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
-\brief Linestring concept
-\ingroup concepts
-\par Formal definition:
-The linestring concept is defined as following:
-- there must be a specialization of traits::tag defining linestring_tag as type
-- it must behave like a Boost.Range
-- it must implement a std::back_insert_iterator
- - either by implementing push_back
- - or by specializing std::back_insert_iterator
-
-\note to fulfill the concepts, no traits class has to be specialized to
-define the point type.
-
-\par Example:
-
-A custom linestring, defining the necessary specializations to fulfill to the concept.
-
-Suppose that the following linestring is defined:
-\dontinclude doxygen_5.cpp
-\skip custom_linestring1
-\until };
-
-It can then be adapted to the concept as following:
-\dontinclude doxygen_5.cpp
-\skip adapt custom_linestring1
-\until }}
-
-\note
-- There is also the registration macro BOOST_GEOMETRY_REGISTER_LINESTRING
-- For registration of std::vector<P> (and deque, and list) it is enough to
-include the header-file geometries/adapted/std_as_linestring.hpp. That registers
-a vector as a linestring (so it cannot be registered as a linear ring then,
-in the same source code).
-
-
-*/
-
-template <typename Geometry>
-class Linestring
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename point_type<Geometry>::type point_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::Point<point_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-public :
-
- BOOST_CONCEPT_USAGE(Linestring)
- {
- Geometry* ls = 0;
- traits::clear<Geometry>::apply(*ls);
- traits::resize<Geometry>::apply(*ls, 0);
- point_type* point = 0;
- traits::push_back<Geometry>::apply(*ls, *point);
- }
-#endif
-};
-
-
-/*!
-\brief Linestring concept (const version)
-\ingroup const_concepts
-\details The ConstLinestring concept check the same as the Linestring concept,
-but does not check write access.
-*/
-template <typename Geometry>
-class ConstLinestring
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename point_type<Geometry>::type point_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<point_type>) );
- //BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
- // Relaxed the concept.
- BOOST_CONCEPT_ASSERT( (boost::ForwardRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(ConstLinestring)
- {
- }
-#endif
-};
-
-}}} // namespace boost::geometry::concepts
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_LINESTRING_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/concepts/multi_linestring_concept.hpp b/contrib/restricted/boost/boost/geometry/geometries/concepts/multi_linestring_concept.hpp
deleted file mode 100644
index 7931670903f..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/concepts/multi_linestring_concept.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP
-
-
-#include <boost/concept_check.hpp>
-#include <boost/range/concepts.hpp>
-#include <boost/range/metafunctions.hpp>
-
-
-#include <boost/geometry/geometries/concepts/linestring_concept.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
-\brief multi-linestring concept
-\ingroup concepts
-\par Formal definition:
-The multi linestring concept is defined as following:
-- there must be a specialization of traits::tag defining multi_linestring_tag as
- type
-- it must behave like a Boost.Range
-- its range value must fulfil the Linestring concept
-
-*/
-template <typename Geometry>
-class MultiLinestring
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::range_value<Geometry>::type linestring_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::Linestring<linestring_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(MultiLinestring)
- {
- Geometry* mls = 0;
- traits::clear<Geometry>::apply(*mls);
- traits::resize<Geometry>::apply(*mls, 0);
- linestring_type* ls = 0;
- traits::push_back<Geometry>::apply(*mls, *ls);
- }
-#endif
-};
-
-
-/*!
-\brief concept for multi-linestring (const version)
-\ingroup const_concepts
-*/
-template <typename Geometry>
-class ConstMultiLinestring
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::range_value<Geometry>::type linestring_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::ConstLinestring<linestring_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(ConstMultiLinestring)
- {
- }
-#endif
-};
-
-}}} // namespace boost::geometry::concepts
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/concepts/multi_point_concept.hpp b/contrib/restricted/boost/boost/geometry/geometries/concepts/multi_point_concept.hpp
deleted file mode 100644
index 9e205f1635a..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/concepts/multi_point_concept.hpp
+++ /dev/null
@@ -1,90 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP
-
-
-#include <boost/concept_check.hpp>
-#include <boost/range/concepts.hpp>
-#include <boost/range/metafunctions.hpp>
-
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
-\brief MultiPoint concept
-\ingroup concepts
-\par Formal definition:
-The multi point concept is defined as following:
-- there must be a specialization of traits::tag defining multi_point_tag as type
-- it must behave like a Boost.Range
-- its range value must fulfil the Point concept
-
-*/
-template <typename Geometry>
-class MultiPoint
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::range_value<Geometry>::type point_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::Point<point_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(MultiPoint)
- {
- Geometry* mp = 0;
- traits::clear<Geometry>::apply(*mp);
- traits::resize<Geometry>::apply(*mp, 0);
- point_type* point = 0;
- traits::push_back<Geometry>::apply(*mp, *point);
- }
-#endif
-};
-
-
-/*!
-\brief concept for multi-point (const version)
-\ingroup const_concepts
-*/
-template <typename Geometry>
-class ConstMultiPoint
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::range_value<Geometry>::type point_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<point_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(ConstMultiPoint)
- {
- }
-#endif
-};
-
-}}} // namespace boost::geometry::concepts
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/concepts/multi_polygon_concept.hpp b/contrib/restricted/boost/boost/geometry/geometries/concepts/multi_polygon_concept.hpp
deleted file mode 100644
index 63de6e5bfca..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/concepts/multi_polygon_concept.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP
-
-
-#include <boost/concept_check.hpp>
-#include <boost/range/concepts.hpp>
-#include <boost/range/metafunctions.hpp>
-
-#include <boost/geometry/geometries/concepts/polygon_concept.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
-\brief multi-polygon concept
-\ingroup concepts
-\par Formal definition:
-The multi polygon concept is defined as following:
-- there must be a specialization of traits::tag defining multi_polygon_tag
- as type
-- it must behave like a Boost.Range
-- its range value must fulfil the Polygon concept
-
-*/
-template <typename Geometry>
-class MultiPolygon
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::range_value<Geometry>::type polygon_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::Polygon<polygon_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(MultiPolygon)
- {
- Geometry* mp = 0;
- traits::clear<Geometry>::apply(*mp);
- traits::resize<Geometry>::apply(*mp, 0);
- polygon_type* poly = 0;
- traits::push_back<Geometry>::apply(*mp, *poly);
- }
-#endif
-};
-
-
-/*!
-\brief concept for multi-polygon (const version)
-\ingroup const_concepts
-*/
-template <typename Geometry>
-class ConstMultiPolygon
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::range_value<Geometry>::type polygon_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::ConstPolygon<polygon_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(ConstMultiPolygon)
- {
- }
-#endif
-};
-
-
-}}} // namespace boost::geometry::concepts
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/concepts/point_concept.hpp b/contrib/restricted/boost/boost/geometry/geometries/concepts/point_concept.hpp
deleted file mode 100644
index 4001f4e06b7..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/concepts/point_concept.hpp
+++ /dev/null
@@ -1,192 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-//
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POINT_CONCEPT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POINT_CONCEPT_HPP
-
-#include <cstddef>
-
-#include <boost/concept_check.hpp>
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-/*!
-\brief Point concept.
-\ingroup concepts
-
-\par Formal definition:
-The point concept is defined as following:
-- there must be a specialization of traits::tag defining point_tag as type
-- there must be a specialization of traits::coordinate_type defining the type
- of its coordinates
-- there must be a specialization of traits::coordinate_system defining its
- coordinate system (cartesian, spherical, etc)
-- there must be a specialization of traits::dimension defining its number
- of dimensions (2, 3, ...) (derive it conveniently
- from boost::mpl::int_&lt;X&gt; for X-D)
-- there must be a specialization of traits::access, per dimension,
- with two functions:
- - \b get to get a coordinate value
- - \b set to set a coordinate value (this one is not checked for ConstPoint)
-- for non-Cartesian coordinate systems, the coordinate system's units
- must either be boost::geometry::degree or boost::geometry::radian
-
-
-\par Example:
-
-A legacy point, defining the necessary specializations to fulfil to the concept.
-
-Suppose that the following point is defined:
-\dontinclude doxygen_5.cpp
-\skip legacy_point1
-\until };
-
-It can then be adapted to the concept as following:
-\dontinclude doxygen_5.cpp
-\skip adapt legacy_point1
-\until }}
-
-Note that it is done like above to show the system. Users will normally use the registration macro.
-
-\par Example:
-
-A read-only legacy point, using a macro to fulfil to the ConstPoint concept.
-It cannot be modified by the library but can be used in all algorithms where
-points are not modified.
-
-The point looks like the following:
-
-\dontinclude doxygen_5.cpp
-\skip legacy_point2
-\until };
-
-It uses the macro as following:
-\dontinclude doxygen_5.cpp
-\skip adapt legacy_point2
-\until end adaptation
-
-*/
-
-template <typename Geometry>
-class Point
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-
- typedef typename coordinate_type<Geometry>::type ctype;
- typedef typename coordinate_system<Geometry>::type csystem;
-
- // The following enum is used to fully instantiate the coordinate
- // system class; this is needed in order to check the units passed
- // to it for non-Cartesian coordinate systems.
- enum { cs_check = sizeof(csystem) };
-
- enum { ccount = dimension<Geometry>::value };
-
- template <typename P, std::size_t Dimension, std::size_t DimensionCount>
- struct dimension_checker
- {
- static void apply()
- {
- P* p = 0;
- geometry::set<Dimension>(*p, geometry::get<Dimension>(*p));
- dimension_checker<P, Dimension+1, DimensionCount>::apply();
- }
- };
-
-
- template <typename P, std::size_t DimensionCount>
- struct dimension_checker<P, DimensionCount, DimensionCount>
- {
- static void apply() {}
- };
-
-public:
-
- /// BCCL macro to apply the Point concept
- BOOST_CONCEPT_USAGE(Point)
- {
- dimension_checker<Geometry, 0, ccount>::apply();
- }
-#endif
-};
-
-
-/*!
-\brief point concept (const version).
-
-\ingroup const_concepts
-
-\details The ConstPoint concept apply the same as the Point concept,
-but does not apply write access.
-
-*/
-template <typename Geometry>
-class ConstPoint
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-
- typedef typename coordinate_type<Geometry>::type ctype;
- typedef typename coordinate_system<Geometry>::type csystem;
-
- // The following enum is used to fully instantiate the coordinate
- // system class; this is needed in order to check the units passed
- // to it for non-Cartesian coordinate systems.
- enum { cs_check = sizeof(csystem) };
-
- enum { ccount = dimension<Geometry>::value };
-
- template <typename P, std::size_t Dimension, std::size_t DimensionCount>
- struct dimension_checker
- {
- static void apply()
- {
- const P* p = 0;
- ctype coord(geometry::get<Dimension>(*p));
- boost::ignore_unused(p, coord);
- dimension_checker<P, Dimension+1, DimensionCount>::apply();
- }
- };
-
-
- template <typename P, std::size_t DimensionCount>
- struct dimension_checker<P, DimensionCount, DimensionCount>
- {
- static void apply() {}
- };
-
-public:
-
- /// BCCL macro to apply the ConstPoint concept
- BOOST_CONCEPT_USAGE(ConstPoint)
- {
- dimension_checker<Geometry, 0, ccount>::apply();
- }
-#endif
-};
-
-}}} // namespace boost::geometry::concepts
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POINT_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/concepts/polygon_concept.hpp b/contrib/restricted/boost/boost/geometry/geometries/concepts/polygon_concept.hpp
deleted file mode 100644
index 58b780009b1..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/concepts/polygon_concept.hpp
+++ /dev/null
@@ -1,135 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POLYGON_CONCEPT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POLYGON_CONCEPT_HPP
-
-#include <boost/concept_check.hpp>
-#include <boost/range/concepts.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-#include <boost/geometry/geometries/concepts/ring_concept.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-/*!
-\brief Checks polygon concept
-\ingroup concepts
-*/
-template <typename PolygonType>
-class Polygon
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename boost::remove_const<PolygonType>::type polygon_type;
-
- typedef typename traits::ring_const_type<polygon_type>::type ring_const_type;
- typedef typename traits::ring_mutable_type<polygon_type>::type ring_mutable_type;
- typedef typename traits::interior_const_type<polygon_type>::type interior_const_type;
- typedef typename traits::interior_mutable_type<polygon_type>::type interior_mutable_type;
-
- typedef typename point_type<PolygonType>::type point_type;
- typedef typename ring_type<PolygonType>::type ring_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::Point<point_type>) );
- BOOST_CONCEPT_ASSERT( (concepts::Ring<ring_type>) );
-
- //BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<interior_type>) );
-
- struct checker
- {
- static inline void apply()
- {
- polygon_type* poly = 0;
- polygon_type const* cpoly = poly;
-
- ring_mutable_type e = traits::exterior_ring<PolygonType>::get(*poly);
- interior_mutable_type i = traits::interior_rings<PolygonType>::get(*poly);
- ring_const_type ce = traits::exterior_ring<PolygonType>::get(*cpoly);
- interior_const_type ci = traits::interior_rings<PolygonType>::get(*cpoly);
-
- boost::ignore_unused_variable_warning(e);
- boost::ignore_unused_variable_warning(i);
- boost::ignore_unused_variable_warning(ce);
- boost::ignore_unused_variable_warning(ci);
- boost::ignore_unused_variable_warning(poly);
- boost::ignore_unused_variable_warning(cpoly);
- }
- };
-
-public:
-
- BOOST_CONCEPT_USAGE(Polygon)
- {
- checker::apply();
- }
-#endif
-};
-
-
-/*!
-\brief Checks polygon concept (const version)
-\ingroup const_concepts
-*/
-template <typename PolygonType>
-class ConstPolygon
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-
- typedef typename boost::remove_const<PolygonType>::type const_polygon_type;
-
- typedef typename traits::ring_const_type<const_polygon_type>::type ring_const_type;
- typedef typename traits::interior_const_type<const_polygon_type>::type interior_const_type;
-
- typedef typename point_type<const_polygon_type>::type point_type;
- typedef typename ring_type<const_polygon_type>::type ring_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<point_type>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstRing<ring_type>) );
-
- ////BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<interior_type>) );
-
- struct checker
- {
- static inline void apply()
- {
- const_polygon_type const* cpoly = 0;
-
- ring_const_type ce = traits::exterior_ring<const_polygon_type>::get(*cpoly);
- interior_const_type ci = traits::interior_rings<const_polygon_type>::get(*cpoly);
-
- boost::ignore_unused_variable_warning(ce);
- boost::ignore_unused_variable_warning(ci);
- boost::ignore_unused_variable_warning(cpoly);
- }
- };
-
-public:
-
- BOOST_CONCEPT_USAGE(ConstPolygon)
- {
- checker::apply();
- }
-#endif
-};
-
-}}} // namespace boost::geometry::concepts
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_POLYGON_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/concepts/ring_concept.hpp b/contrib/restricted/boost/boost/geometry/geometries/concepts/ring_concept.hpp
deleted file mode 100644
index d75d4284383..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/concepts/ring_concept.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_RING_CONCEPT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_RING_CONCEPT_HPP
-
-
-#include <boost/concept_check.hpp>
-#include <boost/range/concepts.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
-\brief ring concept
-\ingroup concepts
-\par Formal definition:
-The ring concept is defined as following:
-- there must be a specialization of traits::tag defining ring_tag as type
-- it must behave like a Boost.Range
-- there can optionally be a specialization of traits::point_order defining the
- order or orientation of its points, clockwise or counterclockwise.
-- it must implement a std::back_insert_iterator
- (This is the same as the for the concept Linestring, and described there)
-
-\note to fulfill the concepts, no traits class has to be specialized to
-define the point type.
-*/
-template <typename Geometry>
-class Ring
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename point_type<Geometry>::type point_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::Point<point_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-public :
-
- BOOST_CONCEPT_USAGE(Ring)
- {
- Geometry* ring = 0;
- traits::clear<Geometry>::apply(*ring);
- traits::resize<Geometry>::apply(*ring, 0);
- point_type* point = 0;
- traits::push_back<Geometry>::apply(*ring, *point);
- }
-#endif
-};
-
-
-/*!
-\brief (linear) ring concept (const version)
-\ingroup const_concepts
-\details The ConstLinearRing concept check the same as the Geometry concept,
-but does not check write access.
-*/
-template <typename Geometry>
-class ConstRing
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename point_type<Geometry>::type point_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<point_type>) );
- BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) );
-
-
-public :
-
- BOOST_CONCEPT_USAGE(ConstRing)
- {
- }
-#endif
-};
-
-}}} // namespace boost::geometry::concepts
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_RING_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/concepts/segment_concept.hpp b/contrib/restricted/boost/boost/geometry/geometries/concepts/segment_concept.hpp
deleted file mode 100644
index 6a1c80486ff..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/concepts/segment_concept.hpp
+++ /dev/null
@@ -1,135 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_SEGMENT_CONCEPT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_SEGMENT_CONCEPT_HPP
-
-
-#include <boost/concept_check.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
-\brief Segment concept.
-\ingroup concepts
-\details Formal definition:
-The segment concept is defined as following:
-- there must be a specialization of traits::tag defining segment_tag as type
-- there must be a specialization of traits::point_type to define the
- underlying point type (even if it does not consist of points, it should define
- this type, to indicate the points it can work with)
-- there must be a specialization of traits::indexed_access, per index
- and per dimension, with two functions:
- - get to get a coordinate value
- - set to set a coordinate value (this one is not checked for ConstSegment)
-
-\note The segment concept is similar to the box concept, defining another tag.
-However, the box concept assumes the index as min_corner, max_corner, while
-for the segment concept there is no assumption.
-*/
-template <typename Geometry>
-class Segment
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename point_type<Geometry>::type point_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::Point<point_type>) );
-
-
- template <size_t Index, size_t Dimension, size_t DimensionCount>
- struct dimension_checker
- {
- static void apply()
- {
- Geometry* s = 0;
- geometry::set<Index, Dimension>(*s, geometry::get<Index, Dimension>(*s));
- dimension_checker<Index, Dimension + 1, DimensionCount>::apply();
- }
- };
-
- template <size_t Index, size_t DimensionCount>
- struct dimension_checker<Index, DimensionCount, DimensionCount>
- {
- static void apply() {}
- };
-
-public :
-
- BOOST_CONCEPT_USAGE(Segment)
- {
- static const size_t n = dimension<point_type>::type::value;
- dimension_checker<0, 0, n>::apply();
- dimension_checker<1, 0, n>::apply();
- }
-#endif
-};
-
-
-/*!
-\brief Segment concept (const version).
-\ingroup const_concepts
-\details The ConstSegment concept verifies the same as the Segment concept,
-but does not verify write access.
-*/
-template <typename Geometry>
-class ConstSegment
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
- typedef typename point_type<Geometry>::type point_type;
- typedef typename coordinate_type<Geometry>::type coordinate_type;
-
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<point_type>) );
-
-
- template <size_t Index, size_t Dimension, size_t DimensionCount>
- struct dimension_checker
- {
- static void apply()
- {
- const Geometry* s = 0;
- coordinate_type coord(geometry::get<Index, Dimension>(*s));
- boost::ignore_unused_variable_warning(coord);
- dimension_checker<Index, Dimension + 1, DimensionCount>::apply();
- }
- };
-
- template <size_t Index, size_t DimensionCount>
- struct dimension_checker<Index, DimensionCount, DimensionCount>
- {
- static void apply() {}
- };
-
-public :
-
- BOOST_CONCEPT_USAGE(ConstSegment)
- {
- static const size_t n = dimension<point_type>::type::value;
- dimension_checker<0, 0, n>::apply();
- dimension_checker<1, 0, n>::apply();
- }
-#endif
-};
-
-
-}}} // namespace boost::geometry::concepts
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_SEGMENT_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/geometries.hpp b/contrib/restricted/boost/boost/geometry/geometries/geometries.hpp
deleted file mode 100644
index de9e2b1fd95..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/geometries.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_HPP
-
-#include <boost/geometry/geometries/point.hpp>
-#include <boost/geometry/geometries/linestring.hpp>
-#include <boost/geometry/geometries/polygon.hpp>
-
-#include <boost/geometry/geometries/multi_point.hpp>
-#include <boost/geometry/geometries/multi_linestring.hpp>
-#include <boost/geometry/geometries/multi_polygon.hpp>
-
-#include <boost/geometry/geometries/box.hpp>
-#include <boost/geometry/geometries/ring.hpp>
-#include <boost/geometry/geometries/segment.hpp>
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/helper_geometry.hpp b/contrib/restricted/boost/boost/geometry/geometries/helper_geometry.hpp
deleted file mode 100644
index f3102fee936..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/helper_geometry.hpp
+++ /dev/null
@@ -1,173 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_GEOMETRIES_HELPER_GEOMETRY_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_HELPER_GEOMETRY_HPP
-
-#include <boost/mpl/assert.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/box.hpp>
-#include <boost/geometry/geometries/point.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace detail { namespace helper_geometries
-{
-
-template <typename Geometry, typename CS_Tag = typename cs_tag<Geometry>::type>
-struct default_units
-{
- typedef typename coordinate_system<Geometry>::type::units type;
-};
-
-// The Cartesian coordinate system does not define the type units.
-// For that reason the generic implementation for default_units cannot be used
-// and specialization needs to be defined.
-// Moreover, it makes sense to define the units for the Cartesian
-// coordinate system to be radians, as this way a Cartesian point can
-// potentially be used in algorithms taking non-Cartesian strategies
-// and work as if it was as point in the non-Cartesian coordinate
-// system with radian units.
-template <typename Geometry>
-struct default_units<Geometry, cartesian_tag>
-{
- typedef radian type;
-};
-
-
-template <typename Units, typename CS_Tag>
-struct cs_tag_to_coordinate_system
-{
- BOOST_MPL_ASSERT_MSG((false),
- NOT_IMPLEMENTED_FOR_THIS_COORDINATE_SYSTEM,
- (types<CS_Tag>));
-};
-
-template <typename Units>
-struct cs_tag_to_coordinate_system<Units, cartesian_tag>
-{
- typedef cs::cartesian type;
-};
-
-template <typename Units>
-struct cs_tag_to_coordinate_system<Units, spherical_equatorial_tag>
-{
- typedef cs::spherical_equatorial<Units> type;
-};
-
-template <typename Units>
-struct cs_tag_to_coordinate_system<Units, spherical_polar_tag>
-{
- typedef cs::spherical<Units> type;
-};
-
-template <typename Units>
-struct cs_tag_to_coordinate_system<Units, geographic_tag>
-{
- typedef cs::geographic<Units> type;
-};
-
-
-template
-<
- typename Point,
- typename NewCoordinateType,
- typename NewUnits,
- typename CS_Tag = typename cs_tag<Point>::type
->
-struct helper_point
-{
- typedef model::point
- <
- NewCoordinateType,
- dimension<Point>::value,
- typename cs_tag_to_coordinate_system<NewUnits, CS_Tag>::type
- > type;
-};
-
-
-}} // detail::helper_geometries
-
-
-namespace detail_dispatch
-{
-
-
-template
-<
- typename Geometry,
- typename NewCoordinateType,
- typename NewUnits,
- typename Tag = typename tag<Geometry>::type>
-struct helper_geometry : not_implemented<Geometry>
-{};
-
-
-template <typename Point, typename NewCoordinateType, typename NewUnits>
-struct helper_geometry<Point, NewCoordinateType, NewUnits, point_tag>
-{
- typedef typename detail::helper_geometries::helper_point
- <
- Point, NewCoordinateType, NewUnits
- >::type type;
-};
-
-
-template <typename Box, typename NewCoordinateType, typename NewUnits>
-struct helper_geometry<Box, NewCoordinateType, NewUnits, box_tag>
-{
- typedef model::box
- <
- typename helper_geometry
- <
- typename point_type<Box>::type, NewCoordinateType, NewUnits
- >::type
- > type;
-};
-
-
-} // detail_dispatch
-
-
-// Meta-function that provides a new helper geometry of the same kind as
-// the input geometry and the same coordinate system type,
-// but with a possibly different coordinate type and coordinate system units
-template
-<
- typename Geometry,
- typename NewCoordinateType = typename coordinate_type<Geometry>::type,
- typename NewUnits = typename detail::helper_geometries::default_units
- <
- Geometry
- >::type
->
-struct helper_geometry
-{
- typedef typename detail_dispatch::helper_geometry
- <
- Geometry, NewCoordinateType, NewUnits
- >::type type;
-};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_HELPER_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/linestring.hpp b/contrib/restricted/boost/boost/geometry/geometries/linestring.hpp
deleted file mode 100644
index 280c4be7a69..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/linestring.hpp
+++ /dev/null
@@ -1,123 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_LINESTRING_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_LINESTRING_HPP
-
-#include <memory>
-#include <vector>
-
-#include <boost/concept/assert.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-#include <boost/config.hpp>
-#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-#include <initializer_list>
-#endif
-
-namespace boost { namespace geometry
-{
-
-namespace model
-{
-
-/*!
-\brief A linestring (named so by OGC) is a collection (default a vector) of points.
-\ingroup geometries
-\tparam Point \tparam_point
-\tparam Container \tparam_container
-\tparam Allocator \tparam_allocator
-
-\qbk{[include reference/geometries/linestring.qbk]}
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_linestring Linestring Concept]
-}
-
-*/
-template
-<
- typename Point,
- template<typename,typename> class Container = std::vector,
- template<typename> class Allocator = std::allocator
->
-class linestring : public Container<Point, Allocator<Point> >
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
-
- typedef Container<Point, Allocator<Point> > base_type;
-
-public :
- /// \constructor_default{linestring}
- inline linestring()
- : base_type()
- {}
-
- /// \constructor_begin_end{linestring}
- template <typename Iterator>
- inline linestring(Iterator begin, Iterator end)
- : base_type(begin, end)
- {}
-
-#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-
- /// \constructor_initializer_list{linestring}
- inline linestring(std::initializer_list<Point> l)
- : base_type(l.begin(), l.end())
- {}
-
-// Commented out for now in order to support Boost.Assign
-// Without this assignment operator first the object should be created
-// from initializer list, then it should be moved.
-//// Without this workaround in MSVC the assignment operator is ambiguous
-//#ifndef BOOST_MSVC
-// /// \assignment_initializer_list{linestring}
-// inline linestring & operator=(std::initializer_list<Point> l)
-// {
-// base_type::assign(l.begin(), l.end());
-// return *this;
-// }
-//#endif
-
-#endif
-};
-
-} // namespace model
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
- typename Point,
- template<typename,typename> class Container,
- template<typename> class Allocator
->
-struct tag<model::linestring<Point, Container, Allocator> >
-{
- typedef linestring_tag type;
-};
-} // namespace traits
-
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_LINESTRING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/multi_linestring.hpp b/contrib/restricted/boost/boost/geometry/geometries/multi_linestring.hpp
deleted file mode 100644
index 67003522b0d..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/multi_linestring.hpp
+++ /dev/null
@@ -1,119 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_MULTI_LINESTRING_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_MULTI_LINESTRING_HPP
-
-#include <memory>
-#include <vector>
-
-#include <boost/concept/requires.hpp>
-
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/geometries/concepts/linestring_concept.hpp>
-
-#include <boost/config.hpp>
-#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-#include <initializer_list>
-#endif
-
-namespace boost { namespace geometry
-{
-
-
-namespace model
-{
-
-/*!
-\brief multi_line, a collection of linestring
-\details Multi-linestring can be used to group lines belonging to each other,
- e.g. a highway (with interruptions)
-\ingroup geometries
-
-\qbk{[include reference/geometries/multi_linestring.qbk]}
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_multi_linestring MultiLineString Concept]
-}
-*/
-template
-<
- typename LineString,
- template<typename, typename> class Container = std::vector,
- template<typename> class Allocator = std::allocator
->
-class multi_linestring : public Container<LineString, Allocator<LineString> >
-{
- BOOST_CONCEPT_ASSERT( (concepts::Linestring<LineString>) );
-
-#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-
- // default constructor and base_type definitions are required only
- // if the constructor taking std::initializer_list is defined
-
- typedef Container<LineString, Allocator<LineString> > base_type;
-
-public:
- /// \constructor_default{multi_linestring}
- multi_linestring()
- : base_type()
- {}
-
- /// \constructor_initializer_list{multi_linestring}
- inline multi_linestring(std::initializer_list<LineString> l)
- : base_type(l.begin(), l.end())
- {}
-
-// Commented out for now in order to support Boost.Assign
-// Without this assignment operator first the object should be created
-// from initializer list, then it shoudl be moved.
-//// Without this workaround in MSVC the assignment operator is ambiguous
-//#ifndef BOOST_MSVC
-// /// \assignment_initializer_list{multi_linestring}
-// inline multi_linestring & operator=(std::initializer_list<LineString> l)
-// {
-// base_type::assign(l.begin(), l.end());
-// return *this;
-// }
-//#endif
-
-#endif
-};
-
-
-} // namespace model
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
- typename LineString,
- template<typename, typename> class Container,
- template<typename> class Allocator
->
-struct tag< model::multi_linestring<LineString, Container, Allocator> >
-{
- typedef multi_linestring_tag type;
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_MULTI_LINESTRING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/multi_point.hpp b/contrib/restricted/boost/boost/geometry/geometries/multi_point.hpp
deleted file mode 100644
index 9579f4f602b..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/multi_point.hpp
+++ /dev/null
@@ -1,123 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_MULTI_POINT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_MULTI_POINT_HPP
-
-#include <memory>
-#include <vector>
-
-#include <boost/concept/requires.hpp>
-
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-#include <boost/config.hpp>
-#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-#include <initializer_list>
-#endif
-
-namespace boost { namespace geometry
-{
-
-namespace model
-{
-
-
-/*!
-\brief multi_point, a collection of points
-\ingroup geometries
-\tparam Point \tparam_point
-\tparam Container \tparam_container
-\tparam Allocator \tparam_allocator
-\details Multipoint can be used to group points belonging to each other,
- e.g. a constellation, or the result set of an intersection
-
-\qbk{[include reference/geometries/multi_point.qbk]}
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_multi_point MultiPoint Concept]
-}
-*/
-template
-<
- typename Point,
- template<typename, typename> class Container = std::vector,
- template<typename> class Allocator = std::allocator
->
-class multi_point : public Container<Point, Allocator<Point> >
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
-
- typedef Container<Point, Allocator<Point> > base_type;
-
-public :
- /// \constructor_default{multi_point}
- inline multi_point()
- : base_type()
- {}
-
- /// \constructor_begin_end{multi_point}
- template <typename Iterator>
- inline multi_point(Iterator begin, Iterator end)
- : base_type(begin, end)
- {}
-
-#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-
- /// \constructor_initializer_list{multi_point}
- inline multi_point(std::initializer_list<Point> l)
- : base_type(l.begin(), l.end())
- {}
-
-// Commented out for now in order to support Boost.Assign
-// Without this assignment operator first the object should be created
-// from initializer list, then it shoudl be moved.
-//// Without this workaround in MSVC the assignment operator is ambiguous
-//#ifndef BOOST_MSVC
-// /// \assignment_initializer_list{multi_point}
-// inline multi_point & operator=(std::initializer_list<Point> l)
-// {
-// base_type::assign(l.begin(), l.end());
-// return *this;
-// }
-//#endif
-
-#endif
-};
-
-} // namespace model
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
- typename Point,
- template<typename, typename> class Container,
- template<typename> class Allocator
->
-struct tag< model::multi_point<Point, Container, Allocator> >
-{
- typedef multi_point_tag type;
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_MULTI_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/multi_polygon.hpp b/contrib/restricted/boost/boost/geometry/geometries/multi_polygon.hpp
deleted file mode 100644
index 94cd922719a..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/multi_polygon.hpp
+++ /dev/null
@@ -1,117 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_MULTI_POLYGON_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_MULTI_POLYGON_HPP
-
-#include <memory>
-#include <vector>
-
-#include <boost/concept/requires.hpp>
-
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/geometries/concepts/polygon_concept.hpp>
-
-#include <boost/config.hpp>
-#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-#include <initializer_list>
-#endif
-
-namespace boost { namespace geometry
-{
-
-namespace model
-{
-
-/*!
-\brief multi_polygon, a collection of polygons
-\details Multi-polygon can be used to group polygons belonging to each other,
- e.g. Hawaii
-\ingroup geometries
-
-\qbk{[include reference/geometries/multi_polygon.qbk]}
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_multi_polygon MultiPolygon Concept]
-}
-*/
-template
-<
- typename Polygon,
- template<typename, typename> class Container = std::vector,
- template<typename> class Allocator = std::allocator
->
-class multi_polygon : public Container<Polygon, Allocator<Polygon> >
-{
- BOOST_CONCEPT_ASSERT( (concepts::Polygon<Polygon>) );
-
-#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-
- // default constructor and base_type definitions are required only
- // if the constructor taking std::initializer_list is defined
-
- typedef Container<Polygon, Allocator<Polygon> > base_type;
-
-public:
- /// \constructor_default{multi_polygon}
- multi_polygon()
- : base_type()
- {}
-
- /// \constructor_initializer_list{multi_polygon}
- inline multi_polygon(std::initializer_list<Polygon> l)
- : base_type(l.begin(), l.end())
- {}
-
-// Commented out for now in order to support Boost.Assign
-// Without this assignment operator first the object should be created
-// from initializer list, then it shoudl be moved.
-//// Without this workaround in MSVC the assignment operator is ambiguous
-//#ifndef BOOST_MSVC
-// /// \assignment_initializer_list{multi_polygon}
-// inline multi_polygon & operator=(std::initializer_list<Polygon> l)
-// {
-// base_type::assign(l.begin(), l.end());
-// return *this;
-// }
-//#endif
-
-#endif
-};
-
-
-} // namespace model
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
- typename Polygon,
- template<typename, typename> class Container,
- template<typename> class Allocator
->
-struct tag< model::multi_polygon<Polygon, Container, Allocator> >
-{
- typedef multi_polygon_tag type;
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_MULTI_POLYGON_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/point.hpp b/contrib/restricted/boost/boost/geometry/geometries/point.hpp
deleted file mode 100644
index 70bfeed447b..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/point.hpp
+++ /dev/null
@@ -1,303 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_POINT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_POINT_HPP
-
-#include <cstddef>
-
-#include <boost/config.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/int.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
-#include <algorithm>
-#include <boost/geometry/core/assert.hpp>
-#endif
-
-namespace boost { namespace geometry
-{
-
-// Silence warning C4127: conditional expression is constant
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
-#endif
-
-
-namespace model
-{
-
-namespace detail
-{
-
-template <std::size_t DimensionCount, std::size_t Index>
-struct array_assign
-{
- template <typename T>
- static inline void apply(T values[], T const& value)
- {
- values[Index] = value;
- }
-};
-
-// Specialization avoiding assigning element [2] for only 2 dimensions
-template <> struct array_assign<2, 2>
-{
- template <typename T> static inline void apply(T [], T const& ) {}
-};
-
-// Specialization avoiding assigning elements for (rarely used) points in 1 dim
-template <> struct array_assign<1, 1>
-{
- template <typename T> static inline void apply(T [], T const& ) {}
-};
-
-template <> struct array_assign<1, 2>
-{
- template <typename T> static inline void apply(T [], T const& ) {}
-};
-
-}
-/*!
-\brief Basic point class, having coordinates defined in a neutral way
-\details Defines a neutral point class, fulfilling the Point Concept.
- Library users can use this point class, or use their own point classes.
- This point class is used in most of the samples and tests of Boost.Geometry
- This point class is used occasionally within the library, where a temporary
- point class is necessary.
-\ingroup geometries
-\tparam CoordinateType \tparam_numeric
-\tparam DimensionCount number of coordinates, usually 2 or 3
-\tparam CoordinateSystem coordinate system, for example cs::cartesian
-
-\qbk{[include reference/geometries/point.qbk]}
-\qbk{before.synopsis, [heading Model of]}
-\qbk{before.synopsis, [link geometry.reference.concepts.concept_point Point Concept]}
-
-
-*/
-template
-<
- typename CoordinateType,
- std::size_t DimensionCount,
- typename CoordinateSystem
->
-class point
-{
- BOOST_MPL_ASSERT_MSG((DimensionCount >= 1),
- DIMENSION_GREATER_THAN_ZERO_EXPECTED,
- (boost::mpl::int_<DimensionCount>));
-
- // The following enum is used to fully instantiate the
- // CoordinateSystem class and check the correctness of the units
- // passed for non-Cartesian coordinate systems.
- enum { cs_check = sizeof(CoordinateSystem) };
-
-public:
-
-#if !defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
-#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
- /// \constructor_default_no_init
- point() = default;
-#else
- /// \constructor_default_no_init
- inline point()
- {}
-#endif
-#else // defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- point()
- {
- m_created = 1;
- std::fill_n(m_values_initialized, DimensionCount, 0);
- }
- ~point()
- {
- m_created = 0;
- std::fill_n(m_values_initialized, DimensionCount, 0);
- }
-#endif
-
- /// @brief Constructor to set one value
- explicit inline point(CoordinateType const& v0)
- {
- detail::array_assign<DimensionCount, 0>::apply(m_values, v0);
- detail::array_assign<DimensionCount, 1>::apply(m_values, CoordinateType());
- detail::array_assign<DimensionCount, 2>::apply(m_values, CoordinateType());
-
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- m_created = 1;
- std::fill_n(m_values_initialized, (std::min)(std::size_t(3), DimensionCount), 1);
-#endif
- }
-
- /// @brief Constructor to set two values
- inline point(CoordinateType const& v0, CoordinateType const& v1)
- {
- detail::array_assign<DimensionCount, 0>::apply(m_values, v0);
- detail::array_assign<DimensionCount, 1>::apply(m_values, v1);
- detail::array_assign<DimensionCount, 2>::apply(m_values, CoordinateType());
-
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- m_created = 1;
- std::fill_n(m_values_initialized, (std::min)(std::size_t(3), DimensionCount), 1);
-#endif
- }
-
- /// @brief Constructor to set three values
- inline point(CoordinateType const& v0, CoordinateType const& v1,
- CoordinateType const& v2)
- {
- detail::array_assign<DimensionCount, 0>::apply(m_values, v0);
- detail::array_assign<DimensionCount, 1>::apply(m_values, v1);
- detail::array_assign<DimensionCount, 2>::apply(m_values, v2);
-
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- m_created = 1;
- std::fill_n(m_values_initialized, (std::min)(std::size_t(3), DimensionCount), 1);
-#endif
- }
-
- /// @brief Get a coordinate
- /// @tparam K coordinate to get
- /// @return the coordinate
- template <std::size_t K>
- inline CoordinateType const& get() const
- {
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- BOOST_GEOMETRY_ASSERT(m_created == 1);
- BOOST_GEOMETRY_ASSERT(m_values_initialized[K] == 1);
-#endif
- BOOST_STATIC_ASSERT(K < DimensionCount);
- return m_values[K];
- }
-
- /// @brief Set a coordinate
- /// @tparam K coordinate to set
- /// @param value value to set
- template <std::size_t K>
- inline void set(CoordinateType const& value)
- {
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- BOOST_GEOMETRY_ASSERT(m_created == 1);
- m_values_initialized[K] = 1;
-#endif
- BOOST_STATIC_ASSERT(K < DimensionCount);
- m_values[K] = value;
- }
-
-private:
-
- CoordinateType m_values[DimensionCount];
-
-#if defined(BOOST_GEOMETRY_ENABLE_ACCESS_DEBUGGING)
- int m_created;
- int m_values_initialized[DimensionCount];
-#endif
-};
-
-
-} // namespace model
-
-// Adapt the point to the concept
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-template
-<
- typename CoordinateType,
- std::size_t DimensionCount,
- typename CoordinateSystem
->
-struct tag<model::point<CoordinateType, DimensionCount, CoordinateSystem> >
-{
- typedef point_tag type;
-};
-
-template
-<
- typename CoordinateType,
- std::size_t DimensionCount,
- typename CoordinateSystem
->
-struct coordinate_type<model::point<CoordinateType, DimensionCount, CoordinateSystem> >
-{
- typedef CoordinateType type;
-};
-
-template
-<
- typename CoordinateType,
- std::size_t DimensionCount,
- typename CoordinateSystem
->
-struct coordinate_system<model::point<CoordinateType, DimensionCount, CoordinateSystem> >
-{
- typedef CoordinateSystem type;
-};
-
-template
-<
- typename CoordinateType,
- std::size_t DimensionCount,
- typename CoordinateSystem
->
-struct dimension<model::point<CoordinateType, DimensionCount, CoordinateSystem> >
- : boost::mpl::int_<DimensionCount>
-{};
-
-template
-<
- typename CoordinateType,
- std::size_t DimensionCount,
- typename CoordinateSystem,
- std::size_t Dimension
->
-struct access<model::point<CoordinateType, DimensionCount, CoordinateSystem>, Dimension>
-{
- static inline CoordinateType get(
- model::point<CoordinateType, DimensionCount, CoordinateSystem> const& p)
- {
- return p.template get<Dimension>();
- }
-
- static inline void set(
- model::point<CoordinateType, DimensionCount, CoordinateSystem>& p,
- CoordinateType const& value)
- {
- p.template set<Dimension>(value);
- }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/point_xy.hpp b/contrib/restricted/boost/boost/geometry/geometries/point_xy.hpp
deleted file mode 100644
index bbc35d5cecb..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/point_xy.hpp
+++ /dev/null
@@ -1,134 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_POINT_XY_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_POINT_XY_HPP
-
-#include <cstddef>
-
-#include <boost/config.hpp>
-#include <boost/mpl/int.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/geometries/point.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace model { namespace d2
-{
-
-/*!
-\brief 2D point in Cartesian coordinate system
-\tparam CoordinateType numeric type, for example, double, float, int
-\tparam CoordinateSystem coordinate system, defaults to cs::cartesian
-
-\qbk{[include reference/geometries/point_xy.qbk]}
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_point Point Concept]
-}
-
-\qbk{[include reference/geometries/point_assign_warning.qbk]}
-
-*/
-template<typename CoordinateType, typename CoordinateSystem = cs::cartesian>
-class point_xy : public model::point<CoordinateType, 2, CoordinateSystem>
-{
-public:
-
-#ifndef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
- /// \constructor_default_no_init
- point_xy() = default;
-#else
- /// \constructor_default_no_init
- inline point_xy()
- {}
-#endif
-
- /// Constructor with x/y values
- inline point_xy(CoordinateType const& x, CoordinateType const& y)
- : model::point<CoordinateType, 2, CoordinateSystem>(x, y)
- {}
-
- /// Get x-value
- inline CoordinateType const& x() const
- { return this->template get<0>(); }
-
- /// Get y-value
- inline CoordinateType const& y() const
- { return this->template get<1>(); }
-
- /// Set x-value
- inline void x(CoordinateType const& v)
- { this->template set<0>(v); }
-
- /// Set y-value
- inline void y(CoordinateType const& v)
- { this->template set<1>(v); }
-};
-
-
-}} // namespace model::d2
-
-
-// Adapt the point_xy to the concept
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename CoordinateType, typename CoordinateSystem>
-struct tag<model::d2::point_xy<CoordinateType, CoordinateSystem> >
-{
- typedef point_tag type;
-};
-
-template<typename CoordinateType, typename CoordinateSystem>
-struct coordinate_type<model::d2::point_xy<CoordinateType, CoordinateSystem> >
-{
- typedef CoordinateType type;
-};
-
-template<typename CoordinateType, typename CoordinateSystem>
-struct coordinate_system<model::d2::point_xy<CoordinateType, CoordinateSystem> >
-{
- typedef CoordinateSystem type;
-};
-
-template<typename CoordinateType, typename CoordinateSystem>
-struct dimension<model::d2::point_xy<CoordinateType, CoordinateSystem> >
- : boost::mpl::int_<2>
-{};
-
-template<typename CoordinateType, typename CoordinateSystem, std::size_t Dimension>
-struct access<model::d2::point_xy<CoordinateType, CoordinateSystem>, Dimension >
-{
- static inline CoordinateType get(
- model::d2::point_xy<CoordinateType, CoordinateSystem> const& p)
- {
- return p.template get<Dimension>();
- }
-
- static inline void set(model::d2::point_xy<CoordinateType, CoordinateSystem>& p,
- CoordinateType const& value)
- {
- p.template set<Dimension>(value);
- }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_POINT_XY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/pointing_segment.hpp b/contrib/restricted/boost/boost/geometry/geometries/pointing_segment.hpp
deleted file mode 100644
index f865a8a8c10..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/pointing_segment.hpp
+++ /dev/null
@@ -1,142 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_GEOMETRIES_POINTING_SEGMENT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_POINTING_SEGMENT_HPP
-
-#include <cstddef>
-
-#include <boost/concept/assert.hpp>
-#include <boost/core/addressof.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_const.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace model
-{
-
-// const or non-const segment type that is meant to be
-// * default constructible
-// * copy constructible
-// * assignable
-// referring_segment does not fit these requirements, hence the
-// pointing_segment class
-//
-// this class is used by the segment_iterator as its value type
-template <typename ConstOrNonConstPoint>
-class pointing_segment
-{
- BOOST_CONCEPT_ASSERT( (
- typename boost::mpl::if_
- <
- boost::is_const<ConstOrNonConstPoint>,
- concepts::Point<ConstOrNonConstPoint>,
- concepts::ConstPoint<ConstOrNonConstPoint>
- >
- ) );
-
- typedef ConstOrNonConstPoint point_type;
-
-public:
- point_type* first;
- point_type* second;
-
- inline pointing_segment()
- : first(NULL)
- , second(NULL)
- {}
-
- inline pointing_segment(point_type const& p1, point_type const& p2)
- : first(boost::addressof(p1))
- , second(boost::addressof(p2))
- {}
-};
-
-
-} // namespace model
-
-
-// Traits specializations for segment above
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename Point>
-struct tag<model::pointing_segment<Point> >
-{
- typedef segment_tag type;
-};
-
-template <typename Point>
-struct point_type<model::pointing_segment<Point> >
-{
- typedef Point type;
-};
-
-template <typename Point, std::size_t Dimension>
-struct indexed_access<model::pointing_segment<Point>, 0, Dimension>
-{
- typedef model::pointing_segment<Point> segment_type;
- typedef typename geometry::coordinate_type
- <
- segment_type
- >::type coordinate_type;
-
- static inline coordinate_type get(segment_type const& s)
- {
- BOOST_GEOMETRY_ASSERT( s.first != NULL );
- return geometry::get<Dimension>(*s.first);
- }
-
- static inline void set(segment_type& s, coordinate_type const& value)
- {
- BOOST_GEOMETRY_ASSERT( s.first != NULL );
- geometry::set<Dimension>(*s.first, value);
- }
-};
-
-
-template <typename Point, std::size_t Dimension>
-struct indexed_access<model::pointing_segment<Point>, 1, Dimension>
-{
- typedef model::pointing_segment<Point> segment_type;
- typedef typename geometry::coordinate_type
- <
- segment_type
- >::type coordinate_type;
-
- static inline coordinate_type get(segment_type const& s)
- {
- BOOST_GEOMETRY_ASSERT( s.second != NULL );
- return geometry::get<Dimension>(*s.second);
- }
-
- static inline void set(segment_type& s, coordinate_type const& value)
- {
- BOOST_GEOMETRY_ASSERT( s.second != NULL );
- geometry::set<Dimension>(*s.second, value);
- }
-};
-
-
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_POINTING_SEGMENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/polygon.hpp b/contrib/restricted/boost/boost/geometry/geometries/polygon.hpp
deleted file mode 100644
index 76e76cef19e..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/polygon.hpp
+++ /dev/null
@@ -1,367 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2018 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_POLYGON_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_POLYGON_HPP
-
-#include <memory>
-#include <vector>
-
-#include <boost/concept/assert.hpp>
-
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-#include <boost/geometry/geometries/ring.hpp>
-
-#include <boost/config.hpp>
-#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-#include <initializer_list>
-#endif
-
-namespace boost { namespace geometry
-{
-
-namespace model
-{
-
-/*!
-\brief The polygon contains an outer ring and zero or more inner rings.
-\ingroup geometries
-\tparam Point point type
-\tparam ClockWise true for clockwise direction,
- false for CounterClockWise direction
-\tparam Closed true for closed polygons (last point == first point),
- false open points
-\tparam PointList container type for points,
- for example std::vector, std::deque
-\tparam RingList container type for inner rings,
- for example std::vector, std::deque
-\tparam PointAlloc container-allocator-type, for the points
-\tparam RingAlloc container-allocator-type, for the rings
-\note The container collecting the points in the rings can be different
- from the container collecting the inner rings. They all default to vector.
-
-\qbk{[include reference/geometries/polygon.qbk]}
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_polygon Polygon Concept]
-}
-
-
-*/
-template
-<
- typename Point,
- bool ClockWise = true,
- bool Closed = true,
- template<typename, typename> class PointList = std::vector,
- template<typename, typename> class RingList = std::vector,
- template<typename> class PointAlloc = std::allocator,
- template<typename> class RingAlloc = std::allocator
->
-class polygon
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
-
-public:
-
- // Member types
- typedef Point point_type;
- typedef ring<Point, ClockWise, Closed, PointList, PointAlloc> ring_type;
- typedef RingList<ring_type , RingAlloc<ring_type > > inner_container_type;
-
- inline ring_type const& outer() const { return m_outer; }
- inline inner_container_type const& inners() const { return m_inners; }
-
- inline ring_type& outer() { return m_outer; }
- inline inner_container_type & inners() { return m_inners; }
-
-#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-
- // default constructor definition is required only
- // if the constructor taking std::initializer_list is defined
-
- /// \constructor_default{polygon}
- inline polygon()
- : m_outer()
- , m_inners()
- {}
-
- /// \constructor_initializer_list{polygon}
- inline polygon(std::initializer_list<ring_type> l)
- : m_outer(l.size() > 0 ? *l.begin() : ring_type())
- , m_inners(l.size() > 0 ? l.begin() + 1 : l.begin(), l.end())
- {}
-
-// Commented out for now in order to support Boost.Assign
-// Without this assignment operator first the object should be created
-// from initializer list, then it shoudl be moved.
-//// Without this workaround in MSVC the assignment operator is ambiguous
-//#ifndef BOOST_MSVC
-// /// \assignment_initializer_list{polygon}
-// inline polygon & operator=(std::initializer_list<ring_type> l)
-// {
-// if ( l.size() > 0 )
-// {
-// m_outer = *l.begin();
-// m_inners.assign(l.begin() + 1, l.end());
-// }
-// else
-// {
-// m_outer.clear();
-// m_inners.clear();
-// }
-// return *this;
-// }
-//#endif
-
-#endif
-
- /// Utility method, clears outer and inner rings
- inline void clear()
- {
- m_outer.clear();
- m_inners.clear();
- }
-
-private:
-
- ring_type m_outer;
- inner_container_type m_inners;
-};
-
-
-} // namespace model
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
- typename Point,
- bool ClockWise, bool Closed,
- template<typename, typename> class PointList,
- template<typename, typename> class RingList,
- template<typename> class PointAlloc,
- template<typename> class RingAlloc
->
-struct tag
-<
- model::polygon
- <
- Point, ClockWise, Closed,
- PointList, RingList, PointAlloc, RingAlloc
- >
->
-{
- typedef polygon_tag type;
-};
-
-template
-<
- typename Point,
- bool ClockWise, bool Closed,
- template<typename, typename> class PointList,
- template<typename, typename> class RingList,
- template<typename> class PointAlloc,
- template<typename> class RingAlloc
->
-struct ring_const_type
-<
- model::polygon
- <
- Point, ClockWise, Closed,
- PointList, RingList, PointAlloc, RingAlloc
- >
->
-{
- typedef typename model::polygon
- <
- Point, ClockWise, Closed,
- PointList, RingList,
- PointAlloc, RingAlloc
- >::ring_type const& type;
-};
-
-
-template
-<
- typename Point,
- bool ClockWise, bool Closed,
- template<typename, typename> class PointList,
- template<typename, typename> class RingList,
- template<typename> class PointAlloc,
- template<typename> class RingAlloc
->
-struct ring_mutable_type
-<
- model::polygon
- <
- Point, ClockWise, Closed,
- PointList, RingList, PointAlloc, RingAlloc
- >
->
-{
- typedef typename model::polygon
- <
- Point, ClockWise, Closed,
- PointList, RingList,
- PointAlloc, RingAlloc
- >::ring_type& type;
-};
-
-template
-<
- typename Point,
- bool ClockWise, bool Closed,
- template<typename, typename> class PointList,
- template<typename, typename> class RingList,
- template<typename> class PointAlloc,
- template<typename> class RingAlloc
->
-struct interior_const_type
-<
- model::polygon
- <
- Point, ClockWise, Closed,
- PointList, RingList,
- PointAlloc, RingAlloc
- >
->
-{
- typedef typename model::polygon
- <
- Point, ClockWise, Closed,
- PointList, RingList,
- PointAlloc, RingAlloc
- >::inner_container_type const& type;
-};
-
-
-template
-<
- typename Point,
- bool ClockWise, bool Closed,
- template<typename, typename> class PointList,
- template<typename, typename> class RingList,
- template<typename> class PointAlloc,
- template<typename> class RingAlloc
->
-struct interior_mutable_type
-<
- model::polygon
- <
- Point, ClockWise, Closed,
- PointList, RingList,
- PointAlloc, RingAlloc
- >
->
-{
- typedef typename model::polygon
- <
- Point, ClockWise, Closed,
- PointList, RingList,
- PointAlloc, RingAlloc
- >::inner_container_type& type;
-};
-
-
-template
-<
- typename Point,
- bool ClockWise, bool Closed,
- template<typename, typename> class PointList,
- template<typename, typename> class RingList,
- template<typename> class PointAlloc,
- template<typename> class RingAlloc
->
-struct exterior_ring
-<
- model::polygon
- <
- Point, ClockWise, Closed,
- PointList, RingList, PointAlloc, RingAlloc
- >
->
-{
- typedef model::polygon
- <
- Point, ClockWise, Closed,
- PointList, RingList,
- PointAlloc, RingAlloc
- > polygon_type;
-
- static inline typename polygon_type::ring_type& get(polygon_type& p)
- {
- return p.outer();
- }
-
- static inline typename polygon_type::ring_type const& get(
- polygon_type const& p)
- {
- return p.outer();
- }
-};
-
-template
-<
- typename Point,
- bool ClockWise, bool Closed,
- template<typename, typename> class PointList,
- template<typename, typename> class RingList,
- template<typename> class PointAlloc,
- template<typename> class RingAlloc
->
-struct interior_rings
-<
- model::polygon
- <
- Point, ClockWise, Closed,
- PointList, RingList,
- PointAlloc, RingAlloc
- >
->
-{
- typedef model::polygon
- <
- Point, ClockWise, Closed, PointList, RingList,
- PointAlloc, RingAlloc
- > polygon_type;
-
- static inline typename polygon_type::inner_container_type& get(
- polygon_type& p)
- {
- return p.inners();
- }
-
- static inline typename polygon_type::inner_container_type const& get(
- polygon_type const& p)
- {
- return p.inners();
- }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_POLYGON_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/register/box.hpp b/contrib/restricted/boost/boost/geometry/geometries/register/box.hpp
deleted file mode 100644
index 71a7077a662..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/register/box.hpp
+++ /dev/null
@@ -1,179 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_REGISTER_BOX_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_BOX_HPP
-
-
-#ifndef DOXYGEN_NO_SPECIALIZATIONS
-
-
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS(Box, Point, MinCorner, MaxCorner) \
-template <size_t D> \
-struct indexed_access<Box, min_corner, D> \
-{ \
- typedef typename coordinate_type<Point>::type ct; \
- static inline ct get(Box const& b) \
- { return geometry::get<D>(b. MinCorner); } \
- static inline void set(Box& b, ct const& value) \
- { geometry::set<D>(b. MinCorner, value); } \
-}; \
-template <size_t D> \
-struct indexed_access<Box, max_corner, D> \
-{ \
- typedef typename coordinate_type<Point>::type ct; \
- static inline ct get(Box const& b) \
- { return geometry::get<D>(b. MaxCorner); } \
- static inline void set(Box& b, ct const& value) \
- { geometry::set<D>(b. MaxCorner, value); } \
-};
-
-
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS_TEMPLATED(Box, MinCorner, MaxCorner) \
-template <typename P, size_t D> \
-struct indexed_access<Box<P>, min_corner, D> \
-{ \
- typedef typename coordinate_type<P>::type ct; \
- static inline ct get(Box<P> const& b) \
- { return geometry::get<D>(b. MinCorner); } \
- static inline void set(Box<P>& b, ct const& value) \
- { geometry::set<D>(b. MinCorner, value); } \
-}; \
-template <typename P, size_t D> \
-struct indexed_access<Box<P>, max_corner, D> \
-{ \
- typedef typename coordinate_type<P>::type ct; \
- static inline ct get(Box<P> const& b) \
- { return geometry::get<D>(b. MaxCorner); } \
- static inline void set(Box<P>& b, ct const& value) \
- { geometry::set<D>(b. MaxCorner, value); } \
-};
-
-
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS_4VALUES(Box, Point, Left, Bottom, Right, Top) \
-template <> struct indexed_access<Box, min_corner, 0> \
-{ \
- typedef coordinate_type<Point>::type ct; \
- static inline ct get(Box const& b) { return b. Left; } \
- static inline void set(Box& b, ct const& value) { b. Left = value; } \
-}; \
-template <> struct indexed_access<Box, min_corner, 1> \
-{ \
- typedef coordinate_type<Point>::type ct; \
- static inline ct get(Box const& b) { return b. Bottom; } \
- static inline void set(Box& b, ct const& value) { b. Bottom = value; } \
-}; \
-template <> struct indexed_access<Box, max_corner, 0> \
-{ \
- typedef coordinate_type<Point>::type ct; \
- static inline ct get(Box const& b) { return b. Right; } \
- static inline void set(Box& b, ct const& value) { b. Right = value; } \
-}; \
-template <> struct indexed_access<Box, max_corner, 1> \
-{ \
- typedef coordinate_type<Point>::type ct; \
- static inline ct get(Box const& b) { return b. Top; } \
- static inline void set(Box& b, ct const& value) { b. Top = value; } \
-};
-
-
-
-
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS(Box, PointType) \
- template<> struct tag<Box > { typedef box_tag type; }; \
- template<> struct point_type<Box > { typedef PointType type; };
-
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS_TEMPLATED(Box) \
- template<typename P> struct tag<Box<P> > { typedef box_tag type; }; \
- template<typename P> struct point_type<Box<P> > { typedef P type; };
-
-#endif // DOXYGEN_NO_SPECIALIZATIONS
-
-
-
-/*!
-\brief \brief_macro{box}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_BOX, box} The
- box may contain template parameters, which must be specified then.
-\param Box \param_macro_type{Box}
-\param Point Point type on which box is based. Might be two or three-dimensional
-\param MinCorner minimum corner (should be public member or method)
-\param MaxCorner maximum corner (should be public member or method)
-
-\qbk{
-[heading Example]
-[register_box]
-[register_box_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_BOX(Box, Point, MinCorner, MaxCorner) \
-namespace boost { namespace geometry { namespace traits { \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS(Box, Point) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS(Box, Point, MinCorner, MaxCorner) \
-}}}
-
-
-/*!
-\brief \brief_macro{box}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED, box}
- \details_macro_templated{box, point}
-\param Box \param_macro_type{Box}
-\param MinCorner minimum corner (should be public member or method)
-\param MaxCorner maximum corner (should be public member or method)
-
-\qbk{
-[heading Example]
-[register_box_templated]
-[register_box_templated_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED(Box, MinCorner, MaxCorner) \
-namespace boost { namespace geometry { namespace traits { \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS_TEMPLATED(Box) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS_TEMPLATED(Box, MinCorner, MaxCorner) \
-}}}
-
-/*!
-\brief \brief_macro{box}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES, box}
-\param Box \param_macro_type{Box}
-\param Point Point type reported as point_type by box. Must be two dimensional.
- Note that these box tyeps do not contain points, but they must have a
- related point_type
-\param Left Left side (must be public member or method)
-\param Bottom Bottom side (must be public member or method)
-\param Right Right side (must be public member or method)
-\param Top Top side (must be public member or method)
-
-\qbk{
-[heading Example]
-[register_box_2d_4values]
-[register_box_2d_4values_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES(Box, Point, Left, Bottom, Right, Top) \
-namespace boost { namespace geometry { namespace traits { \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_TRAITS(Box, Point) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_BOX_ACCESS_4VALUES(Box, Point, Left, Bottom, Right, Top) \
-}}}
-
-
-
-// CONST versions are for boxes probably not that common. Postponed.
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/register/linestring.hpp b/contrib/restricted/boost/boost/geometry/geometries/register/linestring.hpp
deleted file mode 100644
index cfc7dcaed25..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/register/linestring.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_REGISTER_LINESTRING_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_LINESTRING_HPP
-
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-/*!
-\brief \brief_macro{linestring}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_LINESTRING, linestring} The
- linestring may contain template parameters, which must be specified then.
-\param Linestring \param_macro_type{linestring}
-
-\qbk{
-[heading Example]
-[register_linestring]
-[register_linestring_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_LINESTRING(Linestring) \
-namespace boost { namespace geometry { namespace traits { \
- template<> struct tag<Linestring> { typedef linestring_tag type; }; \
-}}}
-
-
-/*!
-\brief \brief_macro{templated linestring}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED, templated linestring}
- \details_macro_templated{linestring, point}
-\param Linestring \param_macro_type{linestring (without template parameters)}
-
-\qbk{
-[heading Example]
-[register_linestring_templated]
-[register_linestring_templated_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(Linestring) \
-namespace boost { namespace geometry { namespace traits { \
- template<typename P> struct tag< Linestring<P> > { typedef linestring_tag type; }; \
-}}}
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_LINESTRING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/register/multi_linestring.hpp b/contrib/restricted/boost/boost/geometry/geometries/register/multi_linestring.hpp
deleted file mode 100644
index ad11289d11a..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/register/multi_linestring.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-/*!
-\brief \brief_macro{multi_linestring}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING, multi_linestring} The
- multi_linestring may contain template parameters, which must be specified then.
-\param MultiLineString \param_macro_type{multi_linestring}
-
-\qbk{
-[heading Example]
-[register_multi_linestring]
-[register_multi_linestring_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING(MultiLineString) \
-namespace boost { namespace geometry { namespace traits { \
- template<> struct tag<MultiLineString> { typedef multi_linestring_tag type; }; \
-}}}
-
-
-/*!
-\brief \brief_macro{templated multi_linestring}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED, templated multi_linestring}
- \details_macro_templated{multi_linestring, linestring}
-\param MultiLineString \param_macro_type{multi_linestring (without template parameters)}
-
-\qbk{
-[heading Example]
-[register_multi_linestring_templated]
-[register_multi_linestring_templated_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED(MultiLineString) \
-namespace boost { namespace geometry { namespace traits { \
- template<typename LineString> struct tag< MultiLineString<LineString> > { typedef multi_linestring_tag type; }; \
-}}}
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/register/multi_point.hpp b/contrib/restricted/boost/boost/geometry/geometries/register/multi_point.hpp
deleted file mode 100644
index 4e875ae0cd2..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/register/multi_point.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POINT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POINT_HPP
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-/*!
-\brief \brief_macro{multi_point}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POINT, multi_point} The
- multi_point may contain template parameters, which must be specified then.
-\param MultiPoint \param_macro_type{multi_point}
-
-\qbk{
-[heading Example]
-[register_multi_point]
-[register_multi_point_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_MULTI_POINT(MultiPoint) \
-namespace boost { namespace geometry { namespace traits { \
- template<> struct tag<MultiPoint> { typedef multi_point_tag type; }; \
-}}}
-
-
-/*!
-\brief \brief_macro{templated multi_point}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED, templated multi_point}
- \details_macro_templated{multi_point, point}
-\param MultiPoint \param_macro_type{multi_point (without template parameters)}
-
-\qbk{
-[heading Example]
-[register_multi_point_templated]
-[register_multi_point_templated_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED(MultiPoint) \
-namespace boost { namespace geometry { namespace traits { \
- template<typename Point> struct tag< MultiPoint<Point> > { typedef multi_point_tag type; }; \
-}}}
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/register/multi_polygon.hpp b/contrib/restricted/boost/boost/geometry/geometries/register/multi_polygon.hpp
deleted file mode 100644
index 1c3818b551e..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/register/multi_polygon.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-/*!
-\brief \brief_macro{multi_polygon}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POLYGON, multi_polygon} The
- multi_polygon may contain template parameters, which must be specified then.
-\param MultiPolygon \param_macro_type{multi_polygon}
-
-\qbk{
-[heading Example]
-[register_multi_polygon]
-[register_multi_polygon_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_MULTI_POLYGON(MultiPolygon) \
-namespace boost { namespace geometry { namespace traits { \
- template<> struct tag<MultiPolygon> { typedef multi_polygon_tag type; }; \
-}}}
-
-
-/*!
-\brief \brief_macro{templated multi_polygon}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED, templated multi_polygon}
- \details_macro_templated{multi_polygon, polygon}
-\param MultiPolygon \param_macro_type{multi_polygon (without template parameters)}
-
-\qbk{
-[heading Example]
-[register_multi_polygon_templated]
-[register_multi_polygon_templated_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED(MultiPolygon) \
-namespace boost { namespace geometry { namespace traits { \
- template<typename Polygon> struct tag< MultiPolygon<Polygon> > { typedef multi_polygon_tag type; }; \
-}}}
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/register/point.hpp b/contrib/restricted/boost/boost/geometry/geometries/register/point.hpp
deleted file mode 100644
index 676582576f6..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/register/point.hpp
+++ /dev/null
@@ -1,173 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_REGISTER_POINT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_POINT_HPP
-
-
-#include <cstddef>
-
-#ifndef DOXYGEN_NO_SPECIALIZATIONS
-
-// Starting point, specialize basic traits necessary to register a point
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, Dim, CoordinateType, CoordinateSystem) \
- template<> struct tag<Point> { typedef point_tag type; }; \
- template<> struct dimension<Point> : boost::mpl::int_<Dim> {}; \
- template<> struct coordinate_type<Point> { typedef CoordinateType type; }; \
- template<> struct coordinate_system<Point> { typedef CoordinateSystem type; };
-
-// Specialize access class per dimension
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, Dim, CoordinateType, Get, Set) \
- template<> struct access<Point, Dim> \
- { \
- static inline CoordinateType get(Point const& p) { return p. Get; } \
- static inline void set(Point& p, CoordinateType const& value) { p. Set = value; } \
- };
-
-// Const version
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, Dim, CoordinateType, Get) \
- template<> struct access<Point, Dim> \
- { \
- static inline CoordinateType get(Point const& p) { return p. Get; } \
- };
-
-
-// Getter/setter version
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, Dim, CoordinateType, Get, Set) \
- template<> struct access<Point, Dim> \
- { \
- static inline CoordinateType get(Point const& p) \
- { return p. Get (); } \
- static inline void set(Point& p, CoordinateType const& value) \
- { p. Set ( value ); } \
- };
-
-#endif // DOXYGEN_NO_SPECIALIZATIONS
-
-
-/*!
-\brief \brief_macro{2D point type}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_2D, two-dimensional point type}
-\param Point \param_macro_type{Point}
-\param CoordinateType \param_macro_coortype{point}
-\param CoordinateSystem \param_macro_coorsystem
-\param Field0 \param_macro_member{\macro_x}
-\param Field1 \param_macro_member{\macro_y}
-
-\qbk{[include reference/geometries/register/point.qbk]}
-*/
-#define BOOST_GEOMETRY_REGISTER_POINT_2D(Point, CoordinateType, CoordinateSystem, Field0, Field1) \
-namespace boost { namespace geometry { namespace traits { \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 2, CoordinateType, CoordinateSystem) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 0, CoordinateType, Field0, Field0) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 1, CoordinateType, Field1, Field1) \
-}}}
-
-/*!
-\brief \brief_macro{3D point type}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_3D, three-dimensional point type}
-\param Point \param_macro_type{Point}
-\param CoordinateType \param_macro_coortype{point}
-\param CoordinateSystem \param_macro_coorsystem
-\param Field0 \param_macro_member{\macro_x}
-\param Field1 \param_macro_member{\macro_y}
-\param Field2 \param_macro_member{\macro_z}
-*/
-#define BOOST_GEOMETRY_REGISTER_POINT_3D(Point, CoordinateType, CoordinateSystem, Field0, Field1, Field2) \
-namespace boost { namespace geometry { namespace traits { \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 3, CoordinateType, CoordinateSystem) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 0, CoordinateType, Field0, Field0) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 1, CoordinateType, Field1, Field1) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS(Point, 2, CoordinateType, Field2, Field2) \
-}}}
-
-/*!
-\brief \brief_macro{2D point type} \brief_macro_const
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_2D_CONST, two-dimensional point type}. \details_macro_const
-\param Point \param_macro_type{Point}
-\param CoordinateType \param_macro_coortype{point}
-\param CoordinateSystem \param_macro_coorsystem
-\param Field0 \param_macro_member{\macro_x}
-\param Field1 \param_macro_member{\macro_y}
-*/
-#define BOOST_GEOMETRY_REGISTER_POINT_2D_CONST(Point, CoordinateType, CoordinateSystem, Field0, Field1) \
-namespace boost { namespace geometry { namespace traits { \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 2, CoordinateType, CoordinateSystem) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 0, CoordinateType, Field0) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 1, CoordinateType, Field1) \
-}}}
-
-/*!
-\brief \brief_macro{3D point type} \brief_macro_const
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_3D_CONST, three-dimensional point type}. \details_macro_const
-\param Point \param_macro_type{Point}
-\param CoordinateType \param_macro_coortype{point}
-\param CoordinateSystem \param_macro_coorsystem
-\param Field0 \param_macro_member{\macro_x}
-\param Field1 \param_macro_member{\macro_y}
-\param Field2 \param_macro_member{\macro_z}
-*/
-#define BOOST_GEOMETRY_REGISTER_POINT_3D_CONST(Point, CoordinateType, CoordinateSystem, Field0, Field1, Field2) \
-namespace boost { namespace geometry { namespace traits { \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 3, CoordinateType, CoordinateSystem) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 0, CoordinateType, Field0) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 1, CoordinateType, Field1) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_CONST(Point, 2, CoordinateType, Field2) \
-}}}
-
-/*!
-\brief \brief_macro{2D point type} \brief_macro_getset
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET, two-dimensional point type}. \details_macro_getset
-\param Point \param_macro_type{Point}
-\param CoordinateType \param_macro_coortype{point}
-\param CoordinateSystem \param_macro_coorsystem
-\param Get0 \param_macro_getset{get, \macro_x}
-\param Get1 \param_macro_getset{get, \macro_y}
-\param Set0 \param_macro_getset{set, \macro_x}
-\param Set1 \param_macro_getset{set, \macro_y}
-*/
-#define BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET(Point, CoordinateType, CoordinateSystem, Get0, Get1, Set0, Set1) \
-namespace boost { namespace geometry { namespace traits { \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 2, CoordinateType, CoordinateSystem) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 0, CoordinateType, Get0, Set0) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 1, CoordinateType, Get1, Set1) \
-}}}
-
-/*!
-\brief \brief_macro{3D point type} \brief_macro_getset
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET, three-dimensional point type}. \details_macro_getset
-\param Point \param_macro_type{Point}
-\param CoordinateType \param_macro_coortype{point}
-\param CoordinateSystem \param_macro_coorsystem
-\param Get0 \param_macro_getset{get, \macro_x}
-\param Get1 \param_macro_getset{get, \macro_y}
-\param Get2 \param_macro_getset{get, \macro_z}
-\param Set0 \param_macro_getset{set, \macro_x}
-\param Set1 \param_macro_getset{set, \macro_y}
-\param Set2 \param_macro_getset{set, \macro_z}
-*/
-#define BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET(Point, CoordinateType, CoordinateSystem, Get0, Get1, Get2, Set0, Set1, Set2) \
-namespace boost { namespace geometry { namespace traits { \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_TRAITS(Point, 3, CoordinateType, CoordinateSystem) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 0, CoordinateType, Get0, Set0) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 1, CoordinateType, Get1, Set1) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_POINT_ACCESS_GET_SET(Point, 2, CoordinateType, Get2, Set2) \
-}}}
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/register/ring.hpp b/contrib/restricted/boost/boost/geometry/geometries/register/ring.hpp
deleted file mode 100644
index 761e46fbc4b..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/register/ring.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_REGISTER_RING_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_RING_HPP
-
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-/*!
-\brief \brief_macro{ring}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_RING, ring} The
- ring may contain template parameters, which must be specified then.
-\param Ring \param_macro_type{ring}
-
-\qbk{
-[heading Example]
-[register_ring]
-[register_ring_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_RING(Ring) \
-namespace boost { namespace geometry { namespace traits { \
- template<> struct tag<Ring> { typedef ring_tag type; }; \
-}}}
-
-
-/*!
-\brief \brief_macro{templated ring}
-\ingroup register
-\details \details_macro{BOOST_GEOMETRY_REGISTER_RING_TEMPLATED, templated ring}
- \details_macro_templated{ring, point}
-\param Ring \param_macro_type{ring (without template parameters)}
-
-\qbk{
-[heading Example]
-[register_ring_templated]
-[register_ring_templated_output]
-}
-*/
-#define BOOST_GEOMETRY_REGISTER_RING_TEMPLATED(Ring) \
-namespace boost { namespace geometry { namespace traits { \
- template<typename P> struct tag< Ring<P> > { typedef ring_tag type; }; \
-}}}
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_RING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/register/segment.hpp b/contrib/restricted/boost/boost/geometry/geometries/register/segment.hpp
deleted file mode 100644
index 6ea88c09183..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/register/segment.hpp
+++ /dev/null
@@ -1,129 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_REGISTER_SEGMENT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_SEGMENT_HPP
-
-
-#ifndef DOXYGEN_NO_SPECIALIZATIONS
-
-
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_ACCESS(Segment, Point, Index0, Index1) \
-template <size_t D> \
-struct indexed_access<Segment, min_corner, D> \
-{ \
- typedef typename coordinate_type<Point>::type ct; \
- static inline ct get(Segment const& b) \
- { return geometry::get<D>(b. Index0); } \
- static inline void set(Segment& b, ct const& value) \
- { geometry::set<D>(b. Index0, value); } \
-}; \
-template <size_t D> \
-struct indexed_access<Segment, max_corner, D> \
-{ \
- typedef typename coordinate_type<Point>::type ct; \
- static inline ct get(Segment const& b) \
- { return geometry::get<D>(b. Index1); } \
- static inline void set(Segment& b, ct const& value) \
- { geometry::set<D>(b. Index1, value); } \
-};
-
-
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_ACCESS_TEMPLATIZED(Segment, Index0, Index1) \
-template <typename P, size_t D> \
-struct indexed_access<Segment<P>, min_corner, D> \
-{ \
- typedef typename coordinate_type<P>::type ct; \
- static inline ct get(Segment<P> const& b) \
- { return geometry::get<D>(b. Index0); } \
- static inline void set(Segment<P>& b, ct const& value) \
- { geometry::set<D>(b. Index0, value); } \
-}; \
-template <typename P, size_t D> \
-struct indexed_access<Segment<P>, max_corner, D> \
-{ \
- typedef typename coordinate_type<P>::type ct; \
- static inline ct get(Segment<P> const& b) \
- { return geometry::get<D>(b. Index1); } \
- static inline void set(Segment<P>& b, ct const& value) \
- { geometry::set<D>(b. Index1, value); } \
-};
-
-
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_ACCESS_4VALUES(Segment, Point, Left, Bottom, Right, Top) \
-template <> struct indexed_access<Segment, min_corner, 0> \
-{ \
- typedef coordinate_type<Point>::type ct; \
- static inline ct get(Segment const& b) { return b. Left; } \
- static inline void set(Segment& b, ct const& value) { b. Left = value; } \
-}; \
-template <> struct indexed_access<Segment, min_corner, 1> \
-{ \
- typedef coordinate_type<Point>::type ct; \
- static inline ct get(Segment const& b) { return b. Bottom; } \
- static inline void set(Segment& b, ct const& value) { b. Bottom = value; } \
-}; \
-template <> struct indexed_access<Segment, max_corner, 0> \
-{ \
- typedef coordinate_type<Point>::type ct; \
- static inline ct get(Segment const& b) { return b. Right; } \
- static inline void set(Segment& b, ct const& value) { b. Right = value; } \
-}; \
-template <> struct indexed_access<Segment, max_corner, 1> \
-{ \
- typedef coordinate_type<Point>::type ct; \
- static inline ct get(Segment const& b) { return b. Top; } \
- static inline void set(Segment& b, ct const& value) { b. Top = value; } \
-};
-
-
-
-
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_TRAITS(Segment, PointType) \
- template<> struct tag<Segment > { typedef segment_tag type; }; \
- template<> struct point_type<Segment > { typedef PointType type; };
-
-#define BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_TRAITS_TEMPLATIZED(Segment) \
- template<typename P> struct tag<Segment<P> > { typedef segment_tag type; }; \
- template<typename P> struct point_type<Segment<P> > { typedef P type; };
-
-#endif // DOXYGEN_NO_SPECIALIZATIONS
-
-
-
-#define BOOST_GEOMETRY_REGISTER_SEGMENT(Segment, PointType, Index0, Index1) \
-namespace boost { namespace geometry { namespace traits { \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_TRAITS(Segment, PointType) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_ACCESS(Segment, PointType, Index0, Index1) \
-}}}
-
-
-#define BOOST_GEOMETRY_REGISTER_SEGMENT_TEMPLATIZED(Segment, Index0, Index1) \
-namespace boost { namespace geometry { namespace traits { \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_TRAITS_TEMPLATIZED(Segment) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_ACCESS_TEMPLATIZED(Segment, Index0, Index1) \
-}}}
-
-#define BOOST_GEOMETRY_REGISTER_SEGMENT_2D_4VALUES(Segment, PointType, Left, Bottom, Right, Top) \
-namespace boost { namespace geometry { namespace traits { \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_TRAITS(Segment, PointType) \
- BOOST_GEOMETRY_DETAIL_SPECIALIZE_SEGMENT_ACCESS_4VALUES(Segment, PointType, Left, Bottom, Right, Top) \
-}}}
-
-
-
-// CONST versions are for segments probably not that common. Postponed.
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_SEGMENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/ring.hpp b/contrib/restricted/boost/boost/geometry/geometries/ring.hpp
deleted file mode 100644
index fda0be40b4d..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/ring.hpp
+++ /dev/null
@@ -1,181 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_RING_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_RING_HPP
-
-#include <memory>
-#include <vector>
-
-#include <boost/concept/assert.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-#include <boost/config.hpp>
-#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-#include <initializer_list>
-#endif
-
-namespace boost { namespace geometry
-{
-
-namespace model
-{
-/*!
-\brief A ring (aka linear ring) is a closed line which should not be selfintersecting
-\ingroup geometries
-\tparam Point point type
-\tparam ClockWise true for clockwise direction,
- false for CounterClockWise direction
-\tparam Closed true for closed polygons (last point == first point),
- false open points
-\tparam Container container type, for example std::vector, std::deque
-\tparam Allocator container-allocator-type
-
-\qbk{[include reference/geometries/ring.qbk]}
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_ring Ring Concept]
-}
-*/
-template
-<
- typename Point,
- bool ClockWise = true, bool Closed = true,
- template<typename, typename> class Container = std::vector,
- template<typename> class Allocator = std::allocator
->
-class ring : public Container<Point, Allocator<Point> >
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
-
- typedef Container<Point, Allocator<Point> > base_type;
-
-public :
- /// \constructor_default{ring}
- inline ring()
- : base_type()
- {}
-
- /// \constructor_begin_end{ring}
- template <typename Iterator>
- inline ring(Iterator begin, Iterator end)
- : base_type(begin, end)
- {}
-
-#ifndef BOOST_NO_CXX11_HDR_INITIALIZER_LIST
-
- /// \constructor_initializer_list{ring}
- inline ring(std::initializer_list<Point> l)
- : base_type(l.begin(), l.end())
- {}
-
-// Commented out for now in order to support Boost.Assign
-// Without this assignment operator first the object should be created
-// from initializer list, then it shoudl be moved.
-//// Without this workaround in MSVC the assignment operator is ambiguous
-//#ifndef BOOST_MSVC
-// /// \assignment_initializer_list{ring}
-// inline ring & operator=(std::initializer_list<Point> l)
-// {
-// base_type::assign(l.begin(), l.end());
-// return *this;
-// }
-//#endif
-
-#endif
-};
-
-} // namespace model
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template
-<
- typename Point,
- bool ClockWise, bool Closed,
- template<typename, typename> class Container,
- template<typename> class Allocator
->
-struct tag<model::ring<Point, ClockWise, Closed, Container, Allocator> >
-{
- typedef ring_tag type;
-};
-
-
-template
-<
- typename Point,
- bool Closed,
- template<typename, typename> class Container,
- template<typename> class Allocator
->
-struct point_order<model::ring<Point, false, Closed, Container, Allocator> >
-{
- static const order_selector value = counterclockwise;
-};
-
-
-template
-<
- typename Point,
- bool Closed,
- template<typename, typename> class Container,
- template<typename> class Allocator
->
-struct point_order<model::ring<Point, true, Closed, Container, Allocator> >
-{
- static const order_selector value = clockwise;
-};
-
-template
-<
- typename Point,
- bool PointOrder,
- template<typename, typename> class Container,
- template<typename> class Allocator
->
-struct closure<model::ring<Point, PointOrder, true, Container, Allocator> >
-{
- static const closure_selector value = closed;
-};
-
-template
-<
- typename Point,
- bool PointOrder,
- template<typename, typename> class Container,
- template<typename> class Allocator
->
-struct closure<model::ring<Point, PointOrder, false, Container, Allocator> >
-{
- static const closure_selector value = open;
-};
-
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_RING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/segment.hpp b/contrib/restricted/boost/boost/geometry/geometries/segment.hpp
deleted file mode 100644
index aeb275b8583..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/segment.hpp
+++ /dev/null
@@ -1,224 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_SEGMENT_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_SEGMENT_HPP
-
-#include <cstddef>
-
-#include <boost/concept/assert.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_const.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace model
-{
-
-/*!
-\brief Class segment: small class containing two points
-\ingroup geometries
-\details From Wikipedia: In geometry, a line segment is a part of a line that is bounded
- by two distinct end points, and contains every point on the line between its end points.
-\note There is also a point-referring-segment, class referring_segment,
- containing point references, where points are NOT copied
-
-\qbk{[include reference/geometries/segment.qbk]}
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_segment Segment Concept]
-}
-*/
-template<typename Point>
-class segment : public std::pair<Point, Point>
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
-
-public :
-
-#ifndef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
- /// \constructor_default_no_init
- segment() = default;
-#else
- /// \constructor_default_no_init
- inline segment()
- {}
-#endif
-
- /*!
- \brief Constructor taking the first and the second point
- */
- inline segment(Point const& p1, Point const& p2)
- {
- this->first = p1;
- this->second = p2;
- }
-};
-
-
-/*!
-\brief Class segment: small class containing two (templatized) point references
-\ingroup geometries
-\details From Wikipedia: In geometry, a line segment is a part of a line that is bounded
- by two distinct end points, and contains every point on the line between its end points.
-\note The structure is like std::pair, and can often be used interchangeable.
-Difference is that it refers to points, does not have points.
-\note Like std::pair, points are public available.
-\note type is const or non const, so geometry::segment<P> or geometry::segment<P const>
-\note We cannot derive from std::pair<P&, P&> because of
-reference assignments.
-\tparam ConstOrNonConstPoint point type of the segment, maybe a point or a const point
-*/
-template<typename ConstOrNonConstPoint>
-class referring_segment
-{
- BOOST_CONCEPT_ASSERT( (
- typename boost::mpl::if_
- <
- boost::is_const<ConstOrNonConstPoint>,
- concepts::Point<ConstOrNonConstPoint>,
- concepts::ConstPoint<ConstOrNonConstPoint>
- >
- ) );
-
- typedef ConstOrNonConstPoint point_type;
-
-public:
-
- point_type& first;
- point_type& second;
-
- /*!
- \brief Constructor taking the first and the second point
- */
- inline referring_segment(point_type& p1, point_type& p2)
- : first(p1)
- , second(p2)
- {}
-};
-
-
-} // namespace model
-
-
-// Traits specializations for segment above
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename Point>
-struct tag<model::segment<Point> >
-{
- typedef segment_tag type;
-};
-
-template <typename Point>
-struct point_type<model::segment<Point> >
-{
- typedef Point type;
-};
-
-template <typename Point, std::size_t Dimension>
-struct indexed_access<model::segment<Point>, 0, Dimension>
-{
- typedef model::segment<Point> segment_type;
- typedef typename geometry::coordinate_type<segment_type>::type coordinate_type;
-
- static inline coordinate_type get(segment_type const& s)
- {
- return geometry::get<Dimension>(s.first);
- }
-
- static inline void set(segment_type& s, coordinate_type const& value)
- {
- geometry::set<Dimension>(s.first, value);
- }
-};
-
-
-template <typename Point, std::size_t Dimension>
-struct indexed_access<model::segment<Point>, 1, Dimension>
-{
- typedef model::segment<Point> segment_type;
- typedef typename geometry::coordinate_type<segment_type>::type coordinate_type;
-
- static inline coordinate_type get(segment_type const& s)
- {
- return geometry::get<Dimension>(s.second);
- }
-
- static inline void set(segment_type& s, coordinate_type const& value)
- {
- geometry::set<Dimension>(s.second, value);
- }
-};
-
-
-template <typename ConstOrNonConstPoint>
-struct tag<model::referring_segment<ConstOrNonConstPoint> >
-{
- typedef segment_tag type;
-};
-
-template <typename ConstOrNonConstPoint>
-struct point_type<model::referring_segment<ConstOrNonConstPoint> >
-{
- typedef ConstOrNonConstPoint type;
-};
-
-template <typename ConstOrNonConstPoint, std::size_t Dimension>
-struct indexed_access<model::referring_segment<ConstOrNonConstPoint>, 0, Dimension>
-{
- typedef model::referring_segment<ConstOrNonConstPoint> segment_type;
- typedef typename geometry::coordinate_type<segment_type>::type coordinate_type;
-
- static inline coordinate_type get(segment_type const& s)
- {
- return geometry::get<Dimension>(s.first);
- }
-
- static inline void set(segment_type& s, coordinate_type const& value)
- {
- geometry::set<Dimension>(s.first, value);
- }
-};
-
-
-template <typename ConstOrNonConstPoint, std::size_t Dimension>
-struct indexed_access<model::referring_segment<ConstOrNonConstPoint>, 1, Dimension>
-{
- typedef model::referring_segment<ConstOrNonConstPoint> segment_type;
- typedef typename geometry::coordinate_type<segment_type>::type coordinate_type;
-
- static inline coordinate_type get(segment_type const& s)
- {
- return geometry::get<Dimension>(s.second);
- }
-
- static inline void set(segment_type& s, coordinate_type const& value)
- {
- geometry::set<Dimension>(s.second, value);
- }
-};
-
-
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_SEGMENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometries/variant.hpp b/contrib/restricted/boost/boost/geometry/geometries/variant.hpp
deleted file mode 100644
index 881eab9c8be..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometries/variant.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRIES_VARIANT_GEOMETRY_HPP
-#define BOOST_GEOMETRY_GEOMETRIES_VARIANT_GEOMETRY_HPP
-
-
-#include <boost/variant/variant_fwd.hpp>
-#include <boost/mpl/front.hpp>
-
-
-namespace boost { namespace geometry {
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct point_type<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
- : point_type<
- typename boost::mpl::front<
- typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types
- >::type
- >
-{};
-
-
-} // namespace geometry
-} // namespace boost
-
-
-#endif // BOOST_GEOMETRY_GEOMETRIES_VARIANT_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/geometry.hpp b/contrib/restricted/boost/boost/geometry/geometry.hpp
deleted file mode 100644
index ec9459b4055..00000000000
--- a/contrib/restricted/boost/boost/geometry/geometry.hpp
+++ /dev/null
@@ -1,119 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014-2018.
-// Modifications copyright (c) 2014-2018 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_GEOMETRY_HPP
-#define BOOST_GEOMETRY_GEOMETRY_HPP
-
-// Shortcut to include all header files
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/interior_type.hpp>
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-// Core algorithms
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/radius.hpp>
-#include <boost/geometry/core/topological_dimension.hpp>
-
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/arithmetic/dot_product.hpp>
-
-#include <boost/geometry/strategies/strategies.hpp>
-
-#include <boost/geometry/algorithms/append.hpp>
-#include <boost/geometry/algorithms/area.hpp>
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/buffer.hpp>
-#include <boost/geometry/algorithms/centroid.hpp>
-#include <boost/geometry/algorithms/clear.hpp>
-#include <boost/geometry/algorithms/comparable_distance.hpp>
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/convex_hull.hpp>
-#include <boost/geometry/algorithms/correct.hpp>
-#include <boost/geometry/algorithms/covered_by.hpp>
-#include <boost/geometry/algorithms/crosses.hpp>
-#include <boost/geometry/algorithms/densify.hpp>
-#include <boost/geometry/algorithms/difference.hpp>
-#include <boost/geometry/algorithms/disjoint.hpp>
-#include <boost/geometry/algorithms/distance.hpp>
-#include <boost/geometry/algorithms/envelope.hpp>
-#include <boost/geometry/algorithms/equals.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-#include <boost/geometry/algorithms/for_each.hpp>
-#include <boost/geometry/algorithms/intersection.hpp>
-#include <boost/geometry/algorithms/intersects.hpp>
-#include <boost/geometry/algorithms/is_empty.hpp>
-#include <boost/geometry/algorithms/is_simple.hpp>
-#include <boost/geometry/algorithms/is_valid.hpp>
-#include <boost/geometry/algorithms/length.hpp>
-#include <boost/geometry/algorithms/make.hpp>
-#include <boost/geometry/algorithms/num_geometries.hpp>
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
-#include <boost/geometry/algorithms/num_points.hpp>
-#include <boost/geometry/algorithms/num_segments.hpp>
-#include <boost/geometry/algorithms/overlaps.hpp>
-#include <boost/geometry/algorithms/perimeter.hpp>
-#include <boost/geometry/algorithms/relate.hpp>
-#include <boost/geometry/algorithms/relation.hpp>
-#include <boost/geometry/algorithms/remove_spikes.hpp>
-#include <boost/geometry/algorithms/reverse.hpp>
-#include <boost/geometry/algorithms/simplify.hpp>
-#include <boost/geometry/algorithms/sym_difference.hpp>
-#include <boost/geometry/algorithms/touches.hpp>
-#include <boost/geometry/algorithms/transform.hpp>
-#include <boost/geometry/algorithms/union.hpp>
-#include <boost/geometry/algorithms/unique.hpp>
-#include <boost/geometry/algorithms/within.hpp>
-
-// check includes all concepts
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/srs/srs.hpp>
-
-#include <boost/geometry/util/for_each_coordinate.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-#include <boost/geometry/views/box_view.hpp>
-#include <boost/geometry/views/closeable_view.hpp>
-#include <boost/geometry/views/identity_view.hpp>
-#include <boost/geometry/views/reversible_view.hpp>
-#include <boost/geometry/views/segment_view.hpp>
-
-#include <boost/geometry/io/io.hpp>
-#include <boost/geometry/io/dsv/write.hpp>
-#include <boost/geometry/io/svg/svg_mapper.hpp>
-#include <boost/geometry/io/svg/write.hpp>
-#include <boost/geometry/io/wkt/read.hpp>
-#include <boost/geometry/io/wkt/write.hpp>
-
-#endif // BOOST_GEOMETRY_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/adaptors/query.hpp b/contrib/restricted/boost/boost/geometry/index/adaptors/query.hpp
deleted file mode 100644
index 472b3693b14..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/adaptors/query.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-// Boost.Geometry Index
-//
-// Query range adaptor
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_ADAPTORS_QUERY_HPP
-#define BOOST_GEOMETRY_INDEX_ADAPTORS_QUERY_HPP
-
-/*!
-\defgroup adaptors Adaptors (boost::geometry::index::adaptors::)
-*/
-
-namespace boost { namespace geometry { namespace index {
-
-namespace adaptors {
-
-namespace detail {
-
-template <typename Index>
-class query_range
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_INDEX,
- (query_range));
-
- typedef int* iterator;
- typedef const int* const_iterator;
-
- template <typename Predicates>
- inline query_range(
- Index const&,
- Predicates const&)
- {}
-
- inline iterator begin() { return 0; }
- inline iterator end() { return 0; }
- inline const_iterator begin() const { return 0; }
- inline const_iterator end() const { return 0; }
-};
-
-// TODO: awulkiew - consider removing reference from predicates
-
-template<typename Predicates>
-struct query
-{
- inline explicit query(Predicates const& pred)
- : predicates(pred)
- {}
-
- Predicates const& predicates;
-};
-
-template<typename Index, typename Predicates>
-index::adaptors::detail::query_range<Index>
-operator|(
- Index const& si,
- index::adaptors::detail::query<Predicates> const& f)
-{
- return index::adaptors::detail::query_range<Index>(si, f.predicates);
-}
-
-} // namespace detail
-
-/*!
-\brief The query index adaptor generator.
-
-\ingroup adaptors
-
-\param pred Predicates.
-*/
-template <typename Predicates>
-detail::query<Predicates>
-queried(Predicates const& pred)
-{
- return detail::query<Predicates>(pred);
-}
-
-} // namespace adaptors
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_ADAPTORS_QUERY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/bounds.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/bounds.hpp
deleted file mode 100644
index a62fda070c6..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/bounds.hpp
+++ /dev/null
@@ -1,90 +0,0 @@
-// Boost.Geometry Index
-//
-// n-dimensional bounds
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_BOUNDS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_BOUNDS_HPP
-
-#include <boost/geometry/index/detail/bounded_view.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-namespace dispatch {
-
-template <typename Geometry,
- typename Bounds,
- typename TagGeometry = typename geometry::tag<Geometry>::type,
- typename TagBounds = typename geometry::tag<Bounds>::type>
-struct bounds
-{
- static inline void apply(Geometry const& g, Bounds & b)
- {
- geometry::convert(g, b);
- }
-};
-
-template <typename Geometry, typename Bounds>
-struct bounds<Geometry, Bounds, segment_tag, box_tag>
-{
- static inline void apply(Geometry const& g, Bounds & b)
- {
- index::detail::bounded_view<Geometry, Bounds> v(g);
- geometry::convert(v, b);
- }
-};
-
-} // namespace dispatch
-
-template <typename Geometry, typename Bounds>
-inline void bounds(Geometry const& g, Bounds & b)
-{
- concepts::check_concepts_and_equal_dimensions<Geometry const, Bounds>();
- dispatch::bounds<Geometry, Bounds>::apply(g, b);
-}
-
-namespace dispatch {
-
-template <typename Geometry,
- typename TagGeometry = typename geometry::tag<Geometry>::type>
-struct return_ref_or_bounds
-{
- typedef Geometry const& result_type;
-
- static inline result_type apply(Geometry const& g)
- {
- return g;
- }
-};
-
-template <typename Geometry>
-struct return_ref_or_bounds<Geometry, segment_tag>
-{
- typedef typename point_type<Geometry>::type point_type;
- typedef geometry::model::box<point_type> bounds_type;
- typedef index::detail::bounded_view<Geometry, bounds_type> result_type;
-
- static inline result_type apply(Geometry const& g)
- {
- return result_type(g);
- }
-};
-
-} // namespace dispatch
-
-template <typename Geometry>
-inline
-typename dispatch::return_ref_or_bounds<Geometry>::result_type
-return_ref_or_bounds(Geometry const& g)
-{
- return dispatch::return_ref_or_bounds<Geometry>::apply(g);
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_BOUNDS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp
deleted file mode 100644
index c4e44cae18c..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp
+++ /dev/null
@@ -1,77 +0,0 @@
-// Boost.Geometry Index
-//
-// squared distance between point and centroid of the box or point
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_COMPARABLE_DISTANCE_CENTROID_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_COMPARABLE_DISTANCE_CENTROID_HPP
-
-#include <boost/geometry/index/detail/algorithms/sum_for_indexable.hpp>
-#include <boost/geometry/index/detail/algorithms/diff_abs.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-struct comparable_distance_centroid_tag {};
-
-template <
- typename Point,
- typename PointIndexable,
- size_t N>
-struct sum_for_indexable<Point, PointIndexable, point_tag, comparable_distance_centroid_tag, N>
-{
- typedef typename geometry::default_comparable_distance_result<Point, PointIndexable>::type result_type;
-
- inline static result_type apply(Point const& pt, PointIndexable const& i)
- {
- return geometry::comparable_distance(pt, i);
- }
-};
-
-template <
- typename Point,
- typename BoxIndexable,
- size_t DimensionIndex>
-struct sum_for_indexable_dimension<Point, BoxIndexable, box_tag, comparable_distance_centroid_tag, DimensionIndex>
-{
- typedef typename geometry::default_comparable_distance_result<Point, BoxIndexable>::type result_type;
-
- inline static result_type apply(Point const& pt, BoxIndexable const& i)
- {
- typedef typename coordinate_type<Point>::type point_coord_t;
- typedef typename coordinate_type<BoxIndexable>::type indexable_coord_t;
-
- point_coord_t pt_c = geometry::get<DimensionIndex>(pt);
- indexable_coord_t ind_c_min = geometry::get<geometry::min_corner, DimensionIndex>(i);
- indexable_coord_t ind_c_max = geometry::get<geometry::max_corner, DimensionIndex>(i);
-
- indexable_coord_t ind_c_avg = ind_c_min + (ind_c_max - ind_c_min) / 2;
- // TODO: awulkiew - is (ind_c_min + ind_c_max) / 2 safe?
-
- result_type diff = detail::diff_abs(ind_c_avg, pt_c);
-
- return diff * diff;
- }
-};
-
-template <typename Point, typename Indexable>
-typename geometry::default_comparable_distance_result<Point, Indexable>::type
-comparable_distance_centroid(Point const& pt, Indexable const& i)
-{
- return detail::sum_for_indexable<
- Point,
- Indexable,
- typename tag<Indexable>::type,
- detail::comparable_distance_centroid_tag,
- dimension<Indexable>::value
- >::apply(pt, i);
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // #define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_COMPARABLE_DISTANCE_CENTROID_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/comparable_distance_far.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/comparable_distance_far.hpp
deleted file mode 100644
index 214fbf6aaf3..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/comparable_distance_far.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Boost.Geometry Index
-//
-// squared distance between point and furthest point of the box or point
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_COMPARABLE_DISTANCE_FAR_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_COMPARABLE_DISTANCE_FAR_HPP
-
-#include <boost/geometry/index/detail/algorithms/diff_abs.hpp>
-#include <boost/geometry/index/detail/algorithms/sum_for_indexable.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-// minmaxdist component
-
-struct comparable_distance_far_tag {};
-
-template <
- typename Point,
- typename BoxIndexable,
- size_t DimensionIndex>
-struct sum_for_indexable_dimension<Point, BoxIndexable, box_tag, comparable_distance_far_tag, DimensionIndex>
-{
- typedef typename geometry::default_comparable_distance_result<Point, BoxIndexable>::type result_type;
-
- inline static result_type apply(Point const& pt, BoxIndexable const& i)
- {
- typedef typename coordinate_type<Point>::type point_coord_t;
- typedef typename coordinate_type<BoxIndexable>::type indexable_coord_t;
-
- point_coord_t pt_c = geometry::get<DimensionIndex>(pt);
- indexable_coord_t ind_c_min = geometry::get<geometry::min_corner, DimensionIndex>(i);
- indexable_coord_t ind_c_max = geometry::get<geometry::max_corner, DimensionIndex>(i);
-
- result_type further_diff = 0;
-
- if ( (ind_c_min + ind_c_max) / 2 <= pt_c )
- further_diff = pt_c - ind_c_min;
- else
- further_diff = detail::diff_abs(pt_c, ind_c_max); // unsigned values protection
-
- return further_diff * further_diff;
- }
-};
-
-template <typename Point, typename Indexable>
-typename geometry::default_comparable_distance_result<Point, Indexable>::type
-comparable_distance_far(Point const& pt, Indexable const& i)
-{
- return detail::sum_for_indexable<
- Point,
- Indexable,
- typename tag<Indexable>::type,
- detail::comparable_distance_far_tag,
- dimension<Indexable>::value
- >::apply(pt, i);
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_COMPARABLE_DISTANCE_FAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/comparable_distance_near.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/comparable_distance_near.hpp
deleted file mode 100644
index 15368a7d24b..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/comparable_distance_near.hpp
+++ /dev/null
@@ -1,77 +0,0 @@
-// Boost.Geometry Index
-//
-// squared distance between point and nearest point of the box or point
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_COMPARABLE_DISTANCE_NEAR_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_COMPARABLE_DISTANCE_NEAR_HPP
-
-#include <boost/geometry/index/detail/algorithms/sum_for_indexable.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-struct comparable_distance_near_tag {};
-
-template <
- typename Point,
- typename PointIndexable,
- size_t N>
-struct sum_for_indexable<Point, PointIndexable, point_tag, comparable_distance_near_tag, N>
-{
- typedef typename geometry::default_comparable_distance_result<Point, PointIndexable>::type result_type;
-
- inline static result_type apply(Point const& pt, PointIndexable const& i)
- {
- return geometry::comparable_distance(pt, i);
- }
-};
-
-template <
- typename Point,
- typename BoxIndexable,
- size_t DimensionIndex>
-struct sum_for_indexable_dimension<Point, BoxIndexable, box_tag, comparable_distance_near_tag, DimensionIndex>
-{
- typedef typename geometry::default_comparable_distance_result<Point, BoxIndexable>::type result_type;
-
- inline static result_type apply(Point const& pt, BoxIndexable const& i)
- {
- typedef typename coordinate_type<Point>::type point_coord_t;
- typedef typename coordinate_type<BoxIndexable>::type indexable_coord_t;
-
- point_coord_t pt_c = geometry::get<DimensionIndex>(pt);
- indexable_coord_t ind_c_min = geometry::get<geometry::min_corner, DimensionIndex>(i);
- indexable_coord_t ind_c_max = geometry::get<geometry::max_corner, DimensionIndex>(i);
-
- result_type diff = 0;
-
- if ( pt_c < ind_c_min )
- diff = ind_c_min - pt_c;
- else if ( ind_c_max < pt_c )
- diff = pt_c - ind_c_max;
-
- return diff * diff;
- }
-};
-
-template <typename Point, typename Indexable>
-typename geometry::default_comparable_distance_result<Point, Indexable>::type
-comparable_distance_near(Point const& pt, Indexable const& i)
-{
- return detail::sum_for_indexable<
- Point,
- Indexable,
- typename tag<Indexable>::type,
- detail::comparable_distance_near_tag,
- dimension<Indexable>::value
- >::apply(pt, i);
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_COMPARABLE_DISTANCE_NEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/content.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/content.hpp
deleted file mode 100644
index 028113e0ef5..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/content.hpp
+++ /dev/null
@@ -1,87 +0,0 @@
-// Boost.Geometry Index
-//
-// n-dimensional content (hypervolume) - 2d area, 3d volume, ...
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_CONTENT_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_CONTENT_HPP
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template <typename Indexable>
-struct default_content_result
-{
- typedef typename select_most_precise<
- typename coordinate_type<Indexable>::type,
- long double
- >::type type;
-};
-
-namespace dispatch {
-
-template <typename Box,
- std::size_t CurrentDimension = dimension<Box>::value>
-struct content_box
-{
- BOOST_STATIC_ASSERT(0 < CurrentDimension);
-
- static inline typename detail::default_content_result<Box>::type apply(Box const& b)
- {
- return content_box<Box, CurrentDimension - 1>::apply(b) *
- ( get<max_corner, CurrentDimension - 1>(b) - get<min_corner, CurrentDimension - 1>(b) );
- }
-};
-
-template <typename Box>
-struct content_box<Box, 1>
-{
- static inline typename detail::default_content_result<Box>::type apply(Box const& b)
- {
- return get<max_corner, 0>(b) - get<min_corner, 0>(b);
- }
-};
-
-template <typename Indexable, typename Tag>
-struct content
-{
- BOOST_MPL_ASSERT_MSG(false, NOT_IMPLEMENTED_FOR_THIS_INDEXABLE_AND_TAG, (Indexable, Tag));
-};
-
-template <typename Indexable>
-struct content<Indexable, point_tag>
-{
- static typename detail::default_content_result<Indexable>::type apply(Indexable const&)
- {
- return 0;
- }
-};
-
-template <typename Indexable>
-struct content<Indexable, box_tag>
-{
- static typename default_content_result<Indexable>::type apply(Indexable const& b)
- {
- return dispatch::content_box<Indexable>::apply(b);
- }
-};
-
-} // namespace dispatch
-
-template <typename Indexable>
-typename default_content_result<Indexable>::type content(Indexable const& b)
-{
- return dispatch::content
- <
- Indexable,
- typename tag<Indexable>::type
- >::apply(b);
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_CONTENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/diff_abs.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/diff_abs.hpp
deleted file mode 100644
index ec63bd9a5d2..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/diff_abs.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-// Boost.Geometry Index
-//
-// Abs of difference
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_DIFF_ABS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_DIFF_ABS_HPP
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template <typename T>
-inline T diff_abs_dispatch(T const& v1, T const& v2, boost::mpl::bool_<true> const& /*is_integral*/)
-{
- return v1 < v2 ? v2 - v1 : v1 - v2;
-}
-
-template <typename T>
-inline T diff_abs_dispatch(T const& v1, T const& v2, boost::mpl::bool_<false> const& /*is_integral*/)
-{
- return ::fabs(v1 - v2);
-}
-
-template <typename T>
-inline T diff_abs(T const& v1, T const& v2)
-{
- typedef boost::mpl::bool_<
- boost::is_integral<T>::value
- > is_integral;
- return diff_abs_dispatch(v1, v2, is_integral());
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_DIFF_ABS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/intersection_content.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/intersection_content.hpp
deleted file mode 100644
index 437f90b46c3..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/intersection_content.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-// Boost.Geometry Index
-//
-// boxes union/intersection area/volume
-//
-// Copyright (c) 2011-2017 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_INTERSECTION_CONTENT_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_INTERSECTION_CONTENT_HPP
-
-#include <boost/geometry/algorithms/detail/disjoint/box_box.hpp>
-#include <boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp>
-
-#include <boost/geometry/index/detail/algorithms/content.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-/**
- * \brief Compute the area of the intersection of b1 and b2
- */
-template <typename Box>
-inline typename default_content_result<Box>::type intersection_content(Box const& box1, Box const& box2)
-{
- bool const intersects = ! geometry::detail::disjoint::box_box<Box, Box>::apply(box1, box2);
-
- if ( intersects )
- {
- Box box_intersection;
- bool const ok = geometry::detail::intersection::intersection_box_box
- <
- 0, geometry::dimension<Box>::value
- >::apply(box1, box2, 0, box_intersection, 0);
- if ( ok )
- {
- return index::detail::content(box_intersection);
- }
- }
- return 0;
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_INTERSECTION_CONTENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/is_valid.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/is_valid.hpp
deleted file mode 100644
index 676eec2d2a8..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/is_valid.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-// Boost.Geometry Index
-//
-// n-dimensional Indexable validity check
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_IS_VALID_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_IS_VALID_HPP
-
-#include <cstddef>
-#include <boost/geometry/core/access.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-namespace dispatch {
-
-template <typename Box,
- std::size_t Dimension = geometry::dimension<Box>::value>
-struct is_valid_box
-{
- static inline bool apply(Box const& b)
- {
- return is_valid_box<Box, Dimension - 1>::apply(b) &&
- ( get<min_corner, Dimension - 1>(b) <= get<max_corner, Dimension - 1>(b) );
- }
-};
-
-template <typename Box>
-struct is_valid_box<Box, 1>
-{
- static inline bool apply(Box const& b)
- {
- return get<min_corner, 0>(b) <= get<max_corner, 0>(b);
- }
-};
-
-template <typename Indexable,
- typename Tag = typename geometry::tag<Indexable>::type>
-struct is_valid
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_INDEXABLE,
- (is_valid));
-};
-
-template <typename Indexable>
-struct is_valid<Indexable, point_tag>
-{
- static inline bool apply(Indexable const&)
- {
- return true;
- }
-};
-
-template <typename Indexable>
-struct is_valid<Indexable, box_tag>
-{
- static inline bool apply(Indexable const& b)
- {
- return dispatch::is_valid_box<Indexable>::apply(b);
- }
-};
-
-template <typename Indexable>
-struct is_valid<Indexable, segment_tag>
-{
- static inline bool apply(Indexable const&)
- {
- return true;
- }
-};
-
-} // namespace dispatch
-
-template <typename Indexable>
-inline bool is_valid(Indexable const& b)
-{
- // CONSIDER: detection of NaNs
- // e.g. by comparison of b with copy of b
-
- return dispatch::is_valid<Indexable>::apply(b);
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_DETAIL_INDEX_ALGORITHMS_IS_VALID_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/margin.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/margin.hpp
deleted file mode 100644
index d4876600acb..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/margin.hpp
+++ /dev/null
@@ -1,169 +0,0 @@
-// Boost.Geometry Index
-//
-// n-dimensional box's margin value (hypersurface), 2d perimeter, 3d surface, etc...
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_MARGIN_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_MARGIN_HPP
-
-// WARNING! comparable_margin() will work only if the same Geometries are compared
-// so it shouldn't be used in the case of Variants!
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template <typename Box>
-struct default_margin_result
-{
- typedef typename select_most_precise<
- typename coordinate_type<Box>::type,
- long double
- >::type type;
-};
-
-//template <typename Box,
-// std::size_t CurrentDimension,
-// std::size_t EdgeDimension = dimension<Box>::value>
-//struct margin_for_each_edge
-//{
-// BOOST_STATIC_ASSERT(0 < CurrentDimension);
-// BOOST_STATIC_ASSERT(0 < EdgeDimension);
-//
-// static inline typename default_margin_result<Box>::type apply(Box const& b)
-// {
-// return margin_for_each_edge<Box, CurrentDimension, EdgeDimension - 1>::apply(b) *
-// ( geometry::get<max_corner, EdgeDimension - 1>(b) - geometry::get<min_corner, EdgeDimension - 1>(b) );
-// }
-//};
-//
-//template <typename Box, std::size_t CurrentDimension>
-//struct margin_for_each_edge<Box, CurrentDimension, CurrentDimension>
-//{
-// BOOST_STATIC_ASSERT(0 < CurrentDimension);
-//
-// static inline typename default_margin_result<Box>::type apply(Box const& b)
-// {
-// return margin_for_each_edge<Box, CurrentDimension, CurrentDimension - 1>::apply(b);
-// }
-//};
-//
-//template <typename Box, std::size_t CurrentDimension>
-//struct margin_for_each_edge<Box, CurrentDimension, 1>
-//{
-// BOOST_STATIC_ASSERT(0 < CurrentDimension);
-//
-// static inline typename default_margin_result<Box>::type apply(Box const& b)
-// {
-// return geometry::get<max_corner, 0>(b) - geometry::get<min_corner, 0>(b);
-// }
-//};
-//
-//template <typename Box>
-//struct margin_for_each_edge<Box, 1, 1>
-//{
-// static inline typename default_margin_result<Box>::type apply(Box const& /*b*/)
-// {
-// return 1;
-// }
-//};
-//
-//template <typename Box,
-// std::size_t CurrentDimension = dimension<Box>::value>
-//struct margin_for_each_dimension
-//{
-// BOOST_STATIC_ASSERT(0 < CurrentDimension);
-//
-// static inline typename default_margin_result<Box>::type apply(Box const& b)
-// {
-// return margin_for_each_dimension<Box, CurrentDimension - 1>::apply(b) +
-// margin_for_each_edge<Box, CurrentDimension>::apply(b);
-// }
-//};
-//
-//template <typename Box>
-//struct margin_for_each_dimension<Box, 1>
-//{
-// static inline typename default_margin_result<Box>::type apply(Box const& b)
-// {
-// return margin_for_each_edge<Box, 1>::apply(b);
-// }
-//};
-
-// TODO - test if this definition of margin is ok for Dimension > 2
-// Now it's sum of edges lengths
-// maybe margin_for_each_dimension should be used to get more or less hypersurface?
-
-template <typename Box,
- std::size_t CurrentDimension = dimension<Box>::value>
-struct simple_margin_for_each_dimension
-{
- BOOST_STATIC_ASSERT(0 < CurrentDimension);
-
- static inline typename default_margin_result<Box>::type apply(Box const& b)
- {
- return simple_margin_for_each_dimension<Box, CurrentDimension - 1>::apply(b) +
- geometry::get<max_corner, CurrentDimension - 1>(b) - geometry::get<min_corner, CurrentDimension - 1>(b);
- }
-};
-
-template <typename Box>
-struct simple_margin_for_each_dimension<Box, 1>
-{
- static inline typename default_margin_result<Box>::type apply(Box const& b)
- {
- return geometry::get<max_corner, 0>(b) - geometry::get<min_corner, 0>(b);
- }
-};
-
-namespace dispatch {
-
-template <typename Geometry, typename Tag>
-struct comparable_margin
-{
- BOOST_MPL_ASSERT_MSG(false, NOT_IMPLEMENTED_FOR_THIS_GEOMETRY, (Geometry, Tag));
-};
-
-template <typename Geometry>
-struct comparable_margin<Geometry, point_tag>
-{
- typedef typename default_margin_result<Geometry>::type result_type;
-
- static inline result_type apply(Geometry const& ) { return 0; }
-};
-
-template <typename Box>
-struct comparable_margin<Box, box_tag>
-{
- typedef typename default_margin_result<Box>::type result_type;
-
- static inline result_type apply(Box const& g)
- {
- //return detail::margin_for_each_dimension<Box>::apply(g);
- return detail::simple_margin_for_each_dimension<Box>::apply(g);
- }
-};
-
-} // namespace dispatch
-
-template <typename Geometry>
-typename default_margin_result<Geometry>::type comparable_margin(Geometry const& g)
-{
- return dispatch::comparable_margin<
- Geometry,
- typename tag<Geometry>::type
- >::apply(g);
-}
-
-//template <typename Box>
-//typename default_margin_result<Box>::type margin(Box const& b)
-//{
-// return 2 * detail::margin_for_each_dimension<Box>::apply(b);
-//}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_MARGIN_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/minmaxdist.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/minmaxdist.hpp
deleted file mode 100644
index ab6291504ff..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/minmaxdist.hpp
+++ /dev/null
@@ -1,119 +0,0 @@
-// Boost.Geometry Index
-//
-// minmaxdist used in R-tree k nearest neighbors query
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_MINMAXDIST_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_MINMAXDIST_HPP
-
-#include <boost/geometry/algorithms/distance.hpp>
-#include <boost/geometry/algorithms/comparable_distance.hpp>
-
-#include <boost/geometry/index/detail/algorithms/diff_abs.hpp>
-#include <boost/geometry/index/detail/algorithms/sum_for_indexable.hpp>
-#include <boost/geometry/index/detail/algorithms/smallest_for_indexable.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-struct minmaxdist_tag {};
-
-template <
- typename Point,
- typename BoxIndexable,
- size_t DimensionIndex>
-struct smallest_for_indexable_dimension<Point, BoxIndexable, box_tag, minmaxdist_tag, DimensionIndex>
-{
- typedef typename geometry::default_comparable_distance_result<Point, BoxIndexable>::type result_type;
-
- inline static result_type apply(Point const& pt, BoxIndexable const& i, result_type const& maxd)
- {
- typedef typename coordinate_type<Point>::type point_coord_t;
- typedef typename coordinate_type<BoxIndexable>::type indexable_coord_t;
-
- point_coord_t pt_c = geometry::get<DimensionIndex>(pt);
- indexable_coord_t ind_c_min = geometry::get<geometry::min_corner, DimensionIndex>(i);
- indexable_coord_t ind_c_max = geometry::get<geometry::max_corner, DimensionIndex>(i);
-
- indexable_coord_t ind_c_avg = ind_c_min + (ind_c_max - ind_c_min) / 2;
- // TODO: awulkiew - is (ind_c_min + ind_c_max) / 2 safe?
-
- // TODO: awulkiew - optimize! don't calculate 2x pt_c <= ind_c_avg
- // take particular case pt_c == ind_c_avg into account
-
- result_type closer_comp = 0;
- if ( pt_c <= ind_c_avg )
- closer_comp = detail::diff_abs(pt_c, ind_c_min); // unsigned values protection
- else
- closer_comp = ind_c_max - pt_c;
-
- result_type further_comp = 0;
- if ( ind_c_avg <= pt_c )
- further_comp = pt_c - ind_c_min;
- else
- further_comp = detail::diff_abs(pt_c, ind_c_max); // unsigned values protection
-
- return (maxd + closer_comp * closer_comp) - further_comp * further_comp;
- }
-};
-
-template <typename Point, typename Indexable, typename IndexableTag>
-struct minmaxdist_impl
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_INDEXABLE_TAG_TYPE,
- (minmaxdist_impl));
-};
-
-template <typename Point, typename Indexable>
-struct minmaxdist_impl<Point, Indexable, point_tag>
-{
- typedef typename geometry::default_comparable_distance_result<Point, Indexable>::type result_type;
-
- inline static result_type apply(Point const& pt, Indexable const& i)
- {
- return geometry::comparable_distance(pt, i);
- }
-};
-
-template <typename Point, typename Indexable>
-struct minmaxdist_impl<Point, Indexable, box_tag>
-{
- typedef typename geometry::default_comparable_distance_result<Point, Indexable>::type result_type;
-
- inline static result_type apply(Point const& pt, Indexable const& i)
- {
- result_type maxd = geometry::comparable_distance(pt, i);
-
- return smallest_for_indexable<
- Point,
- Indexable,
- box_tag,
- minmaxdist_tag,
- dimension<Indexable>::value
- >::apply(pt, i, maxd);
- }
-};
-
-/**
- * This is comparable distace.
- */
-template <typename Point, typename Indexable>
-typename geometry::default_comparable_distance_result<Point, Indexable>::type
-minmaxdist(Point const& pt, Indexable const& i)
-{
- return detail::minmaxdist_impl<
- Point,
- Indexable,
- typename tag<Indexable>::type
- >::apply(pt, i);
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_MINMAXDIST_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/nth_element.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/nth_element.hpp
deleted file mode 100644
index 201180ae3a6..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/nth_element.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_NTH_ELEMENT_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_NTH_ELEMENT_HPP
-
-#include <algorithm>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-// See https://svn.boost.org/trac/boost/ticket/12861
-// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58800
-// https://gcc.gnu.org/develop.html#timeline
-// 20120920 4.7.2 - no bug
-// 20130322 4.8.0 - no bug
-// 20130411 4.7.3 - no bug
-// 20130531 4.8.1 - no bug
-// 20131016 4.8.2 - bug
-// 20140422 4.9.0 - fixed
-// 20140522 4.8.3 - fixed
-// 20140612 4.7.4 - fixed
-// 20140716 4.9.1 - fixed
-#if defined(__GLIBCXX__) && (__GLIBCXX__ == 20131016)
-
-#warning "std::nth_element replaced with std::sort, libstdc++ bug workaround.";
-
-template <typename RandomIt>
-void nth_element(RandomIt first, RandomIt , RandomIt last)
-{
- std::sort(first, last);
-}
-
-template <typename RandomIt, typename Compare>
-void nth_element(RandomIt first, RandomIt , RandomIt last, Compare comp)
-{
- std::sort(first, last, comp);
-}
-
-#else
-
-template <typename RandomIt>
-void nth_element(RandomIt first, RandomIt nth, RandomIt last)
-{
- std::nth_element(first, nth, last);
-}
-
-template <typename RandomIt, typename Compare>
-void nth_element(RandomIt first, RandomIt nth, RandomIt last, Compare comp)
-{
- std::nth_element(first, nth, last, comp);
-}
-
-#endif
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_NTH_ELEMENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/path_intersection.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/path_intersection.hpp
deleted file mode 100644
index 3cfb556c304..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/path_intersection.hpp
+++ /dev/null
@@ -1,123 +0,0 @@
-// Boost.Geometry Index
-//
-// n-dimensional box-linestring intersection
-//
-// Copyright (c) 2011-2017 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_PATH_INTERSECTION_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_PATH_INTERSECTION_HPP
-
-
-#include <boost/geometry/index/detail/algorithms/segment_intersection.hpp>
-
-#include <boost/geometry/strategies/default_length_result.hpp>
-
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-namespace dispatch {
-
-template <typename Indexable, typename Geometry, typename IndexableTag, typename GeometryTag>
-struct path_intersection
-{
- BOOST_MPL_ASSERT_MSG((false), NOT_IMPLEMENTED_FOR_THIS_GEOMETRY_OR_INDEXABLE, (path_intersection));
-};
-
-// TODO: FP type must be used as a relative distance type!
-// and default_distance_result can be some user-defined int type
-// BUT! This code is experimental and probably won't be released at all
-// since more flexible user-defined-nearest predicate should be added instead
-
-template <typename Indexable, typename Segment>
-struct path_intersection<Indexable, Segment, box_tag, segment_tag>
-{
- typedef typename default_distance_result<typename point_type<Segment>::type>::type comparable_distance_type;
-
- static inline bool apply(Indexable const& b, Segment const& segment, comparable_distance_type & comparable_distance)
- {
- typedef typename point_type<Segment>::type point_type;
- point_type p1, p2;
- geometry::detail::assign_point_from_index<0>(segment, p1);
- geometry::detail::assign_point_from_index<1>(segment, p2);
- return index::detail::segment_intersection(b, p1, p2, comparable_distance);
- }
-};
-
-template <typename Indexable, typename Linestring>
-struct path_intersection<Indexable, Linestring, box_tag, linestring_tag>
-{
- typedef typename default_length_result<Linestring>::type comparable_distance_type;
-
- static inline bool apply(Indexable const& b, Linestring const& path, comparable_distance_type & comparable_distance)
- {
- typedef typename ::boost::range_value<Linestring>::type point_type;
- typedef typename ::boost::range_const_iterator<Linestring>::type const_iterator;
- typedef typename ::boost::range_size<Linestring>::type size_type;
-
- const size_type count = ::boost::size(path);
-
- if ( count == 2 )
- {
- return index::detail::segment_intersection(b, *::boost::begin(path), *(::boost::begin(path)+1), comparable_distance);
- }
- else if ( 2 < count )
- {
- const_iterator it0 = ::boost::begin(path);
- const_iterator it1 = ::boost::begin(path) + 1;
- const_iterator last = ::boost::end(path);
-
- comparable_distance = 0;
-
- for ( ; it1 != last ; ++it0, ++it1 )
- {
- typename default_distance_result<point_type, point_type>::type
- dist = geometry::distance(*it0, *it1);
-
- comparable_distance_type rel_dist;
- if ( index::detail::segment_intersection(b, *it0, *it1, rel_dist) )
- {
- comparable_distance += dist * rel_dist;
- return true;
- }
- else
- comparable_distance += dist;
- }
- }
-
- return false;
- }
-};
-
-} // namespace dispatch
-
-template <typename Indexable, typename SegmentOrLinestring>
-struct default_path_intersection_distance_type
-{
- typedef typename dispatch::path_intersection<
- Indexable, SegmentOrLinestring,
- typename tag<Indexable>::type,
- typename tag<SegmentOrLinestring>::type
- >::comparable_distance_type type;
-};
-
-template <typename Indexable, typename SegmentOrLinestring> inline
-bool path_intersection(Indexable const& b,
- SegmentOrLinestring const& path,
- typename default_path_intersection_distance_type<Indexable, SegmentOrLinestring>::type & comparable_distance)
-{
- // TODO check Indexable and Linestring concepts
-
- return dispatch::path_intersection<
- Indexable, SegmentOrLinestring,
- typename tag<Indexable>::type,
- typename tag<SegmentOrLinestring>::type
- >::apply(b, path, comparable_distance);
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_PATH_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/segment_intersection.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/segment_intersection.hpp
deleted file mode 100644
index ec7a88f4909..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/segment_intersection.hpp
+++ /dev/null
@@ -1,146 +0,0 @@
-// Boost.Geometry Index
-//
-// n-dimensional box-segment intersection
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_SEGMENT_INTERSECTION_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_SEGMENT_INTERSECTION_HPP
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-//template <typename Indexable, typename Point>
-//struct default_relative_distance_type
-//{
-// typedef typename select_most_precise<
-// typename select_most_precise<
-// typename coordinate_type<Indexable>::type,
-// typename coordinate_type<Point>::type
-// >::type,
-// float // TODO - use bigger type, calculated from the size of coordinate types
-// >::type type;
-//
-//
-// BOOST_MPL_ASSERT_MSG((!::boost::is_unsigned<type>::value),
-// THIS_TYPE_SHOULDNT_BE_UNSIGNED, (type));
-//};
-
-namespace dispatch {
-
-template <typename Box, typename Point, size_t I>
-struct box_segment_intersection_dim
-{
- BOOST_STATIC_ASSERT(0 <= dimension<Box>::value);
- BOOST_STATIC_ASSERT(0 <= dimension<Point>::value);
- BOOST_STATIC_ASSERT(I < size_t(dimension<Box>::value));
- BOOST_STATIC_ASSERT(I < size_t(dimension<Point>::value));
- BOOST_STATIC_ASSERT(dimension<Point>::value == dimension<Box>::value);
-
- // WARNING! - RelativeDistance must be IEEE float for this to work
-
- template <typename RelativeDistance>
- static inline bool apply(Box const& b, Point const& p0, Point const& p1,
- RelativeDistance & t_near, RelativeDistance & t_far)
- {
- RelativeDistance ray_d = geometry::get<I>(p1) - geometry::get<I>(p0);
- RelativeDistance tn = ( geometry::get<min_corner, I>(b) - geometry::get<I>(p0) ) / ray_d;
- RelativeDistance tf = ( geometry::get<max_corner, I>(b) - geometry::get<I>(p0) ) / ray_d;
- if ( tf < tn )
- ::std::swap(tn, tf);
-
- if ( t_near < tn )
- t_near = tn;
- if ( tf < t_far )
- t_far = tf;
-
- return 0 <= t_far && t_near <= t_far;
- }
-};
-
-template <typename Box, typename Point, size_t CurrentDimension>
-struct box_segment_intersection
-{
- BOOST_STATIC_ASSERT(0 < CurrentDimension);
-
- typedef box_segment_intersection_dim<Box, Point, CurrentDimension - 1> for_dim;
-
- template <typename RelativeDistance>
- static inline bool apply(Box const& b, Point const& p0, Point const& p1,
- RelativeDistance & t_near, RelativeDistance & t_far)
- {
- return box_segment_intersection<Box, Point, CurrentDimension - 1>::apply(b, p0, p1, t_near, t_far)
- && for_dim::apply(b, p0, p1, t_near, t_far);
- }
-};
-
-template <typename Box, typename Point>
-struct box_segment_intersection<Box, Point, 1>
-{
- typedef box_segment_intersection_dim<Box, Point, 0> for_dim;
-
- template <typename RelativeDistance>
- static inline bool apply(Box const& b, Point const& p0, Point const& p1,
- RelativeDistance & t_near, RelativeDistance & t_far)
- {
- return for_dim::apply(b, p0, p1, t_near, t_far);
- }
-};
-
-template <typename Indexable, typename Point, typename Tag>
-struct segment_intersection
-{
- BOOST_MPL_ASSERT_MSG((false), NOT_IMPLEMENTED_FOR_THIS_GEOMETRY, (segment_intersection));
-};
-
-template <typename Indexable, typename Point>
-struct segment_intersection<Indexable, Point, point_tag>
-{
- BOOST_MPL_ASSERT_MSG((false), SEGMENT_POINT_INTERSECTION_UNAVAILABLE, (segment_intersection));
-};
-
-template <typename Indexable, typename Point>
-struct segment_intersection<Indexable, Point, box_tag>
-{
- typedef dispatch::box_segment_intersection<Indexable, Point, dimension<Indexable>::value> impl;
-
- template <typename RelativeDistance>
- static inline bool apply(Indexable const& b, Point const& p0, Point const& p1, RelativeDistance & relative_distance)
- {
-
-// TODO: this ASSERT CHECK is wrong for user-defined CoordinateTypes!
-
- static const bool check = !::boost::is_integral<RelativeDistance>::value;
- BOOST_MPL_ASSERT_MSG(check, RELATIVE_DISTANCE_MUST_BE_FLOATING_POINT_TYPE, (RelativeDistance));
-
- RelativeDistance t_near = -(::std::numeric_limits<RelativeDistance>::max)();
- RelativeDistance t_far = (::std::numeric_limits<RelativeDistance>::max)();
-
- return impl::apply(b, p0, p1, t_near, t_far) &&
- (t_near <= 1) &&
- ( relative_distance = 0 < t_near ? t_near : 0, true );
- }
-};
-
-} // namespace dispatch
-
-template <typename Indexable, typename Point, typename RelativeDistance> inline
-bool segment_intersection(Indexable const& b,
- Point const& p0,
- Point const& p1,
- RelativeDistance & relative_distance)
-{
- // TODO check Indexable and Point concepts
-
- return dispatch::segment_intersection<
- Indexable, Point,
- typename tag<Indexable>::type
- >::apply(b, p0, p1, relative_distance);
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_SEGMENT_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/smallest_for_indexable.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/smallest_for_indexable.hpp
deleted file mode 100644
index 3ca335d5a75..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/smallest_for_indexable.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-// Boost.Geometry Index
-//
-// Get smallest value calculated for indexable's dimensions, used in R-tree k nearest neighbors query
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_SMALLEST_FOR_INDEXABLE_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_SMALLEST_FOR_INDEXABLE_HPP
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template <
- typename Geometry,
- typename Indexable,
- typename IndexableTag,
- typename AlgoTag,
- size_t DimensionIndex>
-struct smallest_for_indexable_dimension
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_INDEXABLE_TAG_TYPE,
- (smallest_for_indexable_dimension));
-};
-
-template <
- typename Geometry,
- typename Indexable,
- typename IndexableTag,
- typename AlgoTag,
- size_t N>
-struct smallest_for_indexable
-{
- typedef typename smallest_for_indexable_dimension<
- Geometry, Indexable, IndexableTag, AlgoTag, N - 1
- >::result_type result_type;
-
- template <typename Data>
- inline static result_type apply(Geometry const& g, Indexable const& i, Data const& data)
- {
- result_type r1 = smallest_for_indexable<
- Geometry, Indexable, IndexableTag, AlgoTag, N - 1
- >::apply(g, i, data);
-
- result_type r2 = smallest_for_indexable_dimension<
- Geometry, Indexable, IndexableTag, AlgoTag, N - 1
- >::apply(g, i, data);
-
- return r1 < r2 ? r1 : r2;
- }
-};
-
-template <
- typename Geometry,
- typename Indexable,
- typename IndexableTag,
- typename AlgoTag>
-struct smallest_for_indexable<Geometry, Indexable, IndexableTag, AlgoTag, 1>
-{
- typedef typename smallest_for_indexable_dimension<
- Geometry, Indexable, IndexableTag, AlgoTag, 0
- >::result_type result_type;
-
- template <typename Data>
- inline static result_type apply(Geometry const& g, Indexable const& i, Data const& data)
- {
- return
- smallest_for_indexable_dimension<
- Geometry, Indexable, IndexableTag, AlgoTag, 0
- >::apply(g, i, data);
- }
-};
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_SMALLEST_FOR_INDEXABLE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/sum_for_indexable.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/sum_for_indexable.hpp
deleted file mode 100644
index 4aef36352ec..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/sum_for_indexable.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-// Boost.Geometry Index
-//
-// Sum values calculated for indexable's dimensions, used e.g. in R-tree k nearest neighbors query
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_SUM_FOR_INDEXABLE_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_SUM_FOR_INDEXABLE_HPP
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template <
- typename Geometry,
- typename Indexable,
- typename IndexableTag,
- typename AlgoTag,
- size_t DimensionIndex>
-struct sum_for_indexable_dimension
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_INDEXABLE_TAG_TYPE,
- (sum_for_indexable_dimension));
-};
-
-template <
- typename Geometry,
- typename Indexable,
- typename IndexableTag,
- typename AlgoTag,
- size_t N>
-struct sum_for_indexable
-{
- typedef typename sum_for_indexable_dimension<
- Geometry, Indexable, IndexableTag, AlgoTag, N - 1
- >::result_type result_type;
-
- inline static result_type apply(Geometry const& g, Indexable const& i)
- {
- return
- sum_for_indexable<
- Geometry, Indexable, IndexableTag, AlgoTag, N - 1
- >::apply(g, i) +
- sum_for_indexable_dimension<
- Geometry, Indexable, IndexableTag, AlgoTag, N - 1
- >::apply(g, i);
- }
-};
-
-template <
- typename Geometry,
- typename Indexable,
- typename IndexableTag,
- typename AlgoTag>
-struct sum_for_indexable<Geometry, Indexable, IndexableTag, AlgoTag, 1>
-{
- typedef typename sum_for_indexable_dimension<
- Geometry, Indexable, IndexableTag, AlgoTag, 0
- >::result_type result_type;
-
- inline static result_type apply(Geometry const& g, Indexable const& i)
- {
- return
- sum_for_indexable_dimension<
- Geometry, Indexable, IndexableTag, AlgoTag, 0
- >::apply(g, i);
- }
-};
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_SUM_FOR_INDEXABLE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/union_content.hpp b/contrib/restricted/boost/boost/geometry/index/detail/algorithms/union_content.hpp
deleted file mode 100644
index 3acdc3d1988..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/algorithms/union_content.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// Boost.Geometry Index
-//
-// boxes union/sum area/volume
-//
-// Copyright (c) 2008 Federico J. Fernandez.
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_UNION_CONTENT_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_UNION_CONTENT_HPP
-
-#include <boost/geometry/algorithms/expand.hpp>
-#include <boost/geometry/index/detail/algorithms/content.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-/**
- * \brief Compute the area of the union of b1 and b2
- */
-template <typename Box, typename Geometry>
-inline typename default_content_result<Box>::type union_content(Box const& b, Geometry const& g)
-{
- Box expanded_box(b);
- geometry::expand(expanded_box, g);
- return detail::content(expanded_box);
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_UNION_CONTENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/assert.hpp b/contrib/restricted/boost/boost/geometry/index/detail/assert.hpp
deleted file mode 100644
index 08889df4782..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/assert.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_ASSERT_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_ASSERT_HPP
-
-#include <boost/geometry/core/assert.hpp>
-
-#undef BOOST_GEOMETRY_INDEX_ASSERT
-
-#define BOOST_GEOMETRY_INDEX_ASSERT(CONDITION, TEXT_MSG) \
- BOOST_GEOMETRY_ASSERT_MSG(CONDITION, TEXT_MSG)
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_ASSERT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/bounded_view.hpp b/contrib/restricted/boost/boost/geometry/index/detail/bounded_view.hpp
deleted file mode 100644
index e5f489d76b6..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/bounded_view.hpp
+++ /dev/null
@@ -1,215 +0,0 @@
-// Boost.Geometry Index
-//
-// This view makes possible to treat some simple primitives as its bounding geometry
-// e.g. box, nsphere, etc.
-//
-// Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_BOUNDED_VIEW_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_BOUNDED_VIEW_HPP
-
-#include <boost/geometry/algorithms/envelope.hpp>
-
-namespace boost { namespace geometry {
-
-namespace index { namespace detail {
-
-template <typename Geometry,
- typename BoundingGeometry,
- typename Tag = typename geometry::tag<Geometry>::type,
- typename BoundingTag = typename geometry::tag<BoundingGeometry>::type,
- typename CSystem = typename geometry::coordinate_system<Geometry>::type>
-struct bounded_view
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THOSE_GEOMETRIES,
- (BoundingTag, Tag));
-};
-
-
-// Segment -> Box
-
-template <typename Segment, typename Box>
-struct bounded_view<Segment, Box, segment_tag, box_tag, cs::cartesian>
-{
-public:
- typedef typename geometry::coordinate_type<Box>::type coordinate_type;
-
- explicit bounded_view(Segment const& segment)
- : m_segment(segment)
- {}
-
- template <std::size_t Dimension>
- inline coordinate_type get_min() const
- {
- return boost::numeric_cast<coordinate_type>(
- (std::min)( geometry::get<0, Dimension>(m_segment),
- geometry::get<1, Dimension>(m_segment) ) );
- }
-
- template <std::size_t Dimension>
- inline coordinate_type get_max() const
- {
- return boost::numeric_cast<coordinate_type>(
- (std::max)( geometry::get<0, Dimension>(m_segment),
- geometry::get<1, Dimension>(m_segment) ) );
- }
-
-private:
- Segment const& m_segment;
-};
-
-template <typename Segment, typename Box, typename CSystem>
-struct bounded_view<Segment, Box, segment_tag, box_tag, CSystem>
-{
-public:
- typedef typename geometry::coordinate_type<Box>::type coordinate_type;
-
- explicit bounded_view(Segment const& segment)
- {
- geometry::envelope(segment, m_box);
- }
-
- template <std::size_t Dimension>
- inline coordinate_type get_min() const
- {
- return geometry::get<min_corner, Dimension>(m_box);
- }
-
- template <std::size_t Dimension>
- inline coordinate_type get_max() const
- {
- return geometry::get<max_corner, Dimension>(m_box);
- }
-
-private:
- Box m_box;
-};
-
-// Box -> Box
-
-template <typename BoxIn, typename Box, typename CSystem>
-struct bounded_view<BoxIn, Box, box_tag, box_tag, CSystem>
-{
-public:
- typedef typename geometry::coordinate_type<Box>::type coordinate_type;
-
- explicit bounded_view(BoxIn const& box)
- : m_box(box)
- {}
-
- template <std::size_t Dimension>
- inline coordinate_type get_min() const
- {
- return boost::numeric_cast<coordinate_type>(
- geometry::get<min_corner, Dimension>(m_box) );
- }
-
- template <std::size_t Dimension>
- inline coordinate_type get_max() const
- {
- return boost::numeric_cast<coordinate_type>(
- geometry::get<max_corner, Dimension>(m_box) );
- }
-
-private:
- BoxIn const& m_box;
-};
-
-// Point -> Box
-
-template <typename Point, typename Box, typename CSystem>
-struct bounded_view<Point, Box, point_tag, box_tag, CSystem>
-{
-public:
- typedef typename geometry::coordinate_type<Box>::type coordinate_type;
-
- explicit bounded_view(Point const& point)
- : m_point(point)
- {}
-
- template <std::size_t Dimension>
- inline coordinate_type get_min() const
- {
- return boost::numeric_cast<coordinate_type>(
- geometry::get<Dimension>(m_point) );
- }
-
- template <std::size_t Dimension>
- inline coordinate_type get_max() const
- {
- return boost::numeric_cast<coordinate_type>(
- geometry::get<Dimension>(m_point) );
- }
-
-private:
- Point const& m_point;
-};
-
-}} // namespace index::detail
-
-// XXX -> Box
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename Geometry, typename Box, typename Tag, typename CSystem>
-struct tag< index::detail::bounded_view<Geometry, Box, Tag, box_tag, CSystem> >
-{
- typedef box_tag type;
-};
-
-template <typename Geometry, typename Box, typename Tag, typename CSystem>
-struct point_type< index::detail::bounded_view<Geometry, Box, Tag, box_tag, CSystem> >
-{
- typedef typename point_type<Box>::type type;
-};
-
-template <typename Geometry, typename Box, typename Tag, typename CSystem, std::size_t Dimension>
-struct indexed_access<index::detail::bounded_view<Geometry, Box, Tag, box_tag, CSystem>,
- min_corner, Dimension>
-{
- typedef index::detail::bounded_view<Geometry, Box, Tag, box_tag, CSystem> box_type;
- typedef typename geometry::coordinate_type<Box>::type coordinate_type;
-
- static inline coordinate_type get(box_type const& b)
- {
- return b.template get_min<Dimension>();
- }
-
- //static inline void set(box_type & b, coordinate_type const& value)
- //{
- // BOOST_GEOMETRY_INDEX_ASSERT(false, "unable to modify a box through view");
- //}
-};
-
-template <typename Geometry, typename Box, typename Tag, typename CSystem, std::size_t Dimension>
-struct indexed_access<index::detail::bounded_view<Geometry, Box, Tag, box_tag, CSystem>,
- max_corner, Dimension>
-{
- typedef index::detail::bounded_view<Geometry, Box, Tag, box_tag, CSystem> box_type;
- typedef typename geometry::coordinate_type<Box>::type coordinate_type;
-
- static inline coordinate_type get(box_type const& b)
- {
- return b.template get_max<Dimension>();
- }
-
- //static inline void set(box_type & b, coordinate_type const& value)
- //{
- // BOOST_GEOMETRY_INDEX_ASSERT(false, "unable to modify a box through view");
- //}
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_BOUNDED_VIEW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/config_begin.hpp b/contrib/restricted/boost/boost/geometry/index/detail/config_begin.hpp
deleted file mode 100644
index 21c346012b3..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/config_begin.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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/config.hpp>
-
-#ifdef BOOST_MSVC
-
- #pragma warning (push)
- #pragma warning (disable : 4512) // assignment operator could not be generated
- #pragma warning (disable : 4127) // conditional expression is constant
-
- // temporary?
- #pragma warning (disable : 4180) // qualifier applied to function type has no meaning
-
-#endif //BOOST_MSVC
-
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/config_end.hpp b/contrib/restricted/boost/boost/geometry/index/detail/config_end.hpp
deleted file mode 100644
index d144c33698d..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/config_end.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_MSVC
- #pragma warning (pop)
-#endif
-
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/distance_predicates.hpp b/contrib/restricted/boost/boost/geometry/index/detail/distance_predicates.hpp
deleted file mode 100644
index 9a9371df95f..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/distance_predicates.hpp
+++ /dev/null
@@ -1,161 +0,0 @@
-// Boost.Geometry Index
-//
-// Spatial index distance predicates, calculators and checkers
-// used in nearest query - specialized for envelopes
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_DISTANCE_PREDICATES_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_DISTANCE_PREDICATES_HPP
-
-#include <boost/geometry/index/detail/algorithms/comparable_distance_near.hpp>
-#include <boost/geometry/index/detail/algorithms/comparable_distance_far.hpp>
-#include <boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp>
-#include <boost/geometry/index/detail/algorithms/path_intersection.hpp>
-
-#include <boost/geometry/index/detail/tags.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-// ------------------------------------------------------------------ //
-// relations
-// ------------------------------------------------------------------ //
-
-template <typename T>
-struct to_nearest
-{
- to_nearest(T const& v) : value(v) {}
- T value;
-};
-
-template <typename T>
-struct to_centroid
-{
- to_centroid(T const& v) : value(v) {}
- T value;
-};
-
-template <typename T>
-struct to_furthest
-{
- to_furthest(T const& v) : value(v) {}
- T value;
-};
-
-// tags
-
-struct to_nearest_tag {};
-struct to_centroid_tag {};
-struct to_furthest_tag {};
-
-// ------------------------------------------------------------------ //
-// relation traits and access
-// ------------------------------------------------------------------ //
-
-template <typename T>
-struct relation
-{
- typedef T value_type;
- typedef to_nearest_tag tag;
- static inline T const& value(T const& v) { return v; }
- static inline T & value(T & v) { return v; }
-};
-
-template <typename T>
-struct relation< to_nearest<T> >
-{
- typedef T value_type;
- typedef to_nearest_tag tag;
- static inline T const& value(to_nearest<T> const& r) { return r.value; }
- static inline T & value(to_nearest<T> & r) { return r.value; }
-};
-
-template <typename T>
-struct relation< to_centroid<T> >
-{
- typedef T value_type;
- typedef to_centroid_tag tag;
- static inline T const& value(to_centroid<T> const& r) { return r.value; }
- static inline T & value(to_centroid<T> & r) { return r.value; }
-};
-
-template <typename T>
-struct relation< to_furthest<T> >
-{
- typedef T value_type;
- typedef to_furthest_tag tag;
- static inline T const& value(to_furthest<T> const& r) { return r.value; }
- static inline T & value(to_furthest<T> & r) { return r.value; }
-};
-
-// ------------------------------------------------------------------ //
-// calculate_distance
-// ------------------------------------------------------------------ //
-
-template <typename Predicate, typename Indexable, typename Tag>
-struct calculate_distance
-{
- BOOST_MPL_ASSERT_MSG((false), INVALID_PREDICATE_OR_TAG, (calculate_distance));
-};
-
-// this handles nearest() with default Point parameter, to_nearest() and bounds
-template <typename PointRelation, typename Indexable, typename Tag>
-struct calculate_distance< predicates::nearest<PointRelation>, Indexable, Tag >
-{
- typedef detail::relation<PointRelation> relation;
- typedef typename relation::value_type point_type;
- typedef typename geometry::default_comparable_distance_result<point_type, Indexable>::type result_type;
-
- static inline bool apply(predicates::nearest<PointRelation> const& p, Indexable const& i, result_type & result)
- {
- result = geometry::comparable_distance(relation::value(p.point_or_relation), i);
- return true;
- }
-};
-
-template <typename Point, typename Indexable>
-struct calculate_distance< predicates::nearest< to_centroid<Point> >, Indexable, value_tag>
-{
- typedef Point point_type;
- typedef typename geometry::default_comparable_distance_result<point_type, Indexable>::type result_type;
-
- static inline bool apply(predicates::nearest< to_centroid<Point> > const& p, Indexable const& i, result_type & result)
- {
- result = index::detail::comparable_distance_centroid(p.point_or_relation.value, i);
- return true;
- }
-};
-
-template <typename Point, typename Indexable>
-struct calculate_distance< predicates::nearest< to_furthest<Point> >, Indexable, value_tag>
-{
- typedef Point point_type;
- typedef typename geometry::default_comparable_distance_result<point_type, Indexable>::type result_type;
-
- static inline bool apply(predicates::nearest< to_furthest<Point> > const& p, Indexable const& i, result_type & result)
- {
- result = index::detail::comparable_distance_far(p.point_or_relation.value, i);
- return true;
- }
-};
-
-template <typename SegmentOrLinestring, typename Indexable, typename Tag>
-struct calculate_distance< predicates::path<SegmentOrLinestring>, Indexable, Tag>
-{
- typedef typename index::detail::default_path_intersection_distance_type<
- Indexable, SegmentOrLinestring
- >::type result_type;
-
- static inline bool apply(predicates::path<SegmentOrLinestring> const& p, Indexable const& i, result_type & result)
- {
- return index::detail::path_intersection(i, p.geometry, result);
- }
-};
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_RTREE_DISTANCE_PREDICATES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/exception.hpp b/contrib/restricted/boost/boost/geometry/index/detail/exception.hpp
deleted file mode 100644
index e2090533e7e..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/exception.hpp
+++ /dev/null
@@ -1,87 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_EXCEPTION_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_EXCEPTION_HPP
-
-#include <boost/core/no_exceptions_support.hpp>
-
-#ifndef BOOST_NO_EXCEPTIONS
-#include <stdexcept>
-#include <boost/throw_exception.hpp>
-#else
-#include <cstdlib>
-#include <boost/geometry/index/detail/assert.hpp>
-#endif
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-#ifndef BOOST_NO_EXCEPTIONS
-
-inline void throw_runtime_error(const char * str)
-{
- BOOST_THROW_EXCEPTION(std::runtime_error(str));
-}
-
-inline void throw_logic_error(const char * str)
-{
- BOOST_THROW_EXCEPTION(std::logic_error(str));
-}
-
-inline void throw_invalid_argument(const char * str)
-{
- BOOST_THROW_EXCEPTION(std::invalid_argument(str));
-}
-
-inline void throw_length_error(const char * str)
-{
- BOOST_THROW_EXCEPTION(std::length_error(str));
-}
-
-inline void throw_out_of_range(const char * str)
-{
- BOOST_THROW_EXCEPTION(std::out_of_range(str));
-}
-
-#else
-
-inline void throw_runtime_error(const char * str)
-{
- BOOST_GEOMETRY_INDEX_ASSERT(!"runtime_error thrown", str);
- std::abort();
-}
-
-inline void throw_logic_error(const char * str)
-{
- BOOST_GEOMETRY_INDEX_ASSERT(!"logic_error thrown", str);
- std::abort();
-}
-
-inline void throw_invalid_argument(const char * str)
-{
- BOOST_GEOMETRY_INDEX_ASSERT(!"invalid_argument thrown", str);
- std::abort();
-}
-
-inline void throw_length_error(const char * str)
-{
- BOOST_GEOMETRY_INDEX_ASSERT(!"length_error thrown", str);
- std::abort();
-}
-
-inline void throw_out_of_range(const char * str)
-{
- BOOST_GEOMETRY_INDEX_ASSERT(!"out_of_range thrown", str);
- std::abort();
-}
-
-#endif
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXCEPTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/is_bounding_geometry.hpp b/contrib/restricted/boost/boost/geometry/index/detail/is_bounding_geometry.hpp
deleted file mode 100644
index d14204af71c..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/is_bounding_geometry.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_IS_BOUNDING_GEOMETRY_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_IS_BOUNDING_GEOMETRY_HPP
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template
-<
- typename Geometry,
- typename Tag = typename geometry::tag<Geometry>::type
->
-struct is_bounding_geometry
-{
- static const bool value = false;
-};
-
-template <typename Box>
-struct is_bounding_geometry<Box, box_tag>
-{
- static const bool value = true;
-};
-
-}}}} // namespave boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_IS_BOUNDING_GEOMETRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/is_indexable.hpp b/contrib/restricted/boost/boost/geometry/index/detail/is_indexable.hpp
deleted file mode 100644
index 1e86463a379..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/is_indexable.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_IS_INDEXABLE_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_IS_INDEXABLE_HPP
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template
-<
- typename Geometry,
- typename Tag = typename geometry::tag<Geometry>::type
->
-struct is_indexable
-{
- static const bool value = false;
-};
-
-template <typename Point>
-struct is_indexable<Point, geometry::point_tag>
-{
- static const bool value = true;
-};
-
-template <typename Box>
-struct is_indexable<Box, geometry::box_tag>
-{
- static const bool value = true;
-};
-
-template <typename Segment>
-struct is_indexable<Segment, geometry::segment_tag>
-{
- static const bool value = true;
-};
-
-}}}} // namespave boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_IS_INDEXABLE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/meta.hpp b/contrib/restricted/boost/boost/geometry/index/detail/meta.hpp
deleted file mode 100644
index bec1380b068..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/meta.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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/range.hpp>
-#include <boost/mpl/aux_/has_type.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/and.hpp>
-//#include <boost/type_traits/is_convertible.hpp>
-
-#ifndef BOOST_GEOMETRY_INDEX_DETAIL_META_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_META_HPP
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template <typename T>
-struct is_range
- : ::boost::mpl::aux::has_type< ::boost::range_iterator<T> >
-{};
-
-//template <typename T, typename V, bool IsRange>
-//struct is_range_of_convertible_values_impl
-// : ::boost::is_convertible<typename ::boost::range_value<T>::type, V>
-//{};
-//
-//template <typename T, typename V>
-//struct is_range_of_convertible_values_impl<T, V, false>
-// : ::boost::mpl::bool_<false>
-//{};
-//
-//template <typename T, typename V>
-//struct is_range_of_convertible_values
-// : is_range_of_convertible_values_impl<T, V, is_range<T>::value>
-//{};
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_META_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/predicates.hpp b/contrib/restricted/boost/boost/geometry/index/detail/predicates.hpp
deleted file mode 100644
index 72c6c661b72..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/predicates.hpp
+++ /dev/null
@@ -1,831 +0,0 @@
-// Boost.Geometry Index
-//
-// Spatial query predicates definition and checks.
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_PREDICATES_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_PREDICATES_HPP
-
-//#include <utility>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/tuple/tuple.hpp>
-
-#include <boost/geometry/index/detail/tags.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-namespace predicates {
-
-// ------------------------------------------------------------------ //
-// predicates
-// ------------------------------------------------------------------ //
-
-template <typename Fun, bool IsFunction>
-struct satisfies_impl
-{
- satisfies_impl() : fun(NULL) {}
- satisfies_impl(Fun f) : fun(f) {}
- Fun * fun;
-};
-
-template <typename Fun>
-struct satisfies_impl<Fun, false>
-{
- satisfies_impl() {}
- satisfies_impl(Fun const& f) : fun(f) {}
- Fun fun;
-};
-
-template <typename Fun, bool Negated>
-struct satisfies
- : satisfies_impl<Fun, ::boost::is_function<Fun>::value>
-{
- typedef satisfies_impl<Fun, ::boost::is_function<Fun>::value> base;
-
- satisfies() {}
- satisfies(Fun const& f) : base(f) {}
- satisfies(base const& b) : base(b) {}
-};
-
-// ------------------------------------------------------------------ //
-
-struct contains_tag {};
-struct covered_by_tag {};
-struct covers_tag {};
-struct disjoint_tag {};
-struct intersects_tag {};
-struct overlaps_tag {};
-struct touches_tag {};
-struct within_tag {};
-
-template <typename Geometry, typename Tag, bool Negated>
-struct spatial_predicate
-{
- spatial_predicate() {}
- spatial_predicate(Geometry const& g) : geometry(g) {}
- Geometry geometry;
-};
-
-// ------------------------------------------------------------------ //
-
-// CONSIDER: separated nearest<> and path<> may be replaced by
-// nearest_predicate<Geometry, Tag>
-// where Tag = point_tag | path_tag
-// IMPROVEMENT: user-defined nearest predicate allowing to define
-// all or only geometrical aspects of the search
-
-template <typename PointOrRelation>
-struct nearest
-{
- nearest()
-// : count(0)
- {}
- nearest(PointOrRelation const& por, unsigned k)
- : point_or_relation(por)
- , count(k)
- {}
- PointOrRelation point_or_relation;
- unsigned count;
-};
-
-template <typename SegmentOrLinestring>
-struct path
-{
- path()
-// : count(0)
- {}
- path(SegmentOrLinestring const& g, unsigned k)
- : geometry(g)
- , count(k)
- {}
- SegmentOrLinestring geometry;
- unsigned count;
-};
-
-} // namespace predicates
-
-// ------------------------------------------------------------------ //
-// predicate_check
-// ------------------------------------------------------------------ //
-
-template <typename Predicate, typename Tag>
-struct predicate_check
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_PREDICATE_OR_TAG,
- (predicate_check));
-};
-
-// ------------------------------------------------------------------ //
-
-template <typename Fun>
-struct predicate_check<predicates::satisfies<Fun, false>, value_tag>
-{
- template <typename Value, typename Indexable>
- static inline bool apply(predicates::satisfies<Fun, false> const& p, Value const& v, Indexable const&)
- {
- return p.fun(v);
- }
-};
-
-template <typename Fun>
-struct predicate_check<predicates::satisfies<Fun, true>, value_tag>
-{
- template <typename Value, typename Indexable>
- static inline bool apply(predicates::satisfies<Fun, true> const& p, Value const& v, Indexable const&)
- {
- return !p.fun(v);
- }
-};
-
-// ------------------------------------------------------------------ //
-
-template <typename Tag>
-struct spatial_predicate_call
-{
- BOOST_MPL_ASSERT_MSG(false, NOT_IMPLEMENTED_FOR_THIS_TAG, (Tag));
-};
-
-template <>
-struct spatial_predicate_call<predicates::contains_tag>
-{
- template <typename G1, typename G2>
- static inline bool apply(G1 const& g1, G2 const& g2)
- {
- return geometry::within(g2, g1);
- }
-};
-
-template <>
-struct spatial_predicate_call<predicates::covered_by_tag>
-{
- template <typename G1, typename G2>
- static inline bool apply(G1 const& g1, G2 const& g2)
- {
- return geometry::covered_by(g1, g2);
- }
-};
-
-template <>
-struct spatial_predicate_call<predicates::covers_tag>
-{
- template <typename G1, typename G2>
- static inline bool apply(G1 const& g1, G2 const& g2)
- {
- return geometry::covered_by(g2, g1);
- }
-};
-
-template <>
-struct spatial_predicate_call<predicates::disjoint_tag>
-{
- template <typename G1, typename G2>
- static inline bool apply(G1 const& g1, G2 const& g2)
- {
- return geometry::disjoint(g1, g2);
- }
-};
-
-template <>
-struct spatial_predicate_call<predicates::intersects_tag>
-{
- template <typename G1, typename G2>
- static inline bool apply(G1 const& g1, G2 const& g2)
- {
- return geometry::intersects(g1, g2);
- }
-};
-
-template <>
-struct spatial_predicate_call<predicates::overlaps_tag>
-{
- template <typename G1, typename G2>
- static inline bool apply(G1 const& g1, G2 const& g2)
- {
- return geometry::overlaps(g1, g2);
- }
-};
-
-template <>
-struct spatial_predicate_call<predicates::touches_tag>
-{
- template <typename G1, typename G2>
- static inline bool apply(G1 const& g1, G2 const& g2)
- {
- return geometry::touches(g1, g2);
- }
-};
-
-template <>
-struct spatial_predicate_call<predicates::within_tag>
-{
- template <typename G1, typename G2>
- static inline bool apply(G1 const& g1, G2 const& g2)
- {
- return geometry::within(g1, g2);
- }
-};
-
-// ------------------------------------------------------------------ //
-
-// spatial predicate
-template <typename Geometry, typename Tag>
-struct predicate_check<predicates::spatial_predicate<Geometry, Tag, false>, value_tag>
-{
- typedef predicates::spatial_predicate<Geometry, Tag, false> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return spatial_predicate_call<Tag>::apply(i, p.geometry);
- }
-};
-
-// negated spatial predicate
-template <typename Geometry, typename Tag>
-struct predicate_check<predicates::spatial_predicate<Geometry, Tag, true>, value_tag>
-{
- typedef predicates::spatial_predicate<Geometry, Tag, true> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return !spatial_predicate_call<Tag>::apply(i, p.geometry);
- }
-};
-
-// ------------------------------------------------------------------ //
-
-template <typename DistancePredicates>
-struct predicate_check<predicates::nearest<DistancePredicates>, value_tag>
-{
- template <typename Value, typename Box>
- static inline bool apply(predicates::nearest<DistancePredicates> const&, Value const&, Box const&)
- {
- return true;
- }
-};
-
-template <typename Linestring>
-struct predicate_check<predicates::path<Linestring>, value_tag>
-{
- template <typename Value, typename Box>
- static inline bool apply(predicates::path<Linestring> const&, Value const&, Box const&)
- {
- return true;
- }
-};
-
-// ------------------------------------------------------------------ //
-// predicates_check for bounds
-// ------------------------------------------------------------------ //
-
-template <typename Fun, bool Negated>
-struct predicate_check<predicates::satisfies<Fun, Negated>, bounds_tag>
-{
- template <typename Value, typename Box>
- static bool apply(predicates::satisfies<Fun, Negated> const&, Value const&, Box const&)
- {
- return true;
- }
-};
-
-// ------------------------------------------------------------------ //
-
-// NOT NEGATED
-// value_tag bounds_tag
-// ---------------------------
-// contains(I,G) covers(I,G)
-// covered_by(I,G) intersects(I,G)
-// covers(I,G) covers(I,G)
-// disjoint(I,G) !covered_by(I,G)
-// intersects(I,G) intersects(I,G)
-// overlaps(I,G) intersects(I,G) - possibly change to the version without border case, e.g. intersects_without_border(0,0x1,1, 1,1x2,2) should give false
-// touches(I,G) intersects(I,G)
-// within(I,G) intersects(I,G) - possibly change to the version without border case, e.g. intersects_without_border(0,0x1,1, 1,1x2,2) should give false
-
-// spatial predicate - default
-template <typename Geometry, typename Tag>
-struct predicate_check<predicates::spatial_predicate<Geometry, Tag, false>, bounds_tag>
-{
- typedef predicates::spatial_predicate<Geometry, Tag, false> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return spatial_predicate_call<predicates::intersects_tag>::apply(i, p.geometry);
- }
-};
-
-// spatial predicate - contains
-template <typename Geometry>
-struct predicate_check<predicates::spatial_predicate<Geometry, predicates::contains_tag, false>, bounds_tag>
-{
- typedef predicates::spatial_predicate<Geometry, predicates::contains_tag, false> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return spatial_predicate_call<predicates::covers_tag>::apply(i, p.geometry);
- }
-};
-
-// spatial predicate - covers
-template <typename Geometry>
-struct predicate_check<predicates::spatial_predicate<Geometry, predicates::covers_tag, false>, bounds_tag>
-{
- typedef predicates::spatial_predicate<Geometry, predicates::covers_tag, false> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return spatial_predicate_call<predicates::covers_tag>::apply(i, p.geometry);
- }
-};
-
-// spatial predicate - disjoint
-template <typename Geometry>
-struct predicate_check<predicates::spatial_predicate<Geometry, predicates::disjoint_tag, false>, bounds_tag>
-{
- typedef predicates::spatial_predicate<Geometry, predicates::disjoint_tag, false> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return !spatial_predicate_call<predicates::covered_by_tag>::apply(i, p.geometry);
- }
-};
-
-// NEGATED
-// value_tag bounds_tag
-// ---------------------------
-// !contains(I,G) TRUE
-// !covered_by(I,G) !covered_by(I,G)
-// !covers(I,G) TRUE
-// !disjoint(I,G) !disjoint(I,G)
-// !intersects(I,G) !covered_by(I,G)
-// !overlaps(I,G) TRUE
-// !touches(I,G) !intersects(I,G)
-// !within(I,G) !within(I,G)
-
-// negated spatial predicate - default
-template <typename Geometry, typename Tag>
-struct predicate_check<predicates::spatial_predicate<Geometry, Tag, true>, bounds_tag>
-{
- typedef predicates::spatial_predicate<Geometry, Tag, true> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return !spatial_predicate_call<Tag>::apply(i, p.geometry);
- }
-};
-
-// negated spatial predicate - contains
-template <typename Geometry>
-struct predicate_check<predicates::spatial_predicate<Geometry, predicates::contains_tag, true>, bounds_tag>
-{
- typedef predicates::spatial_predicate<Geometry, predicates::contains_tag, true> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& , Value const&, Indexable const& )
- {
- return true;
- }
-};
-
-// negated spatial predicate - covers
-template <typename Geometry>
-struct predicate_check<predicates::spatial_predicate<Geometry, predicates::covers_tag, true>, bounds_tag>
-{
- typedef predicates::spatial_predicate<Geometry, predicates::covers_tag, true> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& , Value const&, Indexable const& )
- {
- return true;
- }
-};
-
-// negated spatial predicate - intersects
-template <typename Geometry>
-struct predicate_check<predicates::spatial_predicate<Geometry, predicates::intersects_tag, true>, bounds_tag>
-{
- typedef predicates::spatial_predicate<Geometry, predicates::intersects_tag, true> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return !spatial_predicate_call<predicates::covered_by_tag>::apply(i, p.geometry);
- }
-};
-
-// negated spatial predicate - overlaps
-template <typename Geometry>
-struct predicate_check<predicates::spatial_predicate<Geometry, predicates::overlaps_tag, true>, bounds_tag>
-{
- typedef predicates::spatial_predicate<Geometry, predicates::overlaps_tag, true> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& , Value const&, Indexable const& )
- {
- return true;
- }
-};
-
-// negated spatial predicate - touches
-template <typename Geometry>
-struct predicate_check<predicates::spatial_predicate<Geometry, predicates::touches_tag, true>, bounds_tag>
-{
- typedef predicates::spatial_predicate<Geometry, predicates::touches_tag, true> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return !spatial_predicate_call<predicates::intersects_tag>::apply(i, p.geometry);
- }
-};
-
-// ------------------------------------------------------------------ //
-
-template <typename DistancePredicates>
-struct predicate_check<predicates::nearest<DistancePredicates>, bounds_tag>
-{
- template <typename Value, typename Box>
- static inline bool apply(predicates::nearest<DistancePredicates> const&, Value const&, Box const&)
- {
- return true;
- }
-};
-
-template <typename Linestring>
-struct predicate_check<predicates::path<Linestring>, bounds_tag>
-{
- template <typename Value, typename Box>
- static inline bool apply(predicates::path<Linestring> const&, Value const&, Box const&)
- {
- return true;
- }
-};
-
-// ------------------------------------------------------------------ //
-// predicates_length
-// ------------------------------------------------------------------ //
-
-template <typename T>
-struct predicates_length
-{
- static const unsigned value = 1;
-};
-
-//template <typename F, typename S>
-//struct predicates_length< std::pair<F, S> >
-//{
-// static const unsigned value = 2;
-//};
-
-//template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
-//struct predicates_length< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
-//{
-// static const unsigned value = boost::tuples::length< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >::value;
-//};
-
-template <typename Head, typename Tail>
-struct predicates_length< boost::tuples::cons<Head, Tail> >
-{
- static const unsigned value = boost::tuples::length< boost::tuples::cons<Head, Tail> >::value;
-};
-
-// ------------------------------------------------------------------ //
-// predicates_element
-// ------------------------------------------------------------------ //
-
-template <unsigned I, typename T>
-struct predicates_element
-{
- BOOST_MPL_ASSERT_MSG((I < 1), INVALID_INDEX, (predicates_element));
- typedef T type;
- static type const& get(T const& p) { return p; }
-};
-
-//template <unsigned I, typename F, typename S>
-//struct predicates_element< I, std::pair<F, S> >
-//{
-// BOOST_MPL_ASSERT_MSG((I < 2), INVALID_INDEX, (predicates_element));
-//
-// typedef F type;
-// static type const& get(std::pair<F, S> const& p) { return p.first; }
-//};
-//
-//template <typename F, typename S>
-//struct predicates_element< 1, std::pair<F, S> >
-//{
-// typedef S type;
-// static type const& get(std::pair<F, S> const& p) { return p.second; }
-//};
-//
-//template <unsigned I, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
-//struct predicates_element< I, boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
-//{
-// typedef boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> predicate_type;
-//
-// typedef typename boost::tuples::element<I, predicate_type>::type type;
-// static type const& get(predicate_type const& p) { return boost::get<I>(p); }
-//};
-
-template <unsigned I, typename Head, typename Tail>
-struct predicates_element< I, boost::tuples::cons<Head, Tail> >
-{
- typedef boost::tuples::cons<Head, Tail> predicate_type;
-
- typedef typename boost::tuples::element<I, predicate_type>::type type;
- static type const& get(predicate_type const& p) { return boost::get<I>(p); }
-};
-
-// ------------------------------------------------------------------ //
-// predicates_check
-// ------------------------------------------------------------------ //
-
-//template <typename PairPredicates, typename Tag, unsigned First, unsigned Last>
-//struct predicates_check_pair {};
-//
-//template <typename PairPredicates, typename Tag, unsigned I>
-//struct predicates_check_pair<PairPredicates, Tag, I, I>
-//{
-// template <typename Value, typename Indexable>
-// static inline bool apply(PairPredicates const& , Value const& , Indexable const& )
-// {
-// return true;
-// }
-//};
-//
-//template <typename PairPredicates, typename Tag>
-//struct predicates_check_pair<PairPredicates, Tag, 0, 1>
-//{
-// template <typename Value, typename Indexable>
-// static inline bool apply(PairPredicates const& p, Value const& v, Indexable const& i)
-// {
-// return predicate_check<typename PairPredicates::first_type, Tag>::apply(p.first, v, i);
-// }
-//};
-//
-//template <typename PairPredicates, typename Tag>
-//struct predicates_check_pair<PairPredicates, Tag, 1, 2>
-//{
-// template <typename Value, typename Indexable>
-// static inline bool apply(PairPredicates const& p, Value const& v, Indexable const& i)
-// {
-// return predicate_check<typename PairPredicates::second_type, Tag>::apply(p.second, v, i);
-// }
-//};
-//
-//template <typename PairPredicates, typename Tag>
-//struct predicates_check_pair<PairPredicates, Tag, 0, 2>
-//{
-// template <typename Value, typename Indexable>
-// static inline bool apply(PairPredicates const& p, Value const& v, Indexable const& i)
-// {
-// return predicate_check<typename PairPredicates::first_type, Tag>::apply(p.first, v, i)
-// && predicate_check<typename PairPredicates::second_type, Tag>::apply(p.second, v, i);
-// }
-//};
-
-template <typename TuplePredicates, typename Tag, unsigned First, unsigned Last>
-struct predicates_check_tuple
-{
- template <typename Value, typename Indexable>
- static inline bool apply(TuplePredicates const& p, Value const& v, Indexable const& i)
- {
- return
- predicate_check<
- typename boost::tuples::element<First, TuplePredicates>::type,
- Tag
- >::apply(boost::get<First>(p), v, i) &&
- predicates_check_tuple<TuplePredicates, Tag, First+1, Last>::apply(p, v, i);
- }
-};
-
-template <typename TuplePredicates, typename Tag, unsigned First>
-struct predicates_check_tuple<TuplePredicates, Tag, First, First>
-{
- template <typename Value, typename Indexable>
- static inline bool apply(TuplePredicates const& , Value const& , Indexable const& )
- {
- return true;
- }
-};
-
-template <typename Predicate, typename Tag, unsigned First, unsigned Last>
-struct predicates_check_impl
-{
- static const bool check = First < 1 && Last <= 1 && First <= Last;
- BOOST_MPL_ASSERT_MSG((check), INVALID_INDEXES, (predicates_check_impl));
-
- template <typename Value, typename Indexable>
- static inline bool apply(Predicate const& p, Value const& v, Indexable const& i)
- {
- return predicate_check<Predicate, Tag>::apply(p, v, i);
- }
-};
-
-//template <typename Predicate1, typename Predicate2, typename Tag, size_t First, size_t Last>
-//struct predicates_check_impl<std::pair<Predicate1, Predicate2>, Tag, First, Last>
-//{
-// BOOST_MPL_ASSERT_MSG((First < 2 && Last <= 2 && First <= Last), INVALID_INDEXES, (predicates_check_impl));
-//
-// template <typename Value, typename Indexable>
-// static inline bool apply(std::pair<Predicate1, Predicate2> const& p, Value const& v, Indexable const& i)
-// {
-// return predicate_check<Predicate1, Tag>::apply(p.first, v, i)
-// && predicate_check<Predicate2, Tag>::apply(p.second, v, i);
-// }
-//};
-//
-//template <
-// typename T0, typename T1, typename T2, typename T3, typename T4,
-// typename T5, typename T6, typename T7, typename T8, typename T9,
-// typename Tag, unsigned First, unsigned Last
-//>
-//struct predicates_check_impl<
-// boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>,
-// Tag, First, Last
-//>
-//{
-// typedef boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> predicates_type;
-//
-// static const unsigned pred_len = boost::tuples::length<predicates_type>::value;
-// BOOST_MPL_ASSERT_MSG((First < pred_len && Last <= pred_len && First <= Last), INVALID_INDEXES, (predicates_check_impl));
-//
-// template <typename Value, typename Indexable>
-// static inline bool apply(predicates_type const& p, Value const& v, Indexable const& i)
-// {
-// return predicates_check_tuple<
-// predicates_type,
-// Tag, First, Last
-// >::apply(p, v, i);
-// }
-//};
-
-template <typename Head, typename Tail, typename Tag, unsigned First, unsigned Last>
-struct predicates_check_impl<
- boost::tuples::cons<Head, Tail>,
- Tag, First, Last
->
-{
- typedef boost::tuples::cons<Head, Tail> predicates_type;
-
- static const unsigned pred_len = boost::tuples::length<predicates_type>::value;
- static const bool check = First < pred_len && Last <= pred_len && First <= Last;
- BOOST_MPL_ASSERT_MSG((check), INVALID_INDEXES, (predicates_check_impl));
-
- template <typename Value, typename Indexable>
- static inline bool apply(predicates_type const& p, Value const& v, Indexable const& i)
- {
- return predicates_check_tuple<
- predicates_type,
- Tag, First, Last
- >::apply(p, v, i);
- }
-};
-
-template <typename Tag, unsigned First, unsigned Last, typename Predicates, typename Value, typename Indexable>
-inline bool predicates_check(Predicates const& p, Value const& v, Indexable const& i)
-{
- return detail::predicates_check_impl<Predicates, Tag, First, Last>
- ::apply(p, v, i);
-}
-
-// ------------------------------------------------------------------ //
-// nearest predicate helpers
-// ------------------------------------------------------------------ //
-
-// predicates_is_nearest
-
-template <typename P>
-struct predicates_is_distance
-{
- static const unsigned value = 0;
-};
-
-template <typename DistancePredicates>
-struct predicates_is_distance< predicates::nearest<DistancePredicates> >
-{
- static const unsigned value = 1;
-};
-
-template <typename Linestring>
-struct predicates_is_distance< predicates::path<Linestring> >
-{
- static const unsigned value = 1;
-};
-
-// predicates_count_nearest
-
-template <typename T>
-struct predicates_count_distance
-{
- static const unsigned value = predicates_is_distance<T>::value;
-};
-
-//template <typename F, typename S>
-//struct predicates_count_distance< std::pair<F, S> >
-//{
-// static const unsigned value = predicates_is_distance<F>::value
-// + predicates_is_distance<S>::value;
-//};
-
-template <typename Tuple, unsigned N>
-struct predicates_count_distance_tuple
-{
- static const unsigned value =
- predicates_is_distance<typename boost::tuples::element<N-1, Tuple>::type>::value
- + predicates_count_distance_tuple<Tuple, N-1>::value;
-};
-
-template <typename Tuple>
-struct predicates_count_distance_tuple<Tuple, 1>
-{
- static const unsigned value =
- predicates_is_distance<typename boost::tuples::element<0, Tuple>::type>::value;
-};
-
-//template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
-//struct predicates_count_distance< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
-//{
-// static const unsigned value = predicates_count_distance_tuple<
-// boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>,
-// boost::tuples::length< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >::value
-// >::value;
-//};
-
-template <typename Head, typename Tail>
-struct predicates_count_distance< boost::tuples::cons<Head, Tail> >
-{
- static const unsigned value = predicates_count_distance_tuple<
- boost::tuples::cons<Head, Tail>,
- boost::tuples::length< boost::tuples::cons<Head, Tail> >::value
- >::value;
-};
-
-// predicates_find_nearest
-
-template <typename T>
-struct predicates_find_distance
-{
- static const unsigned value = predicates_is_distance<T>::value ? 0 : 1;
-};
-
-//template <typename F, typename S>
-//struct predicates_find_distance< std::pair<F, S> >
-//{
-// static const unsigned value = predicates_is_distance<F>::value ? 0 :
-// (predicates_is_distance<S>::value ? 1 : 2);
-//};
-
-template <typename Tuple, unsigned N>
-struct predicates_find_distance_tuple
-{
- static const bool is_found = predicates_find_distance_tuple<Tuple, N-1>::is_found
- || predicates_is_distance<typename boost::tuples::element<N-1, Tuple>::type>::value;
-
- static const unsigned value = predicates_find_distance_tuple<Tuple, N-1>::is_found ?
- predicates_find_distance_tuple<Tuple, N-1>::value :
- (predicates_is_distance<typename boost::tuples::element<N-1, Tuple>::type>::value ?
- N-1 : boost::tuples::length<Tuple>::value);
-};
-
-template <typename Tuple>
-struct predicates_find_distance_tuple<Tuple, 1>
-{
- static const bool is_found = predicates_is_distance<typename boost::tuples::element<0, Tuple>::type>::value;
- static const unsigned value = is_found ? 0 : boost::tuples::length<Tuple>::value;
-};
-
-//template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
-//struct predicates_find_distance< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
-//{
-// static const unsigned value = predicates_find_distance_tuple<
-// boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>,
-// boost::tuples::length< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >::value
-// >::value;
-//};
-
-template <typename Head, typename Tail>
-struct predicates_find_distance< boost::tuples::cons<Head, Tail> >
-{
- static const unsigned value = predicates_find_distance_tuple<
- boost::tuples::cons<Head, Tail>,
- boost::tuples::length< boost::tuples::cons<Head, Tail> >::value
- >::value;
-};
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_PREDICATES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/adaptors.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/adaptors.hpp
deleted file mode 100644
index 4e0eb9ba0a8..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/adaptors.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree queries range adaptors
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_ADAPTORS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_ADAPTORS_HPP
-
-#include <deque>
-#include <boost/static_assert.hpp>
-
-#include <boost/geometry/index/adaptors/query.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-template <typename Value, typename Options, typename IndexableGetter, typename EqualTo, typename Allocator>
-class rtree;
-
-namespace adaptors { namespace detail {
-
-template <typename Value, typename Options, typename IndexableGetter, typename EqualTo, typename Allocator>
-class query_range< index::rtree<Value, Options, IndexableGetter, EqualTo, Allocator> >
-{
-public:
- typedef std::vector<Value> result_type;
- typedef typename result_type::iterator iterator;
- typedef typename result_type::const_iterator const_iterator;
-
- template <typename Predicates> inline
- query_range(index::rtree<Value, Options, IndexableGetter, EqualTo, Allocator> const& rtree,
- Predicates const& pred)
- {
- rtree.query(pred, std::back_inserter(m_result));
- }
-
- inline iterator begin() { return m_result.begin(); }
- inline iterator end() { return m_result.end(); }
- inline const_iterator begin() const { return m_result.begin(); }
- inline const_iterator end() const { return m_result.end(); }
-
-private:
- result_type m_result;
-};
-
-}} // namespace adaptors::detail
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_ADAPTORS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/iterators.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/iterators.hpp
deleted file mode 100644
index a47dd7ea437..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/iterators.hpp
+++ /dev/null
@@ -1,122 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree iterators
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_ITERATORS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_ITERATORS_HPP
-
-namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace iterators {
-
-template <typename Value, typename Allocators>
-struct end_iterator
-{
- typedef std::forward_iterator_tag iterator_category;
- typedef Value value_type;
- typedef typename Allocators::const_reference reference;
- typedef typename Allocators::difference_type difference_type;
- typedef typename Allocators::const_pointer pointer;
-
- reference operator*() const
- {
- BOOST_GEOMETRY_INDEX_ASSERT(false, "iterator not dereferencable");
- pointer p(0);
- return *p;
- }
-
- const value_type * operator->() const
- {
- BOOST_GEOMETRY_INDEX_ASSERT(false, "iterator not dereferencable");
- const value_type * p = 0;
- return p;
- }
-
- end_iterator & operator++()
- {
- BOOST_GEOMETRY_INDEX_ASSERT(false, "iterator not incrementable");
- return *this;
- }
-
- end_iterator operator++(int)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(false, "iterator not incrementable");
- return *this;
- }
-
- friend bool operator==(end_iterator const& /*l*/, end_iterator const& /*r*/)
- {
- return true;
- }
-};
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class iterator
-{
- typedef visitors::iterator<Value, Options, Translator, Box, Allocators> visitor_type;
- typedef typename visitor_type::node_pointer node_pointer;
-
-public:
- typedef std::forward_iterator_tag iterator_category;
- typedef Value value_type;
- typedef typename Allocators::const_reference reference;
- typedef typename Allocators::difference_type difference_type;
- typedef typename Allocators::const_pointer pointer;
-
- inline iterator()
- {}
-
- inline iterator(node_pointer root)
- {
- m_visitor.initialize(root);
- }
-
- reference operator*() const
- {
- return m_visitor.dereference();
- }
-
- const value_type * operator->() const
- {
- return boost::addressof(m_visitor.dereference());
- }
-
- iterator & operator++()
- {
- m_visitor.increment();
- return *this;
- }
-
- iterator operator++(int)
- {
- iterator temp = *this;
- this->operator++();
- return temp;
- }
-
- friend bool operator==(iterator const& l, iterator const& r)
- {
- return l.m_visitor == r.m_visitor;
- }
-
- friend bool operator==(iterator const& l, end_iterator<Value, Allocators> const& /*r*/)
- {
- return l.m_visitor.is_end();
- }
-
- friend bool operator==(end_iterator<Value, Allocators> const& /*l*/, iterator const& r)
- {
- return r.m_visitor.is_end();
- }
-
-private:
- visitor_type m_visitor;
-};
-
-}}}}}} // namespace boost::geometry::index::detail::rtree::iterators
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_ITERATORS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/kmeans/kmeans.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/kmeans/kmeans.hpp
deleted file mode 100644
index 3f61482b27a..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/kmeans/kmeans.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree kmeans algorithm implementation
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_KMEANS_KMEANS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_KMEANS_KMEANS_HPP
-
-#include <boost/geometry/index/rtree/kmeans/split.hpp>
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_KMEANS_KMEANS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/kmeans/split.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/kmeans/split.hpp
deleted file mode 100644
index f19654972e8..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/kmeans/split.hpp
+++ /dev/null
@@ -1,87 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree kmeans split algorithm implementation
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_KMEANS_SPLIT_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_KMEANS_SPLIT_HPP
-
-#include <boost/geometry/index/rtree/node/node.hpp>
-#include <boost/geometry/index/rtree/visitors/insert.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-namespace kmeans {
-
-// some details
-
-} // namespace kmeans
-
-// split_kmeans_tag
-// OR
-// split_clusters_tag and redistribute_kmeans_tag - then redistribute will probably slightly different interface
-// or some other than "redistribute"
-
-// 1. for this algorithm one probably MUST USE NON-STATIC NODES with node_default_tag
-// or the algorithm must be changed somehow - to not store additional nodes in the current node
-// but return excessive element/elements container instead (possibly pushable_array<1> or std::vector)
-// this would also cause building of smaller trees since +1 element in nodes wouldn't be needed in different redistributing algorithms
-// 2. it is probably possible to add e.g. 2 levels of tree in one insert
-
-// Edge case is that every node split generates M + 1 children, in parent containing M nodes
-// result is 2M + 1 nodes in parent on this level
-// On next level the same, next the same and so on.
-// We have Depth*M+1 nodes in the root
-// The tree may then gain some > 1 levels in one insert
-// split::apply() manages this but special attention is required
-
-// which algorithm should be used to choose current node in traversing while inserting?
-// some of the currently used ones or some using mean values as well?
-
-// TODO
-// 1. Zmienic troche algorytm zeby przekazywal nadmiarowe elementy do split
-// i pobieral ze split nadmiarowe elementy rodzica
-// W zaleznosci od algorytmu w rozny sposob - l/q/r* powinny zwracac np pushable_array<1>
-// wtedy tez is_overerflow (z R* insert?) bedzie nieportrzebne
-// Dla kmeans zapewne std::vector, jednak w wezlach nadal moglaby byc pushable_array
-// 2. Fajnie byloby tez uproscic te wszystkie parametry root,parent,index itd. Mozliwe ze okazalyby sie zbedne
-// 3. Sprawdzyc czasy wykonywania i zajetosc pamieci
-// 4. Pamietac o parametryzacji kontenera z nadmiarowymi elementami
-// PS. Z R* reinsertami moze byc masakra
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class split<Value, Options, Translator, Box, Allocators, split_kmeans_tag>
-{
-protected:
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename Options::parameters_type parameters_type;
-
-public:
- template <typename Node>
- static inline void apply(node* & root_node,
- size_t & leafs_level,
- Node & n,
- internal_node *parent_node,
- size_t current_child_index,
- Translator const& tr,
- Allocators & allocators)
- {
-
- }
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_KMEANS_SPLIT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/linear/linear.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/linear/linear.hpp
deleted file mode 100644
index 1461692a1ee..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/linear/linear.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree linear algorithm implementation
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_LINEAR_LINEAR_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_LINEAR_LINEAR_HPP
-
-#include <boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp>
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_LINEAR_LINEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp
deleted file mode 100644
index a10b046c0dc..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp
+++ /dev/null
@@ -1,446 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree linear split algorithm implementation
-//
-// Copyright (c) 2008 Federico J. Fernandez.
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_LINEAR_REDISTRIBUTE_ELEMENTS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_LINEAR_REDISTRIBUTE_ELEMENTS_HPP
-
-#include <boost/type_traits/is_unsigned.hpp>
-
-#include <boost/geometry/index/detail/algorithms/content.hpp>
-#include <boost/geometry/index/detail/bounded_view.hpp>
-
-#include <boost/geometry/index/detail/rtree/node/node.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/insert.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/is_leaf.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-namespace linear {
-
-template <typename R, typename T>
-inline R difference_dispatch(T const& from, T const& to, ::boost::mpl::bool_<false> const& /*is_unsigned*/)
-{
- return to - from;
-}
-
-template <typename R, typename T>
-inline R difference_dispatch(T const& from, T const& to, ::boost::mpl::bool_<true> const& /*is_unsigned*/)
-{
- return from <= to ? R(to - from) : -R(from - to);
-}
-
-template <typename R, typename T>
-inline R difference(T const& from, T const& to)
-{
- BOOST_MPL_ASSERT_MSG(!boost::is_unsigned<R>::value, RESULT_CANT_BE_UNSIGNED, (R));
-
- typedef ::boost::mpl::bool_<
- boost::is_unsigned<T>::value
- > is_unsigned;
-
- return difference_dispatch<R>(from, to, is_unsigned());
-}
-
-// TODO: awulkiew
-// In general, all aerial Indexables in the tree with box-like nodes will be analyzed as boxes
-// because they must fit into larger box. Therefore the algorithm could be the same for Bounds type.
-// E.g. if Bounds type is sphere, Indexables probably should be analyzed as spheres.
-// 1. View could be provided to 'see' all Indexables as Bounds type.
-// Not ok in the case of big types like Ring, however it's possible that Rings won't be supported,
-// only simple types. Even then if we consider storing Box inside the Sphere we must calculate
-// the bounding sphere 2x for each box because there are 2 loops. For each calculation this means
-// 4-2d or 8-3d expansions or -, / and sqrt().
-// 2. Additional container could be used and reused if the Indexable type is other than the Bounds type.
-
-// IMPORTANT!
-// Still probably the best way would be providing specialized algorithms for each Indexable-Bounds pair!
-// Probably on pick_seeds algorithm level - For Bounds=Sphere seeds would be choosen differently
-
-// TODO: awulkiew
-// there are loops inside find_greatest_normalized_separation::apply()
-// iteration is done for each DimensionIndex.
-// Separations and seeds for all DimensionIndex(es) could be calculated at once, stored, then the greatest would be choosen.
-
-// The following struct/method was adapted for the preliminary version of the R-tree. Then it was called:
-// void find_normalized_separations(std::vector<Box> const& boxes, T& separation, unsigned int& first, unsigned int& second) const
-
-template <typename Elements, typename Parameters, typename Translator, typename Tag, size_t DimensionIndex>
-struct find_greatest_normalized_separation
-{
- typedef typename Elements::value_type element_type;
- typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
- typedef typename coordinate_type<indexable_type>::type coordinate_type;
-
- typedef typename boost::mpl::if_c<
- boost::is_integral<coordinate_type>::value,
- double,
- coordinate_type
- >::type separation_type;
-
- typedef typename geometry::point_type<indexable_type>::type point_type;
- typedef geometry::model::box<point_type> bounds_type;
- typedef index::detail::bounded_view<indexable_type, bounds_type> bounded_view_type;
-
- static inline void apply(Elements const& elements,
- Parameters const& parameters,
- Translator const& translator,
- separation_type & separation,
- size_t & seed1,
- size_t & seed2)
- {
- const size_t elements_count = parameters.get_max_elements() + 1;
- BOOST_GEOMETRY_INDEX_ASSERT(elements.size() == elements_count, "unexpected number of elements");
- BOOST_GEOMETRY_INDEX_ASSERT(2 <= elements_count, "unexpected number of elements");
-
- // find the lowest low, highest high
- bounded_view_type bounded_indexable_0(rtree::element_indexable(elements[0], translator));
- coordinate_type lowest_low = geometry::get<min_corner, DimensionIndex>(bounded_indexable_0);
- coordinate_type highest_high = geometry::get<max_corner, DimensionIndex>(bounded_indexable_0);
-
- // and the lowest high
- coordinate_type lowest_high = highest_high;
- size_t lowest_high_index = 0;
- for ( size_t i = 1 ; i < elements_count ; ++i )
- {
- bounded_view_type bounded_indexable(rtree::element_indexable(elements[i], translator));
- coordinate_type min_coord = geometry::get<min_corner, DimensionIndex>(bounded_indexable);
- coordinate_type max_coord = geometry::get<max_corner, DimensionIndex>(bounded_indexable);
-
- if ( max_coord < lowest_high )
- {
- lowest_high = max_coord;
- lowest_high_index = i;
- }
-
- if ( min_coord < lowest_low )
- lowest_low = min_coord;
-
- if ( highest_high < max_coord )
- highest_high = max_coord;
- }
-
- // find the highest low
- size_t highest_low_index = lowest_high_index == 0 ? 1 : 0;
- bounded_view_type bounded_indexable_hl(rtree::element_indexable(elements[highest_low_index], translator));
- coordinate_type highest_low = geometry::get<min_corner, DimensionIndex>(bounded_indexable_hl);
- for ( size_t i = highest_low_index ; i < elements_count ; ++i )
- {
- bounded_view_type bounded_indexable(rtree::element_indexable(elements[i], translator));
- coordinate_type min_coord = geometry::get<min_corner, DimensionIndex>(bounded_indexable);
- if ( highest_low < min_coord &&
- i != lowest_high_index )
- {
- highest_low = min_coord;
- highest_low_index = i;
- }
- }
-
- coordinate_type const width = highest_high - lowest_low;
-
- // highest_low - lowest_high
- separation = difference<separation_type>(lowest_high, highest_low);
- // BOOST_GEOMETRY_INDEX_ASSERT(0 <= width);
- if ( std::numeric_limits<coordinate_type>::epsilon() < width )
- separation /= width;
-
- seed1 = highest_low_index;
- seed2 = lowest_high_index;
-
- ::boost::ignore_unused_variable_warning(parameters);
- }
-};
-
-// Version for points doesn't calculate normalized separation since it would always be equal to 1
-// It returns two seeds most distant to each other, separation is equal to distance
-template <typename Elements, typename Parameters, typename Translator, size_t DimensionIndex>
-struct find_greatest_normalized_separation<Elements, Parameters, Translator, point_tag, DimensionIndex>
-{
- typedef typename Elements::value_type element_type;
- typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
- typedef typename coordinate_type<indexable_type>::type coordinate_type;
-
- typedef coordinate_type separation_type;
-
- static inline void apply(Elements const& elements,
- Parameters const& parameters,
- Translator const& translator,
- separation_type & separation,
- size_t & seed1,
- size_t & seed2)
- {
- const size_t elements_count = parameters.get_max_elements() + 1;
- BOOST_GEOMETRY_INDEX_ASSERT(elements.size() == elements_count, "unexpected number of elements");
- BOOST_GEOMETRY_INDEX_ASSERT(2 <= elements_count, "unexpected number of elements");
-
- // find the lowest low, highest high
- coordinate_type lowest = geometry::get<DimensionIndex>(rtree::element_indexable(elements[0], translator));
- coordinate_type highest = geometry::get<DimensionIndex>(rtree::element_indexable(elements[0], translator));
- size_t lowest_index = 0;
- size_t highest_index = 0;
- for ( size_t i = 1 ; i < elements_count ; ++i )
- {
- coordinate_type coord = geometry::get<DimensionIndex>(rtree::element_indexable(elements[i], translator));
-
- if ( coord < lowest )
- {
- lowest = coord;
- lowest_index = i;
- }
-
- if ( highest < coord )
- {
- highest = coord;
- highest_index = i;
- }
- }
-
- separation = highest - lowest;
- seed1 = lowest_index;
- seed2 = highest_index;
-
- if ( lowest_index == highest_index )
- seed2 = (lowest_index + 1) % elements_count; // % is just in case since if this is true lowest_index is 0
-
- ::boost::ignore_unused_variable_warning(parameters);
- }
-};
-
-template <typename Elements, typename Parameters, typename Translator, size_t Dimension>
-struct pick_seeds_impl
-{
- BOOST_STATIC_ASSERT(0 < Dimension);
-
- typedef typename Elements::value_type element_type;
- typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
-
- typedef find_greatest_normalized_separation<
- Elements, Parameters, Translator,
- typename tag<indexable_type>::type, Dimension - 1
- > find_norm_sep;
-
- typedef typename find_norm_sep::separation_type separation_type;
-
- static inline void apply(Elements const& elements,
- Parameters const& parameters,
- Translator const& tr,
- separation_type & separation,
- size_t & seed1,
- size_t & seed2)
- {
- pick_seeds_impl<Elements, Parameters, Translator, Dimension - 1>::apply(elements, parameters, tr, separation, seed1, seed2);
-
- separation_type current_separation;
- size_t s1, s2;
- find_norm_sep::apply(elements, parameters, tr, current_separation, s1, s2);
-
- // in the old implementation different operator was used: <= (y axis prefered)
- if ( separation < current_separation )
- {
- separation = current_separation;
- seed1 = s1;
- seed2 = s2;
- }
- }
-};
-
-template <typename Elements, typename Parameters, typename Translator>
-struct pick_seeds_impl<Elements, Parameters, Translator, 1>
-{
- typedef typename Elements::value_type element_type;
- typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
- typedef typename coordinate_type<indexable_type>::type coordinate_type;
-
- typedef find_greatest_normalized_separation<
- Elements, Parameters, Translator,
- typename tag<indexable_type>::type, 0
- > find_norm_sep;
-
- typedef typename find_norm_sep::separation_type separation_type;
-
- static inline void apply(Elements const& elements,
- Parameters const& parameters,
- Translator const& tr,
- separation_type & separation,
- size_t & seed1,
- size_t & seed2)
- {
- find_norm_sep::apply(elements, parameters, tr, separation, seed1, seed2);
- }
-};
-
-// from void linear_pick_seeds(node_pointer const& n, unsigned int &seed1, unsigned int &seed2) const
-
-template <typename Elements, typename Parameters, typename Translator>
-inline void pick_seeds(Elements const& elements,
- Parameters const& parameters,
- Translator const& tr,
- size_t & seed1,
- size_t & seed2)
-{
- typedef typename Elements::value_type element_type;
- typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
-
- typedef pick_seeds_impl
- <
- Elements, Parameters, Translator,
- geometry::dimension<indexable_type>::value
- > impl;
- typedef typename impl::separation_type separation_type;
-
- separation_type separation = 0;
- impl::apply(elements, parameters, tr, separation, seed1, seed2);
-}
-
-} // namespace linear
-
-// from void split_node(node_pointer const& n, node_pointer& n1, node_pointer& n2) const
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct redistribute_elements<Value, Options, Translator, Box, Allocators, linear_tag>
-{
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename rtree::node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- template <typename Node>
- static inline void apply(Node & n,
- Node & second_node,
- Box & box1,
- Box & box2,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators)
- {
- typedef typename rtree::elements_type<Node>::type elements_type;
- typedef typename elements_type::value_type element_type;
- typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
- typedef typename index::detail::default_content_result<Box>::type content_type;
-
- elements_type & elements1 = rtree::elements(n);
- elements_type & elements2 = rtree::elements(second_node);
- const size_t elements1_count = parameters.get_max_elements() + 1;
-
- BOOST_GEOMETRY_INDEX_ASSERT(elements1.size() == elements1_count, "unexpected number of elements");
-
- // copy original elements - use in-memory storage (std::allocator)
- // TODO: move if noexcept
- typedef typename rtree::container_from_elements_type<elements_type, element_type>::type
- container_type;
- container_type elements_copy(elements1.begin(), elements1.end()); // MAY THROW, STRONG (alloc, copy)
-
- // calculate initial seeds
- size_t seed1 = 0;
- size_t seed2 = 0;
- linear::pick_seeds(elements_copy, parameters, translator, seed1, seed2);
-
- // prepare nodes' elements containers
- elements1.clear();
- BOOST_GEOMETRY_INDEX_ASSERT(elements2.empty(), "unexpected container state");
-
- BOOST_TRY
- {
- // add seeds
- elements1.push_back(elements_copy[seed1]); // MAY THROW, STRONG (copy)
- elements2.push_back(elements_copy[seed2]); // MAY THROW, STRONG (alloc, copy)
-
- // calculate boxes
- detail::bounds(rtree::element_indexable(elements_copy[seed1], translator), box1);
- detail::bounds(rtree::element_indexable(elements_copy[seed2], translator), box2);
-
- // initialize areas
- content_type content1 = index::detail::content(box1);
- content_type content2 = index::detail::content(box2);
-
- BOOST_GEOMETRY_INDEX_ASSERT(2 <= elements1_count, "unexpected elements number");
- size_t remaining = elements1_count - 2;
-
- // redistribute the rest of the elements
- for ( size_t i = 0 ; i < elements1_count ; ++i )
- {
- if (i != seed1 && i != seed2)
- {
- element_type const& elem = elements_copy[i];
- indexable_type const& indexable = rtree::element_indexable(elem, translator);
-
- // if there is small number of elements left and the number of elements in node is lesser than min_elems
- // just insert them to this node
- if ( elements1.size() + remaining <= parameters.get_min_elements() )
- {
- elements1.push_back(elem); // MAY THROW, STRONG (copy)
- geometry::expand(box1, indexable);
- content1 = index::detail::content(box1);
- }
- else if ( elements2.size() + remaining <= parameters.get_min_elements() )
- {
- elements2.push_back(elem); // MAY THROW, STRONG (alloc, copy)
- geometry::expand(box2, indexable);
- content2 = index::detail::content(box2);
- }
- // choose better node and insert element
- else
- {
- // calculate enlarged boxes and areas
- Box enlarged_box1(box1);
- Box enlarged_box2(box2);
- geometry::expand(enlarged_box1, indexable);
- geometry::expand(enlarged_box2, indexable);
- content_type enlarged_content1 = index::detail::content(enlarged_box1);
- content_type enlarged_content2 = index::detail::content(enlarged_box2);
-
- content_type content_increase1 = enlarged_content1 - content1;
- content_type content_increase2 = enlarged_content2 - content2;
-
- // choose group which box content have to be enlarged least or has smaller content or has fewer elements
- if ( content_increase1 < content_increase2 ||
- ( content_increase1 == content_increase2 &&
- ( content1 < content2 ||
- ( content1 == content2 && elements1.size() <= elements2.size() ) ) ) )
- {
- elements1.push_back(elem); // MAY THROW, STRONG (copy)
- box1 = enlarged_box1;
- content1 = enlarged_content1;
- }
- else
- {
- elements2.push_back(elem); // MAY THROW, STRONG (alloc, copy)
- box2 = enlarged_box2;
- content2 = enlarged_content2;
- }
- }
-
- BOOST_GEOMETRY_INDEX_ASSERT(0 < remaining, "unexpected value");
- --remaining;
- }
- }
- }
- BOOST_CATCH(...)
- {
- elements1.clear();
- elements2.clear();
-
- rtree::destroy_elements<Value, Options, Translator, Box, Allocators>::apply(elements_copy, allocators);
- //elements_copy.clear();
-
- BOOST_RETHROW // RETHROW, BASIC
- }
- BOOST_CATCH_END
- }
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_LINEAR_REDISTRIBUTE_ELEMENTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/concept.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/concept.hpp
deleted file mode 100644
index 30fa44d2635..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/concept.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree node concept
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_CONCEPT_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_CONCEPT_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct node
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_TAG_TYPE,
- (node));
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct internal_node
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_TAG_TYPE,
- (internal_node));
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct leaf
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_TAG_TYPE,
- (leaf));
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag, bool IsVisitableConst>
-struct visitor
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_TAG_TYPE,
- (visitor));
-};
-
-template <typename Allocator, typename Value, typename Parameters, typename Box, typename Tag>
-class allocators
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_TAG_TYPE,
- (allocators));
-};
-
-template <typename Allocators, typename Node>
-struct create_node
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_NODE_TYPE,
- (create_node));
-};
-
-template <typename Allocators, typename Node>
-struct destroy_node
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_NODE_TYPE,
- (destroy_node));
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/node.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/node.hpp
deleted file mode 100644
index 2b270319f67..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/node.hpp
+++ /dev/null
@@ -1,212 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree nodes
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_NODE_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_NODE_HPP
-
-#include <boost/container/vector.hpp>
-#include <boost/geometry/index/detail/varray.hpp>
-
-#include <boost/geometry/index/detail/rtree/node/concept.hpp>
-#include <boost/geometry/index/detail/rtree/node/pairs.hpp>
-#include <boost/geometry/index/detail/rtree/node/node_elements.hpp>
-#include <boost/geometry/index/detail/rtree/node/scoped_deallocator.hpp>
-
-//#include <boost/geometry/index/detail/rtree/node/weak_visitor.hpp>
-//#include <boost/geometry/index/detail/rtree/node/weak_dynamic.hpp>
-//#include <boost/geometry/index/detail/rtree/node/weak_static.hpp>
-
-#include <boost/geometry/index/detail/rtree/node/variant_visitor.hpp>
-#include <boost/geometry/index/detail/rtree/node/variant_dynamic.hpp>
-#include <boost/geometry/index/detail/rtree/node/variant_static.hpp>
-
-#include <boost/geometry/index/detail/rtree/node/subtree_destroyer.hpp>
-
-#include <boost/geometry/algorithms/expand.hpp>
-
-#include <boost/geometry/index/detail/rtree/visitors/is_leaf.hpp>
-
-#include <boost/geometry/index/detail/algorithms/bounds.hpp>
-#include <boost/geometry/index/detail/is_bounding_geometry.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-// elements box
-
-template <typename Box, typename FwdIter, typename Translator>
-inline Box elements_box(FwdIter first, FwdIter last, Translator const& tr)
-{
- Box result;
-
- // Only here to suppress 'uninitialized local variable used' warning
- // until the suggestion below is not implemented
- geometry::assign_inverse(result);
-
- //BOOST_GEOMETRY_INDEX_ASSERT(first != last, "non-empty range required");
- // NOTE: this is not elegant temporary solution,
- // reference to box could be passed as parameter and bool returned
- if ( first == last )
- return result;
-
- detail::bounds(element_indexable(*first, tr), result);
- ++first;
-
- for ( ; first != last ; ++first )
- geometry::expand(result, element_indexable(*first, tr));
-
- return result;
-}
-
-// Enlarge bounds of a leaf node WRT epsilon if needed.
-// It's because Points and Segments are compared WRT machine epsilon.
-// This ensures that leafs bounds correspond to the stored elements.
-// NOTE: this is done only if the Indexable is not a Box
-// in the future don't do it also for NSphere
-template <typename Box, typename FwdIter, typename Translator>
-inline Box values_box(FwdIter first, FwdIter last, Translator const& tr)
-{
- typedef typename std::iterator_traits<FwdIter>::value_type element_type;
- BOOST_MPL_ASSERT_MSG((is_leaf_element<element_type>::value),
- SHOULD_BE_CALLED_ONLY_FOR_LEAF_ELEMENTS,
- (element_type));
-
- Box result = elements_box<Box>(first, last, tr);
-
-#ifdef BOOST_GEOMETRY_INDEX_EXPERIMENTAL_ENLARGE_BY_EPSILON
- if (BOOST_GEOMETRY_CONDITION((
- ! is_bounding_geometry
- <
- typename indexable_type<Translator>::type
- >::value)))
- {
- geometry::detail::expand_by_epsilon(result);
- }
-#endif
-
- return result;
-}
-
-// destroys subtree if the element is internal node's element
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct destroy_element
-{
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename rtree::internal_node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef rtree::subtree_destroyer<Value, Options, Translator, Box, Allocators> subtree_destroyer;
-
- inline static void apply(typename internal_node::elements_type::value_type & element, Allocators & allocators)
- {
- subtree_destroyer dummy(element.second, allocators);
- element.second = 0;
- }
-
- inline static void apply(typename leaf::elements_type::value_type &, Allocators &) {}
-};
-
-// destroys stored subtrees if internal node's elements are passed
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct destroy_elements
-{
- template <typename Range>
- inline static void apply(Range & elements, Allocators & allocators)
- {
- apply(boost::begin(elements), boost::end(elements), allocators);
- }
-
- template <typename It>
- inline static void apply(It first, It last, Allocators & allocators)
- {
- typedef boost::mpl::bool_<
- boost::is_same<
- Value, typename std::iterator_traits<It>::value_type
- >::value
- > is_range_of_values;
-
- apply_dispatch(first, last, allocators, is_range_of_values());
- }
-
-private:
- template <typename It>
- inline static void apply_dispatch(It first, It last, Allocators & allocators,
- boost::mpl::bool_<false> const& /*is_range_of_values*/)
- {
- typedef rtree::subtree_destroyer<Value, Options, Translator, Box, Allocators> subtree_destroyer;
-
- for ( ; first != last ; ++first )
- {
- subtree_destroyer dummy(first->second, allocators);
- first->second = 0;
- }
- }
-
- template <typename It>
- inline static void apply_dispatch(It /*first*/, It /*last*/, Allocators & /*allocators*/,
- boost::mpl::bool_<true> const& /*is_range_of_values*/)
- {}
-};
-
-// clears node, deletes all subtrees stored in node
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct clear_node
-{
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename rtree::node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- inline static void apply(node & node, Allocators & allocators)
- {
- rtree::visitors::is_leaf<Value, Options, Box, Allocators> ilv;
- rtree::apply_visitor(ilv, node);
- if ( ilv.result )
- {
- apply(rtree::get<leaf>(node), allocators);
- }
- else
- {
- apply(rtree::get<internal_node>(node), allocators);
- }
- }
-
- inline static void apply(internal_node & internal_node, Allocators & allocators)
- {
- destroy_elements<Value, Options, Translator, Box, Allocators>::apply(rtree::elements(internal_node), allocators);
- rtree::elements(internal_node).clear();
- }
-
- inline static void apply(leaf & leaf, Allocators &)
- {
- rtree::elements(leaf).clear();
- }
-};
-
-template <typename Container, typename Iterator>
-void move_from_back(Container & container, Iterator it)
-{
- BOOST_GEOMETRY_INDEX_ASSERT(!container.empty(), "cannot copy from empty container");
- Iterator back_it = container.end();
- --back_it;
- if ( it != back_it )
- {
- *it = boost::move(*back_it); // MAY THROW (copy)
- }
-}
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_NODE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/node_elements.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/node_elements.hpp
deleted file mode 100644
index 0e5848987ea..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/node_elements.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree node elements access
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_NODE_ELEMENTS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_NODE_ELEMENTS_HPP
-
-#include <boost/container/vector.hpp>
-#include <boost/geometry/algorithms/detail/expand_by_epsilon.hpp>
-#include <boost/geometry/index/detail/varray.hpp>
-#include <boost/geometry/index/detail/rtree/node/pairs.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-// element's indexable type
-
-template <typename Element, typename Translator>
-struct element_indexable_type
-{
- typedef typename indexable_type<Translator>::type type;
-};
-
-template <typename First, typename Pointer, typename Translator>
-struct element_indexable_type<
- rtree::ptr_pair<First, Pointer>,
- Translator
->
-{
- typedef First type;
-};
-
-// is leaf element
-
-template <typename Element>
-struct is_leaf_element
-{
- static const bool value = true;
-};
-
-template <typename First, typename Pointer>
-struct is_leaf_element< rtree::ptr_pair<First, Pointer> >
-{
- static const bool value = false;
-};
-
-// element's indexable getter
-
-template <typename Element, typename Translator>
-typename result_type<Translator>::type
-element_indexable(Element const& el, Translator const& tr)
-{
- return tr(el);
-}
-
-template <typename First, typename Pointer, typename Translator>
-First const&
-element_indexable(rtree::ptr_pair<First, Pointer> const& el, Translator const& /*tr*/)
-{
- return el.first;
-}
-
-// nodes elements
-
-template <typename Node>
-struct elements_type
-{
- typedef typename Node::elements_type type;
-};
-
-template <typename Node>
-inline typename elements_type<Node>::type &
-elements(Node & n)
-{
- return n.elements;
-}
-
-template <typename Node>
-inline typename elements_type<Node>::type const&
-elements(Node const& n)
-{
- return n.elements;
-}
-
-// elements derived type
-
-template <typename Elements, typename NewValue>
-struct container_from_elements_type
-{
- typedef boost::container::vector<NewValue> type;
-};
-
-template <typename OldValue, size_t N, typename NewValue>
-struct container_from_elements_type<detail::varray<OldValue, N>, NewValue>
-{
- typedef detail::varray<NewValue, N> type;
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_NODE_ELEMENTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/pairs.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/pairs.hpp
deleted file mode 100644
index dc088ec29b5..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/pairs.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// Boost.Geometry Index
-//
-// Pairs intended to be used internally in nodes.
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_PAIRS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_PAIRS_HPP
-
-#include <boost/move/move.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-template <typename First, typename Pointer>
-class ptr_pair
-{
-public:
- typedef First first_type;
- typedef Pointer second_type;
- ptr_pair(First const& f, Pointer s) : first(f), second(s) {}
- //ptr_pair(ptr_pair const& p) : first(p.first), second(p.second) {}
- //ptr_pair & operator=(ptr_pair const& p) { first = p.first; second = p.second; return *this; }
-
- first_type first;
- second_type second;
-};
-
-template <typename First, typename Pointer> inline
-ptr_pair<First, Pointer>
-make_ptr_pair(First const& f, Pointer s)
-{
- return ptr_pair<First, Pointer>(f, s);
-}
-
-// TODO: It this will be used, rename it to unique_ptr_pair and possibly use unique_ptr.
-
-template <typename First, typename Pointer>
-class exclusive_ptr_pair
-{
- BOOST_MOVABLE_BUT_NOT_COPYABLE(exclusive_ptr_pair)
-public:
- typedef First first_type;
- typedef Pointer second_type;
- exclusive_ptr_pair(First const& f, Pointer s) : first(f), second(s) {}
-
- // INFO - members aren't really moved!
- exclusive_ptr_pair(BOOST_RV_REF(exclusive_ptr_pair) p) : first(p.first), second(p.second) { p.second = 0; }
- exclusive_ptr_pair & operator=(BOOST_RV_REF(exclusive_ptr_pair) p) { first = p.first; second = p.second; p.second = 0; return *this; }
-
- first_type first;
- second_type second;
-};
-
-template <typename First, typename Pointer> inline
-exclusive_ptr_pair<First, Pointer>
-make_exclusive_ptr_pair(First const& f, Pointer s)
-{
- return exclusive_ptr_pair<First, Pointer>(f, s);
-}
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_PAIRS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/scoped_deallocator.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/scoped_deallocator.hpp
deleted file mode 100644
index 0062402d45c..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/scoped_deallocator.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree scoped deallocator
-//
-// Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_SCOPED_DEALLOCATOR_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_SCOPED_DEALLOCATOR_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-template <typename Alloc>
-class scoped_deallocator
-{
- typedef boost::container::allocator_traits<Alloc> alloc_traits;
-
- scoped_deallocator(scoped_deallocator const&);
- scoped_deallocator & operator=(scoped_deallocator const&);
-public:
- typedef typename alloc_traits::pointer pointer;
-
- inline scoped_deallocator(pointer p, Alloc & a)
- : m_ptr(p), m_alloc(a)
- {}
- inline ~scoped_deallocator()
- {
- if ( m_ptr )
- {
- alloc_traits::deallocate(m_alloc, m_ptr, 1);
- }
- }
- inline void release()
- {
- m_ptr = 0;
- }
-private:
- pointer m_ptr;
- Alloc & m_alloc;
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_SCOPED_DEALLOCATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/subtree_destroyer.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/subtree_destroyer.hpp
deleted file mode 100644
index 3376068eedf..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/subtree_destroyer.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree subtree scoped destroyer
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_SUBTREE_DESTROYED_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_SUBTREE_DESTROYED_HPP
-
-#include <boost/geometry/index/detail/rtree/visitors/destroy.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class subtree_destroyer
-{
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename Allocators::node_pointer pointer;
-
- subtree_destroyer(subtree_destroyer const&);
- subtree_destroyer & operator=(subtree_destroyer const&);
-
-public:
- subtree_destroyer(pointer ptr, Allocators & allocators)
- : m_ptr(ptr)
- , m_allocators(allocators)
- {}
-
- ~subtree_destroyer()
- {
- reset();
- }
-
- void reset(pointer ptr = 0)
- {
- if ( m_ptr && m_ptr != ptr )
- {
- detail::rtree::visitors::destroy<Value, Options, Translator, Box, Allocators> del_v(m_ptr, m_allocators);
- detail::rtree::apply_visitor(del_v, *m_ptr);
- }
- m_ptr = ptr;
- }
-
- void release()
- {
- m_ptr = 0;
- }
-
- pointer get() const
- {
- return m_ptr;
- }
-
- node & operator*() const
- {
- return *m_ptr;
- }
-
- pointer operator->() const
- {
- return m_ptr;
- }
-
-private:
- pointer m_ptr;
- Allocators & m_allocators;
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_SUBTREE_DESTROYED_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/variant_dynamic.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/variant_dynamic.hpp
deleted file mode 100644
index 52b253ccf6e..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/variant_dynamic.hpp
+++ /dev/null
@@ -1,296 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree nodes based on Boost.Variant, storing dynamic-size containers
-//
-// Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_VARIANT_DYNAMIC_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_VARIANT_DYNAMIC_HPP
-
-#include <boost/core/pointer_traits.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-// nodes default types
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct variant_internal_node
-{
- typedef rtree::ptr_pair<Box, typename Allocators::node_pointer> element_type;
- typedef typename boost::container::allocator_traits
- <
- typename Allocators::node_allocator_type
- >::template rebind_alloc<element_type> allocator_type;
-
- typedef boost::container::vector<element_type, allocator_type> elements_type;
-
- template <typename Al>
- inline variant_internal_node(Al const& al)
- : elements(allocator_type(al))
- {}
-
- elements_type elements;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct variant_leaf
-{
- typedef typename boost::container::allocator_traits
- <
- typename Allocators::node_allocator_type
- >::template rebind_alloc<Value> allocator_type;
-
- typedef boost::container::vector<Value, allocator_type> elements_type;
-
- template <typename Al>
- inline variant_leaf(Al const& al)
- : elements(allocator_type(al))
- {}
-
- elements_type elements;
-};
-
-// nodes traits
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct node<Value, Parameters, Box, Allocators, node_variant_dynamic_tag>
-{
- typedef boost::variant<
- variant_leaf<Value, Parameters, Box, Allocators, node_variant_dynamic_tag>,
- variant_internal_node<Value, Parameters, Box, Allocators, node_variant_dynamic_tag>
- > type;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct internal_node<Value, Parameters, Box, Allocators, node_variant_dynamic_tag>
-{
- typedef variant_internal_node<Value, Parameters, Box, Allocators, node_variant_dynamic_tag> type;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct leaf<Value, Parameters, Box, Allocators, node_variant_dynamic_tag>
-{
- typedef variant_leaf<Value, Parameters, Box, Allocators, node_variant_dynamic_tag> type;
-};
-
-// visitor traits
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, bool IsVisitableConst>
-struct visitor<Value, Parameters, Box, Allocators, node_variant_dynamic_tag, IsVisitableConst>
-{
- typedef static_visitor<> type;
-};
-
-// allocators
-
-template <typename Allocator, typename Value, typename Parameters, typename Box, typename Tag>
-struct node_alloc
-{
- typedef typename node
- <
- Value, Parameters, Box,
- allocators<Allocator, Value, Parameters, Box, Tag>,
- Tag
- >::type node_type;
-
- typedef typename boost::container::allocator_traits
- <
- Allocator
- >::template rebind_alloc<node_type> type;
-
- typedef boost::container::allocator_traits<type> traits;
-};
-
-
-template <typename Allocator, typename Value, typename Parameters, typename Box>
-class allocators<Allocator, Value, Parameters, Box, node_variant_dynamic_tag>
- : public detail::rtree::node_alloc
- <
- Allocator, Value, Parameters, Box, node_variant_dynamic_tag
- >::type
-{
- typedef detail::rtree::node_alloc
- <
- Allocator, Value, Parameters, Box, node_variant_dynamic_tag
- > node_alloc;
-
-public:
- typedef typename node_alloc::type node_allocator_type;
- typedef typename node_alloc::traits::pointer node_pointer;
-
-private:
- typedef typename boost::container::allocator_traits
- <
- node_allocator_type // node_allocator_type for consistency with variant_leaf
- >::template rebind_alloc<Value> value_allocator_type;
- typedef boost::container::allocator_traits<value_allocator_type> value_allocator_traits;
-
-
-public:
- typedef Allocator allocator_type;
-
- typedef Value value_type;
- typedef typename value_allocator_traits::reference reference;
- typedef typename value_allocator_traits::const_reference const_reference;
- typedef typename value_allocator_traits::size_type size_type;
- typedef typename value_allocator_traits::difference_type difference_type;
- typedef typename value_allocator_traits::pointer pointer;
- typedef typename value_allocator_traits::const_pointer const_pointer;
-
- inline allocators()
- : node_allocator_type()
- {}
-
- template <typename Alloc>
- inline explicit allocators(Alloc const& alloc)
- : node_allocator_type(alloc)
- {}
-
- inline allocators(BOOST_FWD_REF(allocators) a)
- : node_allocator_type(boost::move(a.node_allocator()))
- {}
-
- inline allocators & operator=(BOOST_FWD_REF(allocators) a)
- {
- node_allocator() = boost::move(a.node_allocator());
- return *this;
- }
-
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- inline allocators & operator=(allocators const& a)
- {
- node_allocator() = a.node_allocator();
- return *this;
- }
-#endif
-
- void swap(allocators & a)
- {
- boost::swap(node_allocator(), a.node_allocator());
- }
-
- bool operator==(allocators const& a) const { return node_allocator() == a.node_allocator(); }
- template <typename Alloc>
- bool operator==(Alloc const& a) const { return node_allocator() == node_allocator_type(a); }
-
- Allocator allocator() const { return Allocator(node_allocator()); }
-
- node_allocator_type & node_allocator() { return *this; }
- node_allocator_type const& node_allocator() const { return *this; }
-};
-
-// create_node_variant
-
-template <typename VariantPtr, typename Node>
-struct create_variant_node
-{
- template <typename AllocNode>
- static inline VariantPtr apply(AllocNode & alloc_node)
- {
- typedef boost::container::allocator_traits<AllocNode> Al;
- typedef typename Al::pointer P;
-
- P p = Al::allocate(alloc_node, 1);
-
- if ( 0 == p )
- throw_runtime_error("boost::geometry::index::rtree node creation failed");
-
- scoped_deallocator<AllocNode> deallocator(p, alloc_node);
-
- Al::construct(alloc_node, boost::to_address(p), Node(alloc_node)); // implicit cast to Variant
-
- deallocator.release();
- return p;
- }
-};
-
-// destroy_node_variant
-
-template <typename Node>
-struct destroy_variant_node
-{
- template <typename AllocNode, typename VariantPtr>
- static inline void apply(AllocNode & alloc_node, VariantPtr n)
- {
- typedef boost::container::allocator_traits<AllocNode> Al;
-
- Al::destroy(alloc_node, boost::addressof(*n));
- Al::deallocate(alloc_node, n, 1);
- }
-};
-
-// create_node
-
-template <typename Allocators, typename Value, typename Parameters, typename Box, typename Tag>
-struct create_node<
- Allocators,
- variant_internal_node<Value, Parameters, Box, Allocators, Tag>
->
-{
- static inline typename Allocators::node_pointer
- apply(Allocators & allocators)
- {
- return create_variant_node<
- typename Allocators::node_pointer,
- variant_internal_node<Value, Parameters, Box, Allocators, Tag>
- >::apply(allocators.node_allocator());
- }
-};
-
-template <typename Allocators, typename Value, typename Parameters, typename Box, typename Tag>
-struct create_node<
- Allocators,
- variant_leaf<Value, Parameters, Box, Allocators, Tag>
->
-{
- static inline typename Allocators::node_pointer
- apply(Allocators & allocators)
- {
- return create_variant_node<
- typename Allocators::node_pointer,
- variant_leaf<Value, Parameters, Box, Allocators, Tag>
- >::apply(allocators.node_allocator());
- }
-};
-
-// destroy_node
-
-template <typename Allocators, typename Value, typename Parameters, typename Box, typename Tag>
-struct destroy_node<
- Allocators,
- variant_internal_node<Value, Parameters, Box, Allocators, Tag>
->
-{
- static inline void apply(Allocators & allocators, typename Allocators::node_pointer n)
- {
- destroy_variant_node<
- variant_internal_node<Value, Parameters, Box, Allocators, Tag>
- >::apply(allocators.node_allocator(), n);
- }
-};
-
-template <typename Allocators, typename Value, typename Parameters, typename Box, typename Tag>
-struct destroy_node<
- Allocators,
- variant_leaf<Value, Parameters, Box, Allocators, Tag>
->
-{
- static inline void apply(Allocators & allocators, typename Allocators::node_pointer n)
- {
- destroy_variant_node<
- variant_leaf<Value, Parameters, Box, Allocators, Tag>
- >::apply(allocators.node_allocator(), n);
- }
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_VARIANT_DYNAMIC_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/variant_static.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/variant_static.hpp
deleted file mode 100644
index c30998d6837..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/variant_static.hpp
+++ /dev/null
@@ -1,161 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree nodes based on Boost.Variant, storing static-size containers
-//
-// Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_VARIANT_STATIC_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_VARIANT_STATIC_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-// nodes default types
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct variant_internal_node<Value, Parameters, Box, Allocators, node_variant_static_tag>
-{
- typedef detail::varray<
- rtree::ptr_pair<Box, typename Allocators::node_pointer>,
- Parameters::max_elements + 1
- > elements_type;
-
- template <typename Alloc>
- inline variant_internal_node(Alloc const&) {}
-
- elements_type elements;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct variant_leaf<Value, Parameters, Box, Allocators, node_variant_static_tag>
-{
- typedef detail::varray<
- Value,
- Parameters::max_elements + 1
- > elements_type;
-
- template <typename Alloc>
- inline variant_leaf(Alloc const&) {}
-
- elements_type elements;
-};
-
-// nodes traits
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct node<Value, Parameters, Box, Allocators, node_variant_static_tag>
-{
- typedef boost::variant<
- variant_leaf<Value, Parameters, Box, Allocators, node_variant_static_tag>,
- variant_internal_node<Value, Parameters, Box, Allocators, node_variant_static_tag>
- > type;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct internal_node<Value, Parameters, Box, Allocators, node_variant_static_tag>
-{
- typedef variant_internal_node<Value, Parameters, Box, Allocators, node_variant_static_tag> type;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct leaf<Value, Parameters, Box, Allocators, node_variant_static_tag>
-{
- typedef variant_leaf<Value, Parameters, Box, Allocators, node_variant_static_tag> type;
-};
-
-// visitor traits
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, bool IsVisitableConst>
-struct visitor<Value, Parameters, Box, Allocators, node_variant_static_tag, IsVisitableConst>
-{
- typedef static_visitor<> type;
-};
-
-// allocators
-
-template <typename Allocator, typename Value, typename Parameters, typename Box>
-class allocators<Allocator, Value, Parameters, Box, node_variant_static_tag>
- : public detail::rtree::node_alloc
- <
- Allocator, Value, Parameters, Box, node_variant_static_tag
- >::type
-{
- typedef detail::rtree::node_alloc
- <
- Allocator, Value, Parameters, Box, node_variant_static_tag
- > node_alloc;
-
-public:
- typedef typename node_alloc::type node_allocator_type;
- typedef typename node_alloc::traits::pointer node_pointer;
-
-private:
- typedef typename boost::container::allocator_traits
- <
- node_allocator_type
- >::template rebind_alloc<Value> value_allocator_type;
- typedef boost::container::allocator_traits<value_allocator_type> value_allocator_traits;
-
-public:
- typedef Allocator allocator_type;
-
- typedef Value value_type;
- typedef typename value_allocator_traits::reference reference;
- typedef typename value_allocator_traits::const_reference const_reference;
- typedef typename value_allocator_traits::size_type size_type;
- typedef typename value_allocator_traits::difference_type difference_type;
- typedef typename value_allocator_traits::pointer pointer;
- typedef typename value_allocator_traits::const_pointer const_pointer;
-
- inline allocators()
- : node_allocator_type()
- {}
-
- template <typename Alloc>
- inline explicit allocators(Alloc const& alloc)
- : node_allocator_type(alloc)
- {}
-
- inline allocators(BOOST_FWD_REF(allocators) a)
- : node_allocator_type(boost::move(a.node_allocator()))
- {}
-
- inline allocators & operator=(BOOST_FWD_REF(allocators) a)
- {
- node_allocator() = boost::move(a.node_allocator());
- return *this;
- }
-
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- inline allocators & operator=(allocators const& a)
- {
- node_allocator() = a.node_allocator();
- return *this;
- }
-#endif
-
- void swap(allocators & a)
- {
- boost::swap(node_allocator(), a.node_allocator());
- }
-
- bool operator==(allocators const& a) const { return node_allocator() == a.node_allocator(); }
- template <typename Alloc>
- bool operator==(Alloc const& a) const { return node_allocator() == node_allocator_type(a); }
-
- Allocator allocator() const { return Allocator(node_allocator()); }
-
- node_allocator_type & node_allocator() { return *this; }
- node_allocator_type const& node_allocator() const { return *this; }
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_VARIANT_STATIC_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/variant_visitor.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/variant_visitor.hpp
deleted file mode 100644
index e272f9e1d96..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/variant_visitor.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree nodes static visitor related code
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_VARIANT_VISITOR_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_VARIANT_VISITOR_HPP
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/get.hpp>
-#include <boost/variant/variant.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-// nodes variants forward declarations
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct variant_internal_node;
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct variant_leaf;
-
-// nodes conversion
-
-template <typename V, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-inline V & get(
- boost::variant<
- variant_leaf<Value, Parameters, Box, Allocators, Tag>,
- variant_internal_node<Value, Parameters, Box, Allocators, Tag>
- > & v)
-{
- return boost::get<V>(v);
-}
-
-// apply visitor
-
-template <typename Visitor, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-inline void apply_visitor(Visitor & v,
- boost::variant<
- variant_leaf<Value, Parameters, Box, Allocators, Tag>,
- variant_internal_node<Value, Parameters, Box, Allocators, Tag>
- > & n)
-{
- boost::apply_visitor(v, n);
-}
-
-template <typename Visitor, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-inline void apply_visitor(Visitor & v,
- boost::variant<
- variant_leaf<Value, Parameters, Box, Allocators, Tag>,
- variant_internal_node<Value, Parameters, Box, Allocators, Tag>
- > const& n)
-{
- boost::apply_visitor(v, n);
-}
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_VARIANT_VISITOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/weak_dynamic.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/weak_dynamic.hpp
deleted file mode 100644
index eadda62a9dc..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/weak_dynamic.hpp
+++ /dev/null
@@ -1,322 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree nodes based on static conversion, storing dynamic-size containers
-//
-// Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_WEAK_DYNAMIC_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_WEAK_DYNAMIC_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct weak_internal_node
- : public weak_node<Value, Parameters, Box, Allocators, Tag>
-{
- typedef rtree::ptr_pair<Box, typename Allocators::node_pointer> element_type;
- typedef typename boost::container::allocator_traits
- <
- typename Allocators::internal_node_allocator_type
- >::template rebind_alloc<element_type> allocator_type;
-
- typedef boost::container::vector<element_type, allocator_type> elements_type;
-
- template <typename Al>
- inline weak_internal_node(Al const& al)
- : elements(allocator_type(al))
- {}
-
- elements_type elements;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct weak_leaf
- : public weak_node<Value, Parameters, Box, Allocators, Tag>
-{
- typedef typename boost::container::allocator_traits
- <
- typename Allocators::leaf_allocator_type
- >::template rebind_alloc<Value> allocator_type;
-
- typedef boost::container::vector<Value, allocator_type> elements_type;
-
- template <typename Al>
- inline weak_leaf(Al const& al)
- : elements(allocator_type(al))
- {}
-
- elements_type elements;
-};
-
-// nodes traits
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct node<Value, Parameters, Box, Allocators, node_weak_dynamic_tag>
-{
- typedef weak_node<Value, Parameters, Box, Allocators, node_weak_dynamic_tag> type;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct internal_node<Value, Parameters, Box, Allocators, node_weak_dynamic_tag>
-{
- typedef weak_internal_node<Value, Parameters, Box, Allocators, node_weak_dynamic_tag> type;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct leaf<Value, Parameters, Box, Allocators, node_weak_dynamic_tag>
-{
- typedef weak_leaf<Value, Parameters, Box, Allocators, node_weak_dynamic_tag> type;
-};
-
-// visitor traits
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, bool IsVisitableConst>
-struct visitor<Value, Parameters, Box, Allocators, node_weak_dynamic_tag, IsVisitableConst>
-{
- typedef weak_visitor<Value, Parameters, Box, Allocators, node_weak_dynamic_tag, IsVisitableConst> type;
-};
-
-// allocators
-
-template <typename Allocator, typename Value, typename Parameters, typename Box, typename Tag>
-struct internal_node_alloc
-{
- typedef typename internal_nod
- <
- Value, Parameters, Box,
- allocators<Allocator, Value, Parameters, Box, Tag>,
- Tag
- >::type node_type;
-
- typedef typename boost::container::allocator_traits
- <
- Allocator
- >::template rebind_alloc<node_type> type;
-};
-
-template <typename Allocator, typename Value, typename Parameters, typename Box, typename Tag>
-struct leaf_alloc
-{
- typedef typename leaf
- <
- Value, Parameters, Box,
- allocators<Allocator, Value, Parameters, Box, Tag>,
- Tag
- >::type node_type;
-
- typedef typename ::boost::container::allocator_traits
- <
- Allocator
- >::template rebind_alloc<node_type> type;
-};
-
-template <typename Allocator, typename Value, typename Parameters, typename Box>
-class allocators<Allocator, Value, Parameters, Box, node_weak_dynamic_tag>
- : public internal_node_alloc<Allocator, Value, Parameters, Box, node_weak_dynamic_tag>::type
- , public leaf_alloc<Allocator, Value, Parameters, Box, node_weak_dynamic_tag>::type
-{
- typedef detail::rtree::internal_node_alloc
- <
- Allocator, Value, Parameters, Box, node_weak_dynamic_tag
- > internal_node_alloc;
-
- typedef detail::rtree::leaf_alloc
- <
- Allocator, Value, Parameters, Box, node_weak_dynamic_tag
- > leaf_alloc;
-
- typedef detail::rtree::node_alloc
- <
- Allocator, Value, Parameters, Box, node_weak_dynamic_tag
- > node_alloc;
-
-public:
- typedef typename internal_node_alloc::type internal_node_allocator_type;
- typedef typename leaf_alloc::type leaf_allocator_type;
- typedef typename node_alloc::traits::pointer node_pointer;
-
-private:
- typedef typename boost::container::allocator_traits
- <
- leaf_allocator_type // leaf_allocator_type for consistency with weak_leaf
- >::template rebind_alloc<Value> value_allocator_type;
- typedef boost::container::allocator_traits<value_allocator_type> value_allocator_traits;
-
-public:
- typedef Allocator allocator_type;
-
- typedef Value value_type;
- typedef typename value_allocator_traits::reference reference;
- typedef typename value_allocator_traits::const_reference const_reference;
- typedef typename value_allocator_traits::size_type size_type;
- typedef typename value_allocator_traits::difference_type difference_type;
- typedef typename value_allocator_traits::pointer pointer;
- typedef typename value_allocator_traits::const_pointer const_pointer;
-
- inline allocators()
- : internal_node_allocator_type()
- , leaf_allocator_type()
- {}
-
- template <typename Alloc>
- inline explicit allocators(Alloc const& alloc)
- : internal_node_allocator_type(alloc)
- , leaf_allocator_type(alloc)
- {}
-
- inline allocators(BOOST_FWD_REF(allocators) a)
- : internal_node_allocator_type(boost::move(a.internal_node_allocator()))
- , leaf_allocator_type(boost::move(a.leaf_allocator()))
- {}
-
- inline allocators & operator=(BOOST_FWD_REF(allocators) a)
- {
- internal_node_allocator() = ::boost::move(a.internal_node_allocator());
- leaf_allocator() = ::boost::move(a.leaf_allocator());
- return *this;
- }
-
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- inline allocators & operator=(allocators const& a)
- {
- internal_node_allocator() = a.internal_node_allocator();
- leaf_allocator() = a.leaf_allocator();
- return *this;
- }
-#endif
-
- void swap(allocators & a)
- {
- boost::swap(internal_node_allocator(), a.internal_node_allocator());
- boost::swap(leaf_allocator(), a.leaf_allocator());
- }
-
- bool operator==(allocators const& a) const { return leaf_allocator() == a.leaf_allocator(); }
- template <typename Alloc>
- bool operator==(Alloc const& a) const { return leaf_allocator() == leaf_allocator_type(a); }
-
- Allocator allocator() const { return Allocator(leaf_allocator()); }
-
- internal_node_allocator_type & internal_node_allocator() { return *this; }
- internal_node_allocator_type const& internal_node_allocator() const { return *this; }
- leaf_allocator_type & leaf_allocator() { return *this; }
- leaf_allocator_type const& leaf_allocator() const { return *this; }
-};
-
-// create_node_impl
-
-template <typename BaseNodePtr, typename Node>
-struct create_weak_node
-{
- template <typename AllocNode>
- static inline BaseNodePtr apply(AllocNode & alloc_node)
- {
- typedef boost::container::allocator_traits<AllocNode> Al;
- typedef typename Al::pointer P;
-
- P p = Al::allocate(alloc_node, 1);
-
- if ( 0 == p )
- throw_runtime_error("boost::geometry::index::rtree node creation failed");
-
- scoped_deallocator<AllocNode> deallocator(p, alloc_node);
-
- Al::construct(alloc_node, boost::to_address(p), alloc_node);
-
- deallocator.release();
- return p;
- }
-};
-
-// destroy_node_impl
-
-template <typename Node>
-struct destroy_weak_node
-{
- template <typename AllocNode, typename BaseNodePtr>
- static inline void apply(AllocNode & alloc_node, BaseNodePtr n)
- {
- typedef boost::container::allocator_traits<AllocNode> Al;
- typedef typename Al::pointer P;
-
- P p(&static_cast<Node&>(rtree::get<Node>(*n)));
- Al::destroy(alloc_node, boost::addressof(*p));
- Al::deallocate(alloc_node, p, 1);
- }
-};
-
-// create_node
-
-template <typename Allocators, typename Value, typename Parameters, typename Box, typename Tag>
-struct create_node<
- Allocators,
- weak_internal_node<Value, Parameters, Box, Allocators, Tag>
->
-{
- static inline typename Allocators::node_pointer
- apply(Allocators & allocators)
- {
- return create_weak_node<
- typename Allocators::node_pointer,
- weak_internal_node<Value, Parameters, Box, Allocators, Tag>
- >::apply(allocators.internal_node_allocator());
- }
-};
-
-template <typename Allocators, typename Value, typename Parameters, typename Box, typename Tag>
-struct create_node<
- Allocators,
- weak_leaf<Value, Parameters, Box, Allocators, Tag>
->
-{
- static inline typename Allocators::node_pointer
- apply(Allocators & allocators)
- {
- return create_weak_node<
- typename Allocators::node_pointer,
- weak_leaf<Value, Parameters, Box, Allocators, Tag>
- >::apply(allocators.leaf_allocator());
- }
-};
-
-// destroy_node
-
-template <typename Allocators, typename Value, typename Parameters, typename Box, typename Tag>
-struct destroy_node<
- Allocators,
- weak_internal_node<Value, Parameters, Box, Allocators, Tag>
->
-{
- static inline void apply(Allocators & allocators, typename Allocators::node_pointer n)
- {
- destroy_weak_node<
- weak_internal_node<Value, Parameters, Box, Allocators, Tag>
- >::apply(allocators.internal_node_allocator(), n);
- }
-};
-
-template <typename Allocators, typename Value, typename Parameters, typename Box, typename Tag>
-struct destroy_node<
- Allocators,
- weak_leaf<Value, Parameters, Box, Allocators, Tag>
->
-{
- static inline void apply(Allocators & allocators, typename Allocators::node_pointer n)
- {
- destroy_weak_node<
- weak_leaf<Value, Parameters, Box, Allocators, Tag>
- >::apply(allocators.leaf_allocator(), n);
- }
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_WEAK_DYNAMIC_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/weak_static.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/weak_static.hpp
deleted file mode 100644
index ac9e69cecc2..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/weak_static.hpp
+++ /dev/null
@@ -1,173 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree nodes based on static conversion, storing static-size containers
-//
-// Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_WEAK_STATIC_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_WEAK_STATIC_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct weak_internal_node<Value, Parameters, Box, Allocators, node_weak_static_tag>
- : public weak_node<Value, Parameters, Box, Allocators, node_weak_static_tag>
-{
- typedef detail::varray<
- rtree::ptr_pair<Box, typename Allocators::node_pointer>,
- Parameters::max_elements + 1
- > elements_type;
-
- template <typename Alloc>
- inline weak_internal_node(Alloc const&) {}
-
- elements_type elements;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct weak_leaf<Value, Parameters, Box, Allocators, node_weak_static_tag>
- : public weak_node<Value, Parameters, Box, Allocators, node_weak_static_tag>
-{
- typedef detail::varray<
- Value,
- Parameters::max_elements + 1
- > elements_type;
-
- template <typename Alloc>
- inline weak_leaf(Alloc const&) {}
-
- elements_type elements;
-};
-
-// nodes traits
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct node<Value, Parameters, Box, Allocators, node_weak_static_tag>
-{
- typedef weak_node<Value, Parameters, Box, Allocators, node_weak_static_tag> type;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct internal_node<Value, Parameters, Box, Allocators, node_weak_static_tag>
-{
- typedef weak_internal_node<Value, Parameters, Box, Allocators, node_weak_static_tag> type;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators>
-struct leaf<Value, Parameters, Box, Allocators, node_weak_static_tag>
-{
- typedef weak_leaf<Value, Parameters, Box, Allocators, node_weak_static_tag> type;
-};
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, bool IsVisitableConst>
-struct visitor<Value, Parameters, Box, Allocators, node_weak_static_tag, IsVisitableConst>
-{
- typedef weak_visitor<Value, Parameters, Box, Allocators, node_weak_static_tag, IsVisitableConst> type;
-};
-
-// allocators
-
-template <typename Allocator, typename Value, typename Parameters, typename Box>
-class allocators<Allocator, Value, Parameters, Box, node_weak_static_tag>
- : public detail::rtree::internal_node_alloc<Allocator, Value, Parameters, Box, node_weak_static_tag>::type
- , public detail::rtree::leaf_alloc<Allocator, Value, Parameters, Box, node_weak_static_tag>::type
-{
- typedef detail::rtree::internal_node_alloc
- <
- Allocator, Value, Parameters, Box, node_weak_static_tag
- > internal_node_alloc;
-
- typedef detail::rtree::leaf_alloc
- <
- Allocator, Value, Parameters, Box, node_weak_static_tag
- > leaf_alloc;
-
- typedef detail::rtree::node_alloc
- <
- Allocator, Value, Parameters, Box, node_weak_static_tag
- > node_alloc;
-
-public:
- typedef typename internal_node_alloc::type internal_node_allocator_type;
- typedef typename leaf_alloc::type leaf_allocator_type;
- typedef typename node_alloc::traits::pointer node_pointer;
-
-private:
- typedef typename boost::container::allocator_traits
- <
- leaf_allocator_type
- >::template rebind_alloc<Value> value_allocator_type;
- typedef boost::container::allocator_traits<value_allocator_type> value_allocator_traits;
-
-public:
- typedef Allocator allocator_type;
-
- typedef Value value_type;
- typedef typename value_allocator_traits::reference reference;
- typedef typename value_allocator_traits::const_reference const_reference;
- typedef typename value_allocator_traits::size_type size_type;
- typedef typename value_allocator_traits::difference_type difference_type;
- typedef typename value_allocator_traits::pointer pointer;
- typedef typename value_allocator_traits::const_pointer const_pointer;
-
- inline allocators()
- : internal_node_allocator_type()
- , leaf_allocator_type()
- {}
-
- template <typename Alloc>
- inline explicit allocators(Alloc const& alloc)
- : internal_node_allocator_type(alloc)
- , leaf_allocator_type(alloc)
- {}
-
- inline allocators(BOOST_FWD_REF(allocators) a)
- : internal_node_allocator_type(boost::move(a.internal_node_allocator()))
- , leaf_allocator_type(boost::move(a.leaf_allocator()))
- {}
-
- inline allocators & operator=(BOOST_FWD_REF(allocators) a)
- {
- internal_node_allocator() = ::boost::move(a.internal_node_allocator());
- leaf_allocator() = ::boost::move(a.leaf_allocator());
- return *this;
- }
-
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- inline allocators & operator=(allocators const& a)
- {
- internal_node_allocator() = a.internal_node_allocator();
- leaf_allocator() = a.leaf_allocator();
- return *this;
- }
-#endif
-
- void swap(allocators & a)
- {
- boost::swap(internal_node_allocator(), a.internal_node_allocator());
- boost::swap(leaf_allocator(), a.leaf_allocator());
- }
-
- bool operator==(allocators const& a) const { return leaf_allocator() == a.leaf_allocator(); }
- template <typename Alloc>
- bool operator==(Alloc const& a) const { return leaf_allocator() == leaf_allocator_type(a); }
-
- Allocator allocator() const { return Allocator(leaf_allocator()); }
-
- internal_node_allocator_type & internal_node_allocator() { return *this; }
- internal_node_allocator_type const& internal_node_allocator() const { return *this; }
- leaf_allocator_type & leaf_allocator() { return *this; }
- leaf_allocator_type const& leaf_allocator() const{ return *this; }
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_WEAK_STATIC_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/weak_visitor.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/weak_visitor.hpp
deleted file mode 100644
index 08d84778e63..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/node/weak_visitor.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree nodes weak visitor and nodes base type
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_WEAK_VISITOR_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_WEAK_VISITOR_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-// empty visitor
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag, bool IsVisitableConst>
-struct weak_visitor {};
-
-// node
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct weak_node {};
-
-// nodes variants forward declarations
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct weak_internal_node;
-
-template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-struct weak_leaf;
-
-// nodes conversion
-
-template <typename Derived, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-inline Derived & get(weak_node<Value, Parameters, Box, Allocators, Tag> & n)
-{
- return static_cast<Derived&>(n);
-}
-
-// apply visitor
-
-template <typename Visitor, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
-inline void apply_visitor(Visitor & v,
- weak_node<Value, Parameters, Box, Allocators, Tag> & n,
- bool is_internal_node)
-{
- BOOST_GEOMETRY_INDEX_ASSERT(&n, "null ptr");
- if ( is_internal_node )
- {
- typedef weak_internal_node<Value, Parameters, Box, Allocators, Tag> internal_node;
- v(get<internal_node>(n));
- }
- else
- {
- typedef weak_leaf<Value, Parameters, Box, Allocators, Tag> leaf;
- v(get<leaf>(n));
- }
-}
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_DYNAMIC_VISITOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/options.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/options.hpp
deleted file mode 100644
index ff772834d71..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/options.hpp
+++ /dev/null
@@ -1,155 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree options, algorithms, parameters
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
-
-#include <boost/geometry/index/parameters.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-// InsertTag
-struct insert_default_tag {};
-struct insert_reinsert_tag {};
-
-// ChooseNextNodeTag
-struct choose_by_content_diff_tag {};
-struct choose_by_overlap_diff_tag {};
-
-// SplitTag
-struct split_default_tag {};
-//struct split_kmeans_tag {};
-
-// RedistributeTag
-struct linear_tag {};
-struct quadratic_tag {};
-struct rstar_tag {};
-
-// NodeTag
-struct node_variant_dynamic_tag {};
-struct node_variant_static_tag {};
-//struct node_weak_dynamic_tag {};
-//struct node_weak_static_tag {};
-
-template <typename Parameters, typename InsertTag, typename ChooseNextNodeTag, typename SplitTag, typename RedistributeTag, typename NodeTag>
-struct options
-{
- typedef Parameters parameters_type;
- typedef InsertTag insert_tag;
- typedef ChooseNextNodeTag choose_next_node_tag;
- typedef SplitTag split_tag;
- typedef RedistributeTag redistribute_tag;
- typedef NodeTag node_tag;
-};
-
-template <typename Parameters>
-struct options_type
-{
- // TODO: awulkiew - use static assert
-};
-
-template <size_t MaxElements, size_t MinElements>
-struct options_type< index::linear<MaxElements, MinElements> >
-{
- typedef options<
- index::linear<MaxElements, MinElements>,
- insert_default_tag,
- choose_by_content_diff_tag,
- split_default_tag,
- linear_tag,
- node_variant_static_tag
- > type;
-};
-
-template <size_t MaxElements, size_t MinElements>
-struct options_type< index::quadratic<MaxElements, MinElements> >
-{
- typedef options<
- index::quadratic<MaxElements, MinElements>,
- insert_default_tag,
- choose_by_content_diff_tag,
- split_default_tag,
- quadratic_tag,
- node_variant_static_tag
- > type;
-};
-
-template <size_t MaxElements, size_t MinElements, size_t OverlapCostThreshold, size_t ReinsertedElements>
-struct options_type< index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements> >
-{
- typedef options<
- index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements>,
- insert_reinsert_tag,
- choose_by_overlap_diff_tag,
- split_default_tag,
- rstar_tag,
- node_variant_static_tag
- > type;
-};
-
-//template <size_t MaxElements, size_t MinElements>
-//struct options_type< kmeans<MaxElements, MinElements> >
-//{
-// typedef options<
-// kmeans<MaxElements, MinElements>,
-// insert_default_tag,
-// choose_by_content_diff_tag, // change it?
-// split_kmeans_tag,
-// int, // dummy tag - not used for now
-// node_variant_static_tag
-// > type;
-//};
-
-template <>
-struct options_type< index::dynamic_linear >
-{
- typedef options<
- index::dynamic_linear,
- insert_default_tag,
- choose_by_content_diff_tag,
- split_default_tag,
- linear_tag,
- node_variant_dynamic_tag
- > type;
-};
-
-template <>
-struct options_type< index::dynamic_quadratic >
-{
- typedef options<
- index::dynamic_quadratic,
- insert_default_tag,
- choose_by_content_diff_tag,
- split_default_tag,
- quadratic_tag,
- node_variant_dynamic_tag
- > type;
-};
-
-template <>
-struct options_type< index::dynamic_rstar >
-{
- typedef options<
- index::dynamic_rstar,
- insert_reinsert_tag,
- choose_by_overlap_diff_tag,
- split_default_tag,
- rstar_tag,
- node_variant_dynamic_tag
- > type;
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/pack_create.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/pack_create.hpp
deleted file mode 100644
index eea5cf07072..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/pack_create.hpp
+++ /dev/null
@@ -1,472 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree initial packing
-//
-// Copyright (c) 2011-2017 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_PACK_CREATE_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_PACK_CREATE_HPP
-
-#include <boost/geometry/algorithms/expand.hpp>
-#include <boost/geometry/index/detail/algorithms/bounds.hpp>
-#include <boost/geometry/index/detail/algorithms/nth_element.hpp>
-
-#include <boost/geometry/algorithms/detail/expand_by_epsilon.hpp>
-
-#include <util/system/compiler.h>
-
-Y_PRAGMA_DIAGNOSTIC_PUSH
-Y_PRAGMA_NO_WSHADOW
-
-namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree {
-
-namespace pack_utils {
-
-template <std::size_t Dimension>
-struct biggest_edge
-{
- BOOST_STATIC_ASSERT(0 < Dimension);
- template <typename Box>
- static inline void apply(Box const& box, typename coordinate_type<Box>::type & length, std::size_t & dim_index)
- {
- biggest_edge<Dimension-1>::apply(box, length, dim_index);
- typename coordinate_type<Box>::type curr
- = geometry::get<max_corner, Dimension-1>(box) - geometry::get<min_corner, Dimension-1>(box);
- if ( length < curr )
- {
- dim_index = Dimension - 1;
- length = curr;
- }
- }
-};
-
-template <>
-struct biggest_edge<1>
-{
- template <typename Box>
- static inline void apply(Box const& box, typename coordinate_type<Box>::type & length, std::size_t & dim_index)
- {
- dim_index = 0;
- length = geometry::get<max_corner, 0>(box) - geometry::get<min_corner, 0>(box);
- }
-};
-
-template <std::size_t I>
-struct point_entries_comparer
-{
- template <typename PointEntry>
- bool operator()(PointEntry const& e1, PointEntry const& e2) const
- {
- return geometry::get<I>(e1.first) < geometry::get<I>(e2.first);
- }
-};
-
-template <std::size_t I, std::size_t Dimension>
-struct nth_element_and_half_boxes
-{
- template <typename EIt, typename Box>
- static inline void apply(EIt first, EIt median, EIt last, Box const& box, Box & left, Box & right, std::size_t dim_index)
- {
- if ( I == dim_index )
- {
- index::detail::nth_element(first, median, last, point_entries_comparer<I>());
-
- geometry::convert(box, left);
- geometry::convert(box, right);
- typename coordinate_type<Box>::type edge_len
- = geometry::get<max_corner, I>(box) - geometry::get<min_corner, I>(box);
- typename coordinate_type<Box>::type median
- = geometry::get<min_corner, I>(box) + edge_len / 2;
- geometry::set<max_corner, I>(left, median);
- geometry::set<min_corner, I>(right, median);
- }
- else
- nth_element_and_half_boxes<I+1, Dimension>::apply(first, median, last, box, left, right, dim_index);
- }
-};
-
-template <std::size_t Dimension>
-struct nth_element_and_half_boxes<Dimension, Dimension>
-{
- template <typename EIt, typename Box>
- static inline void apply(EIt , EIt , EIt , Box const& , Box & , Box & , std::size_t ) {}
-};
-
-} // namespace pack_utils
-
-// STR leafs number are calculated as rcount/max
-// and the number of splitting planes for each dimension as (count/max)^(1/dimension)
-// <-> for dimension==2 -> sqrt(count/max)
-//
-// The main flaw of this algorithm is that the resulting tree will have bad structure for:
-// 1. non-uniformly distributed elements
-// Statistic check could be performed, e.g. based on variance of lengths of elements edges for each dimension
-// 2. elements distributed mainly along one axis
-// Calculate bounding box of all elements and then number of dividing planes for a dimension
-// from the length of BB edge for this dimension (more or less assuming that elements are uniformly-distributed squares)
-//
-// Another thing is that the last node may have less elements than Max or even Min.
-// The number of splitting planes must be chosen more carefully than count/max
-//
-// This algorithm is something between STR and TGS
-// it is more similar to the top-down recursive kd-tree creation algorithm
-// using object median split and split axis of greatest BB edge
-// BB is only used as a hint (assuming objects are distributed uniformly)
-//
-// Implemented algorithm guarantees that the number of elements in nodes will be between Min and Max
-// and that nodes are packed as tightly as possible
-// e.g. for 177 values Max = 5 and Min = 2 it will construct the following tree:
-// ROOT 177
-// L1 125 52
-// L2 25 25 25 25 25 25 17 10
-// L3 5x5 5x5 5x5 5x5 5x5 5x5 3x5+2 2x5
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class pack
-{
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename Allocators::node_pointer node_pointer;
- typedef rtree::subtree_destroyer<Value, Options, Translator, Box, Allocators> subtree_destroyer;
- typedef typename Allocators::size_type size_type;
-
- typedef typename geometry::point_type<Box>::type point_type;
- typedef typename geometry::coordinate_type<point_type>::type coordinate_type;
- typedef typename detail::default_content_result<Box>::type content_type;
- typedef typename Options::parameters_type parameters_type;
- static const std::size_t dimension = geometry::dimension<point_type>::value;
-
- typedef typename rtree::container_from_elements_type<
- typename rtree::elements_type<leaf>::type,
- std::size_t
- >::type values_counts_container;
-
- typedef typename rtree::elements_type<internal_node>::type internal_elements;
- typedef typename internal_elements::value_type internal_element;
-
-public:
- // Arbitrary iterators
- template <typename InIt> inline static
- node_pointer apply(InIt first, InIt last, size_type & values_count, size_type & leafs_level,
- parameters_type const& parameters, Translator const& translator, Allocators & allocators)
- {
- typedef typename std::iterator_traits<InIt>::difference_type diff_type;
-
- diff_type diff = std::distance(first, last);
- if ( diff <= 0 )
- return node_pointer(0);
-
- typedef std::pair<point_type, InIt> entry_type;
- std::vector<entry_type> entries;
-
- values_count = static_cast<size_type>(diff);
- entries.reserve(values_count);
-
- expandable_box<Box> hint_box;
- for ( ; first != last ; ++first )
- {
- // NOTE: support for iterators not returning true references adapted
- // to Geometry concept and default translator returning true reference
- // An alternative would be to dereference the iterator and translate
- // in one expression each time the indexable was needed.
- typename std::iterator_traits<InIt>::reference in_ref = *first;
- typename Translator::result_type indexable = translator(in_ref);
-
- // NOTE: added for consistency with insert()
- // CONSIDER: alternative - ignore invalid indexable or throw an exception
- BOOST_GEOMETRY_INDEX_ASSERT(detail::is_valid(indexable), "Indexable is invalid");
-
- hint_box.expand(indexable);
-
- point_type pt;
- geometry::centroid(indexable, pt);
- entries.push_back(std::make_pair(pt, first));
- }
-
- subtree_elements_counts subtree_counts = calculate_subtree_elements_counts(values_count, parameters, leafs_level);
- internal_element el = per_level(entries.begin(), entries.end(), hint_box.get(), values_count, subtree_counts,
- parameters, translator, allocators);
-
- return el.second;
- }
-
-private:
- template <typename BoxType>
- class expandable_box
- {
- public:
- expandable_box()
- : m_initialized(false)
- {}
-
- template <typename Indexable>
- explicit expandable_box(Indexable const& indexable)
- : m_initialized(true)
- {
- detail::bounds(indexable, m_box);
- }
-
- template <typename Indexable>
- void expand(Indexable const& indexable)
- {
- if ( !m_initialized )
- {
- // it's guaranteed that the Box will be initialized
- // only for Points, Boxes and Segments but that's ok
- // since only those Geometries can be stored
- detail::bounds(indexable, m_box);
- m_initialized = true;
- }
- else
- {
- geometry::expand(m_box, indexable);
- }
- }
-
- void expand_by_epsilon()
- {
- geometry::detail::expand_by_epsilon(m_box);
- }
-
- BoxType const& get() const
- {
- BOOST_GEOMETRY_INDEX_ASSERT(m_initialized, "uninitialized envelope accessed");
- return m_box;
- }
-
- private:
- bool m_initialized;
- BoxType m_box;
- };
-
- struct subtree_elements_counts
- {
- subtree_elements_counts(std::size_t ma, std::size_t mi) : maxc(ma), minc(mi) {}
- std::size_t maxc;
- std::size_t minc;
- };
-
- template <typename EIt> inline static
- internal_element per_level(EIt first, EIt last, Box const& hint_box, std::size_t values_count, subtree_elements_counts const& subtree_counts,
- parameters_type const& parameters, Translator const& translator, Allocators & allocators)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(0 < std::distance(first, last) && static_cast<std::size_t>(std::distance(first, last)) == values_count,
- "unexpected parameters");
-
- if ( subtree_counts.maxc <= 1 )
- {
- // ROOT or LEAF
- BOOST_GEOMETRY_INDEX_ASSERT(values_count <= parameters.get_max_elements(),
- "too big number of elements");
- // if !root check m_parameters.get_min_elements() <= count
-
- // create new leaf node
- node_pointer n = rtree::create_node<Allocators, leaf>::apply(allocators); // MAY THROW (A)
- subtree_destroyer auto_remover(n, allocators);
- leaf & l = rtree::get<leaf>(*n);
-
- // reserve space for values
- rtree::elements(l).reserve(values_count); // MAY THROW (A)
-
- // calculate values box and copy values
- // initialize the box explicitly to avoid GCC-4.4 uninitialized variable warnings with O2
- expandable_box<Box> elements_box(translator(*(first->second)));
- rtree::elements(l).push_back(*(first->second)); // MAY THROW (A?,C)
- for ( ++first ; first != last ; ++first )
- {
- // NOTE: push_back() must be called at the end in order to support move_iterator.
- // The iterator is dereferenced 2x (no temporary reference) to support
- // non-true reference types and move_iterator without boost::forward<>.
- elements_box.expand(translator(*(first->second)));
- rtree::elements(l).push_back(*(first->second)); // MAY THROW (A?,C)
- }
-
-#ifdef BOOST_GEOMETRY_INDEX_EXPERIMENTAL_ENLARGE_BY_EPSILON
- // Enlarge bounds of a leaf node.
- // It's because Points and Segments are compared WRT machine epsilon
- // This ensures that leafs bounds correspond to the stored elements
- // NOTE: this is done only if the Indexable is a different kind of Geometry
- // than the bounds (only Box for now). Spatial predicates are checked
- // the same way for Geometry of the same kind.
- if ( BOOST_GEOMETRY_CONDITION((
- ! index::detail::is_bounding_geometry
- <
- typename indexable_type<Translator>::type
- >::value )) )
- {
- elements_box.expand_by_epsilon();
- }
-#endif
-
- auto_remover.release();
- return internal_element(elements_box.get(), n);
- }
-
- // calculate next max and min subtree counts
- subtree_elements_counts next_subtree_counts = subtree_counts;
- next_subtree_counts.maxc /= parameters.get_max_elements();
- next_subtree_counts.minc /= parameters.get_max_elements();
-
- // create new internal node
- node_pointer n = rtree::create_node<Allocators, internal_node>::apply(allocators); // MAY THROW (A)
- subtree_destroyer auto_remover(n, allocators);
- internal_node & in = rtree::get<internal_node>(*n);
-
- // reserve space for values
- std::size_t nodes_count = calculate_nodes_count(values_count, subtree_counts);
- rtree::elements(in).reserve(nodes_count); // MAY THROW (A)
- // calculate values box and copy values
- expandable_box<Box> elements_box;
-
- per_level_packets(first, last, hint_box, values_count, subtree_counts, next_subtree_counts,
- rtree::elements(in), elements_box,
- parameters, translator, allocators);
-
- auto_remover.release();
- return internal_element(elements_box.get(), n);
- }
-
- template <typename EIt, typename ExpandableBox> inline static
- void per_level_packets(EIt first, EIt last, Box const& hint_box,
- std::size_t values_count,
- subtree_elements_counts const& subtree_counts,
- subtree_elements_counts const& next_subtree_counts,
- internal_elements & elements, ExpandableBox & elements_box,
- parameters_type const& parameters, Translator const& translator, Allocators & allocators)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(0 < std::distance(first, last) && static_cast<std::size_t>(std::distance(first, last)) == values_count,
- "unexpected parameters");
-
- BOOST_GEOMETRY_INDEX_ASSERT(subtree_counts.minc <= values_count,
- "too small number of elements");
-
- // only one packet
- if ( values_count <= subtree_counts.maxc )
- {
- // the end, move to the next level
- internal_element el = per_level(first, last, hint_box, values_count, next_subtree_counts,
- parameters, translator, allocators);
-
- // in case if push_back() do throw here
- // and even if this is not probable (previously reserved memory, nonthrowing pairs copy)
- // this case is also tested by exceptions test.
- subtree_destroyer auto_remover(el.second, allocators);
- // this container should have memory allocated, reserve() called outside
- elements.push_back(el); // MAY THROW (A?,C) - however in normal conditions shouldn't
- auto_remover.release();
-
- elements_box.expand(el.first);
- return;
- }
-
- std::size_t median_count = calculate_median_count(values_count, subtree_counts);
- EIt median = first + median_count;
-
- coordinate_type greatest_length;
- std::size_t greatest_dim_index = 0;
- pack_utils::biggest_edge<dimension>::apply(hint_box, greatest_length, greatest_dim_index);
- Box left, right;
- pack_utils::nth_element_and_half_boxes<0, dimension>
- ::apply(first, median, last, hint_box, left, right, greatest_dim_index);
-
- per_level_packets(first, median, left,
- median_count, subtree_counts, next_subtree_counts,
- elements, elements_box,
- parameters, translator, allocators);
- per_level_packets(median, last, right,
- values_count - median_count, subtree_counts, next_subtree_counts,
- elements, elements_box,
- parameters, translator, allocators);
- }
-
- inline static
- subtree_elements_counts calculate_subtree_elements_counts(std::size_t elements_count, parameters_type const& parameters, size_type & leafs_level)
- {
- boost::ignore_unused_variable_warning(parameters);
-
- subtree_elements_counts res(1, 1);
- leafs_level = 0;
-
- std::size_t smax = parameters.get_max_elements();
- for ( ; smax < elements_count ; smax *= parameters.get_max_elements(), ++leafs_level )
- res.maxc = smax;
-
- res.minc = parameters.get_min_elements() * (res.maxc / parameters.get_max_elements());
-
- return res;
- }
-
- inline static
- std::size_t calculate_nodes_count(std::size_t count,
- subtree_elements_counts const& subtree_counts)
- {
- std::size_t n = count / subtree_counts.maxc;
- std::size_t r = count % subtree_counts.maxc;
-
- if ( 0 < r && r < subtree_counts.minc )
- {
- std::size_t count_minus_min = count - subtree_counts.minc;
- n = count_minus_min / subtree_counts.maxc;
- r = count_minus_min % subtree_counts.maxc;
- ++n;
- }
-
- if ( 0 < r )
- ++n;
-
- return n;
- }
-
- inline static
- std::size_t calculate_median_count(std::size_t count,
- subtree_elements_counts const& subtree_counts)
- {
- // e.g. for max = 5, min = 2, count = 52, subtree_max = 25, subtree_min = 10
-
- std::size_t n = count / subtree_counts.maxc; // e.g. 52 / 25 = 2
- std::size_t r = count % subtree_counts.maxc; // e.g. 52 % 25 = 2
- std::size_t median_count = (n / 2) * subtree_counts.maxc; // e.g. 2 / 2 * 25 = 25
-
- if ( 0 != r ) // e.g. 0 != 2
- {
- if ( subtree_counts.minc <= r ) // e.g. 10 <= 2 == false
- {
- //BOOST_GEOMETRY_INDEX_ASSERT(0 < n, "unexpected value");
- median_count = ((n+1)/2) * subtree_counts.maxc; // if calculated ((2+1)/2) * 25 which would be ok, but not in all cases
- }
- else // r < subtree_counts.second // e.g. 2 < 10 == true
- {
- std::size_t count_minus_min = count - subtree_counts.minc; // e.g. 52 - 10 = 42
- n = count_minus_min / subtree_counts.maxc; // e.g. 42 / 25 = 1
- r = count_minus_min % subtree_counts.maxc; // e.g. 42 % 25 = 17
- if ( r == 0 ) // e.g. false
- {
- // n can't be equal to 0 because then there wouldn't be any element in the other node
- //BOOST_GEOMETRY_INDEX_ASSERT(0 < n, "unexpected value");
- median_count = ((n+1)/2) * subtree_counts.maxc; // if calculated ((1+1)/2) * 25 which would be ok, but not in all cases
- }
- else
- {
- if ( n == 0 ) // e.g. false
- median_count = r; // if calculated -> 17 which is wrong!
- else
- median_count = ((n+2)/2) * subtree_counts.maxc; // e.g. ((1+2)/2) * 25 = 25
- }
- }
- }
-
- return median_count;
- }
-};
-
-}}}}} // namespace boost::geometry::index::detail::rtree
-
-Y_PRAGMA_DIAGNOSTIC_POP
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_PACK_CREATE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/quadratic/quadratic.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/quadratic/quadratic.hpp
deleted file mode 100644
index 837ddbeecb6..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/quadratic/quadratic.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree quadratic algorithm implementation
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_QUADRATIC_QUADRATIC_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_QUADRATIC_QUADRATIC_HPP
-
-#include <boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp>
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_QUADRATIC_QUADRATIC_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp
deleted file mode 100644
index 928ffd47d96..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp
+++ /dev/null
@@ -1,295 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree quadratic split algorithm implementation
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_QUADRATIC_REDISTRIBUTE_ELEMENTS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_QUADRATIC_REDISTRIBUTE_ELEMENTS_HPP
-
-#include <algorithm>
-
-#include <boost/geometry/index/detail/algorithms/content.hpp>
-#include <boost/geometry/index/detail/algorithms/union_content.hpp>
-
-#include <boost/geometry/index/detail/bounded_view.hpp>
-
-#include <boost/geometry/index/detail/rtree/node/node.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/insert.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/is_leaf.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-namespace quadratic {
-
-template <typename Box, typename Elements, typename Parameters, typename Translator>
-inline void pick_seeds(Elements const& elements,
- Parameters const& parameters,
- Translator const& tr,
- size_t & seed1,
- size_t & seed2)
-{
- typedef typename Elements::value_type element_type;
- typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
- typedef Box box_type;
- typedef typename index::detail::default_content_result<box_type>::type content_type;
- typedef index::detail::bounded_view<indexable_type, box_type> bounded_indexable_view;
-
- const size_t elements_count = parameters.get_max_elements() + 1;
- BOOST_GEOMETRY_INDEX_ASSERT(elements.size() == elements_count, "wrong number of elements");
- BOOST_GEOMETRY_INDEX_ASSERT(2 <= elements_count, "unexpected number of elements");
-
- content_type greatest_free_content = 0;
- seed1 = 0;
- seed2 = 1;
-
- for ( size_t i = 0 ; i < elements_count - 1 ; ++i )
- {
- for ( size_t j = i + 1 ; j < elements_count ; ++j )
- {
- indexable_type const& ind1 = rtree::element_indexable(elements[i], tr);
- indexable_type const& ind2 = rtree::element_indexable(elements[j], tr);
-
- box_type enlarged_box;
- detail::bounds(ind1, enlarged_box);
- geometry::expand(enlarged_box, ind2);
-
- bounded_indexable_view bounded_ind1(ind1);
- bounded_indexable_view bounded_ind2(ind2);
- content_type free_content = ( index::detail::content(enlarged_box)
- - index::detail::content(bounded_ind1) )
- - index::detail::content(bounded_ind2);
-
- if ( greatest_free_content < free_content )
- {
- greatest_free_content = free_content;
- seed1 = i;
- seed2 = j;
- }
- }
- }
-
- ::boost::ignore_unused_variable_warning(parameters);
-}
-
-} // namespace quadratic
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct redistribute_elements<Value, Options, Translator, Box, Allocators, quadratic_tag>
-{
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename rtree::node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename index::detail::default_content_result<Box>::type content_type;
-
- template <typename Node>
- static inline void apply(Node & n,
- Node & second_node,
- Box & box1,
- Box & box2,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators)
- {
- typedef typename rtree::elements_type<Node>::type elements_type;
- typedef typename elements_type::value_type element_type;
- typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
-
- elements_type & elements1 = rtree::elements(n);
- elements_type & elements2 = rtree::elements(second_node);
-
- BOOST_GEOMETRY_INDEX_ASSERT(elements1.size() == parameters.get_max_elements() + 1, "unexpected elements number");
-
- // copy original elements - use in-memory storage (std::allocator)
- // TODO: move if noexcept
- typedef typename rtree::container_from_elements_type<elements_type, element_type>::type
- container_type;
- container_type elements_copy(elements1.begin(), elements1.end()); // MAY THROW, STRONG (alloc, copy)
- container_type elements_backup(elements1.begin(), elements1.end()); // MAY THROW, STRONG (alloc, copy)
-
- // calculate initial seeds
- size_t seed1 = 0;
- size_t seed2 = 0;
- quadratic::pick_seeds<Box>(elements_copy, parameters, translator, seed1, seed2);
-
- // prepare nodes' elements containers
- elements1.clear();
- BOOST_GEOMETRY_INDEX_ASSERT(elements2.empty(), "second node's elements container should be empty");
-
- BOOST_TRY
- {
- // add seeds
- elements1.push_back(elements_copy[seed1]); // MAY THROW, STRONG (copy)
- elements2.push_back(elements_copy[seed2]); // MAY THROW, STRONG (alloc, copy)
-
- // calculate boxes
- detail::bounds(rtree::element_indexable(elements_copy[seed1], translator), box1);
- detail::bounds(rtree::element_indexable(elements_copy[seed2], translator), box2);
-
- // remove seeds
- if (seed1 < seed2)
- {
- rtree::move_from_back(elements_copy, elements_copy.begin() + seed2); // MAY THROW, STRONG (copy)
- elements_copy.pop_back();
- rtree::move_from_back(elements_copy, elements_copy.begin() + seed1); // MAY THROW, STRONG (copy)
- elements_copy.pop_back();
- }
- else
- {
- rtree::move_from_back(elements_copy, elements_copy.begin() + seed1); // MAY THROW, STRONG (copy)
- elements_copy.pop_back();
- rtree::move_from_back(elements_copy, elements_copy.begin() + seed2); // MAY THROW, STRONG (copy)
- elements_copy.pop_back();
- }
-
- // initialize areas
- content_type content1 = index::detail::content(box1);
- content_type content2 = index::detail::content(box2);
-
- size_t remaining = elements_copy.size();
-
- // redistribute the rest of the elements
- while ( !elements_copy.empty() )
- {
- typename container_type::reverse_iterator el_it = elements_copy.rbegin();
- bool insert_into_group1 = false;
-
- size_t elements1_count = elements1.size();
- size_t elements2_count = elements2.size();
-
- // if there is small number of elements left and the number of elements in node is lesser than min_elems
- // just insert them to this node
- if ( elements1_count + remaining <= parameters.get_min_elements() )
- {
- insert_into_group1 = true;
- }
- else if ( elements2_count + remaining <= parameters.get_min_elements() )
- {
- insert_into_group1 = false;
- }
- // insert the best element
- else
- {
- // find element with minimum groups areas increses differences
- content_type content_increase1 = 0;
- content_type content_increase2 = 0;
- el_it = pick_next(elements_copy.rbegin(), elements_copy.rend(),
- box1, box2, content1, content2, translator,
- content_increase1, content_increase2);
-
- if ( content_increase1 < content_increase2 ||
- ( content_increase1 == content_increase2 && ( content1 < content2 ||
- ( content1 == content2 && elements1_count <= elements2_count ) )
- ) )
- {
- insert_into_group1 = true;
- }
- else
- {
- insert_into_group1 = false;
- }
- }
-
- // move element to the choosen group
- element_type const& elem = *el_it;
- indexable_type const& indexable = rtree::element_indexable(elem, translator);
-
- if ( insert_into_group1 )
- {
- elements1.push_back(elem); // MAY THROW, STRONG (copy)
- geometry::expand(box1, indexable);
- content1 = index::detail::content(box1);
- }
- else
- {
- elements2.push_back(elem); // MAY THROW, STRONG (alloc, copy)
- geometry::expand(box2, indexable);
- content2 = index::detail::content(box2);
- }
-
- BOOST_GEOMETRY_INDEX_ASSERT(!elements_copy.empty(), "expected more elements");
- typename container_type::iterator el_it_base = el_it.base();
- rtree::move_from_back(elements_copy, --el_it_base); // MAY THROW, STRONG (copy)
- elements_copy.pop_back();
-
- BOOST_GEOMETRY_INDEX_ASSERT(0 < remaining, "expected more remaining elements");
- --remaining;
- }
- }
- BOOST_CATCH(...)
- {
- //elements_copy.clear();
- elements1.clear();
- elements2.clear();
-
- rtree::destroy_elements<Value, Options, Translator, Box, Allocators>::apply(elements_backup, allocators);
- //elements_backup.clear();
-
- BOOST_RETHROW // RETHROW, BASIC
- }
- BOOST_CATCH_END
- }
-
- // TODO: awulkiew - change following function to static member of the pick_next class?
-
- template <typename It>
- static inline It pick_next(It first, It last,
- Box const& box1, Box const& box2,
- content_type const& content1, content_type const& content2,
- Translator const& translator,
- content_type & out_content_increase1, content_type & out_content_increase2)
- {
- typedef typename boost::iterator_value<It>::type element_type;
- typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
-
- content_type greatest_content_incrase_diff = 0;
- It out_it = first;
- out_content_increase1 = 0;
- out_content_increase2 = 0;
-
- // find element with greatest difference between increased group's boxes areas
- for ( It el_it = first ; el_it != last ; ++el_it )
- {
- indexable_type const& indexable = rtree::element_indexable(*el_it, translator);
-
- // calculate enlarged boxes and areas
- Box enlarged_box1(box1);
- Box enlarged_box2(box2);
- geometry::expand(enlarged_box1, indexable);
- geometry::expand(enlarged_box2, indexable);
- content_type enlarged_content1 = index::detail::content(enlarged_box1);
- content_type enlarged_content2 = index::detail::content(enlarged_box2);
-
- content_type content_incrase1 = (enlarged_content1 - content1);
- content_type content_incrase2 = (enlarged_content2 - content2);
-
- content_type content_incrase_diff = content_incrase1 < content_incrase2 ?
- content_incrase2 - content_incrase1 : content_incrase1 - content_incrase2;
-
- if ( greatest_content_incrase_diff < content_incrase_diff )
- {
- greatest_content_incrase_diff = content_incrase_diff;
- out_it = el_it;
- out_content_increase1 = content_incrase1;
- out_content_increase2 = content_incrase2;
- }
- }
-
- return out_it;
- }
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_QUADRATIC_REDISTRIBUTE_ELEMENTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/query_iterators.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/query_iterators.hpp
deleted file mode 100644
index 83be106b8bd..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/query_iterators.hpp
+++ /dev/null
@@ -1,387 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree query iterators
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_QUERY_ITERATORS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_QUERY_ITERATORS_HPP
-
-#include <boost/scoped_ptr.hpp>
-
-//#define BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_MOVE
-
-namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace iterators {
-
-template <typename Value, typename Allocators>
-struct end_query_iterator
-{
- typedef std::forward_iterator_tag iterator_category;
- typedef Value value_type;
- typedef typename Allocators::const_reference reference;
- typedef typename Allocators::difference_type difference_type;
- typedef typename Allocators::const_pointer pointer;
-
- reference operator*() const
- {
- BOOST_GEOMETRY_INDEX_ASSERT(false, "iterator not dereferencable");
- pointer p(0);
- return *p;
- }
-
- const value_type * operator->() const
- {
- BOOST_GEOMETRY_INDEX_ASSERT(false, "iterator not dereferencable");
- const value_type * p = 0;
- return p;
- }
-
- end_query_iterator & operator++()
- {
- BOOST_GEOMETRY_INDEX_ASSERT(false, "iterator not incrementable");
- return *this;
- }
-
- end_query_iterator operator++(int)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(false, "iterator not incrementable");
- return *this;
- }
-
- friend bool operator==(end_query_iterator const& /*l*/, end_query_iterator const& /*r*/)
- {
- return true;
- }
-};
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators, typename Predicates>
-class spatial_query_iterator
-{
- typedef visitors::spatial_query_incremental<Value, Options, Translator, Box, Allocators, Predicates> visitor_type;
- typedef typename visitor_type::node_pointer node_pointer;
-
-public:
- typedef std::forward_iterator_tag iterator_category;
- typedef Value value_type;
- typedef typename Allocators::const_reference reference;
- typedef typename Allocators::difference_type difference_type;
- typedef typename Allocators::const_pointer pointer;
-
- inline spatial_query_iterator()
- {}
-
- inline spatial_query_iterator(Translator const& t, Predicates const& p)
- : m_visitor(t, p)
- {}
-
- inline spatial_query_iterator(node_pointer root, Translator const& t, Predicates const& p)
- : m_visitor(t, p)
- {
- m_visitor.initialize(root);
- }
-
- reference operator*() const
- {
- return m_visitor.dereference();
- }
-
- const value_type * operator->() const
- {
- return boost::addressof(m_visitor.dereference());
- }
-
- spatial_query_iterator & operator++()
- {
- m_visitor.increment();
- return *this;
- }
-
- spatial_query_iterator operator++(int)
- {
- spatial_query_iterator temp = *this;
- this->operator++();
- return temp;
- }
-
- friend bool operator==(spatial_query_iterator const& l, spatial_query_iterator const& r)
- {
- return l.m_visitor == r.m_visitor;
- }
-
- friend bool operator==(spatial_query_iterator const& l, end_query_iterator<Value, Allocators> const& /*r*/)
- {
- return l.m_visitor.is_end();
- }
-
- friend bool operator==(end_query_iterator<Value, Allocators> const& /*l*/, spatial_query_iterator const& r)
- {
- return r.m_visitor.is_end();
- }
-
-private:
- visitor_type m_visitor;
-};
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators, typename Predicates, unsigned NearestPredicateIndex>
-class distance_query_iterator
-{
- typedef visitors::distance_query_incremental<Value, Options, Translator, Box, Allocators, Predicates, NearestPredicateIndex> visitor_type;
- typedef typename visitor_type::node_pointer node_pointer;
-
-public:
- typedef std::forward_iterator_tag iterator_category;
- typedef Value value_type;
- typedef typename Allocators::const_reference reference;
- typedef typename Allocators::difference_type difference_type;
- typedef typename Allocators::const_pointer pointer;
-
- inline distance_query_iterator()
- {}
-
- inline distance_query_iterator(Translator const& t, Predicates const& p)
- : m_visitor(t, p)
- {}
-
- inline distance_query_iterator(node_pointer root, Translator const& t, Predicates const& p)
- : m_visitor(t, p)
- {
- m_visitor.initialize(root);
- }
-
- reference operator*() const
- {
- return m_visitor.dereference();
- }
-
- const value_type * operator->() const
- {
- return boost::addressof(m_visitor.dereference());
- }
-
- distance_query_iterator & operator++()
- {
- m_visitor.increment();
- return *this;
- }
-
- distance_query_iterator operator++(int)
- {
- distance_query_iterator temp = *this;
- this->operator++();
- return temp;
- }
-
- friend bool operator==(distance_query_iterator const& l, distance_query_iterator const& r)
- {
- return l.m_visitor == r.m_visitor;
- }
-
- friend bool operator==(distance_query_iterator const& l, end_query_iterator<Value, Allocators> const& /*r*/)
- {
- return l.m_visitor.is_end();
- }
-
- friend bool operator==(end_query_iterator<Value, Allocators> const& /*l*/, distance_query_iterator const& r)
- {
- return r.m_visitor.is_end();
- }
-
-private:
- visitor_type m_visitor;
-};
-
-
-template <typename L, typename R>
-inline bool operator!=(L const& l, R const& r)
-{
- return !(l == r);
-}
-
-
-template <typename Value, typename Allocators>
-class query_iterator_base
-{
-public:
- typedef std::forward_iterator_tag iterator_category;
- typedef Value value_type;
- typedef typename Allocators::const_reference reference;
- typedef typename Allocators::difference_type difference_type;
- typedef typename Allocators::const_pointer pointer;
-
- virtual ~query_iterator_base() {}
-
- virtual query_iterator_base * clone() const = 0;
-
- virtual bool is_end() const = 0;
- virtual reference dereference() const = 0;
- virtual void increment() = 0;
- virtual bool equals(query_iterator_base const&) const = 0;
-};
-
-template <typename Value, typename Allocators, typename Iterator>
-class query_iterator_wrapper
- : public query_iterator_base<Value, Allocators>
-{
- typedef query_iterator_base<Value, Allocators> base_t;
-
-public:
- typedef std::forward_iterator_tag iterator_category;
- typedef Value value_type;
- typedef typename Allocators::const_reference reference;
- typedef typename Allocators::difference_type difference_type;
- typedef typename Allocators::const_pointer pointer;
-
- query_iterator_wrapper() : m_iterator() {}
- explicit query_iterator_wrapper(Iterator const& it) : m_iterator(it) {}
-
- virtual base_t * clone() const { return new query_iterator_wrapper(m_iterator); }
-
- virtual bool is_end() const { return m_iterator == end_query_iterator<Value, Allocators>(); }
- virtual reference dereference() const { return *m_iterator; }
- virtual void increment() { ++m_iterator; }
- virtual bool equals(base_t const& r) const
- {
- const query_iterator_wrapper * p = dynamic_cast<const query_iterator_wrapper *>(boost::addressof(r));
- BOOST_GEOMETRY_INDEX_ASSERT(p, "iterators can't be compared");
- return m_iterator == p->m_iterator;
- }
-
-private:
- Iterator m_iterator;
-};
-
-
-template <typename Value, typename Allocators>
-class query_iterator
-{
- typedef query_iterator_base<Value, Allocators> iterator_base;
- typedef boost::scoped_ptr<iterator_base> iterator_ptr;
-
-public:
- typedef std::forward_iterator_tag iterator_category;
- typedef Value value_type;
- typedef typename Allocators::const_reference reference;
- typedef typename Allocators::difference_type difference_type;
- typedef typename Allocators::const_pointer pointer;
-
- query_iterator()
- {}
-
- template <typename It>
- query_iterator(It const& it)
- : m_ptr(static_cast<iterator_base*>(
- new query_iterator_wrapper<Value, Allocators, It>(it) ))
- {}
-
- query_iterator(end_query_iterator<Value, Allocators> const& /*it*/)
- {}
-
- query_iterator(query_iterator const& o)
- : m_ptr(o.m_ptr.get() ? o.m_ptr->clone() : 0)
- {}
-
-#ifndef BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_MOVE
- query_iterator & operator=(query_iterator const& o)
- {
- if ( this != boost::addressof(o) )
- {
- m_ptr.reset(o.m_ptr.get() ? o.m_ptr->clone() : 0);
- }
- return *this;
- }
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
- query_iterator(query_iterator && o)
- : m_ptr(0)
- {
- m_ptr.swap(o.m_ptr);
- }
- query_iterator & operator=(query_iterator && o)
- {
- if ( this != boost::addressof(o) )
- {
- m_ptr.swap(o.m_ptr);
- o.m_ptr.reset();
- }
- return *this;
- }
-#endif
-#else // !BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_MOVE
-private:
- BOOST_COPYABLE_AND_MOVABLE(query_iterator)
-public:
- query_iterator & operator=(BOOST_COPY_ASSIGN_REF(query_iterator) o)
- {
- if ( this != boost::addressof(o) )
- {
- m_ptr.reset(o.m_ptr.get() ? o.m_ptr->clone() : 0);
- }
- return *this;
- }
- query_iterator(BOOST_RV_REF(query_iterator) o)
- : m_ptr(0)
- {
- m_ptr.swap(o.m_ptr);
- }
- query_iterator & operator=(BOOST_RV_REF(query_iterator) o)
- {
- if ( this != boost::addressof(o) )
- {
- m_ptr.swap(o.m_ptr);
- o.m_ptr.reset();
- }
- return *this;
- }
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_QUERY_ITERATORS_USE_MOVE
-
- reference operator*() const
- {
- return m_ptr->dereference();
- }
-
- const value_type * operator->() const
- {
- return boost::addressof(m_ptr->dereference());
- }
-
- query_iterator & operator++()
- {
- m_ptr->increment();
- return *this;
- }
-
- query_iterator operator++(int)
- {
- query_iterator temp = *this;
- this->operator++();
- return temp;
- }
-
- friend bool operator==(query_iterator const& l, query_iterator const& r)
- {
- if ( l.m_ptr.get() )
- {
- if ( r.m_ptr.get() )
- return l.m_ptr->equals(*r.m_ptr);
- else
- return l.m_ptr->is_end();
- }
- else
- {
- if ( r.m_ptr.get() )
- return r.m_ptr->is_end();
- else
- return true;
- }
- }
-
-private:
- iterator_ptr m_ptr;
-};
-
-}}}}}} // namespace boost::geometry::index::detail::rtree::iterators
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_QUERY_ITERATORS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/choose_next_node.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/choose_next_node.hpp
deleted file mode 100644
index 89697b5947f..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/choose_next_node.hpp
+++ /dev/null
@@ -1,234 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree R*-tree next node choosing algorithm implementation
-//
-// Copyright (c) 2011-2017 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_RSTAR_CHOOSE_NEXT_NODE_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_RSTAR_CHOOSE_NEXT_NODE_HPP
-
-#include <algorithm>
-
-#include <boost/geometry/algorithms/expand.hpp>
-
-#include <boost/geometry/index/detail/algorithms/content.hpp>
-#include <boost/geometry/index/detail/algorithms/intersection_content.hpp>
-#include <boost/geometry/index/detail/algorithms/nth_element.hpp>
-#include <boost/geometry/index/detail/algorithms/union_content.hpp>
-
-#include <boost/geometry/index/detail/rtree/node/node.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/is_leaf.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-template <typename Value, typename Options, typename Box, typename Allocators>
-class choose_next_node<Value, Options, Box, Allocators, choose_by_overlap_diff_tag>
-{
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename rtree::elements_type<internal_node>::type children_type;
- typedef typename children_type::value_type child_type;
-
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename index::detail::default_content_result<Box>::type content_type;
-
-public:
- template <typename Indexable>
- static inline size_t apply(internal_node & n,
- Indexable const& indexable,
- parameters_type const& parameters,
- size_t node_relative_level)
- {
- ::boost::ignore_unused_variable_warning(parameters);
-
- children_type & children = rtree::elements(n);
-
- // children are leafs
- if ( node_relative_level <= 1 )
- {
- return choose_by_minimum_overlap_cost(children, indexable, parameters.get_overlap_cost_threshold());
- }
- // children are internal nodes
- else
- return choose_by_minimum_content_cost(children, indexable);
- }
-
-private:
- template <typename Indexable>
- static inline size_t choose_by_minimum_overlap_cost(children_type const& children,
- Indexable const& indexable,
- size_t overlap_cost_threshold)
- {
- const size_t children_count = children.size();
-
- content_type min_content_diff = (std::numeric_limits<content_type>::max)();
- content_type min_content = (std::numeric_limits<content_type>::max)();
- size_t choosen_index = 0;
-
- // create container of children sorted by content enlargement needed to include the new value
- typedef boost::tuple<size_t, content_type, content_type> child_contents;
-
- typename rtree::container_from_elements_type<children_type, child_contents>::type children_contents;
- children_contents.resize(children_count);
-
- for ( size_t i = 0 ; i < children_count ; ++i )
- {
- child_type const& ch_i = children[i];
-
- // expanded child node's box
- Box box_exp(ch_i.first);
- geometry::expand(box_exp, indexable);
-
- // areas difference
- content_type content = index::detail::content(box_exp);
- content_type content_diff = content - index::detail::content(ch_i.first);
-
- children_contents[i] = boost::make_tuple(i, content_diff, content);
-
- if ( content_diff < min_content_diff ||
- (content_diff == min_content_diff && content < min_content) )
- {
- min_content_diff = content_diff;
- min_content = content;
- choosen_index = i;
- }
- }
-
- // is this assumption ok? if min_content_diff == 0 there is no overlap increase?
-
- if ( min_content_diff < -std::numeric_limits<double>::epsilon() || std::numeric_limits<double>::epsilon() < min_content_diff )
- {
- size_t first_n_children_count = children_count;
- if ( 0 < overlap_cost_threshold && overlap_cost_threshold < children.size() )
- {
- first_n_children_count = overlap_cost_threshold;
- // rearrange by content_diff
- // in order to calculate nearly minimum overlap cost
- index::detail::nth_element(children_contents.begin(), children_contents.begin() + first_n_children_count, children_contents.end(), content_diff_less);
- }
-
- // calculate minimum or nearly minimum overlap cost
- choosen_index = choose_by_minimum_overlap_cost_first_n(children, indexable, first_n_children_count, children_count, children_contents);
- }
-
- return choosen_index;
- }
-
- static inline bool content_diff_less(boost::tuple<size_t, content_type, content_type> const& p1, boost::tuple<size_t, content_type, content_type> const& p2)
- {
- return boost::get<1>(p1) < boost::get<1>(p2) ||
- (boost::get<1>(p1) == boost::get<1>(p2) && boost::get<2>(p1) < boost::get<2>(p2));
- }
-
- template <typename Indexable, typename ChildrenContents>
- static inline size_t choose_by_minimum_overlap_cost_first_n(children_type const& children,
- Indexable const& indexable,
- size_t const first_n_children_count,
- size_t const children_count,
- ChildrenContents const& children_contents)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(first_n_children_count <= children_count, "unexpected value");
- BOOST_GEOMETRY_INDEX_ASSERT(children_contents.size() == children_count, "unexpected number of elements");
-
- // choose index with smallest overlap change value, or content change or smallest content
- size_t choosen_index = 0;
- content_type smallest_overlap_diff = (std::numeric_limits<content_type>::max)();
- content_type smallest_content_diff = (std::numeric_limits<content_type>::max)();
- content_type smallest_content = (std::numeric_limits<content_type>::max)();
-
- // for each child node
- for (size_t i = 0 ; i < first_n_children_count ; ++i )
- {
- child_type const& ch_i = children[i];
-
- Box box_exp(ch_i.first);
- // calculate expanded box of child node ch_i
- geometry::expand(box_exp, indexable);
-
- content_type overlap_diff = 0;
-
- // calculate overlap
- for ( size_t j = 0 ; j < children_count ; ++j )
- {
- if ( i != j )
- {
- child_type const& ch_j = children[j];
-
- content_type overlap_exp = index::detail::intersection_content(box_exp, ch_j.first);
- if ( overlap_exp < -std::numeric_limits<content_type>::epsilon() || std::numeric_limits<content_type>::epsilon() < overlap_exp )
- {
- overlap_diff += overlap_exp - index::detail::intersection_content(ch_i.first, ch_j.first);
- }
- }
- }
-
- content_type content = boost::get<2>(children_contents[i]);
- content_type content_diff = boost::get<1>(children_contents[i]);
-
- // update result
- if ( overlap_diff < smallest_overlap_diff ||
- ( overlap_diff == smallest_overlap_diff && ( content_diff < smallest_content_diff ||
- ( content_diff == smallest_content_diff && content < smallest_content ) )
- ) )
- {
- smallest_overlap_diff = overlap_diff;
- smallest_content_diff = content_diff;
- smallest_content = content;
- choosen_index = i;
- }
- }
-
- return choosen_index;
- }
-
- template <typename Indexable>
- static inline size_t choose_by_minimum_content_cost(children_type const& children, Indexable const& indexable)
- {
- size_t children_count = children.size();
-
- // choose index with smallest content change or smallest content
- size_t choosen_index = 0;
- content_type smallest_content_diff = (std::numeric_limits<content_type>::max)();
- content_type smallest_content = (std::numeric_limits<content_type>::max)();
-
- // choose the child which requires smallest box expansion to store the indexable
- for ( size_t i = 0 ; i < children_count ; ++i )
- {
- child_type const& ch_i = children[i];
-
- // expanded child node's box
- Box box_exp(ch_i.first);
- geometry::expand(box_exp, indexable);
-
- // areas difference
- content_type content = index::detail::content(box_exp);
- content_type content_diff = content - index::detail::content(ch_i.first);
-
- // update the result
- if ( content_diff < smallest_content_diff ||
- ( content_diff == smallest_content_diff && content < smallest_content ) )
- {
- smallest_content_diff = content_diff;
- smallest_content = content;
- choosen_index = i;
- }
- }
-
- return choosen_index;
- }
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_RSTAR_CHOOSE_NEXT_NODE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/insert.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/insert.hpp
deleted file mode 100644
index 127290194f1..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/insert.hpp
+++ /dev/null
@@ -1,591 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree R*-tree insert algorithm implementation
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_RSTAR_INSERT_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_RSTAR_INSERT_HPP
-
-#include <boost/geometry/index/detail/algorithms/content.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree { namespace visitors {
-
-namespace rstar {
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class remove_elements_to_reinsert
-{
-public:
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename Options::parameters_type parameters_type;
-
- //typedef typename Allocators::internal_node_pointer internal_node_pointer;
- typedef internal_node * internal_node_pointer;
-
- template <typename ResultElements, typename Node>
- static inline void apply(ResultElements & result_elements,
- Node & n,
- internal_node_pointer parent,
- size_t current_child_index,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators)
- {
- typedef typename rtree::elements_type<Node>::type elements_type;
- typedef typename elements_type::value_type element_type;
- typedef typename geometry::point_type<Box>::type point_type;
- // TODO: awulkiew - change second point_type to the point type of the Indexable?
- typedef typename
- geometry::default_comparable_distance_result<point_type>::type
- comparable_distance_type;
-
- elements_type & elements = rtree::elements(n);
-
- const size_t elements_count = parameters.get_max_elements() + 1;
- const size_t reinserted_elements_count = (::std::min)(parameters.get_reinserted_elements(), elements_count - parameters.get_min_elements());
-
- BOOST_GEOMETRY_INDEX_ASSERT(parent, "node shouldn't be the root node");
- BOOST_GEOMETRY_INDEX_ASSERT(elements.size() == elements_count, "unexpected elements number");
- BOOST_GEOMETRY_INDEX_ASSERT(0 < reinserted_elements_count, "wrong value of elements to reinsert");
-
- // calculate current node's center
- point_type node_center;
- geometry::centroid(rtree::elements(*parent)[current_child_index].first, node_center);
-
- // fill the container of centers' distances of children from current node's center
- typedef typename index::detail::rtree::container_from_elements_type<
- elements_type,
- std::pair<comparable_distance_type, element_type>
- >::type sorted_elements_type;
-
- sorted_elements_type sorted_elements;
- // If constructor is used instead of resize() MS implementation leaks here
- sorted_elements.reserve(elements_count); // MAY THROW, STRONG (V, E: alloc, copy)
-
- for ( typename elements_type::const_iterator it = elements.begin() ;
- it != elements.end() ; ++it )
- {
- point_type element_center;
- geometry::centroid( rtree::element_indexable(*it, translator), element_center);
- sorted_elements.push_back(std::make_pair(
- geometry::comparable_distance(node_center, element_center),
- *it)); // MAY THROW (V, E: copy)
- }
-
- // sort elements by distances from center
- std::partial_sort(
- sorted_elements.begin(),
- sorted_elements.begin() + reinserted_elements_count,
- sorted_elements.end(),
- distances_dsc<comparable_distance_type, element_type>); // MAY THROW, BASIC (V, E: copy)
-
- // copy elements which will be reinserted
- result_elements.clear();
- result_elements.reserve(reinserted_elements_count); // MAY THROW, STRONG (V, E: alloc, copy)
- for ( typename sorted_elements_type::const_iterator it = sorted_elements.begin() ;
- it != sorted_elements.begin() + reinserted_elements_count ; ++it )
- {
- result_elements.push_back(it->second); // MAY THROW (V, E: copy)
- }
-
- BOOST_TRY
- {
- // copy remaining elements to the current node
- elements.clear();
- elements.reserve(elements_count - reinserted_elements_count); // SHOULDN'T THROW (new_size <= old size)
- for ( typename sorted_elements_type::const_iterator it = sorted_elements.begin() + reinserted_elements_count;
- it != sorted_elements.end() ; ++it )
- {
- elements.push_back(it->second); // MAY THROW (V, E: copy)
- }
- }
- BOOST_CATCH(...)
- {
- elements.clear();
-
- for ( typename sorted_elements_type::iterator it = sorted_elements.begin() ;
- it != sorted_elements.end() ; ++it )
- {
- destroy_element<Value, Options, Translator, Box, Allocators>::apply(it->second, allocators);
- }
-
- BOOST_RETHROW // RETHROW
- }
- BOOST_CATCH_END
-
- ::boost::ignore_unused_variable_warning(parameters);
- }
-
-private:
- template <typename Distance, typename El>
- static inline bool distances_asc(
- std::pair<Distance, El> const& d1,
- std::pair<Distance, El> const& d2)
- {
- return d1.first < d2.first;
- }
-
- template <typename Distance, typename El>
- static inline bool distances_dsc(
- std::pair<Distance, El> const& d1,
- std::pair<Distance, El> const& d2)
- {
- return d1.first > d2.first;
- }
-};
-
-template <size_t InsertIndex, typename Element, typename Value, typename Options, typename Box, typename Allocators>
-struct level_insert_elements_type
-{
- typedef typename rtree::elements_type<
- typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type
- >::type type;
-};
-
-template <typename Value, typename Options, typename Box, typename Allocators>
-struct level_insert_elements_type<0, Value, Value, Options, Box, Allocators>
-{
- typedef typename rtree::elements_type<
- typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type
- >::type type;
-};
-
-template <size_t InsertIndex, typename Element, typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct level_insert_base
- : public detail::insert<Element, Value, Options, Translator, Box, Allocators>
-{
- typedef detail::insert<Element, Value, Options, Translator, Box, Allocators> base;
- typedef typename base::node node;
- typedef typename base::internal_node internal_node;
- typedef typename base::leaf leaf;
-
- typedef typename level_insert_elements_type<InsertIndex, Element, Value, Options, Box, Allocators>::type elements_type;
- typedef typename index::detail::rtree::container_from_elements_type<
- elements_type,
- typename elements_type::value_type
- >::type result_elements_type;
-
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename Allocators::node_pointer node_pointer;
- typedef typename Allocators::size_type size_type;
-
- inline level_insert_base(node_pointer & root,
- size_type & leafs_level,
- Element const& element,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators,
- size_type relative_level)
- : base(root, leafs_level, element, parameters, translator, allocators, relative_level)
- , result_relative_level(0)
- {}
-
- template <typename Node>
- inline void handle_possible_reinsert_or_split_of_root(Node &n)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(result_elements.empty(), "reinsert should be handled only once for level");
-
- result_relative_level = base::m_leafs_level - base::m_traverse_data.current_level;
-
- // overflow
- if ( base::m_parameters.get_max_elements() < rtree::elements(n).size() )
- {
- // node isn't root node
- if ( !base::m_traverse_data.current_is_root() )
- {
- // NOTE: exception-safety
- // After an exception result_elements may contain garbage, don't use it
- rstar::remove_elements_to_reinsert<Value, Options, Translator, Box, Allocators>::apply(
- result_elements, n,
- base::m_traverse_data.parent, base::m_traverse_data.current_child_index,
- base::m_parameters, base::m_translator, base::m_allocators); // MAY THROW, BASIC (V, E: alloc, copy)
- }
- // node is root node
- else
- {
- BOOST_GEOMETRY_INDEX_ASSERT(&n == &rtree::get<Node>(*base::m_root_node), "node should be the root node");
- base::split(n); // MAY THROW (V, E: alloc, copy, N: alloc)
- }
- }
- }
-
- template <typename Node>
- inline void handle_possible_split(Node &n) const
- {
- // overflow
- if ( base::m_parameters.get_max_elements() < rtree::elements(n).size() )
- {
- base::split(n); // MAY THROW (V, E: alloc, copy, N: alloc)
- }
- }
-
- template <typename Node>
- inline void recalculate_aabb_if_necessary(Node const& n) const
- {
- if ( !result_elements.empty() && !base::m_traverse_data.current_is_root() )
- {
- // calulate node's new box
- recalculate_aabb(n);
- }
- }
-
- template <typename Node>
- inline void recalculate_aabb(Node const& n) const
- {
- base::m_traverse_data.current_element().first =
- elements_box<Box>(rtree::elements(n).begin(), rtree::elements(n).end(), base::m_translator);
- }
-
- inline void recalculate_aabb(leaf const& n) const
- {
- base::m_traverse_data.current_element().first =
- values_box<Box>(rtree::elements(n).begin(), rtree::elements(n).end(), base::m_translator);
- }
-
- size_type result_relative_level;
- result_elements_type result_elements;
-};
-
-template <size_t InsertIndex, typename Element, typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct level_insert
- : public level_insert_base<InsertIndex, Element, Value, Options, Translator, Box, Allocators>
-{
- typedef level_insert_base<InsertIndex, Element, Value, Options, Translator, Box, Allocators> base;
- typedef typename base::node node;
- typedef typename base::internal_node internal_node;
- typedef typename base::leaf leaf;
-
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename Allocators::node_pointer node_pointer;
- typedef typename Allocators::size_type size_type;
-
- inline level_insert(node_pointer & root,
- size_type & leafs_level,
- Element const& element,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators,
- size_type relative_level)
- : base(root, leafs_level, element, parameters, translator, allocators, relative_level)
- {}
-
- inline void operator()(internal_node & n)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_traverse_data.current_level < base::m_leafs_level, "unexpected level");
-
- if ( base::m_traverse_data.current_level < base::m_level )
- {
- // next traversing step
- base::traverse(*this, n); // MAY THROW (E: alloc, copy, N: alloc)
-
- // further insert
- if ( 0 < InsertIndex )
- {
- BOOST_GEOMETRY_INDEX_ASSERT(0 < base::m_level, "illegal level value, level shouldn't be the root level for 0 < InsertIndex");
-
- if ( base::m_traverse_data.current_level == base::m_level - 1 )
- {
- base::handle_possible_reinsert_or_split_of_root(n); // MAY THROW (E: alloc, copy, N: alloc)
- }
- }
- }
- else
- {
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_level == base::m_traverse_data.current_level, "unexpected level");
-
- BOOST_TRY
- {
- // push new child node
- rtree::elements(n).push_back(base::m_element); // MAY THROW, STRONG (E: alloc, copy)
- }
- BOOST_CATCH(...)
- {
- // NOTE: exception-safety
- // if the insert fails above, the element won't be stored in the tree, so delete it
-
- rtree::visitors::destroy<Value, Options, Translator, Box, Allocators> del_v(base::m_element.second, base::m_allocators);
- rtree::apply_visitor(del_v, *base::m_element.second);
-
- BOOST_RETHROW // RETHROW
- }
- BOOST_CATCH_END
-
- // first insert
- if ( 0 == InsertIndex )
- {
- base::handle_possible_reinsert_or_split_of_root(n); // MAY THROW (E: alloc, copy, N: alloc)
- }
- // not the first insert
- else
- {
- base::handle_possible_split(n); // MAY THROW (E: alloc, N: alloc)
- }
- }
-
- base::recalculate_aabb_if_necessary(n);
- }
-
- inline void operator()(leaf &)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(false, "this visitor can't be used for a leaf");
- }
-};
-
-template <size_t InsertIndex, typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct level_insert<InsertIndex, Value, Value, Options, Translator, Box, Allocators>
- : public level_insert_base<InsertIndex, Value, Value, Options, Translator, Box, Allocators>
-{
- typedef level_insert_base<InsertIndex, Value, Value, Options, Translator, Box, Allocators> base;
- typedef typename base::node node;
- typedef typename base::internal_node internal_node;
- typedef typename base::leaf leaf;
-
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename Allocators::node_pointer node_pointer;
- typedef typename Allocators::size_type size_type;
-
- inline level_insert(node_pointer & root,
- size_type & leafs_level,
- Value const& v,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators,
- size_type relative_level)
- : base(root, leafs_level, v, parameters, translator, allocators, relative_level)
- {}
-
- inline void operator()(internal_node & n)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_traverse_data.current_level < base::m_leafs_level, "unexpected level");
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_traverse_data.current_level < base::m_level, "unexpected level");
-
- // next traversing step
- base::traverse(*this, n); // MAY THROW (V, E: alloc, copy, N: alloc)
-
- BOOST_GEOMETRY_INDEX_ASSERT(0 < base::m_level, "illegal level value, level shouldn't be the root level for 0 < InsertIndex");
-
- if ( base::m_traverse_data.current_level == base::m_level - 1 )
- {
- base::handle_possible_reinsert_or_split_of_root(n); // MAY THROW (E: alloc, copy, N: alloc)
- }
-
- base::recalculate_aabb_if_necessary(n);
- }
-
- inline void operator()(leaf & n)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_traverse_data.current_level == base::m_leafs_level,
- "unexpected level");
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_level == base::m_traverse_data.current_level ||
- base::m_level == (std::numeric_limits<size_t>::max)(),
- "unexpected level");
-
- rtree::elements(n).push_back(base::m_element); // MAY THROW, STRONG (V: alloc, copy)
-
- base::handle_possible_split(n); // MAY THROW (V: alloc, copy, N: alloc)
- }
-};
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct level_insert<0, Value, Value, Options, Translator, Box, Allocators>
- : public level_insert_base<0, Value, Value, Options, Translator, Box, Allocators>
-{
- typedef level_insert_base<0, Value, Value, Options, Translator, Box, Allocators> base;
- typedef typename base::node node;
- typedef typename base::internal_node internal_node;
- typedef typename base::leaf leaf;
-
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename Allocators::node_pointer node_pointer;
- typedef typename Allocators::size_type size_type;
-
- inline level_insert(node_pointer & root,
- size_type & leafs_level,
- Value const& v,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators,
- size_type relative_level)
- : base(root, leafs_level, v, parameters, translator, allocators, relative_level)
- {}
-
- inline void operator()(internal_node & n)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_traverse_data.current_level < base::m_leafs_level,
- "unexpected level");
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_traverse_data.current_level < base::m_level,
- "unexpected level");
-
- // next traversing step
- base::traverse(*this, n); // MAY THROW (V: alloc, copy, N: alloc)
-
- base::recalculate_aabb_if_necessary(n);
- }
-
- inline void operator()(leaf & n)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_traverse_data.current_level == base::m_leafs_level,
- "unexpected level");
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_level == base::m_traverse_data.current_level ||
- base::m_level == (std::numeric_limits<size_t>::max)(),
- "unexpected level");
-
- rtree::elements(n).push_back(base::m_element); // MAY THROW, STRONG (V: alloc, copy)
-
- base::handle_possible_reinsert_or_split_of_root(n); // MAY THROW (V: alloc, copy, N: alloc)
-
- base::recalculate_aabb_if_necessary(n);
- }
-};
-
-} // namespace rstar
-
-// R*-tree insert visitor
-// After passing the Element to insert visitor the Element is managed by the tree
-// I.e. one should not delete the node passed to the insert visitor after exception is thrown
-// because this visitor may delete it
-template <typename Element, typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class insert<Element, Value, Options, Translator, Box, Allocators, insert_reinsert_tag>
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, false>::type
-{
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename rtree::node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename Allocators::node_pointer node_pointer;
- typedef typename Allocators::size_type size_type;
-
-public:
- inline insert(node_pointer & root,
- size_type & leafs_level,
- Element const& element,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators,
- size_type relative_level = 0)
- : m_root(root), m_leafs_level(leafs_level), m_element(element)
- , m_parameters(parameters), m_translator(translator)
- , m_relative_level(relative_level), m_allocators(allocators)
- {}
-
- inline void operator()(internal_node & n)
- {
- boost::ignore_unused(n);
- BOOST_GEOMETRY_INDEX_ASSERT(&n == &rtree::get<internal_node>(*m_root), "current node should be the root");
-
- // Distinguish between situation when reinserts are required and use adequate visitor, otherwise use default one
- if ( m_parameters.get_reinserted_elements() > 0 )
- {
- rstar::level_insert<0, Element, Value, Options, Translator, Box, Allocators> lins_v(
- m_root, m_leafs_level, m_element, m_parameters, m_translator, m_allocators, m_relative_level);
-
- rtree::apply_visitor(lins_v, *m_root); // MAY THROW (V, E: alloc, copy, N: alloc)
-
- if ( !lins_v.result_elements.empty() )
- {
- recursive_reinsert(lins_v.result_elements, lins_v.result_relative_level); // MAY THROW (V, E: alloc, copy, N: alloc)
- }
- }
- else
- {
- visitors::insert<Element, Value, Options, Translator, Box, Allocators, insert_default_tag> ins_v(
- m_root, m_leafs_level, m_element, m_parameters, m_translator, m_allocators, m_relative_level);
-
- rtree::apply_visitor(ins_v, *m_root);
- }
- }
-
- inline void operator()(leaf & n)
- {
- boost::ignore_unused(n);
- BOOST_GEOMETRY_INDEX_ASSERT(&n == &rtree::get<leaf>(*m_root), "current node should be the root");
-
- // Distinguish between situation when reinserts are required and use adequate visitor, otherwise use default one
- if ( m_parameters.get_reinserted_elements() > 0 )
- {
- rstar::level_insert<0, Element, Value, Options, Translator, Box, Allocators> lins_v(
- m_root, m_leafs_level, m_element, m_parameters, m_translator, m_allocators, m_relative_level);
-
- rtree::apply_visitor(lins_v, *m_root); // MAY THROW (V, E: alloc, copy, N: alloc)
-
- // we're in the root, so root should be split and there should be no elements to reinsert
- BOOST_GEOMETRY_INDEX_ASSERT(lins_v.result_elements.empty(), "unexpected state");
- }
- else
- {
- visitors::insert<Element, Value, Options, Translator, Box, Allocators, insert_default_tag> ins_v(
- m_root, m_leafs_level, m_element, m_parameters, m_translator, m_allocators, m_relative_level);
-
- rtree::apply_visitor(ins_v, *m_root);
- }
- }
-
-private:
- template <typename Elements>
- inline void recursive_reinsert(Elements & elements, size_t relative_level)
- {
- typedef typename Elements::value_type element_type;
-
- // reinsert children starting from the minimum distance
- typename Elements::reverse_iterator it = elements.rbegin();
- for ( ; it != elements.rend() ; ++it)
- {
- rstar::level_insert<1, element_type, Value, Options, Translator, Box, Allocators> lins_v(
- m_root, m_leafs_level, *it, m_parameters, m_translator, m_allocators, relative_level);
-
- BOOST_TRY
- {
- rtree::apply_visitor(lins_v, *m_root); // MAY THROW (V, E: alloc, copy, N: alloc)
- }
- BOOST_CATCH(...)
- {
- ++it;
- for ( ; it != elements.rend() ; ++it)
- rtree::destroy_element<Value, Options, Translator, Box, Allocators>::apply(*it, m_allocators);
- BOOST_RETHROW // RETHROW
- }
- BOOST_CATCH_END
-
- BOOST_GEOMETRY_INDEX_ASSERT(relative_level + 1 == lins_v.result_relative_level, "unexpected level");
-
- // non-root relative level
- if ( lins_v.result_relative_level < m_leafs_level && !lins_v.result_elements.empty())
- {
- recursive_reinsert(lins_v.result_elements, lins_v.result_relative_level); // MAY THROW (V, E: alloc, copy, N: alloc)
- }
- }
- }
-
- node_pointer & m_root;
- size_type & m_leafs_level;
- Element const& m_element;
-
- parameters_type const& m_parameters;
- Translator const& m_translator;
-
- size_type m_relative_level;
-
- Allocators & m_allocators;
-};
-
-}}} // namespace detail::rtree::visitors
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_RSTAR_INSERT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp
deleted file mode 100644
index 187d37facd5..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp
+++ /dev/null
@@ -1,470 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree R*-tree split algorithm implementation
-//
-// Copyright (c) 2011-2017 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_RSTAR_REDISTRIBUTE_ELEMENTS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_RSTAR_REDISTRIBUTE_ELEMENTS_HPP
-
-#include <boost/geometry/index/detail/algorithms/intersection_content.hpp>
-#include <boost/geometry/index/detail/algorithms/margin.hpp>
-#include <boost/geometry/index/detail/algorithms/nth_element.hpp>
-#include <boost/geometry/index/detail/algorithms/union_content.hpp>
-
-#include <boost/geometry/index/detail/bounded_view.hpp>
-
-#include <boost/geometry/index/detail/rtree/node/node.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/insert.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/is_leaf.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-namespace rstar {
-
-template <typename Element, typename Translator, typename Tag, size_t Corner, size_t AxisIndex>
-class element_axis_corner_less
-{
- typedef typename rtree::element_indexable_type<Element, Translator>::type indexable_type;
- typedef typename geometry::point_type<indexable_type>::type point_type;
- typedef geometry::model::box<point_type> bounds_type;
- typedef index::detail::bounded_view<indexable_type, bounds_type> bounded_view_type;
-
-public:
- element_axis_corner_less(Translator const& tr)
- : m_tr(tr)
- {}
-
- bool operator()(Element const& e1, Element const& e2) const
- {
- bounded_view_type bounded_ind1(rtree::element_indexable(e1, m_tr));
- bounded_view_type bounded_ind2(rtree::element_indexable(e2, m_tr));
-
- return geometry::get<Corner, AxisIndex>(bounded_ind1)
- < geometry::get<Corner, AxisIndex>(bounded_ind2);
- }
-
-private:
- Translator const& m_tr;
-};
-
-template <typename Element, typename Translator, size_t Corner, size_t AxisIndex>
-class element_axis_corner_less<Element, Translator, box_tag, Corner, AxisIndex>
-{
-public:
- element_axis_corner_less(Translator const& tr)
- : m_tr(tr)
- {}
-
- bool operator()(Element const& e1, Element const& e2) const
- {
- return geometry::get<Corner, AxisIndex>(rtree::element_indexable(e1, m_tr))
- < geometry::get<Corner, AxisIndex>(rtree::element_indexable(e2, m_tr));
- }
-
-private:
- Translator const& m_tr;
-};
-
-template <typename Element, typename Translator, size_t Corner, size_t AxisIndex>
-class element_axis_corner_less<Element, Translator, point_tag, Corner, AxisIndex>
-{
-public:
- element_axis_corner_less(Translator const& tr)
- : m_tr(tr)
- {}
-
- bool operator()(Element const& e1, Element const& e2) const
- {
- return geometry::get<AxisIndex>(rtree::element_indexable(e1, m_tr))
- < geometry::get<AxisIndex>(rtree::element_indexable(e2, m_tr));
- }
-
-private:
- Translator const& m_tr;
-};
-
-template <typename Box, size_t Corner, size_t AxisIndex>
-struct choose_split_axis_and_index_for_corner
-{
- typedef typename index::detail::default_margin_result<Box>::type margin_type;
- typedef typename index::detail::default_content_result<Box>::type content_type;
-
- template <typename Elements, typename Parameters, typename Translator>
- static inline void apply(Elements const& elements,
- size_t & choosen_index,
- margin_type & sum_of_margins,
- content_type & smallest_overlap,
- content_type & smallest_content,
- Parameters const& parameters,
- Translator const& translator)
- {
- typedef typename Elements::value_type element_type;
- typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
- typedef typename tag<indexable_type>::type indexable_tag;
-
- BOOST_GEOMETRY_INDEX_ASSERT(elements.size() == parameters.get_max_elements() + 1, "wrong number of elements");
-
- // copy elements
- Elements elements_copy(elements); // MAY THROW, STRONG (alloc, copy)
-
- size_t const index_first = parameters.get_min_elements();
- size_t const index_last = parameters.get_max_elements() - parameters.get_min_elements() + 2;
-
- // sort elements
- element_axis_corner_less<element_type, Translator, indexable_tag, Corner, AxisIndex> elements_less(translator);
- std::sort(elements_copy.begin(), elements_copy.end(), elements_less); // MAY THROW, BASIC (copy)
-// {
-// typename Elements::iterator f = elements_copy.begin() + index_first;
-// typename Elements::iterator l = elements_copy.begin() + index_last;
-// // NOTE: for stdlibc++ shipped with gcc 4.8.2 std::nth_element is replaced with std::sort anyway
-// index::detail::nth_element(elements_copy.begin(), f, elements_copy.end(), elements_less); // MAY THROW, BASIC (copy)
-// index::detail::nth_element(f, l, elements_copy.end(), elements_less); // MAY THROW, BASIC (copy)
-// std::sort(f, l, elements_less); // MAY THROW, BASIC (copy)
-// }
-
- // init outputs
- choosen_index = index_first;
- sum_of_margins = 0;
- smallest_overlap = (std::numeric_limits<content_type>::max)();
- smallest_content = (std::numeric_limits<content_type>::max)();
-
- // calculate sum of margins for all distributions
- for ( size_t i = index_first ; i < index_last ; ++i )
- {
- // TODO - awulkiew: may be optimized - box of group 1 may be initialized with
- // box of min_elems number of elements and expanded for each iteration by another element
-
- Box box1 = rtree::elements_box<Box>(elements_copy.begin(), elements_copy.begin() + i, translator);
- Box box2 = rtree::elements_box<Box>(elements_copy.begin() + i, elements_copy.end(), translator);
-
- sum_of_margins += index::detail::comparable_margin(box1) + index::detail::comparable_margin(box2);
-
- content_type ovl = index::detail::intersection_content(box1, box2);
- content_type con = index::detail::content(box1) + index::detail::content(box2);
-
- // TODO - shouldn't here be < instead of <= ?
- if ( ovl < smallest_overlap || (ovl == smallest_overlap && con <= smallest_content) )
- {
- choosen_index = i;
- smallest_overlap = ovl;
- smallest_content = con;
- }
- }
-
- ::boost::ignore_unused_variable_warning(parameters);
- }
-};
-
-//template <typename Box, size_t AxisIndex, typename ElementIndexableTag>
-//struct choose_split_axis_and_index_for_axis
-//{
-// BOOST_MPL_ASSERT_MSG(false, NOT_IMPLEMENTED_FOR_THIS_TAG, (ElementIndexableTag));
-//};
-
-template <typename Box, size_t AxisIndex, typename ElementIndexableTag>
-struct choose_split_axis_and_index_for_axis
-{
- typedef typename index::detail::default_margin_result<Box>::type margin_type;
- typedef typename index::detail::default_content_result<Box>::type content_type;
-
- template <typename Elements, typename Parameters, typename Translator>
- static inline void apply(Elements const& elements,
- size_t & choosen_corner,
- size_t & choosen_index,
- margin_type & sum_of_margins,
- content_type & smallest_overlap,
- content_type & smallest_content,
- Parameters const& parameters,
- Translator const& translator)
- {
- size_t index1 = 0;
- margin_type som1 = 0;
- content_type ovl1 = (std::numeric_limits<content_type>::max)();
- content_type con1 = (std::numeric_limits<content_type>::max)();
-
- choose_split_axis_and_index_for_corner<Box, min_corner, AxisIndex>
- ::apply(elements, index1,
- som1, ovl1, con1,
- parameters, translator); // MAY THROW, STRONG
-
- size_t index2 = 0;
- margin_type som2 = 0;
- content_type ovl2 = (std::numeric_limits<content_type>::max)();
- content_type con2 = (std::numeric_limits<content_type>::max)();
-
- choose_split_axis_and_index_for_corner<Box, max_corner, AxisIndex>
- ::apply(elements, index2,
- som2, ovl2, con2,
- parameters, translator); // MAY THROW, STRONG
-
- sum_of_margins = som1 + som2;
-
- if ( ovl1 < ovl2 || (ovl1 == ovl2 && con1 <= con2) )
- {
- choosen_corner = min_corner;
- choosen_index = index1;
- smallest_overlap = ovl1;
- smallest_content = con1;
- }
- else
- {
- choosen_corner = max_corner;
- choosen_index = index2;
- smallest_overlap = ovl2;
- smallest_content = con2;
- }
- }
-};
-
-template <typename Box, size_t AxisIndex>
-struct choose_split_axis_and_index_for_axis<Box, AxisIndex, point_tag>
-{
- typedef typename index::detail::default_margin_result<Box>::type margin_type;
- typedef typename index::detail::default_content_result<Box>::type content_type;
-
- template <typename Elements, typename Parameters, typename Translator>
- static inline void apply(Elements const& elements,
- size_t & choosen_corner,
- size_t & choosen_index,
- margin_type & sum_of_margins,
- content_type & smallest_overlap,
- content_type & smallest_content,
- Parameters const& parameters,
- Translator const& translator)
- {
- choose_split_axis_and_index_for_corner<Box, min_corner, AxisIndex>
- ::apply(elements, choosen_index,
- sum_of_margins, smallest_overlap, smallest_content,
- parameters, translator); // MAY THROW, STRONG
-
- choosen_corner = min_corner;
- }
-};
-
-template <typename Box, size_t Dimension>
-struct choose_split_axis_and_index
-{
- BOOST_STATIC_ASSERT(0 < Dimension);
-
- typedef typename index::detail::default_margin_result<Box>::type margin_type;
- typedef typename index::detail::default_content_result<Box>::type content_type;
-
- template <typename Elements, typename Parameters, typename Translator>
- static inline void apply(Elements const& elements,
- size_t & choosen_axis,
- size_t & choosen_corner,
- size_t & choosen_index,
- margin_type & smallest_sum_of_margins,
- content_type & smallest_overlap,
- content_type & smallest_content,
- Parameters const& parameters,
- Translator const& translator)
- {
- typedef typename rtree::element_indexable_type<typename Elements::value_type, Translator>::type element_indexable_type;
-
- choose_split_axis_and_index<Box, Dimension - 1>
- ::apply(elements, choosen_axis, choosen_corner, choosen_index,
- smallest_sum_of_margins, smallest_overlap, smallest_content,
- parameters, translator); // MAY THROW, STRONG
-
- margin_type sum_of_margins = 0;
-
- size_t corner = min_corner;
- size_t index = 0;
-
- content_type overlap_val = (std::numeric_limits<content_type>::max)();
- content_type content_val = (std::numeric_limits<content_type>::max)();
-
- choose_split_axis_and_index_for_axis<
- Box,
- Dimension - 1,
- typename tag<element_indexable_type>::type
- >::apply(elements, corner, index, sum_of_margins, overlap_val, content_val, parameters, translator); // MAY THROW, STRONG
-
- if ( sum_of_margins < smallest_sum_of_margins )
- {
- choosen_axis = Dimension - 1;
- choosen_corner = corner;
- choosen_index = index;
- smallest_sum_of_margins = sum_of_margins;
- smallest_overlap = overlap_val;
- smallest_content = content_val;
- }
- }
-};
-
-template <typename Box>
-struct choose_split_axis_and_index<Box, 1>
-{
- typedef typename index::detail::default_margin_result<Box>::type margin_type;
- typedef typename index::detail::default_content_result<Box>::type content_type;
-
- template <typename Elements, typename Parameters, typename Translator>
- static inline void apply(Elements const& elements,
- size_t & choosen_axis,
- size_t & choosen_corner,
- size_t & choosen_index,
- margin_type & smallest_sum_of_margins,
- content_type & smallest_overlap,
- content_type & smallest_content,
- Parameters const& parameters,
- Translator const& translator)
- {
- typedef typename rtree::element_indexable_type<typename Elements::value_type, Translator>::type element_indexable_type;
-
- choosen_axis = 0;
-
- choose_split_axis_and_index_for_axis<
- Box,
- 0,
- typename tag<element_indexable_type>::type
- >::apply(elements, choosen_corner, choosen_index, smallest_sum_of_margins, smallest_overlap, smallest_content, parameters, translator); // MAY THROW
- }
-};
-
-template <size_t Corner, size_t Dimension, size_t I = 0>
-struct nth_element
-{
- BOOST_STATIC_ASSERT(0 < Dimension);
- BOOST_STATIC_ASSERT(I < Dimension);
-
- template <typename Elements, typename Translator>
- static inline void apply(Elements & elements, const size_t axis, const size_t index, Translator const& tr)
- {
- //BOOST_GEOMETRY_INDEX_ASSERT(axis < Dimension, "unexpected axis value");
-
- if ( axis != I )
- {
- nth_element<Corner, Dimension, I + 1>::apply(elements, axis, index, tr); // MAY THROW, BASIC (copy)
- }
- else
- {
- typedef typename Elements::value_type element_type;
- typedef typename rtree::element_indexable_type<element_type, Translator>::type indexable_type;
- typedef typename tag<indexable_type>::type indexable_tag;
-
- element_axis_corner_less<element_type, Translator, indexable_tag, Corner, I> less(tr);
- index::detail::nth_element(elements.begin(), elements.begin() + index, elements.end(), less); // MAY THROW, BASIC (copy)
- }
- }
-};
-
-template <size_t Corner, size_t Dimension>
-struct nth_element<Corner, Dimension, Dimension>
-{
- template <typename Elements, typename Translator>
- static inline void apply(Elements & /*elements*/, const size_t /*axis*/, const size_t /*index*/, Translator const& /*tr*/)
- {}
-};
-
-} // namespace rstar
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct redistribute_elements<Value, Options, Translator, Box, Allocators, rstar_tag>
-{
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename Options::parameters_type parameters_type;
-
- static const size_t dimension = geometry::dimension<Box>::value;
-
- typedef typename index::detail::default_margin_result<Box>::type margin_type;
- typedef typename index::detail::default_content_result<Box>::type content_type;
-
- template <typename Node>
- static inline void apply(
- Node & n,
- Node & second_node,
- Box & box1,
- Box & box2,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators)
- {
- typedef typename rtree::elements_type<Node>::type elements_type;
- typedef typename elements_type::value_type element_type;
-
- elements_type & elements1 = rtree::elements(n);
- elements_type & elements2 = rtree::elements(second_node);
-
- // copy original elements - use in-memory storage (std::allocator)
- // TODO: move if noexcept
- typedef typename rtree::container_from_elements_type<elements_type, element_type>::type
- container_type;
- container_type elements_copy(elements1.begin(), elements1.end()); // MAY THROW, STRONG
- container_type elements_backup(elements1.begin(), elements1.end()); // MAY THROW, STRONG
-
- size_t split_axis = 0;
- size_t split_corner = 0;
- size_t split_index = parameters.get_min_elements();
- margin_type smallest_sum_of_margins = (std::numeric_limits<margin_type>::max)();
- content_type smallest_overlap = (std::numeric_limits<content_type>::max)();
- content_type smallest_content = (std::numeric_limits<content_type>::max)();
-
- // NOTE: this function internally copies passed elements
- // why not pass mutable elements and use the same container for all axes/corners
- // and again, the same below calling partial_sort/nth_element
- // It would be even possible to not re-sort/find nth_element if the axis/corner
- // was found for the last sorting - last combination of axis/corner
- rstar::choose_split_axis_and_index<Box, dimension>
- ::apply(elements_copy,
- split_axis, split_corner, split_index,
- smallest_sum_of_margins, smallest_overlap, smallest_content,
- parameters, translator); // MAY THROW, STRONG
-
- // TODO: awulkiew - get rid of following static_casts?
- BOOST_GEOMETRY_INDEX_ASSERT(split_axis < dimension, "unexpected value");
- BOOST_GEOMETRY_INDEX_ASSERT(split_corner == static_cast<size_t>(min_corner) || split_corner == static_cast<size_t>(max_corner), "unexpected value");
- BOOST_GEOMETRY_INDEX_ASSERT(parameters.get_min_elements() <= split_index && split_index <= parameters.get_max_elements() - parameters.get_min_elements() + 1, "unexpected value");
-
- // TODO: consider using nth_element
- if ( split_corner == static_cast<size_t>(min_corner) )
- {
- rstar::nth_element<min_corner, dimension>
- ::apply(elements_copy, split_axis, split_index, translator); // MAY THROW, BASIC (copy)
- }
- else
- {
- rstar::nth_element<max_corner, dimension>
- ::apply(elements_copy, split_axis, split_index, translator); // MAY THROW, BASIC (copy)
- }
-
- BOOST_TRY
- {
- // copy elements to nodes
- elements1.assign(elements_copy.begin(), elements_copy.begin() + split_index); // MAY THROW, BASIC
- elements2.assign(elements_copy.begin() + split_index, elements_copy.end()); // MAY THROW, BASIC
-
- // calculate boxes
- box1 = rtree::elements_box<Box>(elements1.begin(), elements1.end(), translator);
- box2 = rtree::elements_box<Box>(elements2.begin(), elements2.end(), translator);
- }
- BOOST_CATCH(...)
- {
- //elements_copy.clear();
- elements1.clear();
- elements2.clear();
-
- rtree::destroy_elements<Value, Options, Translator, Box, Allocators>::apply(elements_backup, allocators);
- //elements_backup.clear();
-
- BOOST_RETHROW // RETHROW, BASIC
- }
- BOOST_CATCH_END
- }
-};
-
-}} // namespace detail::rtree
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_RSTAR_REDISTRIBUTE_ELEMENTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/rstar.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/rstar.hpp
deleted file mode 100644
index ed3959c89d5..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/rstar/rstar.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree R*-tree algorithm implementation
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_RSTAR_RSTAR_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_RSTAR_RSTAR_HPP
-
-#include <boost/geometry/index/detail/rtree/rstar/insert.hpp>
-#include <boost/geometry/index/detail/rtree/rstar/choose_next_node.hpp>
-#include <boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp>
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_RSTAR_RSTAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp
deleted file mode 100644
index 8e0560379b4..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp
+++ /dev/null
@@ -1,128 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree boxes validating visitor implementation
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_ARE_BOXES_OK_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_ARE_BOXES_OK_HPP
-
-#include <boost/geometry/algorithms/equals.hpp>
-#include <boost/geometry/index/detail/rtree/node/node.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace utilities {
-
-namespace visitors {
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class are_boxes_ok
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
-public:
- are_boxes_ok(Translator const& tr, bool exact_match)
- : result(false), m_tr(tr), m_is_root(true), m_exact_match(exact_match)
- {}
-
- void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- if (elements.empty())
- {
- result = false;
- return;
- }
-
- Box box_bckup = m_box;
- bool is_root_bckup = m_is_root;
-
- m_is_root = false;
-
- for ( typename elements_type::const_iterator it = elements.begin();
- it != elements.end() ; ++it)
- {
- m_box = it->first;
-
- rtree::apply_visitor(*this, *it->second);
-
- if ( result == false )
- return;
- }
-
- m_box = box_bckup;
- m_is_root = is_root_bckup;
-
- Box box_exp = rtree::elements_box<Box>(elements.begin(), elements.end(), m_tr);
-
- if ( m_exact_match )
- result = m_is_root || geometry::equals(box_exp, m_box);
- else
- result = m_is_root || geometry::covered_by(box_exp, m_box);
- }
-
- void operator()(leaf const& n)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- // non-root node
- if (!m_is_root)
- {
- if ( elements.empty() )
- {
- result = false;
- return;
- }
-
- Box box_exp = rtree::values_box<Box>(elements.begin(), elements.end(), m_tr);
-
- if ( m_exact_match )
- result = geometry::equals(box_exp, m_box);
- else
- result = geometry::covered_by(box_exp, m_box);
- }
- else
- result = true;
- }
-
- bool result;
-
-private:
- Translator const& m_tr;
- Box m_box;
- bool m_is_root;
- bool m_exact_match;
-};
-
-} // namespace visitors
-
-template <typename Rtree> inline
-bool are_boxes_ok(Rtree const& tree, bool exact_match = true)
-{
- typedef utilities::view<Rtree> RTV;
- RTV rtv(tree);
-
- visitors::are_boxes_ok<
- typename RTV::value_type,
- typename RTV::options_type,
- typename RTV::translator_type,
- typename RTV::box_type,
- typename RTV::allocators_type
- > v(rtv.translator(), exact_match);
-
- rtv.apply_visitor(v);
-
- return v.result;
-}
-
-}}}}}} // namespace boost::geometry::index::detail::rtree::utilities
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_ARE_BOXES_OK_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/are_counts_ok.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/are_counts_ok.hpp
deleted file mode 100644
index 10a1bec6ad2..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/are_counts_ok.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree nodes elements numbers validating visitor implementation
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_ARE_COUNTS_OK_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_ARE_COUNTS_OK_HPP
-
-#include <boost/geometry/index/detail/rtree/node/node.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace utilities {
-
-namespace visitors {
-
-template <typename Value, typename Options, typename Box, typename Allocators>
-class are_counts_ok
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
- typedef typename Options::parameters_type parameters_type;
-
-public:
- inline are_counts_ok(parameters_type const& parameters)
- : result(true), m_current_level(0), m_parameters(parameters)
- {}
-
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- // root internal node shouldn't contain 0 elements
- if ( elements.empty()
- || !check_count(elements) )
- {
- result = false;
- return;
- }
-
- size_t current_level_backup = m_current_level;
- ++m_current_level;
-
- for ( typename elements_type::const_iterator it = elements.begin();
- it != elements.end() && result == true ;
- ++it)
- {
- rtree::apply_visitor(*this, *it->second);
- }
-
- m_current_level = current_level_backup;
- }
-
- inline void operator()(leaf const& n)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- // empty leaf in non-root node
- if ( ( m_current_level > 0 && elements.empty() )
- || !check_count(elements) )
- {
- result = false;
- }
- }
-
- bool result;
-
-private:
- template <typename Elements>
- bool check_count(Elements const& elements)
- {
- // root may contain count < min but should never contain count > max
- return elements.size() <= m_parameters.get_max_elements()
- && ( elements.size() >= m_parameters.get_min_elements()
- || m_current_level == 0 );
- }
-
- size_t m_current_level;
- parameters_type const& m_parameters;
-};
-
-} // namespace visitors
-
-template <typename Rtree> inline
-bool are_counts_ok(Rtree const& tree)
-{
- typedef utilities::view<Rtree> RTV;
- RTV rtv(tree);
-
- visitors::are_counts_ok<
- typename RTV::value_type,
- typename RTV::options_type,
- typename RTV::box_type,
- typename RTV::allocators_type
- > v(tree.parameters());
-
- rtv.apply_visitor(v);
-
- return v.result;
-}
-
-}}}}}} // namespace boost::geometry::index::detail::rtree::utilities
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_ARE_COUNTS_OK_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/are_levels_ok.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/are_levels_ok.hpp
deleted file mode 100644
index 4860dbcb9bb..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/are_levels_ok.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree levels validating visitor implementation
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_ARE_LEVELS_OK_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_ARE_LEVELS_OK_HPP
-
-#include <boost/geometry/index/detail/rtree/node/node.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace utilities {
-
-namespace visitors {
-
-template <typename Value, typename Options, typename Box, typename Allocators>
-class are_levels_ok
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
-public:
- inline are_levels_ok()
- : result(true), m_leafs_level((std::numeric_limits<size_t>::max)()), m_current_level(0)
- {}
-
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- if (elements.empty())
- {
- result = false;
- return;
- }
-
- size_t current_level_backup = m_current_level;
- ++m_current_level;
-
- for ( typename elements_type::const_iterator it = elements.begin();
- it != elements.end() ; ++it)
- {
- rtree::apply_visitor(*this, *it->second);
-
- if ( result == false )
- return;
- }
-
- m_current_level = current_level_backup;
- }
-
- inline void operator()(leaf const& n)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- // empty leaf in non-root node
- if (0 < m_current_level && elements.empty())
- {
- result = false;
- return;
- }
-
- if ( m_leafs_level == (std::numeric_limits<size_t>::max)() )
- {
- m_leafs_level = m_current_level;
- }
- else if ( m_leafs_level != m_current_level )
- {
- result = false;
- }
- }
-
- bool result;
-
-private:
- size_t m_leafs_level;
- size_t m_current_level;
-};
-
-} // namespace visitors
-
-template <typename Rtree> inline
-bool are_levels_ok(Rtree const& tree)
-{
- typedef utilities::view<Rtree> RTV;
- RTV rtv(tree);
-
- visitors::are_levels_ok<
- typename RTV::value_type,
- typename RTV::options_type,
- typename RTV::box_type,
- typename RTV::allocators_type
- > v;
-
- rtv.apply_visitor(v);
-
- return v.result;
-}
-
-}}}}}} // namespace boost::geometry::index::detail::rtree::utilities
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_ARE_LEVELS_OK_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/gl_draw.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/gl_draw.hpp
deleted file mode 100644
index 84201b6afed..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/gl_draw.hpp
+++ /dev/null
@@ -1,243 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree OpenGL drawing visitor implementation
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_GL_DRAW_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_GL_DRAW_HPP
-
-#include <boost/mpl/assert.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-namespace utilities {
-
-namespace dispatch {
-
-template <typename Point, size_t Dimension>
-struct gl_draw_point
-{};
-
-template <typename Point>
-struct gl_draw_point<Point, 2>
-{
- static inline void apply(Point const& p, typename coordinate_type<Point>::type z)
- {
- typename coordinate_type<Point>::type const& x = geometry::get<0>(p);
- typename coordinate_type<Point>::type const& y = geometry::get<1>(p);
- /*glBegin(GL_POINT);
- glVertex3f(x, y, z);
- glEnd();*/
- glBegin(GL_QUADS);
- glVertex3f(x+1, y, z);
- glVertex3f(x, y+1, z);
- glVertex3f(x-1, y, z);
- glVertex3f(x, y-1, z);
- glEnd();
- }
-};
-
-template <typename Box, size_t Dimension>
-struct gl_draw_box
-{};
-
-template <typename Box>
-struct gl_draw_box<Box, 2>
-{
- static inline void apply(Box const& b, typename coordinate_type<Box>::type z)
- {
- glBegin(GL_LINE_LOOP);
- glVertex3f(geometry::get<min_corner, 0>(b), geometry::get<min_corner, 1>(b), z);
- glVertex3f(geometry::get<max_corner, 0>(b), geometry::get<min_corner, 1>(b), z);
- glVertex3f(geometry::get<max_corner, 0>(b), geometry::get<max_corner, 1>(b), z);
- glVertex3f(geometry::get<min_corner, 0>(b), geometry::get<max_corner, 1>(b), z);
- glEnd();
- }
-};
-
-template <typename Segment, size_t Dimension>
-struct gl_draw_segment
-{};
-
-template <typename Segment>
-struct gl_draw_segment<Segment, 2>
-{
- static inline void apply(Segment const& s, typename coordinate_type<Segment>::type z)
- {
- glBegin(GL_LINES);
- glVertex3f(geometry::get<0, 0>(s), geometry::get<0, 1>(s), z);
- glVertex3f(geometry::get<1, 0>(s), geometry::get<1, 1>(s), z);
- glEnd();
- }
-};
-
-template <typename Indexable, typename Tag>
-struct gl_draw_indexable
-{
- BOOST_MPL_ASSERT_MSG((false), NOT_IMPLEMENTED_FOR_THIS_TAG, (Tag));
-};
-
-template <typename Box>
-struct gl_draw_indexable<Box, box_tag>
- : gl_draw_box<Box, geometry::dimension<Box>::value>
-{};
-
-template <typename Point>
-struct gl_draw_indexable<Point, point_tag>
- : gl_draw_point<Point, geometry::dimension<Point>::value>
-{};
-
-template <typename Segment>
-struct gl_draw_indexable<Segment, segment_tag>
- : gl_draw_segment<Segment, geometry::dimension<Segment>::value>
-{};
-
-} // namespace dispatch
-
-template <typename Indexable> inline
-void gl_draw_indexable(Indexable const& i, typename coordinate_type<Indexable>::type z)
-{
- dispatch::gl_draw_indexable<
- Indexable,
- typename tag<Indexable>::type
- >::apply(i, z);
-}
-
-} // namespace utilities
-
-namespace rtree { namespace utilities {
-
-namespace visitors {
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct gl_draw : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- inline gl_draw(Translator const& t,
- size_t level_first = 0,
- size_t level_last = (std::numeric_limits<size_t>::max)(),
- typename coordinate_type<Box>::type z_coord_level_multiplier = 1
- )
- : tr(t)
- , level_f(level_first)
- , level_l(level_last)
- , z_mul(z_coord_level_multiplier)
- , level(0)
- {}
-
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- if ( level_f <= level )
- {
- size_t level_rel = level - level_f;
-
- if ( level_rel == 0 )
- glColor3f(0.75f, 0.0f, 0.0f);
- else if ( level_rel == 1 )
- glColor3f(0.0f, 0.75f, 0.0f);
- else if ( level_rel == 2 )
- glColor3f(0.0f, 0.0f, 0.75f);
- else if ( level_rel == 3 )
- glColor3f(0.75f, 0.75f, 0.0f);
- else if ( level_rel == 4 )
- glColor3f(0.75f, 0.0f, 0.75f);
- else if ( level_rel == 5 )
- glColor3f(0.0f, 0.75f, 0.75f);
- else
- glColor3f(0.5f, 0.5f, 0.5f);
-
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- detail::utilities::gl_draw_indexable(it->first, level_rel * z_mul);
- }
- }
-
- size_t level_backup = level;
- ++level;
-
- if ( level < level_l )
- {
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- rtree::apply_visitor(*this, *it->second);
- }
- }
-
- level = level_backup;
- }
-
- inline void operator()(leaf const& n)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- if ( level_f <= level )
- {
- size_t level_rel = level - level_f;
-
- glColor3f(0.25f, 0.25f, 0.25f);
-
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- detail::utilities::gl_draw_indexable(tr(*it), level_rel * z_mul);
- }
- }
- }
-
- Translator const& tr;
- size_t level_f;
- size_t level_l;
- typename coordinate_type<Box>::type z_mul;
-
- size_t level;
-};
-
-} // namespace visitors
-
-template <typename Rtree> inline
-void gl_draw(Rtree const& tree,
- size_t level_first = 0,
- size_t level_last = (std::numeric_limits<size_t>::max)(),
- typename coordinate_type<
- typename Rtree::bounds_type
- >::type z_coord_level_multiplier = 1
- )
-{
- typedef utilities::view<Rtree> RTV;
- RTV rtv(tree);
-
- if ( !tree.empty() )
- {
- glColor3f(0.75f, 0.75f, 0.75f);
- detail::utilities::gl_draw_indexable(tree.bounds(), 0);
- }
-
- visitors::gl_draw<
- typename RTV::value_type,
- typename RTV::options_type,
- typename RTV::translator_type,
- typename RTV::box_type,
- typename RTV::allocators_type
- > gl_draw_v(rtv.translator(), level_first, level_last, z_coord_level_multiplier);
-
- rtv.apply_visitor(gl_draw_v);
-}
-
-}} // namespace rtree::utilities
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_GL_DRAW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/print.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/print.hpp
deleted file mode 100644
index 4c42659c643..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/print.hpp
+++ /dev/null
@@ -1,219 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree ostreaming visitor implementation
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_PRINT_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_PRINT_HPP
-
-#include <iostream>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-namespace utilities {
-
-namespace dispatch {
-
-template <typename Point, size_t Dimension>
-struct print_point
-{
- BOOST_STATIC_ASSERT(0 < Dimension);
-
- static inline void apply(std::ostream & os, Point const& p)
- {
- print_point<Point, Dimension - 1>::apply(os, p);
-
- os << ", " << geometry::get<Dimension - 1>(p);
- }
-};
-
-template <typename Point>
-struct print_point<Point, 1>
-{
- static inline void apply(std::ostream & os, Point const& p)
- {
- os << geometry::get<0>(p);
- }
-};
-
-template <typename Box, size_t Corner, size_t Dimension>
-struct print_corner
-{
- BOOST_STATIC_ASSERT(0 < Dimension);
-
- static inline void apply(std::ostream & os, Box const& b)
- {
- print_corner<Box, Corner, Dimension - 1>::apply(os, b);
-
- os << ", " << geometry::get<Corner, Dimension - 1>(b);
- }
-};
-
-template <typename Box, size_t Corner>
-struct print_corner<Box, Corner, 1>
-{
- static inline void apply(std::ostream & os, Box const& b)
- {
- os << geometry::get<Corner, 0>(b);
- }
-};
-
-template <typename Indexable, typename Tag>
-struct print_indexable
-{
- BOOST_MPL_ASSERT_MSG((false), NOT_IMPLEMENTED_FOR_THIS_TAG, (Tag));
-};
-
-template <typename Indexable>
-struct print_indexable<Indexable, box_tag>
-{
- static const size_t dimension = geometry::dimension<Indexable>::value;
-
- static inline void apply(std::ostream &os, Indexable const& i)
- {
- os << '(';
- print_corner<Indexable, min_corner, dimension>::apply(os, i);
- os << ")x(";
- print_corner<Indexable, max_corner, dimension>::apply(os, i);
- os << ')';
- }
-};
-
-template <typename Indexable>
-struct print_indexable<Indexable, point_tag>
-{
- static const size_t dimension = geometry::dimension<Indexable>::value;
-
- static inline void apply(std::ostream &os, Indexable const& i)
- {
- os << '(';
- print_point<Indexable, dimension>::apply(os, i);
- os << ')';
- }
-};
-
-template <typename Indexable>
-struct print_indexable<Indexable, segment_tag>
-{
- static const size_t dimension = geometry::dimension<Indexable>::value;
-
- static inline void apply(std::ostream &os, Indexable const& i)
- {
- os << '(';
- print_corner<Indexable, 0, dimension>::apply(os, i);
- os << ")-(";
- print_corner<Indexable, 1, dimension>::apply(os, i);
- os << ')';
- }
-};
-
-} // namespace dispatch
-
-template <typename Indexable> inline
-void print_indexable(std::ostream & os, Indexable const& i)
-{
- dispatch::print_indexable<
- Indexable,
- typename tag<Indexable>::type
- >::apply(os, i);
-}
-
-} // namespace utilities
-
-namespace rtree { namespace utilities {
-
-namespace visitors {
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct print : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- inline print(std::ostream & o, Translator const& t)
- : os(o), tr(t), level(0)
- {}
-
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- spaces(level) << "INTERNAL NODE - L:" << level << " Ch:" << elements.size() << " @:" << &n << '\n';
-
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- spaces(level);
- detail::utilities::print_indexable(os, it->first);
- os << " ->" << it->second << '\n';
- }
-
- size_t level_backup = level;
- ++level;
-
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- rtree::apply_visitor(*this, *it->second);
- }
-
- level = level_backup;
- }
-
- inline void operator()(leaf const& n)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- spaces(level) << "LEAF - L:" << level << " V:" << elements.size() << " @:" << &n << '\n';
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- spaces(level);
- detail::utilities::print_indexable(os, tr(*it));
- os << '\n';
- }
- }
-
- inline std::ostream & spaces(size_t level)
- {
- for ( size_t i = 0 ; i < 2 * level ; ++i )
- os << ' ';
- return os;
- }
-
- std::ostream & os;
- Translator const& tr;
-
- size_t level;
-};
-
-} // namespace visitors
-
-template <typename Rtree> inline
-void print(std::ostream & os, Rtree const& tree)
-{
- typedef utilities::view<Rtree> RTV;
- RTV rtv(tree);
-
- visitors::print<
- typename RTV::value_type,
- typename RTV::options_type,
- typename RTV::translator_type,
- typename RTV::box_type,
- typename RTV::allocators_type
- > print_v(os, rtv.translator());
- rtv.apply_visitor(print_v);
-}
-
-}} // namespace rtree::utilities
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_PRINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/statistics.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/statistics.hpp
deleted file mode 100644
index bbaed8100e4..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/statistics.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree visitor collecting basic statistics
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-// Copyright (c) 2013 Mateusz Loskot, London, UK.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_STATISTICS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_STATISTICS_HPP
-
-#include <algorithm>
-#include <boost/tuple/tuple.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace utilities {
-
-namespace visitors {
-
-template <typename Value, typename Options, typename Box, typename Allocators>
-struct statistics : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- inline statistics()
- : level(0)
- , levels(1) // count root
- , nodes(0)
- , leaves(0)
- , values(0)
- , values_min(0)
- , values_max(0)
- {}
-
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- ++nodes; // count node
-
- size_t const level_backup = level;
- ++level;
-
- levels += level++ > levels ? 1 : 0; // count level (root already counted)
-
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- rtree::apply_visitor(*this, *it->second);
- }
-
- level = level_backup;
- }
-
- inline void operator()(leaf const& n)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- ++leaves; // count leaves
-
- std::size_t const v = elements.size();
- // count values spread per node and total
- values_min = (std::min)(values_min == 0 ? v : values_min, v);
- values_max = (std::max)(values_max, v);
- values += v;
- }
-
- std::size_t level;
- std::size_t levels;
- std::size_t nodes;
- std::size_t leaves;
- std::size_t values;
- std::size_t values_min;
- std::size_t values_max;
-};
-
-} // namespace visitors
-
-template <typename Rtree> inline
-boost::tuple<std::size_t, std::size_t, std::size_t, std::size_t, std::size_t, std::size_t>
-statistics(Rtree const& tree)
-{
- typedef utilities::view<Rtree> RTV;
- RTV rtv(tree);
-
- visitors::statistics<
- typename RTV::value_type,
- typename RTV::options_type,
- typename RTV::box_type,
- typename RTV::allocators_type
- > stats_v;
-
- rtv.apply_visitor(stats_v);
-
- return boost::make_tuple(stats_v.levels, stats_v.nodes, stats_v.leaves, stats_v.values, stats_v.values_min, stats_v.values_max);
-}
-
-}}}}}} // namespace boost::geometry::index::detail::rtree::utilities
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_STATISTICS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/view.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/view.hpp
deleted file mode 100644
index 6dbbd07bfe0..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/utilities/view.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-// Boost.Geometry Index
-//
-// Rtree utilities view
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_VIEW_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_VIEW_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree { namespace utilities {
-
-template <typename Rtree>
-class view
-{
-public:
- typedef typename Rtree::size_type size_type;
-
- typedef typename Rtree::translator_type translator_type;
- typedef typename Rtree::value_type value_type;
- typedef typename Rtree::options_type options_type;
- typedef typename Rtree::box_type box_type;
- typedef typename Rtree::allocators_type allocators_type;
-
- view(Rtree const& rt) : m_rtree(rt) {}
-
- template <typename Visitor>
- void apply_visitor(Visitor & vis) const
- {
- m_rtree.apply_visitor(vis);
- }
-
- // This will most certainly be removed in the future
- translator_type translator() const
- {
- return m_rtree.translator();
- }
-
- // This will probably be removed in the future
- size_type depth() const
- {
- return m_rtree.depth();
- }
-
-private:
- view(view const&);
- view & operator=(view const&);
-
- Rtree const& m_rtree;
-};
-
-}}} // namespace detail::rtree::utilities
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_UTILITIES_VIEW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/children_box.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/children_box.hpp
deleted file mode 100644
index 6c1bafd3ded..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/children_box.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree node children box calculating visitor implementation
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_CHILDREN_BOX_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_CHILDREN_BOX_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree { namespace visitors {
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class children_box
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
-public:
- inline children_box(Box & result, Translator const& tr)
- : m_result(result), m_tr(tr)
- {}
-
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- m_result = rtree::elements_box<Box>(elements.begin(), elements.end(), m_tr);
- }
-
- inline void operator()(leaf const& n)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- m_result = rtree::values_box<Box>(elements.begin(), elements.end(), m_tr);
- }
-
-private:
- Box & m_result;
- Translator const& m_tr;
-};
-
-}}} // namespace detail::rtree::visitors
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_CHILDREN_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/copy.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/copy.hpp
deleted file mode 100644
index 86ffc99caf1..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/copy.hpp
+++ /dev/null
@@ -1,92 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree deep copying visitor implementation
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_COPY_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_COPY_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree { namespace visitors {
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class copy
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, false>::type
-{
-public:
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef rtree::subtree_destroyer<Value, Options, Translator, Box, Allocators> subtree_destroyer;
- typedef typename Allocators::node_pointer node_pointer;
-
- explicit inline copy(Allocators & allocators)
- : result(0)
- , m_allocators(allocators)
- {}
-
- inline void operator()(internal_node & n)
- {
- node_pointer raw_new_node = rtree::create_node<Allocators, internal_node>::apply(m_allocators); // MAY THROW, STRONG (N: alloc)
- subtree_destroyer new_node(raw_new_node, m_allocators);
-
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type & elements = rtree::elements(n);
-
- elements_type & elements_dst = rtree::elements(rtree::get<internal_node>(*new_node));
-
- for (typename elements_type::iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- rtree::apply_visitor(*this, *it->second); // MAY THROW (V, E: alloc, copy, N: alloc)
-
- // for exception safety
- subtree_destroyer auto_result(result, m_allocators);
-
- elements_dst.push_back( rtree::make_ptr_pair(it->first, result) ); // MAY THROW, STRONG (E: alloc, copy)
-
- auto_result.release();
- }
-
- result = new_node.get();
- new_node.release();
- }
-
- inline void operator()(leaf & l)
- {
- node_pointer raw_new_node = rtree::create_node<Allocators, leaf>::apply(m_allocators); // MAY THROW, STRONG (N: alloc)
- subtree_destroyer new_node(raw_new_node, m_allocators);
-
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type & elements = rtree::elements(l);
-
- elements_type & elements_dst = rtree::elements(rtree::get<leaf>(*new_node));
-
- for (typename elements_type::iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- elements_dst.push_back(*it); // MAY THROW, STRONG (V: alloc, copy)
- }
-
- result = new_node.get();
- new_node.release();
- }
-
- node_pointer result;
-
-private:
- Allocators & m_allocators;
-};
-
-}}} // namespace detail::rtree::visitors
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_COPY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/count.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/count.hpp
deleted file mode 100644
index 7efd5b70283..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/count.hpp
+++ /dev/null
@@ -1,107 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree count visitor implementation
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_COUNT_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_COUNT_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree { namespace visitors {
-
-template <typename Indexable, typename Value>
-struct count_helper
-{
- template <typename Translator>
- static inline typename Translator::result_type indexable(Indexable const& i, Translator const&)
- {
- return i;
- }
- template <typename Translator>
- static inline bool equals(Indexable const& i, Value const& v, Translator const& tr)
- {
- return geometry::equals(i, tr(v));
- }
-};
-
-template <typename Value>
-struct count_helper<Value, Value>
-{
- template <typename Translator>
- static inline typename Translator::result_type indexable(Value const& v, Translator const& tr)
- {
- return tr(v);
- }
- template <typename Translator>
- static inline bool equals(Value const& v1, Value const& v2, Translator const& tr)
- {
- return tr.equals(v1, v2);
- }
-};
-
-template <typename ValueOrIndexable, typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-struct count
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef count_helper<ValueOrIndexable, Value> count_help;
-
- inline count(ValueOrIndexable const& vori, Translator const& t)
- : value_or_indexable(vori), tr(t), found_count(0)
- {}
-
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- // traverse nodes meeting predicates
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- if ( geometry::covered_by(
- return_ref_or_bounds(
- count_help::indexable(value_or_indexable, tr)),
- it->first) )
- {
- rtree::apply_visitor(*this, *it->second);
- }
- }
- }
-
- inline void operator()(leaf const& n)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- // get all values meeting predicates
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- // if value meets predicates
- if ( count_help::equals(value_or_indexable, *it, tr) )
- {
- ++found_count;
- }
- }
- }
-
- ValueOrIndexable const& value_or_indexable;
- Translator const& tr;
- typename Allocators::size_type found_count;
-};
-
-}}} // namespace detail::rtree::visitors
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_COUNT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/destroy.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/destroy.hpp
deleted file mode 100644
index b4a800eac2f..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/destroy.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree destroying visitor implementation
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_DELETE_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_DELETE_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree { namespace visitors {
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class destroy
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, false>::type
-{
-public:
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename Allocators::node_pointer node_pointer;
-
- inline destroy(node_pointer root_node, Allocators & allocators)
- : m_current_node(root_node)
- , m_allocators(allocators)
- {}
-
- inline void operator()(internal_node & n)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(&n == &rtree::get<internal_node>(*m_current_node), "invalid pointers");
-
- node_pointer node_to_destroy = m_current_node;
-
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type & elements = rtree::elements(n);
-
- for (typename elements_type::iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- m_current_node = it->second;
- rtree::apply_visitor(*this, *m_current_node);
- it->second = 0;
- }
-
- rtree::destroy_node<Allocators, internal_node>::apply(m_allocators, node_to_destroy);
- }
-
- inline void operator()(leaf & l)
- {
- boost::ignore_unused(l);
- BOOST_GEOMETRY_INDEX_ASSERT(&l == &rtree::get<leaf>(*m_current_node), "invalid pointers");
-
- rtree::destroy_node<Allocators, leaf>::apply(m_allocators, m_current_node);
- }
-
-private:
- node_pointer m_current_node;
- Allocators & m_allocators;
-};
-
-}}} // namespace detail::rtree::visitors
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_DELETE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/distance_query.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/distance_query.hpp
deleted file mode 100644
index b930714433f..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/distance_query.hpp
+++ /dev/null
@@ -1,588 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree distance (knn, path, etc. ) query visitor implementation
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_DISTANCE_QUERY_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_DISTANCE_QUERY_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree { namespace visitors {
-
-template <typename Value, typename Translator, typename DistanceType, typename OutIt>
-class distance_query_result
-{
-public:
- typedef DistanceType distance_type;
-
- inline explicit distance_query_result(size_t k, OutIt out_it)
- : m_count(k), m_out_it(out_it)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(0 < m_count, "Number of neighbors should be greater than 0");
-
- m_neighbors.reserve(m_count);
- }
-
- inline void store(Value const& val, distance_type const& curr_comp_dist)
- {
- if ( m_neighbors.size() < m_count )
- {
- m_neighbors.push_back(std::make_pair(curr_comp_dist, val));
-
- if ( m_neighbors.size() == m_count )
- std::make_heap(m_neighbors.begin(), m_neighbors.end(), neighbors_less);
- }
- else
- {
- if ( curr_comp_dist < m_neighbors.front().first )
- {
- std::pop_heap(m_neighbors.begin(), m_neighbors.end(), neighbors_less);
- m_neighbors.back().first = curr_comp_dist;
- m_neighbors.back().second = val;
- std::push_heap(m_neighbors.begin(), m_neighbors.end(), neighbors_less);
- }
- }
- }
-
- inline bool has_enough_neighbors() const
- {
- return m_count <= m_neighbors.size();
- }
-
- inline distance_type greatest_comparable_distance() const
- {
- // greatest distance is in the first neighbor only
- // if there is at least m_count values found
- // this is just for safety reasons since is_comparable_distance_valid() is checked earlier
- // TODO - may be replaced by ASSERT
- return m_neighbors.size() < m_count
- ? (std::numeric_limits<distance_type>::max)()
- : m_neighbors.front().first;
- }
-
- inline size_t finish()
- {
- typedef typename std::vector< std::pair<distance_type, Value> >::const_iterator neighbors_iterator;
- for ( neighbors_iterator it = m_neighbors.begin() ; it != m_neighbors.end() ; ++it, ++m_out_it )
- *m_out_it = it->second;
-
- return m_neighbors.size();
- }
-
-private:
- inline static bool neighbors_less(
- std::pair<distance_type, Value> const& p1,
- std::pair<distance_type, Value> const& p2)
- {
- return p1.first < p2.first;
- }
-
- size_t m_count;
- OutIt m_out_it;
-
- std::vector< std::pair<distance_type, Value> > m_neighbors;
-};
-
-template <
- typename Value,
- typename Options,
- typename Translator,
- typename Box,
- typename Allocators,
- typename Predicates,
- unsigned DistancePredicateIndex,
- typename OutIter
->
-class distance_query
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
-public:
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename rtree::node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef index::detail::predicates_element<DistancePredicateIndex, Predicates> nearest_predicate_access;
- typedef typename nearest_predicate_access::type nearest_predicate_type;
- typedef typename indexable_type<Translator>::type indexable_type;
-
- typedef index::detail::calculate_distance<nearest_predicate_type, indexable_type, value_tag> calculate_value_distance;
- typedef index::detail::calculate_distance<nearest_predicate_type, Box, bounds_tag> calculate_node_distance;
- typedef typename calculate_value_distance::result_type value_distance_type;
- typedef typename calculate_node_distance::result_type node_distance_type;
-
- static const unsigned predicates_len = index::detail::predicates_length<Predicates>::value;
-
- inline distance_query(parameters_type const& parameters, Translator const& translator, Predicates const& pred, OutIter out_it)
- : m_parameters(parameters), m_translator(translator)
- , m_pred(pred)
- , m_result(nearest_predicate_access::get(m_pred).count, out_it)
- {}
-
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
-
- // array of active nodes
- typedef typename index::detail::rtree::container_from_elements_type<
- elements_type,
- std::pair<node_distance_type, typename Allocators::node_pointer>
- >::type active_branch_list_type;
-
- active_branch_list_type active_branch_list;
- active_branch_list.reserve(m_parameters.get_max_elements());
-
- elements_type const& elements = rtree::elements(n);
-
- // fill array of nodes meeting predicates
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- // if current node meets predicates
- // 0 - dummy value
- if ( index::detail::predicates_check<index::detail::bounds_tag, 0, predicates_len>(m_pred, 0, it->first) )
- {
- // calculate node's distance(s) for distance predicate
- node_distance_type node_distance;
- // if distance isn't ok - move to the next node
- if ( !calculate_node_distance::apply(predicate(), it->first, node_distance) )
- {
- continue;
- }
-
- // if current node is further than found neighbors - don't analyze it
- if ( m_result.has_enough_neighbors() &&
- is_node_prunable(m_result.greatest_comparable_distance(), node_distance) )
- {
- continue;
- }
-
- // add current node's data into the list
- active_branch_list.push_back( std::make_pair(node_distance, it->second) );
- }
- }
-
- // if there aren't any nodes in ABL - return
- if ( active_branch_list.empty() )
- return;
-
- // sort array
- std::sort(active_branch_list.begin(), active_branch_list.end(), abl_less);
-
- // recursively visit nodes
- for ( typename active_branch_list_type::const_iterator it = active_branch_list.begin();
- it != active_branch_list.end() ; ++it )
- {
- // if current node is further than furthest neighbor, the rest of nodes also will be further
- if ( m_result.has_enough_neighbors() &&
- is_node_prunable(m_result.greatest_comparable_distance(), it->first) )
- break;
-
- rtree::apply_visitor(*this, *(it->second));
- }
-
- // ALTERNATIVE VERSION - use heap instead of sorted container
- // It seems to be faster for greater MaxElements and slower otherwise
- // CONSIDER: using one global container/heap for active branches
- // instead of a sorted container per level
- // This would also change the way how branches are traversed!
- // The same may be applied to the iterative version which btw suffers
- // from the copying of the whole containers on resize of the ABLs container
-
- //// make a heap
- //std::make_heap(active_branch_list.begin(), active_branch_list.end(), abl_greater);
-
- //// recursively visit nodes
- //while ( !active_branch_list.empty() )
- //{
- // //if current node is further than furthest neighbor, the rest of nodes also will be further
- // if ( m_result.has_enough_neighbors()
- // && is_node_prunable(m_result.greatest_comparable_distance(), active_branch_list.front().first) )
- // {
- // break;
- // }
-
- // rtree::apply_visitor(*this, *(active_branch_list.front().second));
-
- // std::pop_heap(active_branch_list.begin(), active_branch_list.end(), abl_greater);
- // active_branch_list.pop_back();
- //}
- }
-
- inline void operator()(leaf const& n)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- // search leaf for closest value meeting predicates
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- // if value meets predicates
- if ( index::detail::predicates_check<index::detail::value_tag, 0, predicates_len>(m_pred, *it, m_translator(*it)) )
- {
- // calculate values distance for distance predicate
- value_distance_type value_distance;
- // if distance is ok
- if ( calculate_value_distance::apply(predicate(), m_translator(*it), value_distance) )
- {
- // store value
- m_result.store(*it, value_distance);
- }
- }
- }
- }
-
- inline size_t finish()
- {
- return m_result.finish();
- }
-
-private:
- static inline bool abl_less(
- std::pair<node_distance_type, typename Allocators::node_pointer> const& p1,
- std::pair<node_distance_type, typename Allocators::node_pointer> const& p2)
- {
- return p1.first < p2.first;
- }
-
- //static inline bool abl_greater(
- // std::pair<node_distance_type, typename Allocators::node_pointer> const& p1,
- // std::pair<node_distance_type, typename Allocators::node_pointer> const& p2)
- //{
- // return p1.first > p2.first;
- //}
-
- template <typename Distance>
- static inline bool is_node_prunable(Distance const& greatest_dist, node_distance_type const& d)
- {
- return greatest_dist <= d;
- }
-
- nearest_predicate_type const& predicate() const
- {
- return nearest_predicate_access::get(m_pred);
- }
-
- parameters_type const& m_parameters;
- Translator const& m_translator;
-
- Predicates m_pred;
- distance_query_result<Value, Translator, value_distance_type, OutIter> m_result;
-};
-
-template <
- typename Value,
- typename Options,
- typename Translator,
- typename Box,
- typename Allocators,
- typename Predicates,
- unsigned DistancePredicateIndex
->
-class distance_query_incremental
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
-public:
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename rtree::node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef index::detail::predicates_element<DistancePredicateIndex, Predicates> nearest_predicate_access;
- typedef typename nearest_predicate_access::type nearest_predicate_type;
- typedef typename indexable_type<Translator>::type indexable_type;
-
- typedef index::detail::calculate_distance<nearest_predicate_type, indexable_type, value_tag> calculate_value_distance;
- typedef index::detail::calculate_distance<nearest_predicate_type, Box, bounds_tag> calculate_node_distance;
- typedef typename calculate_value_distance::result_type value_distance_type;
- typedef typename calculate_node_distance::result_type node_distance_type;
-
- typedef typename Allocators::size_type size_type;
- typedef typename Allocators::const_reference const_reference;
- typedef typename Allocators::node_pointer node_pointer;
-
- static const unsigned predicates_len = index::detail::predicates_length<Predicates>::value;
-
- typedef typename rtree::elements_type<internal_node>::type internal_elements;
- typedef typename internal_elements::const_iterator internal_iterator;
- typedef typename rtree::elements_type<leaf>::type leaf_elements;
-
- typedef std::pair<node_distance_type, node_pointer> branch_data;
- typedef typename index::detail::rtree::container_from_elements_type<
- internal_elements, branch_data
- >::type active_branch_list_type;
- struct internal_stack_element
- {
- internal_stack_element() : current_branch(0) {}
-#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
- // Required in c++03 for containers using Boost.Move
- internal_stack_element & operator=(internal_stack_element const& o)
- {
- branches = o.branches;
- current_branch = o.current_branch;
- return *this;
- }
-#endif
- active_branch_list_type branches;
- typename active_branch_list_type::size_type current_branch;
- };
- typedef std::vector<internal_stack_element> internal_stack_type;
-
- inline distance_query_incremental()
- : m_translator(NULL)
-// , m_pred()
- , current_neighbor((std::numeric_limits<size_type>::max)())
-// , next_closest_node_distance((std::numeric_limits<node_distance_type>::max)())
- {}
-
- inline distance_query_incremental(Translator const& translator, Predicates const& pred)
- : m_translator(::boost::addressof(translator))
- , m_pred(pred)
- , current_neighbor((std::numeric_limits<size_type>::max)())
-
- , next_closest_node_distance((std::numeric_limits<node_distance_type>::max)())
- {
- BOOST_GEOMETRY_INDEX_ASSERT(0 < max_count(), "k must be greather than 0");
- }
-
- const_reference dereference() const
- {
- return *(neighbors[current_neighbor].second);
- }
-
- void initialize(node_pointer root)
- {
- rtree::apply_visitor(*this, *root);
- increment();
- }
-
- void increment()
- {
- for (;;)
- {
- size_type new_neighbor = current_neighbor == (std::numeric_limits<size_type>::max)() ? 0 : current_neighbor + 1;
-
- if ( internal_stack.empty() )
- {
- if ( new_neighbor < neighbors.size() )
- current_neighbor = new_neighbor;
- else
- {
- current_neighbor = (std::numeric_limits<size_type>::max)();
- // clear() is used to disable the condition above
- neighbors.clear();
- }
-
- return;
- }
- else
- {
- active_branch_list_type & branches = internal_stack.back().branches;
- typename active_branch_list_type::size_type & current_branch = internal_stack.back().current_branch;
-
- if ( branches.size() <= current_branch )
- {
- internal_stack.pop_back();
- continue;
- }
-
- // if there are no nodes which can have closer values, set new value
- if ( new_neighbor < neighbors.size() &&
- // here must be < because otherwise neighbours may be sorted in different order
- // if there is another value with equal distance
- neighbors[new_neighbor].first < next_closest_node_distance )
- {
- current_neighbor = new_neighbor;
- return;
- }
-
- // if node is further than the furthest neighbour, following nodes also will be further
- BOOST_GEOMETRY_INDEX_ASSERT(neighbors.size() <= max_count(), "unexpected neighbours count");
- if ( max_count() <= neighbors.size() &&
- is_node_prunable(neighbors.back().first, branches[current_branch].first) )
- {
- // stop traversing current level
- internal_stack.pop_back();
- continue;
- }
- else
- {
- // new level - must increment current_branch before traversing of another level (mem reallocation)
- ++current_branch;
- rtree::apply_visitor(*this, *(branches[current_branch - 1].second));
-
- next_closest_node_distance = calc_closest_node_distance(internal_stack.begin(), internal_stack.end());
- }
- }
- }
- }
-
- bool is_end() const
- {
- return (std::numeric_limits<size_type>::max)() == current_neighbor;
- }
-
- friend bool operator==(distance_query_incremental const& l, distance_query_incremental const& r)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(l.current_neighbor != r.current_neighbor ||
- (std::numeric_limits<size_type>::max)() == l.current_neighbor ||
- (std::numeric_limits<size_type>::max)() == r.current_neighbor ||
- l.neighbors[l.current_neighbor].second == r.neighbors[r.current_neighbor].second,
- "not corresponding iterators");
- return l.current_neighbor == r.current_neighbor;
- }
-
- // Put node's elements into the list of active branches if those elements meets predicates
- // and distance predicates(currently not used)
- // and aren't further than found neighbours (if there is enough neighbours)
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- // add new element
- internal_stack.resize(internal_stack.size()+1);
-
- // fill active branch list array of nodes meeting predicates
- for ( typename elements_type::const_iterator it = elements.begin() ; it != elements.end() ; ++it )
- {
- // if current node meets predicates
- // 0 - dummy value
- if ( index::detail::predicates_check<index::detail::bounds_tag, 0, predicates_len>(m_pred, 0, it->first) )
- {
- // calculate node's distance(s) for distance predicate
- node_distance_type node_distance;
- // if distance isn't ok - move to the next node
- if ( !calculate_node_distance::apply(predicate(), it->first, node_distance) )
- {
- continue;
- }
-
- // if current node is further than found neighbors - don't analyze it
- if ( max_count() <= neighbors.size() &&
- is_node_prunable(neighbors.back().first, node_distance) )
- {
- continue;
- }
-
- // add current node's data into the list
- internal_stack.back().branches.push_back( std::make_pair(node_distance, it->second) );
- }
- }
-
- if ( internal_stack.back().branches.empty() )
- internal_stack.pop_back();
- else
- // sort array
- std::sort(internal_stack.back().branches.begin(), internal_stack.back().branches.end(), abl_less);
- }
-
- // Put values into the list of neighbours if those values meets predicates
- // and distance predicates(currently not used)
- // and aren't further than already found neighbours (if there is enough neighbours)
- inline void operator()(leaf const& n)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- // store distance to the furthest neighbour
- bool not_enough_neighbors = neighbors.size() < max_count();
- value_distance_type greatest_distance = !not_enough_neighbors ? neighbors.back().first : (std::numeric_limits<value_distance_type>::max)();
-
- // search leaf for closest value meeting predicates
- for ( typename elements_type::const_iterator it = elements.begin() ; it != elements.end() ; ++it)
- {
- // if value meets predicates
- if ( index::detail::predicates_check<index::detail::value_tag, 0, predicates_len>(m_pred, *it, (*m_translator)(*it)) )
- {
- // calculate values distance for distance predicate
- value_distance_type value_distance;
- // if distance is ok
- if ( calculate_value_distance::apply(predicate(), (*m_translator)(*it), value_distance) )
- {
- // if there is not enough values or current value is closer than furthest neighbour
- if ( not_enough_neighbors || value_distance < greatest_distance )
- {
- neighbors.push_back(std::make_pair(value_distance, boost::addressof(*it)));
- }
- }
- }
- }
-
- // sort array
- std::sort(neighbors.begin(), neighbors.end(), neighbors_less);
- // remove furthest values
- if ( max_count() < neighbors.size() )
- neighbors.resize(max_count());
- }
-
-private:
- static inline bool abl_less(std::pair<node_distance_type, typename Allocators::node_pointer> const& p1,
- std::pair<node_distance_type, typename Allocators::node_pointer> const& p2)
- {
- return p1.first < p2.first;
- }
-
- static inline bool neighbors_less(std::pair<value_distance_type, const Value *> const& p1,
- std::pair<value_distance_type, const Value *> const& p2)
- {
- return p1.first < p2.first;
- }
-
- node_distance_type
- calc_closest_node_distance(typename internal_stack_type::const_iterator first,
- typename internal_stack_type::const_iterator last)
- {
- node_distance_type result = (std::numeric_limits<node_distance_type>::max)();
- for ( ; first != last ; ++first )
- {
- if ( first->branches.size() <= first->current_branch )
- continue;
-
- node_distance_type curr_dist = first->branches[first->current_branch].first;
- if ( curr_dist < result )
- result = curr_dist;
- }
- return result;
- }
-
- template <typename Distance>
- static inline bool is_node_prunable(Distance const& greatest_dist, node_distance_type const& d)
- {
- return greatest_dist <= d;
- }
-
- inline unsigned max_count() const
- {
- return nearest_predicate_access::get(m_pred).count;
- }
-
- nearest_predicate_type const& predicate() const
- {
- return nearest_predicate_access::get(m_pred);
- }
-
- const Translator * m_translator;
-
- Predicates m_pred;
-
- internal_stack_type internal_stack;
- std::vector< std::pair<value_distance_type, const Value *> > neighbors;
- size_type current_neighbor;
- node_distance_type next_closest_node_distance;
-};
-
-}}} // namespace detail::rtree::visitors
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_DISTANCE_QUERY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/insert.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/insert.hpp
deleted file mode 100644
index 87d5bbbcca9..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/insert.hpp
+++ /dev/null
@@ -1,573 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree inserting visitor implementation
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_INSERT_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_INSERT_HPP
-
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/algorithms/detail/expand_by_epsilon.hpp>
-#include <boost/geometry/util/condition.hpp>
-
-#include <boost/geometry/index/detail/algorithms/content.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree {
-
-// Default choose_next_node
-template <typename Value, typename Options, typename Box, typename Allocators, typename ChooseNextNodeTag>
-class choose_next_node;
-
-template <typename Value, typename Options, typename Box, typename Allocators>
-class choose_next_node<Value, Options, Box, Allocators, choose_by_content_diff_tag>
-{
-public:
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename rtree::node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename rtree::elements_type<internal_node>::type children_type;
-
- typedef typename index::detail::default_content_result<Box>::type content_type;
-
- template <typename Indexable>
- static inline size_t apply(internal_node & n,
- Indexable const& indexable,
- parameters_type const& /*parameters*/,
- size_t /*node_relative_level*/)
- {
- children_type & children = rtree::elements(n);
-
- BOOST_GEOMETRY_INDEX_ASSERT(!children.empty(), "can't choose the next node if children are empty");
-
- size_t children_count = children.size();
-
- // choose index with smallest content change or smallest content
- size_t choosen_index = 0;
- content_type smallest_content_diff = (std::numeric_limits<content_type>::max)();
- content_type smallest_content = (std::numeric_limits<content_type>::max)();
-
- // caculate areas and areas of all nodes' boxes
- for ( size_t i = 0 ; i < children_count ; ++i )
- {
- typedef typename children_type::value_type child_type;
- child_type const& ch_i = children[i];
-
- // expanded child node's box
- Box box_exp(ch_i.first);
- geometry::expand(box_exp, indexable);
-
- // areas difference
- content_type content = index::detail::content(box_exp);
- content_type content_diff = content - index::detail::content(ch_i.first);
-
- // update the result
- if ( content_diff < smallest_content_diff ||
- ( content_diff == smallest_content_diff && content < smallest_content ) )
- {
- smallest_content_diff = content_diff;
- smallest_content = content;
- choosen_index = i;
- }
- }
-
- return choosen_index;
- }
-};
-
-// ----------------------------------------------------------------------- //
-
-// Not implemented here
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators, typename RedistributeTag>
-struct redistribute_elements
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_REDISTRIBUTE_TAG_TYPE,
- (redistribute_elements));
-};
-
-// ----------------------------------------------------------------------- //
-
-// Split algorithm
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators, typename SplitTag>
-class split
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_SPLIT_TAG_TYPE,
- (split));
-};
-
-// Default split algorithm
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class split<Value, Options, Translator, Box, Allocators, split_default_tag>
-{
-protected:
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename rtree::node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef rtree::subtree_destroyer<Value, Options, Translator, Box, Allocators> subtree_destroyer;
-
-public:
- typedef index::detail::varray<
- typename rtree::elements_type<internal_node>::type::value_type,
- 1
- > nodes_container_type;
-
- template <typename Node>
- static inline void apply(nodes_container_type & additional_nodes,
- Node & n,
- Box & n_box,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators)
- {
- // TODO - consider creating nodes always with sufficient memory allocated
-
- // create additional node, use auto destroyer for automatic destruction on exception
- subtree_destroyer second_node(rtree::create_node<Allocators, Node>::apply(allocators), allocators); // MAY THROW, STRONG (N: alloc)
- // create reference to the newly created node
- Node & n2 = rtree::get<Node>(*second_node);
-
- // NOTE: thread-safety
- // After throwing an exception by redistribute_elements the original node may be not changed or
- // both nodes may be empty. In both cases the tree won't be valid r-tree.
- // The alternative is to create 2 (or more) additional nodes here and store backup info
- // in the original node, then, if exception was thrown, the node would always have more than max
- // elements.
- // The alternative is to use moving semantics in the implementations of redistribute_elements,
- // it will be possible to throw from boost::move() in the case of e.g. static size nodes.
-
- // redistribute elements
- Box box2;
- redistribute_elements<
- Value,
- Options,
- Translator,
- Box,
- Allocators,
- typename Options::redistribute_tag
- >::apply(n, n2, n_box, box2, parameters, translator, allocators); // MAY THROW (V, E: alloc, copy, copy)
-
- // check numbers of elements
- BOOST_GEOMETRY_INDEX_ASSERT(parameters.get_min_elements() <= rtree::elements(n).size() &&
- rtree::elements(n).size() <= parameters.get_max_elements(),
- "unexpected number of elements");
- BOOST_GEOMETRY_INDEX_ASSERT(parameters.get_min_elements() <= rtree::elements(n2).size() &&
- rtree::elements(n2).size() <= parameters.get_max_elements(),
- "unexpected number of elements");
-
- // return the list of newly created nodes (this algorithm returns one)
- additional_nodes.push_back(rtree::make_ptr_pair(box2, second_node.get())); // MAY THROW, STRONG (alloc, copy)
-
- // release the ptr
- second_node.release();
- }
-};
-
-// ----------------------------------------------------------------------- //
-
-namespace visitors { namespace detail {
-
-template <typename InternalNode, typename InternalNodePtr, typename SizeType>
-struct insert_traverse_data
-{
- typedef typename rtree::elements_type<InternalNode>::type elements_type;
- typedef typename elements_type::value_type element_type;
- typedef typename elements_type::size_type elements_size_type;
- typedef SizeType size_type;
-
- insert_traverse_data()
- : parent(0), current_child_index(0), current_level(0)
- {}
-
- void move_to_next_level(InternalNodePtr new_parent,
- elements_size_type new_child_index)
- {
- parent = new_parent;
- current_child_index = new_child_index;
- ++current_level;
- }
-
- bool current_is_root() const
- {
- return 0 == parent;
- }
-
- elements_type & parent_elements() const
- {
- BOOST_GEOMETRY_INDEX_ASSERT(parent, "null pointer");
- return rtree::elements(*parent);
- }
-
- element_type & current_element() const
- {
- BOOST_GEOMETRY_INDEX_ASSERT(parent, "null pointer");
- return rtree::elements(*parent)[current_child_index];
- }
-
- InternalNodePtr parent;
- elements_size_type current_child_index;
- size_type current_level;
-};
-
-// Default insert visitor
-template <typename Element, typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class insert
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, false>::type
-{
-protected:
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename rtree::node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef rtree::subtree_destroyer<Value, Options, Translator, Box, Allocators> subtree_destroyer;
- typedef typename Allocators::node_pointer node_pointer;
- typedef typename Allocators::size_type size_type;
-
- //typedef typename Allocators::internal_node_pointer internal_node_pointer;
- typedef internal_node * internal_node_pointer;
-
- inline insert(node_pointer & root,
- size_type & leafs_level,
- Element const& element,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators,
- size_type relative_level = 0
- )
- : m_element(element)
- , m_parameters(parameters)
- , m_translator(translator)
- , m_relative_level(relative_level)
- , m_level(leafs_level - relative_level)
- , m_root_node(root)
- , m_leafs_level(leafs_level)
- , m_traverse_data()
- , m_allocators(allocators)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(m_relative_level <= leafs_level, "unexpected level value");
- BOOST_GEOMETRY_INDEX_ASSERT(m_level <= m_leafs_level, "unexpected level value");
- BOOST_GEOMETRY_INDEX_ASSERT(0 != m_root_node, "there is no root node");
- // TODO
- // assert - check if Box is correct
-
- // When a value is inserted, during the tree traversal bounds of nodes
- // on a path from the root to a leaf must be expanded. So prepare
- // a bounding object at the beginning to not do it later for each node.
- // NOTE: This is actually only needed because conditionally the bounding
- // object may be expanded below. Otherwise the indexable could be
- // directly used instead
- index::detail::bounds(rtree::element_indexable(m_element, m_translator), m_element_bounds);
-
-#ifdef BOOST_GEOMETRY_INDEX_EXPERIMENTAL_ENLARGE_BY_EPSILON
- // Enlarge it in case if it's not bounding geometry type.
- // It's because Points and Segments are compared WRT machine epsilon
- // This ensures that leafs bounds correspond to the stored elements
- if (BOOST_GEOMETRY_CONDITION((
- boost::is_same<Element, Value>::value
- && ! index::detail::is_bounding_geometry
- <
- typename indexable_type<Translator>::type
- >::value )) )
- {
- geometry::detail::expand_by_epsilon(m_element_bounds);
- }
-#endif
- }
-
- template <typename Visitor>
- inline void traverse(Visitor & visitor, internal_node & n)
- {
- // choose next node
- size_t choosen_node_index = rtree::choose_next_node<Value, Options, Box, Allocators, typename Options::choose_next_node_tag>::
- apply(n, rtree::element_indexable(m_element, m_translator), m_parameters, m_leafs_level - m_traverse_data.current_level);
-
- // expand the node to contain value
- geometry::expand(
- rtree::elements(n)[choosen_node_index].first,
- m_element_bounds
- /*rtree::element_indexable(m_element, m_translator)*/);
-
- // next traversing step
- traverse_apply_visitor(visitor, n, choosen_node_index); // MAY THROW (V, E: alloc, copy, N:alloc)
- }
-
- // TODO: awulkiew - change post_traverse name to handle_overflow or overflow_treatment?
-
- template <typename Node>
- inline void post_traverse(Node &n)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(m_traverse_data.current_is_root() ||
- &n == &rtree::get<Node>(*m_traverse_data.current_element().second),
- "if node isn't the root current_child_index should be valid");
-
- // handle overflow
- if ( m_parameters.get_max_elements() < rtree::elements(n).size() )
- {
- // NOTE: If the exception is thrown current node may contain more than MAX elements or be empty.
- // Furthermore it may be empty root - internal node.
- split(n); // MAY THROW (V, E: alloc, copy, N:alloc)
- }
- }
-
- template <typename Visitor>
- inline void traverse_apply_visitor(Visitor & visitor, internal_node &n, size_t choosen_node_index)
- {
- // save previous traverse inputs and set new ones
- insert_traverse_data<internal_node, internal_node_pointer, size_type>
- backup_traverse_data = m_traverse_data;
-
- // calculate new traverse inputs
- m_traverse_data.move_to_next_level(&n, choosen_node_index);
-
- // next traversing step
- rtree::apply_visitor(visitor, *rtree::elements(n)[choosen_node_index].second); // MAY THROW (V, E: alloc, copy, N:alloc)
-
- // restore previous traverse inputs
- m_traverse_data = backup_traverse_data;
- }
-
- // TODO: consider - split result returned as OutIter is faster than reference to the container. Why?
-
- template <typename Node>
- inline void split(Node & n) const
- {
- typedef rtree::split<Value, Options, Translator, Box, Allocators, typename Options::split_tag> split_algo;
-
- typename split_algo::nodes_container_type additional_nodes;
- Box n_box;
-
- split_algo::apply(additional_nodes, n, n_box, m_parameters, m_translator, m_allocators); // MAY THROW (V, E: alloc, copy, N:alloc)
-
- BOOST_GEOMETRY_INDEX_ASSERT(additional_nodes.size() == 1, "unexpected number of additional nodes");
-
- // TODO add all additional nodes
- // For kmeans algorithm:
- // elements number may be greater than node max elements count
- // split and reinsert must take node with some elements count
- // and container of additional elements (std::pair<Box, node*>s or Values)
- // and translator + allocators
- // where node_elements_count + additional_elements > node_max_elements_count
- // What with elements other than std::pair<Box, node*> ?
- // Implement template <node_tag> struct node_element_type or something like that
-
- // for exception safety
- subtree_destroyer additional_node_ptr(additional_nodes[0].second, m_allocators);
-
-#ifdef BOOST_GEOMETRY_INDEX_EXPERIMENTAL_ENLARGE_BY_EPSILON
- // Enlarge bounds of a leaf node.
- // It's because Points and Segments are compared WRT machine epsilon
- // This ensures that leafs' bounds correspond to the stored elements.
- if (BOOST_GEOMETRY_CONDITION((
- boost::is_same<Node, leaf>::value
- && ! index::detail::is_bounding_geometry
- <
- typename indexable_type<Translator>::type
- >::value )))
- {
- geometry::detail::expand_by_epsilon(n_box);
- geometry::detail::expand_by_epsilon(additional_nodes[0].first);
- }
-#endif
-
- // node is not the root - just add the new node
- if ( !m_traverse_data.current_is_root() )
- {
- // update old node's box
- m_traverse_data.current_element().first = n_box;
- // add new node to parent's children
- m_traverse_data.parent_elements().push_back(additional_nodes[0]); // MAY THROW, STRONG (V, E: alloc, copy)
- }
- // node is the root - add level
- else
- {
- BOOST_GEOMETRY_INDEX_ASSERT(&n == &rtree::get<Node>(*m_root_node), "node should be the root");
-
- // create new root and add nodes
- subtree_destroyer new_root(rtree::create_node<Allocators, internal_node>::apply(m_allocators), m_allocators); // MAY THROW, STRONG (N:alloc)
-
- BOOST_TRY
- {
- rtree::elements(rtree::get<internal_node>(*new_root)).push_back(rtree::make_ptr_pair(n_box, m_root_node)); // MAY THROW, STRONG (E:alloc, copy)
- rtree::elements(rtree::get<internal_node>(*new_root)).push_back(additional_nodes[0]); // MAY THROW, STRONG (E:alloc, copy)
- }
- BOOST_CATCH(...)
- {
- // clear new root to not delete in the ~subtree_destroyer() potentially stored old root node
- rtree::elements(rtree::get<internal_node>(*new_root)).clear();
- BOOST_RETHROW // RETHROW
- }
- BOOST_CATCH_END
-
- m_root_node = new_root.get();
- ++m_leafs_level;
-
- new_root.release();
- }
-
- additional_node_ptr.release();
- }
-
- // TODO: awulkiew - implement dispatchable split::apply to enable additional nodes creation
-
- Element const& m_element;
- Box m_element_bounds;
- parameters_type const& m_parameters;
- Translator const& m_translator;
- size_type const m_relative_level;
- size_type const m_level;
-
- node_pointer & m_root_node;
- size_type & m_leafs_level;
-
- // traversing input parameters
- insert_traverse_data<internal_node, internal_node_pointer, size_type> m_traverse_data;
-
- Allocators & m_allocators;
-};
-
-} // namespace detail
-
-// Insert visitor forward declaration
-template <typename Element, typename Value, typename Options, typename Translator, typename Box, typename Allocators, typename InsertTag>
-class insert;
-
-// Default insert visitor used for nodes elements
-// After passing the Element to insert visitor the Element is managed by the tree
-// I.e. one should not delete the node passed to the insert visitor after exception is thrown
-// because this visitor may delete it
-template <typename Element, typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class insert<Element, Value, Options, Translator, Box, Allocators, insert_default_tag>
- : public detail::insert<Element, Value, Options, Translator, Box, Allocators>
-{
-public:
- typedef detail::insert<Element, Value, Options, Translator, Box, Allocators> base;
- typedef typename base::node node;
- typedef typename base::internal_node internal_node;
- typedef typename base::leaf leaf;
-
- typedef typename Options::parameters_type parameters_type;
- typedef typename base::node_pointer node_pointer;
- typedef typename base::size_type size_type;
-
- inline insert(node_pointer & root,
- size_type & leafs_level,
- Element const& element,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators,
- size_type relative_level = 0
- )
- : base(root, leafs_level, element, parameters, translator, allocators, relative_level)
- {}
-
- inline void operator()(internal_node & n)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_traverse_data.current_level < base::m_leafs_level, "unexpected level");
-
- if ( base::m_traverse_data.current_level < base::m_level )
- {
- // next traversing step
- base::traverse(*this, n); // MAY THROW (E: alloc, copy, N: alloc)
- }
- else
- {
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_level == base::m_traverse_data.current_level, "unexpected level");
-
- BOOST_TRY
- {
- // push new child node
- rtree::elements(n).push_back(base::m_element); // MAY THROW, STRONG (E: alloc, copy)
- }
- BOOST_CATCH(...)
- {
- // if the insert fails above, the element won't be stored in the tree
-
- rtree::visitors::destroy<Value, Options, Translator, Box, Allocators> del_v(base::m_element.second, base::m_allocators);
- rtree::apply_visitor(del_v, *base::m_element.second);
-
- BOOST_RETHROW // RETHROW
- }
- BOOST_CATCH_END
- }
-
- base::post_traverse(n); // MAY THROW (E: alloc, copy, N: alloc)
- }
-
- inline void operator()(leaf &)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(false, "this visitor can't be used for a leaf");
- }
-};
-
-// Default insert visitor specialized for Values elements
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class insert<Value, Value, Options, Translator, Box, Allocators, insert_default_tag>
- : public detail::insert<Value, Value, Options, Translator, Box, Allocators>
-{
-public:
- typedef detail::insert<Value, Value, Options, Translator, Box, Allocators> base;
- typedef typename base::node node;
- typedef typename base::internal_node internal_node;
- typedef typename base::leaf leaf;
-
- typedef typename Options::parameters_type parameters_type;
- typedef typename base::node_pointer node_pointer;
- typedef typename base::size_type size_type;
-
- inline insert(node_pointer & root,
- size_type & leafs_level,
- Value const& value,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators,
- size_type relative_level = 0
- )
- : base(root, leafs_level, value, parameters, translator, allocators, relative_level)
- {}
-
- inline void operator()(internal_node & n)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_traverse_data.current_level < base::m_leafs_level, "unexpected level");
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_traverse_data.current_level < base::m_level, "unexpected level");
-
- // next traversing step
- base::traverse(*this, n); // MAY THROW (V, E: alloc, copy, N: alloc)
-
- base::post_traverse(n); // MAY THROW (E: alloc, copy, N: alloc)
- }
-
- inline void operator()(leaf & n)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_traverse_data.current_level == base::m_leafs_level, "unexpected level");
- BOOST_GEOMETRY_INDEX_ASSERT(base::m_level == base::m_traverse_data.current_level ||
- base::m_level == (std::numeric_limits<size_t>::max)(), "unexpected level");
-
- rtree::elements(n).push_back(base::m_element); // MAY THROW, STRONG (V: alloc, copy)
-
- base::post_traverse(n); // MAY THROW (V: alloc, copy, N: alloc)
- }
-};
-
-}}} // namespace detail::rtree::visitors
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_INSERT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/is_leaf.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/is_leaf.hpp
deleted file mode 100644
index dd2159c71e6..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/is_leaf.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree leaf node checking visitor implementation
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_IS_LEAF_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_IS_LEAF_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree { namespace visitors {
-
-template <typename Value, typename Options, typename Box, typename Allocators>
-struct is_leaf : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- is_leaf()
- : result(false)
- {}
-
- inline void operator()(internal_node const&)
- {
- // result = false;
- }
-
- inline void operator()(leaf const&)
- {
- result = true;
- }
-
- bool result;
-};
-
-}}} // namespace detail::rtree::visitors
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_IS_LEAF_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/iterator.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/iterator.hpp
deleted file mode 100644
index 621231ae9a9..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/iterator.hpp
+++ /dev/null
@@ -1,134 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree iterator visitor implementation
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_ITERATOR_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_ITERATOR_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree { namespace visitors {
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class iterator
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
-public:
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename Allocators::size_type size_type;
- typedef typename Allocators::const_reference const_reference;
- typedef typename Allocators::node_pointer node_pointer;
-
- typedef typename rtree::elements_type<internal_node>::type::const_iterator internal_iterator;
- typedef typename rtree::elements_type<leaf>::type leaf_elements;
- typedef typename rtree::elements_type<leaf>::type::const_iterator leaf_iterator;
-
- inline iterator()
- : m_values(NULL)
- , m_current()
- {}
-
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- m_internal_stack.push_back(std::make_pair(elements.begin(), elements.end()));
- }
-
- inline void operator()(leaf const& n)
- {
- m_values = ::boost::addressof(rtree::elements(n));
- m_current = rtree::elements(n).begin();
- }
-
- const_reference dereference() const
- {
- BOOST_GEOMETRY_INDEX_ASSERT(m_values, "not dereferencable");
- return *m_current;
- }
-
- void initialize(node_pointer root)
- {
- rtree::apply_visitor(*this, *root);
- search_value();
- }
-
- void increment()
- {
- ++m_current;
- search_value();
- }
-
- void search_value()
- {
- for (;;)
- {
- // if leaf is choosen, move to the next value in leaf
- if ( m_values )
- {
- // there are more values in the current leaf
- if ( m_current != m_values->end() )
- {
- return;
- }
- // no more values, clear current leaf
- else
- {
- m_values = 0;
- }
- }
- // if leaf isn't choosen, move to the next leaf
- else
- {
- // return if there is no more nodes to traverse
- if ( m_internal_stack.empty() )
- return;
-
- // no more children in current node, remove it from stack
- if ( m_internal_stack.back().first == m_internal_stack.back().second )
- {
- m_internal_stack.pop_back();
- continue;
- }
-
- internal_iterator it = m_internal_stack.back().first;
- ++m_internal_stack.back().first;
-
- // push the next node to the stack
- rtree::apply_visitor(*this, *(it->second));
- }
- }
- }
-
- bool is_end() const
- {
- return 0 == m_values;
- }
-
- friend bool operator==(iterator const& l, iterator const& r)
- {
- return (l.m_values == r.m_values) && (0 == l.m_values || l.m_current == r.m_current );
- }
-
-private:
-
- std::vector< std::pair<internal_iterator, internal_iterator> > m_internal_stack;
- const leaf_elements * m_values;
- leaf_iterator m_current;
-};
-
-}}} // namespace detail::rtree::visitors
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_ITERATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/remove.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/remove.hpp
deleted file mode 100644
index 7e6162a6163..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/remove.hpp
+++ /dev/null
@@ -1,344 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree removing visitor implementation
-//
-// Copyright (c) 2011-2017 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_REMOVE_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_REMOVE_HPP
-
-#include <boost/geometry/index/detail/rtree/visitors/is_leaf.hpp>
-
-#include <boost/geometry/algorithms/detail/covered_by/interface.hpp>
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree { namespace visitors {
-
-// Default remove algorithm
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class remove
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, false>::type
-{
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename rtree::node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef rtree::subtree_destroyer<Value, Options, Translator, Box, Allocators> subtree_destroyer;
- typedef typename Allocators::node_pointer node_pointer;
- typedef typename Allocators::size_type size_type;
-
- typedef typename rtree::elements_type<internal_node>::type::size_type internal_size_type;
-
- //typedef typename Allocators::internal_node_pointer internal_node_pointer;
- typedef internal_node * internal_node_pointer;
-
-public:
- inline remove(node_pointer & root,
- size_type & leafs_level,
- Value const& value,
- parameters_type const& parameters,
- Translator const& translator,
- Allocators & allocators)
- : m_value(value)
- , m_parameters(parameters)
- , m_translator(translator)
- , m_allocators(allocators)
- , m_root_node(root)
- , m_leafs_level(leafs_level)
- , m_is_value_removed(false)
- , m_parent(0)
- , m_current_child_index(0)
- , m_current_level(0)
- , m_is_underflow(false)
- {
- // TODO
- // assert - check if Value/Box is correct
- }
-
- inline void operator()(internal_node & n)
- {
- typedef typename rtree::elements_type<internal_node>::type children_type;
- children_type & children = rtree::elements(n);
-
- // traverse children which boxes intersects value's box
- internal_size_type child_node_index = 0;
- for ( ; child_node_index < children.size() ; ++child_node_index )
- {
- if ( geometry::covered_by(
- return_ref_or_bounds(m_translator(m_value)),
- children[child_node_index].first) )
- {
- // next traversing step
- traverse_apply_visitor(n, child_node_index); // MAY THROW
-
- if ( m_is_value_removed )
- break;
- }
- }
-
- // value was found and removed
- if ( m_is_value_removed )
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- typedef typename elements_type::iterator element_iterator;
- elements_type & elements = rtree::elements(n);
-
- // underflow occured - child node should be removed
- if ( m_is_underflow )
- {
- element_iterator underfl_el_it = elements.begin() + child_node_index;
- size_type relative_level = m_leafs_level - m_current_level;
-
- // move node to the container - store node's relative level as well and return new underflow state
- // NOTE: if the min elements number is 1, then after an underflow
- // here the child elements count is 0, so it's not required to store this node,
- // it could just be destroyed
- m_is_underflow = store_underflowed_node(elements, underfl_el_it, relative_level); // MAY THROW (E: alloc, copy)
- }
-
- // n is not root - adjust aabb
- if ( 0 != m_parent )
- {
- // underflow state should be ok here
- // note that there may be less than min_elems elements in root
- // so this condition should be checked only here
- BOOST_GEOMETRY_INDEX_ASSERT((elements.size() < m_parameters.get_min_elements()) == m_is_underflow, "unexpected state");
-
- rtree::elements(*m_parent)[m_current_child_index].first
- = rtree::elements_box<Box>(elements.begin(), elements.end(), m_translator);
- }
- // n is root node
- else
- {
- BOOST_GEOMETRY_INDEX_ASSERT(&n == &rtree::get<internal_node>(*m_root_node), "node must be the root");
-
- // reinsert elements from removed nodes (underflows)
- reinsert_removed_nodes_elements(); // MAY THROW (V, E: alloc, copy, N: alloc)
-
- // shorten the tree
- // NOTE: if the min elements number is 1, then after underflow
- // here the number of elements may be equal to 0
- // this can occur only for the last removed element
- if ( rtree::elements(n).size() <= 1 )
- {
- node_pointer root_to_destroy = m_root_node;
- if ( rtree::elements(n).size() == 0 )
- m_root_node = 0;
- else
- m_root_node = rtree::elements(n)[0].second;
- --m_leafs_level;
-
- rtree::destroy_node<Allocators, internal_node>::apply(m_allocators, root_to_destroy);
- }
- }
- }
- }
-
- inline void operator()(leaf & n)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type & elements = rtree::elements(n);
-
- // find value and remove it
- for ( typename elements_type::iterator it = elements.begin() ; it != elements.end() ; ++it )
- {
- if ( m_translator.equals(*it, m_value) )
- {
- rtree::move_from_back(elements, it); // MAY THROW (V: copy)
- elements.pop_back();
- m_is_value_removed = true;
- break;
- }
- }
-
- // if value was removed
- if ( m_is_value_removed )
- {
- BOOST_GEOMETRY_INDEX_ASSERT(0 < m_parameters.get_min_elements(), "min number of elements is too small");
-
- // calc underflow
- m_is_underflow = elements.size() < m_parameters.get_min_elements();
-
- // n is not root - adjust aabb
- if ( 0 != m_parent )
- {
- rtree::elements(*m_parent)[m_current_child_index].first
- = rtree::values_box<Box>(elements.begin(), elements.end(), m_translator);
- }
- }
- }
-
- bool is_value_removed() const
- {
- return m_is_value_removed;
- }
-
-private:
-
- typedef std::vector< std::pair<size_type, node_pointer> > UnderflowNodes;
-
- void traverse_apply_visitor(internal_node &n, internal_size_type choosen_node_index)
- {
- // save previous traverse inputs and set new ones
- internal_node_pointer parent_bckup = m_parent;
- internal_size_type current_child_index_bckup = m_current_child_index;
- size_type current_level_bckup = m_current_level;
-
- m_parent = &n;
- m_current_child_index = choosen_node_index;
- ++m_current_level;
-
- // next traversing step
- rtree::apply_visitor(*this, *rtree::elements(n)[choosen_node_index].second); // MAY THROW (V, E: alloc, copy, N: alloc)
-
- // restore previous traverse inputs
- m_parent = parent_bckup;
- m_current_child_index = current_child_index_bckup;
- m_current_level = current_level_bckup;
- }
-
- bool store_underflowed_node(
- typename rtree::elements_type<internal_node>::type & elements,
- typename rtree::elements_type<internal_node>::type::iterator underfl_el_it,
- size_type relative_level)
- {
- // move node to the container - store node's relative level as well
- m_underflowed_nodes.push_back(std::make_pair(relative_level, underfl_el_it->second)); // MAY THROW (E: alloc, copy)
-
- BOOST_TRY
- {
- // NOTE: those are elements of the internal node which means that copy/move shouldn't throw
- // Though it's safer in case if the pointer type could throw in copy ctor.
- // In the future this try-catch block could be removed.
- rtree::move_from_back(elements, underfl_el_it); // MAY THROW (E: copy)
- elements.pop_back();
- }
- BOOST_CATCH(...)
- {
- m_underflowed_nodes.pop_back();
- BOOST_RETHROW // RETHROW
- }
- BOOST_CATCH_END
-
- // calc underflow
- return elements.size() < m_parameters.get_min_elements();
- }
-
- static inline bool is_leaf(node const& n)
- {
- visitors::is_leaf<Value, Options, Box, Allocators> ilv;
- rtree::apply_visitor(ilv, n);
- return ilv.result;
- }
-
- void reinsert_removed_nodes_elements()
- {
- typename UnderflowNodes::reverse_iterator it = m_underflowed_nodes.rbegin();
-
- BOOST_TRY
- {
- // reinsert elements from removed nodes
- // begin with levels closer to the root
- for ( ; it != m_underflowed_nodes.rend() ; ++it )
- {
- // it->first is an index of a level of a node, not children
- // counted from the leafs level
- bool const node_is_leaf = it->first == 1;
- BOOST_GEOMETRY_INDEX_ASSERT(node_is_leaf == is_leaf(*it->second), "unexpected condition");
- if ( node_is_leaf )
- {
- reinsert_node_elements(rtree::get<leaf>(*it->second), it->first); // MAY THROW (V, E: alloc, copy, N: alloc)
-
- rtree::destroy_node<Allocators, leaf>::apply(m_allocators, it->second);
- }
- else
- {
- reinsert_node_elements(rtree::get<internal_node>(*it->second), it->first); // MAY THROW (V, E: alloc, copy, N: alloc)
-
- rtree::destroy_node<Allocators, internal_node>::apply(m_allocators, it->second);
- }
- }
-
- //m_underflowed_nodes.clear();
- }
- BOOST_CATCH(...)
- {
- // destroy current and remaining nodes
- for ( ; it != m_underflowed_nodes.rend() ; ++it )
- {
- subtree_destroyer dummy(it->second, m_allocators);
- }
-
- //m_underflowed_nodes.clear();
-
- BOOST_RETHROW // RETHROW
- }
- BOOST_CATCH_END
- }
-
- template <typename Node>
- void reinsert_node_elements(Node &n, size_type node_relative_level)
- {
- typedef typename rtree::elements_type<Node>::type elements_type;
- elements_type & elements = rtree::elements(n);
-
- typename elements_type::iterator it = elements.begin();
- BOOST_TRY
- {
- for ( ; it != elements.end() ; ++it )
- {
- visitors::insert<
- typename elements_type::value_type,
- Value, Options, Translator, Box, Allocators,
- typename Options::insert_tag
- > insert_v(
- m_root_node, m_leafs_level, *it,
- m_parameters, m_translator, m_allocators,
- node_relative_level - 1);
-
- rtree::apply_visitor(insert_v, *m_root_node); // MAY THROW (V, E: alloc, copy, N: alloc)
- }
- }
- BOOST_CATCH(...)
- {
- ++it;
- rtree::destroy_elements<Value, Options, Translator, Box, Allocators>
- ::apply(it, elements.end(), m_allocators);
- elements.clear();
- BOOST_RETHROW // RETHROW
- }
- BOOST_CATCH_END
- }
-
- Value const& m_value;
- parameters_type const& m_parameters;
- Translator const& m_translator;
- Allocators & m_allocators;
-
- node_pointer & m_root_node;
- size_type & m_leafs_level;
-
- bool m_is_value_removed;
- UnderflowNodes m_underflowed_nodes;
-
- // traversing input parameters
- internal_node_pointer m_parent;
- internal_size_type m_current_child_index;
- size_type m_current_level;
-
- // traversing output parameters
- bool m_is_underflow;
-};
-
-}}} // namespace detail::rtree::visitors
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_REMOVE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp b/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp
deleted file mode 100644
index b9cd0ae2c05..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp
+++ /dev/null
@@ -1,214 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree spatial query visitor implementation
-//
-// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_SPATIAL_QUERY_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_SPATIAL_QUERY_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail { namespace rtree { namespace visitors {
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators, typename Predicates, typename OutIter>
-struct spatial_query
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename Allocators::size_type size_type;
-
- static const unsigned predicates_len = index::detail::predicates_length<Predicates>::value;
-
- inline spatial_query(Translator const& t, Predicates const& p, OutIter out_it)
- : tr(t), pred(p), out_iter(out_it), found_count(0)
- {}
-
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- // traverse nodes meeting predicates
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- // if node meets predicates
- // 0 - dummy value
- if ( index::detail::predicates_check<index::detail::bounds_tag, 0, predicates_len>(pred, 0, it->first) )
- rtree::apply_visitor(*this, *it->second);
- }
- }
-
- inline void operator()(leaf const& n)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- // get all values meeting predicates
- for (typename elements_type::const_iterator it = elements.begin();
- it != elements.end(); ++it)
- {
- // if value meets predicates
- if ( index::detail::predicates_check<index::detail::value_tag, 0, predicates_len>(pred, *it, tr(*it)) )
- {
- *out_iter = *it;
- ++out_iter;
-
- ++found_count;
- }
- }
- }
-
- Translator const& tr;
-
- Predicates pred;
-
- OutIter out_iter;
- size_type found_count;
-};
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators, typename Predicates>
-class spatial_query_incremental
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
-public:
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename Allocators::size_type size_type;
- typedef typename Allocators::const_reference const_reference;
- typedef typename Allocators::node_pointer node_pointer;
-
- typedef typename rtree::elements_type<internal_node>::type::const_iterator internal_iterator;
- typedef typename rtree::elements_type<leaf>::type leaf_elements;
- typedef typename rtree::elements_type<leaf>::type::const_iterator leaf_iterator;
-
- static const unsigned predicates_len = index::detail::predicates_length<Predicates>::value;
-
- inline spatial_query_incremental()
- : m_translator(NULL)
-// , m_pred()
- , m_values(NULL)
- , m_current()
- {}
-
- inline spatial_query_incremental(Translator const& t, Predicates const& p)
- : m_translator(::boost::addressof(t))
- , m_pred(p)
- , m_values(NULL)
- , m_current()
- {}
-
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- m_internal_stack.push_back(std::make_pair(elements.begin(), elements.end()));
- }
-
- inline void operator()(leaf const& n)
- {
- m_values = ::boost::addressof(rtree::elements(n));
- m_current = rtree::elements(n).begin();
- }
-
- const_reference dereference() const
- {
- BOOST_GEOMETRY_INDEX_ASSERT(m_values, "not dereferencable");
- return *m_current;
- }
-
- void initialize(node_pointer root)
- {
- rtree::apply_visitor(*this, *root);
- search_value();
- }
-
- void increment()
- {
- ++m_current;
- search_value();
- }
-
- void search_value()
- {
- for (;;)
- {
- // if leaf is choosen, move to the next value in leaf
- if ( m_values )
- {
- if ( m_current != m_values->end() )
- {
- // return if next value is found
- Value const& v = *m_current;
- if ( index::detail::predicates_check<index::detail::value_tag, 0, predicates_len>(m_pred, v, (*m_translator)(v)) )
- return;
-
- ++m_current;
- }
- // no more values, clear current leaf
- else
- {
- m_values = 0;
- }
- }
- // if leaf isn't choosen, move to the next leaf
- else
- {
- // return if there is no more nodes to traverse
- if ( m_internal_stack.empty() )
- return;
-
- // no more children in current node, remove it from stack
- if ( m_internal_stack.back().first == m_internal_stack.back().second )
- {
- m_internal_stack.pop_back();
- continue;
- }
-
- internal_iterator it = m_internal_stack.back().first;
- ++m_internal_stack.back().first;
-
- // next node is found, push it to the stack
- if ( index::detail::predicates_check<index::detail::bounds_tag, 0, predicates_len>(m_pred, 0, it->first) )
- rtree::apply_visitor(*this, *(it->second));
- }
- }
- }
-
- bool is_end() const
- {
- return 0 == m_values;
- }
-
- friend bool operator==(spatial_query_incremental const& l, spatial_query_incremental const& r)
- {
- return (l.m_values == r.m_values) && (0 == l.m_values || l.m_current == r.m_current );
- }
-
-private:
-
- const Translator * m_translator;
-
- Predicates m_pred;
-
- std::vector< std::pair<internal_iterator, internal_iterator> > m_internal_stack;
- const leaf_elements * m_values;
- leaf_iterator m_current;
-};
-
-}}} // namespace detail::rtree::visitors
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_SPATIAL_QUERY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/serialization.hpp b/contrib/restricted/boost/boost/geometry/index/detail/serialization.hpp
deleted file mode 100644
index 550a37565be..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/serialization.hpp
+++ /dev/null
@@ -1,585 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_SERIALIZATION_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_SERIALIZATION_HPP
-
-//#include <boost/serialization/serialization.hpp>
-#include <boost/serialization/split_member.hpp>
-#include <boost/serialization/version.hpp>
-//#include <boost/serialization/nvp.hpp>
-
-// TODO
-// how about using the unsigned type capable of storing Max in compile-time versions?
-
-// TODO
-// - add wrappers for Point and Box and implement serialize for those wrappers instead of
-// raw geometries
-// PROBLEM: after implementing this, how Values would be set?
-// - store the name of the parameters to know how to load and detect errors
-// - in the header, once store info about the Indexable and Bounds types (geometry type, point CS, Dim, etc.)
-// each geometry save without this info
-
-// TODO - move to index/detail/serialization.hpp
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-// TODO - use boost::move?
-template<typename T>
-class serialization_storage
-{
-public:
- template <typename Archive>
- serialization_storage(Archive & ar, unsigned int version)
- {
- boost::serialization::load_construct_data_adl(ar, this->address(), version);
- }
- ~serialization_storage()
- {
- this->address()->~T();
- }
- T * address()
- {
- return static_cast<T*>(m_storage.address());
- }
-private:
- boost::aligned_storage<sizeof(T), boost::alignment_of<T>::value> m_storage;
-};
-
-// TODO - save and load item_version? see: collections_load_imp and collections_save_imp
-// this should be done once for the whole container
-// versions of all used types should be stored
-
-template <typename T, typename Archive> inline
-T serialization_load(const char * name, Archive & ar)
-{
- namespace bs = boost::serialization;
- serialization_storage<T> storage(ar, bs::version<T>::value); // load_construct_data
- ar >> boost::serialization::make_nvp(name, *storage.address()); // serialize
- //ar >> *storage.address(); // serialize
- return *storage.address();
-}
-
-template <typename T, typename Archive> inline
-void serialization_save(T const& t, const char * name, Archive & ar)
-{
- namespace bs = boost::serialization;
- bs::save_construct_data_adl(ar, boost::addressof(t), bs::version<T>::value); // save_construct_data
- ar << boost::serialization::make_nvp(name, t); // serialize
- //ar << t; // serialize
-}
-
-}}}}
-
-// TODO - move to index/serialization/rtree.hpp
-namespace boost { namespace serialization {
-
-// boost::geometry::index::linear
-
-template<class Archive, size_t Max, size_t Min>
-void save_construct_data(Archive & ar, const boost::geometry::index::linear<Max, Min> * params, unsigned int )
-{
- size_t max = params->get_max_elements(), min = params->get_min_elements();
- ar << boost::serialization::make_nvp("max", max);
- ar << boost::serialization::make_nvp("min", min);
-}
-template<class Archive, size_t Max, size_t Min>
-void load_construct_data(Archive & ar, boost::geometry::index::linear<Max, Min> * params, unsigned int )
-{
- size_t max, min;
- ar >> boost::serialization::make_nvp("max", max);
- ar >> boost::serialization::make_nvp("min", min);
- if ( max != params->get_max_elements() || min != params->get_min_elements() )
- // TODO change exception type
- BOOST_THROW_EXCEPTION(std::runtime_error("parameters not compatible"));
- // the constructor musn't be called for this type
- //::new(params)boost::geometry::index::linear<Max, Min>();
-}
-template<class Archive, size_t Max, size_t Min> void serialize(Archive &, boost::geometry::index::linear<Max, Min> &, unsigned int) {}
-
-// boost::geometry::index::quadratic
-
-template<class Archive, size_t Max, size_t Min>
-void save_construct_data(Archive & ar, const boost::geometry::index::quadratic<Max, Min> * params, unsigned int )
-{
- size_t max = params->get_max_elements(), min = params->get_min_elements();
- ar << boost::serialization::make_nvp("max", max);
- ar << boost::serialization::make_nvp("min", min);
-}
-template<class Archive, size_t Max, size_t Min>
-void load_construct_data(Archive & ar, boost::geometry::index::quadratic<Max, Min> * params, unsigned int )
-{
- size_t max, min;
- ar >> boost::serialization::make_nvp("max", max);
- ar >> boost::serialization::make_nvp("min", min);
- if ( max != params->get_max_elements() || min != params->get_min_elements() )
- // TODO change exception type
- BOOST_THROW_EXCEPTION(std::runtime_error("parameters not compatible"));
- // the constructor musn't be called for this type
- //::new(params)boost::geometry::index::quadratic<Max, Min>();
-}
-template<class Archive, size_t Max, size_t Min> void serialize(Archive &, boost::geometry::index::quadratic<Max, Min> &, unsigned int) {}
-
-// boost::geometry::index::rstar
-
-template<class Archive, size_t Max, size_t Min, size_t RE, size_t OCT>
-void save_construct_data(Archive & ar, const boost::geometry::index::rstar<Max, Min, RE, OCT> * params, unsigned int )
-{
- size_t max = params->get_max_elements()
- , min = params->get_min_elements()
- , re = params->get_reinserted_elements()
- , oct = params->get_overlap_cost_threshold();
- ar << boost::serialization::make_nvp("max", max);
- ar << boost::serialization::make_nvp("min", min);
- ar << boost::serialization::make_nvp("re", re);
- ar << boost::serialization::make_nvp("oct", oct);
-}
-template<class Archive, size_t Max, size_t Min, size_t RE, size_t OCT>
-void load_construct_data(Archive & ar, boost::geometry::index::rstar<Max, Min, RE, OCT> * params, unsigned int )
-{
- size_t max, min, re, oct;
- ar >> boost::serialization::make_nvp("max", max);
- ar >> boost::serialization::make_nvp("min", min);
- ar >> boost::serialization::make_nvp("re", re);
- ar >> boost::serialization::make_nvp("oct", oct);
- if ( max != params->get_max_elements() || min != params->get_min_elements() ||
- re != params->get_reinserted_elements() || oct != params->get_overlap_cost_threshold() )
- // TODO change exception type
- BOOST_THROW_EXCEPTION(std::runtime_error("parameters not compatible"));
- // the constructor musn't be called for this type
- //::new(params)boost::geometry::index::rstar<Max, Min, RE, OCT>();
-}
-template<class Archive, size_t Max, size_t Min, size_t RE, size_t OCT>
-void serialize(Archive &, boost::geometry::index::rstar<Max, Min, RE, OCT> &, unsigned int) {}
-
-// boost::geometry::index::dynamic_linear
-
-template<class Archive>
-inline void save_construct_data(Archive & ar, const boost::geometry::index::dynamic_linear * params, unsigned int )
-{
- size_t max = params->get_max_elements(), min = params->get_min_elements();
- ar << boost::serialization::make_nvp("max", max);
- ar << boost::serialization::make_nvp("min", min);
-}
-template<class Archive>
-inline void load_construct_data(Archive & ar, boost::geometry::index::dynamic_linear * params, unsigned int )
-{
- size_t max, min;
- ar >> boost::serialization::make_nvp("max", max);
- ar >> boost::serialization::make_nvp("min", min);
- ::new(params)boost::geometry::index::dynamic_linear(max, min);
-}
-template<class Archive> void serialize(Archive &, boost::geometry::index::dynamic_linear &, unsigned int) {}
-
-// boost::geometry::index::dynamic_quadratic
-
-template<class Archive>
-inline void save_construct_data(Archive & ar, const boost::geometry::index::dynamic_quadratic * params, unsigned int )
-{
- size_t max = params->get_max_elements(), min = params->get_min_elements();
- ar << boost::serialization::make_nvp("max", max);
- ar << boost::serialization::make_nvp("min", min);
-}
-template<class Archive>
-inline void load_construct_data(Archive & ar, boost::geometry::index::dynamic_quadratic * params, unsigned int )
-{
- size_t max, min;
- ar >> boost::serialization::make_nvp("max", max);
- ar >> boost::serialization::make_nvp("min", min);
- ::new(params)boost::geometry::index::dynamic_quadratic(max, min);
-}
-template<class Archive> void serialize(Archive &, boost::geometry::index::dynamic_quadratic &, unsigned int) {}
-
-// boost::geometry::index::dynamic_rstar
-
-template<class Archive>
-inline void save_construct_data(Archive & ar, const boost::geometry::index::dynamic_rstar * params, unsigned int )
-{
- size_t max = params->get_max_elements()
- , min = params->get_min_elements()
- , re = params->get_reinserted_elements()
- , oct = params->get_overlap_cost_threshold();
- ar << boost::serialization::make_nvp("max", max);
- ar << boost::serialization::make_nvp("min", min);
- ar << boost::serialization::make_nvp("re", re);
- ar << boost::serialization::make_nvp("oct", oct);
-}
-template<class Archive>
-inline void load_construct_data(Archive & ar, boost::geometry::index::dynamic_rstar * params, unsigned int )
-{
- size_t max, min, re, oct;
- ar >> boost::serialization::make_nvp("max", max);
- ar >> boost::serialization::make_nvp("min", min);
- ar >> boost::serialization::make_nvp("re", re);
- ar >> boost::serialization::make_nvp("oct", oct);
- ::new(params)boost::geometry::index::dynamic_rstar(max, min, re, oct);
-}
-template<class Archive> void serialize(Archive &, boost::geometry::index::dynamic_rstar &, unsigned int) {}
-
-}} // boost::serialization
-
-// TODO - move to index/detail/serialization.hpp or maybe geometry/serialization.hpp
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template <typename P, size_t I = 0, size_t D = geometry::dimension<P>::value>
-struct serialize_point
-{
- template <typename Archive>
- static inline void save(Archive & ar, P const& p, unsigned int version)
- {
- typename coordinate_type<P>::type c = get<I>(p);
- ar << boost::serialization::make_nvp("c", c);
- serialize_point<P, I+1, D>::save(ar, p, version);
- }
-
- template <typename Archive>
- static inline void load(Archive & ar, P & p, unsigned int version)
- {
- typename geometry::coordinate_type<P>::type c;
- ar >> boost::serialization::make_nvp("c", c);
- set<I>(p, c);
- serialize_point<P, I+1, D>::load(ar, p, version);
- }
-};
-
-template <typename P, size_t D>
-struct serialize_point<P, D, D>
-{
- template <typename Archive> static inline void save(Archive &, P const&, unsigned int) {}
- template <typename Archive> static inline void load(Archive &, P &, unsigned int) {}
-};
-
-}}}}
-
-// TODO - move to index/detail/serialization.hpp or maybe geometry/serialization.hpp
-namespace boost { namespace serialization {
-
-template<class Archive, typename T, size_t D, typename C>
-void save(Archive & ar, boost::geometry::model::point<T, D, C> const& p, unsigned int version)
-{
- boost::geometry::index::detail::serialize_point< boost::geometry::model::point<T, D, C> >::save(ar, p, version);
-}
-template<class Archive, typename T, size_t D, typename C>
-void load(Archive & ar, boost::geometry::model::point<T, D, C> & p, unsigned int version)
-{
- boost::geometry::index::detail::serialize_point< boost::geometry::model::point<T, D, C> >::load(ar, p, version);
-}
-template<class Archive, typename T, size_t D, typename C>
-inline void serialize(Archive & ar, boost::geometry::model::point<T, D, C> & o, const unsigned int version) { split_free(ar, o, version); }
-
-template<class Archive, typename P>
-inline void serialize(Archive & ar, boost::geometry::model::box<P> & b, const unsigned int)
-{
- ar & boost::serialization::make_nvp("min", b.min_corner());
- ar & boost::serialization::make_nvp("max", b.max_corner());
-}
-
-}} // boost::serialization
-
-// TODO - move to index/detail/rtree/visitors/save.hpp
-namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree { namespace visitors {
-
-// TODO move saving and loading of the rtree outside the rtree, this will require adding some kind of members_view
-
-template <typename Archive, typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class save
- : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
-{
-public:
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- save(Archive & archive, unsigned int version)
- : m_archive(archive), m_version(version)
- {}
-
- inline void operator()(internal_node const& n)
- {
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- elements_type const& elements = rtree::elements(n);
-
- // CONSIDER: change to elements_type::size_type or size_type
- // or use fixed-size type like uint32 or even uint16?
- size_t s = elements.size();
- m_archive << boost::serialization::make_nvp("s", s);
-
- for (typename elements_type::const_iterator it = elements.begin() ; it != elements.end() ; ++it)
- {
- serialization_save(it->first, "b", m_archive);
-
- rtree::apply_visitor(*this, *it->second);
- }
- }
-
- inline void operator()(leaf const& l)
- {
- typedef typename rtree::elements_type<leaf>::type elements_type;
- //typedef typename elements_type::size_type elements_size;
- elements_type const& elements = rtree::elements(l);
-
- // CONSIDER: change to elements_type::size_type or size_type
- // or use fixed-size type like uint32 or even uint16?
- size_t s = elements.size();
- m_archive << boost::serialization::make_nvp("s", s);
-
- for (typename elements_type::const_iterator it = elements.begin() ; it != elements.end() ; ++it)
- {
- serialization_save(*it, "v", m_archive);
- }
- }
-
-private:
- Archive & m_archive;
- unsigned int m_version;
-};
-
-}}}}}} // boost::geometry::index::detail::rtree::visitors
-
-// TODO - move to index/detail/rtree/load.hpp
-namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree {
-
-template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
-class load
-{
- typedef typename rtree::node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type node;
- typedef typename rtree::internal_node<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
- typedef typename rtree::leaf<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
-
- typedef typename Options::parameters_type parameters_type;
-
- typedef typename Allocators::node_pointer node_pointer;
- typedef rtree::subtree_destroyer<Value, Options, Translator, Box, Allocators> subtree_destroyer;
- typedef typename Allocators::size_type size_type;
-
-public:
- template <typename Archive> inline static
- node_pointer apply(Archive & ar, unsigned int version, size_type leafs_level, size_type & values_count, parameters_type const& parameters, Translator const& translator, Allocators & allocators)
- {
- values_count = 0;
- return raw_apply(ar, version, leafs_level, values_count, parameters, translator, allocators);
- }
-
-private:
- template <typename Archive> inline static
- node_pointer raw_apply(Archive & ar, unsigned int version, size_type leafs_level, size_type & values_count, parameters_type const& parameters, Translator const& translator, Allocators & allocators, size_type current_level = 0)
- {
- //BOOST_GEOMETRY_INDEX_ASSERT(current_level <= leafs_level, "invalid parameter");
-
- typedef typename rtree::elements_type<internal_node>::type elements_type;
- typedef typename elements_type::value_type element_type;
- //typedef typename elements_type::size_type elements_size;
-
- // CONSIDER: change to elements_type::size_type or size_type
- // or use fixed-size type like uint32 or even uint16?
- size_t elements_count;
- ar >> boost::serialization::make_nvp("s", elements_count);
-
- if ( elements_count < parameters.get_min_elements() || parameters.get_max_elements() < elements_count )
- BOOST_THROW_EXCEPTION(std::runtime_error("rtree loading error"));
-
- if ( current_level < leafs_level )
- {
- node_pointer n = rtree::create_node<Allocators, internal_node>::apply(allocators); // MAY THROW (A)
- subtree_destroyer auto_remover(n, allocators);
- internal_node & in = rtree::get<internal_node>(*n);
-
- elements_type & elements = rtree::elements(in);
-
- elements.reserve(elements_count); // MAY THROW (A)
-
- for ( size_t i = 0 ; i < elements_count ; ++i )
- {
- typedef typename elements_type::value_type::first_type box_type;
- box_type b = serialization_load<box_type>("b", ar);
- node_pointer n = raw_apply(ar, version, leafs_level, values_count, parameters, translator, allocators, current_level+1); // recursive call
- elements.push_back(element_type(b, n));
- }
-
- auto_remover.release();
- return n;
- }
- else
- {
- BOOST_GEOMETRY_INDEX_ASSERT(current_level == leafs_level, "unexpected value");
-
- node_pointer n = rtree::create_node<Allocators, leaf>::apply(allocators); // MAY THROW (A)
- subtree_destroyer auto_remover(n, allocators);
- leaf & l = rtree::get<leaf>(*n);
-
- typedef typename rtree::elements_type<leaf>::type elements_type;
- typedef typename elements_type::value_type element_type;
- elements_type & elements = rtree::elements(l);
-
- values_count += elements_count;
-
- elements.reserve(elements_count); // MAY THROW (A)
-
- for ( size_t i = 0 ; i < elements_count ; ++i )
- {
- element_type el = serialization_load<element_type>("v", ar); // MAY THROW (C)
- elements.push_back(el); // MAY THROW (C)
- }
-
- auto_remover.release();
- return n;
- }
- }
-};
-
-}}}}} // boost::geometry::index::detail::rtree
-
-// TODO - move to index/detail/rtree/private_view.hpp
-namespace boost { namespace geometry { namespace index { namespace detail { namespace rtree {
-
-template <typename Rtree>
-class const_private_view
-{
-public:
- typedef typename Rtree::size_type size_type;
-
- typedef typename Rtree::translator_type translator_type;
- typedef typename Rtree::value_type value_type;
- typedef typename Rtree::options_type options_type;
- typedef typename Rtree::box_type box_type;
- typedef typename Rtree::allocators_type allocators_type;
-
- const_private_view(Rtree const& rt) : m_rtree(rt) {}
-
- typedef typename Rtree::members_holder members_holder;
-
- members_holder const& members() const { return m_rtree.m_members; }
-
-private:
- const_private_view(const_private_view const&);
- const_private_view & operator=(const_private_view const&);
-
- Rtree const& m_rtree;
-};
-
-template <typename Rtree>
-class private_view
-{
-public:
- typedef typename Rtree::size_type size_type;
-
- typedef typename Rtree::translator_type translator_type;
- typedef typename Rtree::value_type value_type;
- typedef typename Rtree::options_type options_type;
- typedef typename Rtree::box_type box_type;
- typedef typename Rtree::allocators_type allocators_type;
-
- private_view(Rtree & rt) : m_rtree(rt) {}
-
- typedef typename Rtree::members_holder members_holder;
-
- members_holder & members() { return m_rtree.m_members; }
- members_holder const& members() const { return m_rtree.m_members; }
-
-private:
- private_view(private_view const&);
- private_view & operator=(private_view const&);
-
- Rtree & m_rtree;
-};
-
-}}}}} // namespace boost::geometry::index::detail::rtree
-
-// TODO - move to index/serialization/rtree.hpp
-namespace boost { namespace serialization {
-
-template<class Archive, typename V, typename P, typename I, typename E, typename A>
-void save(Archive & ar, boost::geometry::index::rtree<V, P, I, E, A> const& rt, unsigned int version)
-{
- namespace detail = boost::geometry::index::detail;
-
- typedef boost::geometry::index::rtree<V, P, I, E, A> rtree;
- typedef detail::rtree::const_private_view<rtree> view;
- typedef typename view::translator_type translator_type;
- typedef typename view::value_type value_type;
- typedef typename view::options_type options_type;
- typedef typename view::box_type box_type;
- typedef typename view::allocators_type allocators_type;
-
- view tree(rt);
-
- detail::serialization_save(tree.members().parameters(), "parameters", ar);
-
- ar << boost::serialization::make_nvp("values_count", tree.members().values_count);
- ar << boost::serialization::make_nvp("leafs_level", tree.members().leafs_level);
-
- if ( tree.members().values_count )
- {
- BOOST_GEOMETRY_INDEX_ASSERT(tree.members().root, "root shouldn't be null_ptr");
-
- detail::rtree::visitors::save<Archive, value_type, options_type, translator_type, box_type, allocators_type> save_v(ar, version);
- detail::rtree::apply_visitor(save_v, *tree.members().root);
- }
-}
-
-template<class Archive, typename V, typename P, typename I, typename E, typename A>
-void load(Archive & ar, boost::geometry::index::rtree<V, P, I, E, A> & rt, unsigned int version)
-{
- namespace detail = boost::geometry::index::detail;
-
- typedef boost::geometry::index::rtree<V, P, I, E, A> rtree;
- typedef detail::rtree::private_view<rtree> view;
- typedef typename view::size_type size_type;
- typedef typename view::translator_type translator_type;
- typedef typename view::value_type value_type;
- typedef typename view::options_type options_type;
- typedef typename view::box_type box_type;
- typedef typename view::allocators_type allocators_type;
-
- typedef typename options_type::parameters_type parameters_type;
- typedef typename allocators_type::node_pointer node_pointer;
- typedef detail::rtree::subtree_destroyer<value_type, options_type, translator_type, box_type, allocators_type> subtree_destroyer;
-
- view tree(rt);
-
- parameters_type params = detail::serialization_load<parameters_type>("parameters", ar);
-
- size_type values_count, leafs_level;
- ar >> boost::serialization::make_nvp("values_count", values_count);
- ar >> boost::serialization::make_nvp("leafs_level", leafs_level);
-
- node_pointer n(0);
- if ( 0 < values_count )
- {
- size_type loaded_values_count = 0;
- n = detail::rtree::load<value_type, options_type, translator_type, box_type, allocators_type>
- ::apply(ar, version, leafs_level, loaded_values_count, params, tree.members().translator(), tree.members().allocators()); // MAY THROW
-
- subtree_destroyer remover(n, tree.members().allocators());
- if ( loaded_values_count != values_count )
- BOOST_THROW_EXCEPTION(std::runtime_error("unexpected number of values")); // TODO change exception type
- remover.release();
- }
-
- tree.members().parameters() = params;
- tree.members().values_count = values_count;
- tree.members().leafs_level = leafs_level;
-
- subtree_destroyer remover(tree.members().root, tree.members().allocators());
- tree.members().root = n;
-}
-
-template<class Archive, typename V, typename P, typename I, typename E, typename A> inline
-void serialize(Archive & ar, boost::geometry::index::rtree<V, P, I, E, A> & rt, unsigned int version)
-{
- split_free(ar, rt, version);
-}
-
-template<class Archive, typename V, typename P, typename I, typename E, typename A> inline
-void serialize(Archive & ar, boost::geometry::index::rtree<V, P, I, E, A> const& rt, unsigned int version)
-{
- split_free(ar, rt, version);
-}
-
-}} // boost::serialization
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_SERIALIZATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/tags.hpp b/contrib/restricted/boost/boost/geometry/index/detail/tags.hpp
deleted file mode 100644
index e1a1716bed1..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/tags.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// Boost.Geometry Index
-//
-// Tags used by the predicates checks implementation.
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_TAGS_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_TAGS_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail {
-
-struct value_tag {};
-struct bounds_tag {};
-
-} // namespace detail
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_RTREE_TAGS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/translator.hpp b/contrib/restricted/boost/boost/geometry/index/detail/translator.hpp
deleted file mode 100644
index f377c720aa9..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/translator.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_TRANSLATOR_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_TRANSLATOR_HPP
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail {
-
-template <typename IndexableGetter, typename EqualTo>
-struct translator
- : public IndexableGetter
- , public EqualTo
-{
- typedef typename IndexableGetter::result_type result_type;
-
- translator(IndexableGetter const& i, EqualTo const& e)
- : IndexableGetter(i), EqualTo(e)
- {}
-
- template <typename Value>
- result_type operator()(Value const& value) const
- {
- return IndexableGetter::operator()(value);
- }
-
- template <typename Value>
- bool equals(Value const& v1, Value const& v2) const
- {
- return EqualTo::operator()(v1, v2);
- }
-};
-
-template <typename IndexableGetter>
-struct result_type
-{
- typedef typename IndexableGetter::result_type type;
-};
-
-template <typename IndexableGetter>
-struct indexable_type
-{
- typedef typename boost::remove_const<
- typename boost::remove_reference<
- typename result_type<IndexableGetter>::type
- >::type
- >::type type;
-};
-
-} // namespace detail
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_TRANSLATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/tuples.hpp b/contrib/restricted/boost/boost/geometry/index/detail/tuples.hpp
deleted file mode 100644
index e7f6d22357b..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/tuples.hpp
+++ /dev/null
@@ -1,204 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_TUPLES_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_TUPLES_HPP
-
-#include <boost/tuple/tuple.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-// TODO move this to index/tuples and separate algorithms
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-namespace tuples {
-
-// find_index
-
-namespace detail {
-
-template <typename Tuple, typename El, size_t N>
-struct find_index;
-
-template <typename Tuple, typename El, size_t N, typename CurrentEl>
-struct find_index_impl
-{
- static const size_t value = find_index<Tuple, El, N - 1>::value;
-};
-
-template <typename Tuple, typename El, size_t N>
-struct find_index_impl<Tuple, El, N, El>
-{
- static const size_t value = N - 1;
-};
-
-template <typename Tuple, typename El, typename CurrentEl>
-struct find_index_impl<Tuple, El, 1, CurrentEl>
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- ELEMENT_NOT_FOUND,
- (find_index_impl));
-};
-
-template <typename Tuple, typename El>
-struct find_index_impl<Tuple, El, 1, El>
-{
- static const size_t value = 0;
-};
-
-template <typename Tuple, typename El, size_t N>
-struct find_index
-{
- static const size_t value =
- find_index_impl<
- Tuple,
- El,
- N,
- typename boost::tuples::element<N - 1, Tuple>::type
- >::value;
-};
-
-} // namespace detail
-
-template <typename Tuple, typename El>
-struct find_index
-{
- static const size_t value =
- detail::find_index<
- Tuple,
- El,
- boost::tuples::length<Tuple>::value
- >::value;
-};
-
-// has
-
-namespace detail {
-
-template <typename Tuple, typename El, size_t N>
-struct has
-{
- static const bool value
- = boost::is_same<
- typename boost::tuples::element<N - 1, Tuple>::type,
- El
- >::value
- || has<Tuple, El, N - 1>::value;
-};
-
-template <typename Tuple, typename El>
-struct has<Tuple, El, 1>
-{
- static const bool value
- = boost::is_same<
- typename boost::tuples::element<0, Tuple>::type,
- El
- >::value;
-};
-
-} // namespace detail
-
-template <typename Tuple, typename El>
-struct has
-{
- static const bool value
- = detail::has<
- Tuple,
- El,
- boost::tuples::length<Tuple>::value
- >::value;
-};
-
-// add
-
-template <typename Tuple, typename El>
-struct add
-{
- BOOST_MPL_ASSERT_MSG(
- (false),
- NOT_IMPLEMENTED_FOR_THIS_TUPLE_TYPE,
- (add));
-};
-
-template <typename T1, typename T>
-struct add<boost::tuple<T1>, T>
-{
- typedef boost::tuple<T1, T> type;
-};
-
-template <typename T1, typename T2, typename T>
-struct add<boost::tuple<T1, T2>, T>
-{
- typedef boost::tuple<T1, T2, T> type;
-};
-
-// add_if
-
-template <typename Tuple, typename El, bool Cond>
-struct add_if
-{
- typedef Tuple type;
-};
-
-template <typename Tuple, typename El>
-struct add_if<Tuple, El, true>
-{
- typedef typename add<Tuple, El>::type type;
-};
-
-// add_unique
-
-template <typename Tuple, typename El>
-struct add_unique
-{
- typedef typename add_if<
- Tuple,
- El,
- !has<Tuple, El>::value
- >::type type;
-};
-
-template <typename Tuple,
- typename T,
- size_t I = 0,
- size_t N = boost::tuples::length<Tuple>::value>
-struct push_back
-{
- typedef
- boost::tuples::cons<
- typename boost::tuples::element<I, Tuple>::type,
- typename push_back<Tuple, T, I+1, N>::type
- > type;
-
- static type apply(Tuple const& tup, T const& t)
- {
- return
- type(
- boost::get<I>(tup),
- push_back<Tuple, T, I+1, N>::apply(tup, t)
- );
- }
-};
-
-template <typename Tuple, typename T, size_t N>
-struct push_back<Tuple, T, N, N>
-{
- typedef boost::tuples::cons<T, boost::tuples::null_type> type;
-
- static type apply(Tuple const&, T const& t)
- {
- return type(t, boost::tuples::null_type());
- }
-};
-
-} // namespace tuples
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_TAGS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/utilities.hpp b/contrib/restricted/boost/boost/geometry/index/detail/utilities.hpp
deleted file mode 100644
index 26f07800169..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/utilities.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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/swap.hpp>
-//#include <boost/type_traits/is_empty.hpp>
-
-#ifndef BOOST_GEOMETRY_INDEX_DETAIL_UTILITIES_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_UTILITIES_HPP
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template<class T>
-static inline void assign_cond(T & l, T const& r, boost::mpl::bool_<true> const&)
-{
- l = r;
-}
-
-template<class T>
-static inline void assign_cond(T &, T const&, boost::mpl::bool_<false> const&) {}
-
-template<class T>
-static inline void move_cond(T & l, T & r, boost::mpl::bool_<true> const&)
-{
- l = ::boost::move(r);
-}
-
-template<class T>
-static inline void move_cond(T &, T &, boost::mpl::bool_<false> const&) {}
-
-template <typename T> inline
-void swap_cond(T & l, T & r, boost::mpl::bool_<true> const&)
-{
- ::boost::swap(l, r);
-}
-
-template <typename T> inline
-void swap_cond(T &, T &, boost::mpl::bool_<false> const&) {}
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_UTILITIES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/varray.hpp b/contrib/restricted/boost/boost/geometry/index/detail/varray.hpp
deleted file mode 100644
index 1b084aafdb5..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/varray.hpp
+++ /dev/null
@@ -1,2199 +0,0 @@
-// Boost.Container varray
-//
-// Copyright (c) 2012-2015 Adam Wulkiewicz, Lodz, Poland.
-// Copyright (c) 2011-2013 Andrew Hundt.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_HPP
-
-// TODO - REMOVE/CHANGE
-#include <boost/container/detail/config_begin.hpp>
-#include <boost/container/detail/workaround.hpp>
-
-#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
-#include <boost/move/detail/fwd_macros.hpp>
-#endif
-
-#include <boost/config.hpp>
-#include <boost/swap.hpp>
-#include <boost/integer.hpp>
-
-#include <boost/mpl/assert.hpp>
-
-#include <boost/type_traits/is_unsigned.hpp>
-#include <boost/type_traits/alignment_of.hpp>
-#include <boost/type_traits/aligned_storage.hpp>
-
-// TODO - use std::reverse_iterator and std::iterator_traits
-// instead Boost.Iterator to remove dependency?
-// or boost/detail/iterator.hpp ?
-#include <boost/iterator/reverse_iterator.hpp>
-#include <boost/iterator/iterator_concepts.hpp>
-
-#include <boost/geometry/index/detail/assert.hpp>
-#include <boost/geometry/index/detail/exception.hpp>
-
-#include <boost/geometry/index/detail/varray_detail.hpp>
-
-#include <boost/concept_check.hpp>
-
-/*!
-\defgroup varray_non_member varray non-member functions
-*/
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-namespace varray_detail {
-
-template <typename Value, std::size_t Capacity>
-struct varray_traits
-{
- typedef Value value_type;
- typedef std::size_t size_type;
- typedef std::ptrdiff_t difference_type;
- typedef Value * pointer;
- typedef const Value * const_pointer;
- typedef Value & reference;
- typedef const Value & const_reference;
-
- typedef boost::false_type use_memop_in_swap_and_move;
- typedef boost::false_type use_optimized_swap;
- typedef boost::false_type disable_trivial_init;
-};
-
-template <typename Varray>
-struct checker
-{
- typedef typename Varray::size_type size_type;
- typedef typename Varray::const_iterator const_iterator;
-
- static inline void check_capacity(Varray const& v, size_type s)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(s <= v.capacity(), "size too big");
-
- ::boost::ignore_unused_variable_warning(v);
- ::boost::ignore_unused_variable_warning(s);
- }
-
- static inline void throw_out_of_bounds(Varray const& v, size_type i)
- {
- if ( v.size() <= i )
- throw_out_of_range("index out of bounds");
-
- ::boost::ignore_unused_variable_warning(v);
- ::boost::ignore_unused_variable_warning(i);
- }
-
- static inline void check_index(Varray const& v, size_type i)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(i < v.size(), "index out of bounds");
-
- ::boost::ignore_unused_variable_warning(v);
- ::boost::ignore_unused_variable_warning(i);
- }
-
- static inline void check_not_empty(Varray const& v)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(!v.empty(), "the container is empty");
-
- ::boost::ignore_unused_variable_warning(v);
- }
-
- static inline void check_iterator_end_neq(Varray const& v, const_iterator position)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(v.begin() <= position && position < v.end(), "iterator out of bounds");
-
- ::boost::ignore_unused_variable_warning(v);
- ::boost::ignore_unused_variable_warning(position);
- }
-
- static inline void check_iterator_end_eq(Varray const& v, const_iterator position)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(v.begin() <= position && position <= v.end(), "iterator out of bounds");
-
- ::boost::ignore_unused_variable_warning(v);
- ::boost::ignore_unused_variable_warning(position);
- }
-};
-
-} // namespace varray_detail
-
-/*!
-\brief A variable-size array container with fixed capacity.
-
-varray is a sequence container like boost::container::vector with contiguous storage that can
-change in size, along with the static allocation, low overhead, and fixed capacity of boost::array.
-
-A varray is a sequence that supports random access to elements, constant time insertion and
-removal of elements at the end, and linear time insertion and removal of elements at the beginning or
-in the middle. The number of elements in a varray may vary dynamically up to a fixed capacity
-because elements are stored within the object itself similarly to an array. However, objects are
-initialized as they are inserted into varray unlike C arrays or std::array which must construct
-all elements on instantiation. The behavior of varray enables the use of statically allocated
-elements in cases with complex object lifetime requirements that would otherwise not be trivially
-possible.
-
-\par Error Handling
- Insertion beyond the capacity and out of bounds errors result in undefined behavior unless
- otherwise specified. In this respect if size() == capacity(), then varray::push_back()
- behaves like std::vector pop_front() if size() == empty(). The reason for this difference
- is because unlike vectors, varray does not perform allocation.
-
-\par Advanced Usage
- Error handling behavior can be modified to more closely match std::vector exception behavior
- when exceeding bounds by providing an alternate Strategy and varray_traits instantiation.
-
-\tparam Value The type of element that will be stored.
-\tparam Capacity The maximum number of elements varray can store, fixed at compile time.
-\tparam Strategy Defines the public typedefs and error handlers,
- implements StaticVectorStrategy and has some similarities
- to an Allocator.
-*/
-template <typename Value, std::size_t Capacity>
-class varray
-{
- typedef varray_detail::varray_traits<Value, Capacity> vt;
- typedef varray_detail::checker<varray> errh;
-
- BOOST_MPL_ASSERT_MSG(
- ( boost::is_unsigned<typename vt::size_type>::value &&
- sizeof(typename boost::uint_value_t<Capacity>::least) <= sizeof(typename vt::size_type) ),
- SIZE_TYPE_IS_TOO_SMALL_FOR_SPECIFIED_CAPACITY,
- (varray)
- );
-
- typedef boost::aligned_storage<
- sizeof(Value[Capacity]),
- boost::alignment_of<Value[Capacity]>::value
- > aligned_storage_type;
-
- template <typename V, std::size_t C>
- friend class varray;
-
- BOOST_COPYABLE_AND_MOVABLE(varray)
-
-#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
-public:
- template <std::size_t C>
- varray & operator=(varray<Value, C> & sv)
- {
- typedef varray<Value, C> other;
- this->operator=(static_cast<const ::boost::rv<other> &>(const_cast<const other &>(sv)));
- return *this;
- }
-#endif
-
-public:
- //! @brief The type of elements stored in the container.
- typedef typename vt::value_type value_type;
- //! @brief The unsigned integral type used by the container.
- typedef typename vt::size_type size_type;
- //! @brief The pointers difference type.
- typedef typename vt::difference_type difference_type;
- //! @brief The pointer type.
- typedef typename vt::pointer pointer;
- //! @brief The const pointer type.
- typedef typename vt::const_pointer const_pointer;
- //! @brief The value reference type.
- typedef typename vt::reference reference;
- //! @brief The value const reference type.
- typedef typename vt::const_reference const_reference;
-
- //! @brief The iterator type.
- typedef pointer iterator;
- //! @brief The const iterator type.
- typedef const_pointer const_iterator;
- //! @brief The reverse iterator type.
- typedef boost::reverse_iterator<iterator> reverse_iterator;
- //! @brief The const reverse iterator.
- typedef boost::reverse_iterator<const_iterator> const_reverse_iterator;
-
- //! @brief Constructs an empty varray.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- varray()
- : m_size(0)
- {}
-
- //! @pre <tt>count <= capacity()</tt>
- //!
- //! @brief Constructs a varray containing count default constructed Values.
- //!
- //! @param count The number of values which will be contained in the container.
- //!
- //! @par Throws
- //! If Value's default constructor throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- explicit varray(size_type count)
- : m_size(0)
- {
- this->resize(count); // may throw
- }
-
- //! @pre <tt>count <= capacity()</tt>
- //!
- //! @brief Constructs a varray containing count copies of value.
- //!
- //! @param count The number of copies of a values that will be contained in the container.
- //! @param value The value which will be used to copy construct values.
- //!
- //! @par Throws
- //! If Value's copy constructor throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- varray(size_type count, value_type const& value)
- : m_size(0)
- {
- this->resize(count, value); // may throw
- }
-
- //! @pre
- //! @li <tt>distance(first, last) <= capacity()</tt>
- //! @li Iterator must meet the \c ForwardTraversalIterator concept.
- //!
- //! @brief Constructs a varray containing copy of a range <tt>[first, last)</tt>.
- //!
- //! @param first The iterator to the first element in range.
- //! @param last The iterator to the one after the last element in range.
- //!
- //! @par Throws
- //! If Value's constructor taking a dereferenced Iterator throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- template <typename Iterator>
- varray(Iterator first, Iterator last)
- : m_size(0)
- {
- BOOST_CONCEPT_ASSERT((boost_concepts::ForwardTraversal<Iterator>)); // Make sure you passed a ForwardIterator
-
- this->assign(first, last); // may throw
- }
-
- //! @brief Constructs a copy of other varray.
- //!
- //! @param other The varray which content will be copied to this one.
- //!
- //! @par Throws
- //! If Value's copy constructor throws.
- //!
- //! @par Complexity
- //! Linear O(N).
- varray(varray const& other)
- : m_size(other.size())
- {
- namespace sv = varray_detail;
- sv::uninitialized_copy(other.begin(), other.end(), this->begin()); // may throw
- }
-
- //! @pre <tt>other.size() <= capacity()</tt>.
- //!
- //! @brief Constructs a copy of other varray.
- //!
- //! @param other The varray which content will be copied to this one.
- //!
- //! @par Throws
- //! If Value's copy constructor throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- template <std::size_t C>
- varray(varray<value_type, C> const& other)
- : m_size(other.size())
- {
- errh::check_capacity(*this, other.size()); // may throw
-
- namespace sv = varray_detail;
- sv::uninitialized_copy(other.begin(), other.end(), this->begin()); // may throw
- }
-
- //! @brief Copy assigns Values stored in the other varray to this one.
- //!
- //! @param other The varray which content will be copied to this one.
- //!
- //! @par Throws
- //! If Value's copy constructor or copy assignment throws.
- //!
- //! @par Complexity
- //! Linear O(N).
- varray & operator=(BOOST_COPY_ASSIGN_REF(varray) other)
- {
- this->assign(other.begin(), other.end()); // may throw
-
- return *this;
- }
-
- //! @pre <tt>other.size() <= capacity()</tt>
- //!
- //! @brief Copy assigns Values stored in the other varray to this one.
- //!
- //! @param other The varray which content will be copied to this one.
- //!
- //! @par Throws
- //! If Value's copy constructor or copy assignment throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- template <std::size_t C>
- varray & operator=(BOOST_COPY_ASSIGN_REF_2_TEMPL_ARGS(varray, value_type, C) other)
- {
- this->assign(other.begin(), other.end()); // may throw
-
- return *this;
- }
-
- //! @brief Move constructor. Moves Values stored in the other varray to this one.
- //!
- //! @param other The varray which content will be moved to this one.
- //!
- //! @par Throws
- //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor throws.
- //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor throws.
- //! @internal
- //! @li It throws only if \c use_memop_in_swap_and_move is \c false_type - default.
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- varray(BOOST_RV_REF(varray) other)
- {
- typedef typename
- vt::use_memop_in_swap_and_move use_memop_in_swap_and_move;
-
- this->move_ctor_dispatch(other, use_memop_in_swap_and_move());
- }
-
- //! @pre <tt>other.size() <= capacity()</tt>
- //!
- //! @brief Move constructor. Moves Values stored in the other varray to this one.
- //!
- //! @param other The varray which content will be moved to this one.
- //!
- //! @par Throws
- //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor throws.
- //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor throws.
- //! @internal
- //! @li It throws only if \c use_memop_in_swap_and_move is false_type - default.
- //! @endinternal
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- template <std::size_t C>
- varray(BOOST_RV_REF_2_TEMPL_ARGS(varray, value_type, C) other)
- : m_size(other.m_size)
- {
- errh::check_capacity(*this, other.size()); // may throw
-
- typedef typename
- vt::use_memop_in_swap_and_move use_memop_in_swap_and_move;
-
- this->move_ctor_dispatch(other, use_memop_in_swap_and_move());
- }
-
- //! @brief Move assignment. Moves Values stored in the other varray to this one.
- //!
- //! @param other The varray which content will be moved to this one.
- //!
- //! @par Throws
- //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor or move assignment throws.
- //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor or copy assignment throws.
- //! @internal
- //! @li It throws only if \c use_memop_in_swap_and_move is \c false_type - default.
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- varray & operator=(BOOST_RV_REF(varray) other)
- {
- if ( &other == this )
- return *this;
-
- typedef typename
- vt::use_memop_in_swap_and_move use_memop_in_swap_and_move;
-
- this->move_assign_dispatch(other, use_memop_in_swap_and_move());
-
- return *this;
- }
-
- //! @pre <tt>other.size() <= capacity()</tt>
- //!
- //! @brief Move assignment. Moves Values stored in the other varray to this one.
- //!
- //! @param other The varray which content will be moved to this one.
- //!
- //! @par Throws
- //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor or move assignment throws.
- //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor or copy assignment throws.
- //! @internal
- //! @li It throws only if \c use_memop_in_swap_and_move is \c false_type - default.
- //! @endinternal
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- template <std::size_t C>
- varray & operator=(BOOST_RV_REF_2_TEMPL_ARGS(varray, value_type, C) other)
- {
- errh::check_capacity(*this, other.size()); // may throw
-
- typedef typename
- vt::use_memop_in_swap_and_move use_memop_in_swap_and_move;
-
- this->move_assign_dispatch(other, use_memop_in_swap_and_move());
-
- return *this;
- }
-
- //! @brief Destructor. Destroys Values stored in this container.
- //!
- //! @par Throws
- //! Nothing
- //!
- //! @par Complexity
- //! Linear O(N).
- ~varray()
- {
- namespace sv = varray_detail;
- sv::destroy(this->begin(), this->end());
- }
-
- //! @brief Swaps contents of the other varray and this one.
- //!
- //! @param other The varray which content will be swapped with this one's content.
- //!
- //! @par Throws
- //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor or move assignment throws,
- //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor or copy assignment throws,
- //! @internal
- //! @li It throws only if \c use_memop_in_swap_and_move and \c use_optimized_swap are \c false_type - default.
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- void swap(varray & other)
- {
- typedef typename
- vt::use_optimized_swap use_optimized_swap;
-
- this->swap_dispatch(other, use_optimized_swap());
- }
-
- //! @pre <tt>other.size() <= capacity() && size() <= other.capacity()</tt>
- //!
- //! @brief Swaps contents of the other varray and this one.
- //!
- //! @param other The varray which content will be swapped with this one's content.
- //!
- //! @par Throws
- //! @li If \c boost::has_nothrow_move<Value>::value is \c true and Value's move constructor or move assignment throws,
- //! @li If \c boost::has_nothrow_move<Value>::value is \c false and Value's copy constructor or copy assignment throws,
- //! @internal
- //! @li It throws only if \c use_memop_in_swap_and_move and \c use_optimized_swap are \c false_type - default.
- //! @endinternal
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- template <std::size_t C>
- void swap(varray<value_type, C> & other)
- {
- errh::check_capacity(*this, other.size());
- errh::check_capacity(other, this->size());
-
- typedef typename
- vt::use_optimized_swap use_optimized_swap;
-
- this->swap_dispatch(other, use_optimized_swap());
- }
-
- //! @pre <tt>count <= capacity()</tt>
- //!
- //! @brief Inserts or erases elements at the end such that
- //! the size becomes count. New elements are default constructed.
- //!
- //! @param count The number of elements which will be stored in the container.
- //!
- //! @par Throws
- //! If Value's default constructor throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- void resize(size_type count)
- {
- namespace sv = varray_detail;
- typedef typename vt::disable_trivial_init dti;
-
- if ( count < m_size )
- {
- sv::destroy(this->begin() + count, this->end());
- }
- else
- {
- errh::check_capacity(*this, count); // may throw
-
- sv::uninitialized_fill(this->end(), this->begin() + count, dti()); // may throw
- }
- m_size = count; // update end
- }
-
- //! @pre <tt>count <= capacity()</tt>
- //!
- //! @brief Inserts or erases elements at the end such that
- //! the size becomes count. New elements are copy constructed from value.
- //!
- //! @param count The number of elements which will be stored in the container.
- //! @param value The value used to copy construct the new element.
- //!
- //! @par Throws
- //! If Value's copy constructor throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- void resize(size_type count, value_type const& value)
- {
- if ( count < m_size )
- {
- namespace sv = varray_detail;
- sv::destroy(this->begin() + count, this->end());
- }
- else
- {
- errh::check_capacity(*this, count); // may throw
-
- std::uninitialized_fill(this->end(), this->begin() + count, value); // may throw
- }
- m_size = count; // update end
- }
-
- //! @pre <tt>count <= capacity()</tt>
- //!
- //! @brief This call has no effect because the Capacity of this container is constant.
- //!
- //! @param count The number of elements which the container should be able to contain.
- //!
- //! @par Throws
- //! Nothing.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- void reserve(size_type count)
- {
- errh::check_capacity(*this, count); // may throw
- }
-
- //! @pre <tt>size() < capacity()</tt>
- //!
- //! @brief Adds a copy of value at the end.
- //!
- //! @param value The value used to copy construct the new element.
- //!
- //! @par Throws
- //! If Value's copy constructor throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Constant O(1).
- void push_back(value_type const& value)
- {
- typedef typename vt::disable_trivial_init dti;
-
- errh::check_capacity(*this, m_size + 1); // may throw
-
- namespace sv = varray_detail;
- sv::construct(dti(), this->end(), value); // may throw
- ++m_size; // update end
- }
-
- //! @pre <tt>size() < capacity()</tt>
- //!
- //! @brief Moves value to the end.
- //!
- //! @param value The value to move construct the new element.
- //!
- //! @par Throws
- //! If Value's move constructor throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Constant O(1).
- void push_back(BOOST_RV_REF(value_type) value)
- {
- typedef typename vt::disable_trivial_init dti;
-
- errh::check_capacity(*this, m_size + 1); // may throw
-
- namespace sv = varray_detail;
- sv::construct(dti(), this->end(), ::boost::move(value)); // may throw
- ++m_size; // update end
- }
-
- //! @pre <tt>!empty()</tt>
- //!
- //! @brief Destroys last value and decreases the size.
- //!
- //! @par Throws
- //! Nothing by default.
- //!
- //! @par Complexity
- //! Constant O(1).
- void pop_back()
- {
- errh::check_not_empty(*this);
-
- namespace sv = varray_detail;
- sv::destroy(this->end() - 1);
- --m_size; // update end
- }
-
- //! @pre
- //! @li \c position must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>.
- //! @li <tt>size() < capacity()</tt>
- //!
- //! @brief Inserts a copy of element at position.
- //!
- //! @param position The position at which the new value will be inserted.
- //! @param value The value used to copy construct the new element.
- //!
- //! @par Throws
- //! @li If Value's copy constructor or copy assignment throws
- //! @li If Value's move constructor or move assignment throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Constant or linear.
- iterator insert(iterator position, value_type const& value)
- {
- typedef typename vt::disable_trivial_init dti;
- namespace sv = varray_detail;
-
- errh::check_iterator_end_eq(*this, position);
- errh::check_capacity(*this, m_size + 1); // may throw
-
- if ( position == this->end() )
- {
- sv::construct(dti(), position, value); // may throw
- ++m_size; // update end
- }
- else
- {
- // TODO - should move be used only if it's nonthrowing?
- value_type & r = *(this->end() - 1);
- sv::construct(dti(), this->end(), boost::move(r)); // may throw
- ++m_size; // update end
- sv::move_backward(position, this->end() - 2, this->end() - 1); // may throw
- sv::assign(position, value); // may throw
- }
-
- return position;
- }
-
- //! @pre
- //! @li \c position must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>.
- //! @li <tt>size() < capacity()</tt>
- //!
- //! @brief Inserts a move-constructed element at position.
- //!
- //! @param position The position at which the new value will be inserted.
- //! @param value The value used to move construct the new element.
- //!
- //! @par Throws
- //! If Value's move constructor or move assignment throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Constant or linear.
- iterator insert(iterator position, BOOST_RV_REF(value_type) value)
- {
- typedef typename vt::disable_trivial_init dti;
- namespace sv = varray_detail;
-
- errh::check_iterator_end_eq(*this, position);
- errh::check_capacity(*this, m_size + 1); // may throw
-
- if ( position == this->end() )
- {
- sv::construct(dti(), position, boost::move(value)); // may throw
- ++m_size; // update end
- }
- else
- {
- // TODO - should move be used only if it's nonthrowing?
- value_type & r = *(this->end() - 1);
- sv::construct(dti(), this->end(), boost::move(r)); // may throw
- ++m_size; // update end
- sv::move_backward(position, this->end() - 2, this->end() - 1); // may throw
- sv::assign(position, boost::move(value)); // may throw
- }
-
- return position;
- }
-
- //! @pre
- //! @li \c position must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>.
- //! @li <tt>size() + count <= capacity()</tt>
- //!
- //! @brief Inserts a count copies of value at position.
- //!
- //! @param position The position at which new elements will be inserted.
- //! @param count The number of new elements which will be inserted.
- //! @param value The value used to copy construct new elements.
- //!
- //! @par Throws
- //! @li If Value's copy constructor or copy assignment throws.
- //! @li If Value's move constructor or move assignment throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- iterator insert(iterator position, size_type count, value_type const& value)
- {
- errh::check_iterator_end_eq(*this, position);
- errh::check_capacity(*this, m_size + count); // may throw
-
- if ( position == this->end() )
- {
- std::uninitialized_fill(position, position + count, value); // may throw
- m_size += count; // update end
- }
- else
- {
- namespace sv = varray_detail;
-
- difference_type to_move = std::distance(position, this->end());
-
- // TODO - should following lines check for exception and revert to the old size?
-
- if ( count < static_cast<size_type>(to_move) )
- {
- sv::uninitialized_move(this->end() - count, this->end(), this->end()); // may throw
- m_size += count; // update end
- sv::move_backward(position, position + to_move - count, this->end() - count); // may throw
- std::fill_n(position, count, value); // may throw
- }
- else
- {
- std::uninitialized_fill(this->end(), position + count, value); // may throw
- m_size += count - to_move; // update end
- sv::uninitialized_move(position, position + to_move, position + count); // may throw
- m_size += to_move; // update end
- std::fill_n(position, to_move, value); // may throw
- }
- }
-
- return position;
- }
-
- //! @pre
- //! @li \c position must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>.
- //! @li <tt>distance(first, last) <= capacity()</tt>
- //! @li \c Iterator must meet the \c ForwardTraversalIterator concept.
- //!
- //! @brief Inserts a copy of a range <tt>[first, last)</tt> at position.
- //!
- //! @param position The position at which new elements will be inserted.
- //! @param first The iterator to the first element of a range used to construct new elements.
- //! @param last The iterator to the one after the last element of a range used to construct new elements.
- //!
- //! @par Throws
- //! @li If Value's constructor and assignment taking a dereferenced \c Iterator.
- //! @li If Value's move constructor or move assignment throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Linear O(N).
- template <typename Iterator>
- iterator insert(iterator position, Iterator first, Iterator last)
- {
- BOOST_CONCEPT_ASSERT((boost_concepts::ForwardTraversal<Iterator>)); // Make sure you passed a ForwardIterator
-
- typedef typename boost::iterator_traversal<Iterator>::type traversal;
- this->insert_dispatch(position, first, last, traversal());
-
- return position;
- }
-
- //! @pre \c position must be a valid iterator of \c *this in range <tt>[begin(), end())</tt>
- //!
- //! @brief Erases Value from position.
- //!
- //! @param position The position of the element which will be erased from the container.
- //!
- //! @par Throws
- //! If Value's move assignment throws.
- //!
- //! @par Complexity
- //! Linear O(N).
- iterator erase(iterator position)
- {
- namespace sv = varray_detail;
-
- errh::check_iterator_end_neq(*this, position);
-
- //TODO - add empty check?
- //errh::check_empty(*this);
-
- sv::move(position + 1, this->end(), position); // may throw
- sv::destroy(this->end() - 1);
- --m_size;
-
- return position;
- }
-
- //! @pre
- //! @li \c first and \c last must define a valid range
- //! @li iterators must be in range <tt>[begin(), end()]</tt>
- //!
- //! @brief Erases Values from a range <tt>[first, last)</tt>.
- //!
- //! @param first The position of the first element of a range which will be erased from the container.
- //! @param last The position of the one after the last element of a range which will be erased from the container.
- //!
- //! @par Throws
- //! If Value's move assignment throws.
- //!
- //! @par Complexity
- //! Linear O(N).
- iterator erase(iterator first, iterator last)
- {
- namespace sv = varray_detail;
-
- errh::check_iterator_end_eq(*this, first);
- errh::check_iterator_end_eq(*this, last);
-
- difference_type n = std::distance(first, last);
-
- //TODO - add invalid range check?
- //BOOST_GEOMETRY_INDEX_ASSERT(0 <= n, "invalid range");
- //TODO - add this->size() check?
- //BOOST_GEOMETRY_INDEX_ASSERT(n <= this->size(), "invalid range");
-
- sv::move(last, this->end(), first); // may throw
- sv::destroy(this->end() - n, this->end());
- m_size -= n;
-
- return first;
- }
-
- //! @pre <tt>distance(first, last) <= capacity()</tt>
- //!
- //! @brief Assigns a range <tt>[first, last)</tt> of Values to this container.
- //!
- //! @param first The iterator to the first element of a range used to construct new content of this container.
- //! @param last The iterator to the one after the last element of a range used to construct new content of this container.
- //!
- //! @par Throws
- //! If Value's copy constructor or copy assignment throws,
- //!
- //! @par Complexity
- //! Linear O(N).
- template <typename Iterator>
- void assign(Iterator first, Iterator last)
- {
- BOOST_CONCEPT_ASSERT((boost_concepts::ForwardTraversal<Iterator>)); // Make sure you passed a ForwardIterator
-
- typedef typename boost::iterator_traversal<Iterator>::type traversal;
- this->assign_dispatch(first, last, traversal()); // may throw
- }
-
- //! @pre <tt>count <= capacity()</tt>
- //!
- //! @brief Assigns a count copies of value to this container.
- //!
- //! @param count The new number of elements which will be container in the container.
- //! @param value The value which will be used to copy construct the new content.
- //!
- //! @par Throws
- //! If Value's copy constructor or copy assignment throws.
- //!
- //! @par Complexity
- //! Linear O(N).
- void assign(size_type count, value_type const& value)
- {
- if ( count < m_size )
- {
- namespace sv = varray_detail;
-
- std::fill_n(this->begin(), count, value); // may throw
- sv::destroy(this->begin() + count, this->end());
- }
- else
- {
- errh::check_capacity(*this, count); // may throw
-
- std::fill_n(this->begin(), m_size, value); // may throw
- std::uninitialized_fill(this->end(), this->begin() + count, value); // may throw
- }
- m_size = count; // update end
- }
-
-#if !defined(BOOST_CONTAINER_VARRAY_DISABLE_EMPLACE)
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
- //! @pre <tt>size() < capacity()</tt>
- //!
- //! @brief Inserts a Value constructed with
- //! \c std::forward<Args>(args)... in the end of the container.
- //!
- //! @param args The arguments of the constructor of the new element which will be created at the end of the container.
- //!
- //! @par Throws
- //! If in-place constructor throws or Value's move constructor throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Constant O(1).
- template<class ...Args>
- void emplace_back(BOOST_FWD_REF(Args) ...args)
- {
- typedef typename vt::disable_trivial_init dti;
-
- errh::check_capacity(*this, m_size + 1); // may throw
-
- namespace sv = varray_detail;
- sv::construct(dti(), this->end(), ::boost::forward<Args>(args)...); // may throw
- ++m_size; // update end
- }
-
- //! @pre
- //! @li \c position must be a valid iterator of \c *this in range <tt>[begin(), end()]</tt>
- //! @li <tt>size() < capacity()</tt>
- //!
- //! @brief Inserts a Value constructed with
- //! \c std::forward<Args>(args)... before position
- //!
- //! @param position The position at which new elements will be inserted.
- //! @param args The arguments of the constructor of the new element.
- //!
- //! @par Throws
- //! If in-place constructor throws or if Value's move constructor or move assignment throws.
- //! @internal
- //! @li If a throwing error handler is specified, throws when the capacity is exceeded. (not by default).
- //! @endinternal
- //!
- //! @par Complexity
- //! Constant or linear.
- template<class ...Args>
- iterator emplace(iterator position, BOOST_FWD_REF(Args) ...args)
- {
- typedef typename vt::disable_trivial_init dti;
-
- namespace sv = varray_detail;
-
- errh::check_iterator_end_eq(*this, position);
- errh::check_capacity(*this, m_size + 1); // may throw
-
- if ( position == this->end() )
- {
- sv::construct(dti(), position, ::boost::forward<Args>(args)...); // may throw
- ++m_size; // update end
- }
- else
- {
- // TODO - should following lines check for exception and revert to the old size?
-
- // TODO - should move be used only if it's nonthrowing?
- value_type & r = *(this->end() - 1);
- sv::construct(dti(), this->end(), boost::move(r)); // may throw
- ++m_size; // update end
- sv::move_backward(position, this->end() - 2, this->end() - 1); // may throw
-
- aligned_storage<sizeof(value_type), alignment_of<value_type>::value> temp_storage;
- value_type * val_p = static_cast<value_type *>(temp_storage.address());
- sv::construct(dti(), val_p, ::boost::forward<Args>(args)...); // may throw
- sv::scoped_destructor<value_type> d(val_p);
- sv::assign(position, ::boost::move(*val_p)); // may throw
- }
-
- return position;
- }
-
-#else // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
-
- #define BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_EMPLACE(N) \
- BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
- void emplace_back(BOOST_MOVE_UREF##N) \
- { \
- typedef typename vt::disable_trivial_init dti; \
- \
- errh::check_capacity(*this, m_size + 1); /*may throw*/\
- \
- namespace sv = varray_detail; \
- sv::construct(dti(), this->end() BOOST_MOVE_I##N BOOST_MOVE_FWD##N ); /*may throw*/\
- ++m_size; /*update end*/ \
- } \
- \
- BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
- iterator emplace(iterator position BOOST_MOVE_I##N BOOST_MOVE_UREF##N) \
- { \
- typedef typename vt::disable_trivial_init dti; \
- namespace sv = varray_detail; \
- \
- errh::check_iterator_end_eq(*this, position); \
- errh::check_capacity(*this, m_size + 1); /*may throw*/\
- \
- if ( position == this->end() ) \
- { \
- sv::construct(dti(), position BOOST_MOVE_I##N BOOST_MOVE_FWD##N ); /*may throw*/\
- ++m_size; /*update end*/ \
- } \
- else \
- { \
- /* TODO - should following lines check for exception and revert to the old size? */ \
- /* TODO - should move be used only if it's nonthrowing? */ \
- \
- value_type & r = *(this->end() - 1); \
- sv::construct(dti(), this->end(), boost::move(r)); /*may throw*/\
- ++m_size; /*update end*/ \
- sv::move_backward(position, this->end() - 2, this->end() - 1); /*may throw*/\
- \
- aligned_storage<sizeof(value_type), alignment_of<value_type>::value> temp_storage; \
- value_type * val_p = static_cast<value_type *>(temp_storage.address()); \
- sv::construct(dti(), val_p BOOST_MOVE_I##N BOOST_MOVE_FWD##N ); /*may throw*/\
- sv::scoped_destructor<value_type> d(val_p); \
- sv::assign(position, ::boost::move(*val_p)); /*may throw*/\
- } \
- \
- return position; \
- } \
-
- BOOST_MOVE_ITERATE_0TO9(BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_EMPLACE)
- #undef BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_EMPLACE
-
-#endif // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
-#endif // !BOOST_CONTAINER_VARRAY_DISABLE_EMPLACE
-
- //! @brief Removes all elements from the container.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- void clear()
- {
- namespace sv = varray_detail;
- sv::destroy(this->begin(), this->end());
- m_size = 0; // update end
- }
-
- //! @pre <tt>i < size()</tt>
- //!
- //! @brief Returns reference to the i-th element.
- //!
- //! @param i The element's index.
- //!
- //! @return reference to the i-th element
- //! from the beginning of the container.
- //!
- //! @par Throws
- //! \c std::out_of_range exception by default.
- //!
- //! @par Complexity
- //! Constant O(1).
- reference at(size_type i)
- {
- errh::throw_out_of_bounds(*this, i); // may throw
- return *(this->begin() + i);
- }
-
- //! @pre <tt>i < size()</tt>
- //!
- //! @brief Returns const reference to the i-th element.
- //!
- //! @param i The element's index.
- //!
- //! @return const reference to the i-th element
- //! from the beginning of the container.
- //!
- //! @par Throws
- //! \c std::out_of_range exception by default.
- //!
- //! @par Complexity
- //! Constant O(1).
- const_reference at(size_type i) const
- {
- errh::throw_out_of_bounds(*this, i); // may throw
- return *(this->begin() + i);
- }
-
- //! @pre <tt>i < size()</tt>
- //!
- //! @brief Returns reference to the i-th element.
- //!
- //! @param i The element's index.
- //!
- //! @return reference to the i-th element
- //! from the beginning of the container.
- //!
- //! @par Throws
- //! Nothing by default.
- //!
- //! @par Complexity
- //! Constant O(1).
- reference operator[](size_type i)
- {
- // TODO: Remove bounds check? std::vector and std::array operator[] don't check.
- errh::check_index(*this, i);
- return *(this->begin() + i);
- }
-
- //! @pre <tt>i < size()</tt>
- //!
- //! @brief Returns const reference to the i-th element.
- //!
- //! @param i The element's index.
- //!
- //! @return const reference to the i-th element
- //! from the beginning of the container.
- //!
- //! @par Throws
- //! Nothing by default.
- //!
- //! @par Complexity
- //! Constant O(1).
- const_reference operator[](size_type i) const
- {
- errh::check_index(*this, i);
- return *(this->begin() + i);
- }
-
- //! @pre \c !empty()
- //!
- //! @brief Returns reference to the first element.
- //!
- //! @return reference to the first element
- //! from the beginning of the container.
- //!
- //! @par Throws
- //! Nothing by default.
- //!
- //! @par Complexity
- //! Constant O(1).
- reference front()
- {
- errh::check_not_empty(*this);
- return *(this->begin());
- }
-
- //! @pre \c !empty()
- //!
- //! @brief Returns const reference to the first element.
- //!
- //! @return const reference to the first element
- //! from the beginning of the container.
- //!
- //! @par Throws
- //! Nothing by default.
- //!
- //! @par Complexity
- //! Constant O(1).
- const_reference front() const
- {
- errh::check_not_empty(*this);
- return *(this->begin());
- }
-
- //! @pre \c !empty()
- //!
- //! @brief Returns reference to the last element.
- //!
- //! @return reference to the last element
- //! from the beginning of the container.
- //!
- //! @par Throws
- //! Nothing by default.
- //!
- //! @par Complexity
- //! Constant O(1).
- reference back()
- {
- errh::check_not_empty(*this);
- return *(this->end() - 1);
- }
-
- //! @pre \c !empty()
- //!
- //! @brief Returns const reference to the first element.
- //!
- //! @return const reference to the last element
- //! from the beginning of the container.
- //!
- //! @par Throws
- //! Nothing by default.
- //!
- //! @par Complexity
- //! Constant O(1).
- const_reference back() const
- {
- errh::check_not_empty(*this);
- return *(this->end() - 1);
- }
-
- //! @brief Pointer such that <tt>[data(), data() + size())</tt> is a valid range.
- //! For a non-empty vector <tt>data() == &front()</tt>.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- Value * data()
- {
- return boost::addressof(*(this->ptr()));
- }
-
- //! @brief Const pointer such that <tt>[data(), data() + size())</tt> is a valid range.
- //! For a non-empty vector <tt>data() == &front()</tt>.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- const Value * data() const
- {
- return boost::addressof(*(this->ptr()));
- }
-
-
- //! @brief Returns iterator to the first element.
- //!
- //! @return iterator to the first element contained in the vector.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- iterator begin() { return this->ptr(); }
-
- //! @brief Returns const iterator to the first element.
- //!
- //! @return const_iterator to the first element contained in the vector.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- const_iterator begin() const { return this->ptr(); }
-
- //! @brief Returns const iterator to the first element.
- //!
- //! @return const_iterator to the first element contained in the vector.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- const_iterator cbegin() const { return this->ptr(); }
-
- //! @brief Returns iterator to the one after the last element.
- //!
- //! @return iterator pointing to the one after the last element contained in the vector.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- iterator end() { return this->begin() + m_size; }
-
- //! @brief Returns const iterator to the one after the last element.
- //!
- //! @return const_iterator pointing to the one after the last element contained in the vector.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- const_iterator end() const { return this->begin() + m_size; }
-
- //! @brief Returns const iterator to the one after the last element.
- //!
- //! @return const_iterator pointing to the one after the last element contained in the vector.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- const_iterator cend() const { return this->cbegin() + m_size; }
-
- //! @brief Returns reverse iterator to the first element of the reversed container.
- //!
- //! @return reverse_iterator pointing to the beginning
- //! of the reversed varray.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- reverse_iterator rbegin() { return reverse_iterator(this->end()); }
-
- //! @brief Returns const reverse iterator to the first element of the reversed container.
- //!
- //! @return const_reverse_iterator pointing to the beginning
- //! of the reversed varray.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- const_reverse_iterator rbegin() const { return const_reverse_iterator(this->end()); }
-
- //! @brief Returns const reverse iterator to the first element of the reversed container.
- //!
- //! @return const_reverse_iterator pointing to the beginning
- //! of the reversed varray.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- const_reverse_iterator crbegin() const { return const_reverse_iterator(this->end()); }
-
- //! @brief Returns reverse iterator to the one after the last element of the reversed container.
- //!
- //! @return reverse_iterator pointing to the one after the last element
- //! of the reversed varray.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- reverse_iterator rend() { return reverse_iterator(this->begin()); }
-
- //! @brief Returns const reverse iterator to the one after the last element of the reversed container.
- //!
- //! @return const_reverse_iterator pointing to the one after the last element
- //! of the reversed varray.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- const_reverse_iterator rend() const { return const_reverse_iterator(this->begin()); }
-
- //! @brief Returns const reverse iterator to the one after the last element of the reversed container.
- //!
- //! @return const_reverse_iterator pointing to the one after the last element
- //! of the reversed varray.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- const_reverse_iterator crend() const { return const_reverse_iterator(this->begin()); }
-
- //! @brief Returns container's capacity.
- //!
- //! @return container's capacity.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- static size_type capacity() { return Capacity; }
-
- //! @brief Returns container's capacity.
- //!
- //! @return container's capacity.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- static size_type max_size() { return Capacity; }
-
- //! @brief Returns the number of stored elements.
- //!
- //! @return Number of elements contained in the container.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- size_type size() const { return m_size; }
-
- //! @brief Queries if the container contains elements.
- //!
- //! @return true if the number of elements contained in the
- //! container is equal to 0.
- //!
- //! @par Throws
- //! Nothing.
- //!
- //! @par Complexity
- //! Constant O(1).
- bool empty() const { return 0 == m_size; }
-
-private:
-
- // @par Throws
- // Nothing.
- // @par Complexity
- // Linear O(N).
- template <std::size_t C>
- void move_ctor_dispatch(varray<value_type, C> & other, boost::true_type /*use_memop*/)
- {
- ::memcpy(this->data(), other.data(), sizeof(Value) * other.m_size);
- m_size = other.m_size;
- }
-
- // @par Throws
- // @li If boost::has_nothrow_move<Value>::value is true and Value's move constructor throws
- // @li If boost::has_nothrow_move<Value>::value is false and Value's copy constructor throws.
- // @par Complexity
- // Linear O(N).
- template <std::size_t C>
- void move_ctor_dispatch(varray<value_type, C> & other, boost::false_type /*use_memop*/)
- {
- namespace sv = varray_detail;
- sv::uninitialized_move_if_noexcept(other.begin(), other.end(), this->begin()); // may throw
- m_size = other.m_size;
- }
-
- // @par Throws
- // Nothing.
- // @par Complexity
- // Linear O(N).
- template <std::size_t C>
- void move_assign_dispatch(varray<value_type, C> & other, boost::true_type /*use_memop*/)
- {
- this->clear();
-
- ::memcpy(this->data(), other.data(), sizeof(Value) * other.m_size);
- std::swap(m_size, other.m_size);
- }
-
- // @par Throws
- // @li If boost::has_nothrow_move<Value>::value is true and Value's move constructor or move assignment throws
- // @li If boost::has_nothrow_move<Value>::value is false and Value's copy constructor or move assignment throws.
- // @par Complexity
- // Linear O(N).
- template <std::size_t C>
- void move_assign_dispatch(varray<value_type, C> & other, boost::false_type /*use_memop*/)
- {
- namespace sv = varray_detail;
- if ( m_size <= static_cast<size_type>(other.size()) )
- {
- sv::move_if_noexcept(other.begin(), other.begin() + m_size, this->begin()); // may throw
- // TODO - perform uninitialized_copy first?
- sv::uninitialized_move_if_noexcept(other.begin() + m_size, other.end(), this->end()); // may throw
- }
- else
- {
- sv::move_if_noexcept(other.begin(), other.end(), this->begin()); // may throw
- sv::destroy(this->begin() + other.size(), this->end());
- }
- m_size = other.size(); // update end
- }
-
- // @par Throws
- // Nothing.
- // @par Complexity
- // Linear O(N).
- template <std::size_t C>
- void swap_dispatch(varray<value_type, C> & other, boost::true_type const& /*use_optimized_swap*/)
- {
- typedef typename
- boost::mpl::if_c<
- Capacity < C,
- aligned_storage_type,
- typename varray<value_type, C>::aligned_storage_type
- >::type
- storage_type;
-
- storage_type temp;
- Value * temp_ptr = reinterpret_cast<Value*>(temp.address());
-
- ::memcpy(temp_ptr, this->data(), sizeof(Value) * this->size());
- ::memcpy(this->data(), other.data(), sizeof(Value) * other.size());
- ::memcpy(other.data(), temp_ptr, sizeof(Value) * this->size());
-
- std::swap(m_size, other.m_size);
- }
-
- // @par Throws
- // If Value's move constructor or move assignment throws
- // but only if use_memop_in_swap_and_move is false_type - default.
- // @par Complexity
- // Linear O(N).
- template <std::size_t C>
- void swap_dispatch(varray<value_type, C> & other, boost::false_type const& /*use_optimized_swap*/)
- {
- namespace sv = varray_detail;
-
- typedef typename
- vt::use_memop_in_swap_and_move use_memop_in_swap_and_move;
-
- if ( this->size() < other.size() )
- swap_dispatch_impl(this->begin(), this->end(), other.begin(), other.end(), use_memop_in_swap_and_move()); // may throw
- else
- swap_dispatch_impl(other.begin(), other.end(), this->begin(), this->end(), use_memop_in_swap_and_move()); // may throw
- std::swap(m_size, other.m_size);
- }
-
- // @par Throws
- // Nothing.
- // @par Complexity
- // Linear O(N).
- void swap_dispatch_impl(iterator first_sm, iterator last_sm, iterator first_la, iterator last_la, boost::true_type const& /*use_memop*/)
- {
- //BOOST_GEOMETRY_INDEX_ASSERT(std::distance(first_sm, last_sm) <= std::distance(first_la, last_la),
- // "incompatible ranges");
-
- namespace sv = varray_detail;
- for (; first_sm != last_sm ; ++first_sm, ++first_la)
- {
- boost::aligned_storage<
- sizeof(value_type),
- boost::alignment_of<value_type>::value
- > temp_storage;
- value_type * temp_ptr = reinterpret_cast<value_type*>(temp_storage.address());
-
- ::memcpy(temp_ptr, boost::addressof(*first_sm), sizeof(value_type));
- ::memcpy(boost::addressof(*first_sm), boost::addressof(*first_la), sizeof(value_type));
- ::memcpy(boost::addressof(*first_la), temp_ptr, sizeof(value_type));
- }
-
- ::memcpy(first_sm, first_la, sizeof(value_type) * std::distance(first_la, last_la));
- }
-
- // @par Throws
- // If Value's move constructor or move assignment throws.
- // @par Complexity
- // Linear O(N).
- void swap_dispatch_impl(iterator first_sm, iterator last_sm, iterator first_la, iterator last_la, boost::false_type const& /*use_memop*/)
- {
- //BOOST_GEOMETRY_INDEX_ASSERT(std::distance(first_sm, last_sm) <= std::distance(first_la, last_la),
- // "incompatible ranges");
-
- namespace sv = varray_detail;
- for (; first_sm != last_sm ; ++first_sm, ++first_la)
- {
- //boost::swap(*first_sm, *first_la); // may throw
- value_type temp(boost::move(*first_sm)); // may throw
- *first_sm = boost::move(*first_la); // may throw
- *first_la = boost::move(temp); // may throw
- }
- sv::uninitialized_move(first_la, last_la, first_sm); // may throw
- sv::destroy(first_la, last_la);
- }
-
- // insert
-
- // @par Throws
- // If Value's move constructor, move assignment throws
- // or if Value's copy constructor or copy assignment throws.
- // @par Complexity
- // Linear O(N).
- template <typename Iterator>
- void insert_dispatch(iterator position, Iterator first, Iterator last, boost::random_access_traversal_tag const&)
- {
- BOOST_CONCEPT_ASSERT((boost_concepts::RandomAccessTraversal<Iterator>)); // Make sure you passed a RandomAccessIterator
-
- errh::check_iterator_end_eq(*this, position);
-
- typename boost::iterator_difference<Iterator>::type
- count = std::distance(first, last);
-
- errh::check_capacity(*this, m_size + count); // may throw
-
- if ( position == this->end() )
- {
- namespace sv = varray_detail;
-
- sv::uninitialized_copy(first, last, position); // may throw
- m_size += count; // update end
- }
- else
- {
- this->insert_in_the_middle(position, first, last, count); // may throw
- }
- }
-
- // @par Throws
- // If Value's move constructor, move assignment throws
- // or if Value's copy constructor or copy assignment throws.
- // @par Complexity
- // Linear O(N).
- template <typename Iterator, typename Traversal>
- void insert_dispatch(iterator position, Iterator first, Iterator last, Traversal const& /*not_random_access*/)
- {
- errh::check_iterator_end_eq(*this, position);
-
- if ( position == this->end() )
- {
- namespace sv = varray_detail;
-
- std::ptrdiff_t d = std::distance(position, this->begin() + Capacity);
- std::size_t count = sv::uninitialized_copy_s(first, last, position, d); // may throw
-
- errh::check_capacity(*this, count <= static_cast<std::size_t>(d) ? m_size + count : Capacity + 1); // may throw
-
- m_size += count;
- }
- else
- {
- typename boost::iterator_difference<Iterator>::type
- count = std::distance(first, last);
-
- errh::check_capacity(*this, m_size + count); // may throw
-
- this->insert_in_the_middle(position, first, last, count); // may throw
- }
- }
-
- // @par Throws
- // If Value's move constructor, move assignment throws
- // or if Value's copy constructor or copy assignment throws.
- // @par Complexity
- // Linear O(N).
- template <typename Iterator>
- void insert_in_the_middle(iterator position, Iterator first, Iterator last, difference_type count)
- {
- namespace sv = varray_detail;
-
- difference_type to_move = std::distance(position, this->end());
-
- // TODO - should following lines check for exception and revert to the old size?
-
- if ( count < to_move )
- {
- sv::uninitialized_move(this->end() - count, this->end(), this->end()); // may throw
- m_size += count; // update end
- sv::move_backward(position, position + to_move - count, this->end() - count); // may throw
- sv::copy(first, last, position); // may throw
- }
- else
- {
- Iterator middle_iter = first;
- std::advance(middle_iter, to_move);
-
- sv::uninitialized_copy(middle_iter, last, this->end()); // may throw
- m_size += count - to_move; // update end
- sv::uninitialized_move(position, position + to_move, position + count); // may throw
- m_size += to_move; // update end
- sv::copy(first, middle_iter, position); // may throw
- }
- }
-
- // assign
-
- // @par Throws
- // If Value's constructor or assignment taking dereferenced Iterator throws.
- // @par Complexity
- // Linear O(N).
- template <typename Iterator>
- void assign_dispatch(Iterator first, Iterator last, boost::random_access_traversal_tag const& /*not_random_access*/)
- {
- namespace sv = varray_detail;
-
- typename boost::iterator_difference<Iterator>::type
- s = std::distance(first, last);
-
- errh::check_capacity(*this, s); // may throw
-
- if ( m_size <= static_cast<size_type>(s) )
- {
- sv::copy(first, first + m_size, this->begin()); // may throw
- // TODO - perform uninitialized_copy first?
- sv::uninitialized_copy(first + m_size, last, this->end()); // may throw
- }
- else
- {
- sv::copy(first, last, this->begin()); // may throw
- sv::destroy(this->begin() + s, this->end());
- }
- m_size = s; // update end
- }
-
- // @par Throws
- // If Value's constructor or assignment taking dereferenced Iterator throws.
- // @par Complexity
- // Linear O(N).
- template <typename Iterator, typename Traversal>
- void assign_dispatch(Iterator first, Iterator last, Traversal const& /*not_random_access*/)
- {
- namespace sv = varray_detail;
-
- size_type s = 0;
- iterator it = this->begin();
-
- for ( ; it != this->end() && first != last ; ++it, ++first, ++s )
- *it = *first; // may throw
-
- sv::destroy(it, this->end());
-
- std::ptrdiff_t d = std::distance(it, this->begin() + Capacity);
- std::size_t count = sv::uninitialized_copy_s(first, last, it, d); // may throw
- s += count;
-
- errh::check_capacity(*this, count <= static_cast<std::size_t>(d) ? s : Capacity + 1); // may throw
-
- m_size = s; // update end
- }
-
- pointer ptr()
- {
- return pointer(static_cast<Value*>(m_storage.address()));
- }
-
- const_pointer ptr() const
- {
- return const_pointer(static_cast<const Value*>(m_storage.address()));
- }
-
- size_type m_size;
- aligned_storage_type m_storage;
-};
-
-#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
-
-template<typename Value>
-class varray<Value, 0>
-{
- typedef varray_detail::varray_traits<Value, 0> vt;
- typedef varray_detail::checker<varray> errh;
-
-public:
- typedef typename vt::value_type value_type;
- typedef typename vt::size_type size_type;
- typedef typename vt::difference_type difference_type;
- typedef typename vt::pointer pointer;
- typedef typename vt::const_pointer const_pointer;
- typedef typename vt::reference reference;
- typedef typename vt::const_reference const_reference;
-
- typedef pointer iterator;
- typedef const_pointer const_iterator;
- typedef boost::reverse_iterator<iterator> reverse_iterator;
- typedef boost::reverse_iterator<const_iterator> const_reverse_iterator;
-
- // nothrow
- varray() {}
-
- // strong
- explicit varray(size_type count)
- {
- errh::check_capacity(*this, count); // may throw
- }
-
- // strong
- varray(size_type count, value_type const&)
- {
- errh::check_capacity(*this, count); // may throw
- }
-
- // strong
- varray(varray const& /*other*/)
- {
- //errh::check_capacity(*this, count);
- }
-
- // strong
- template <std::size_t C>
- varray(varray<value_type, C> const& other)
- {
- errh::check_capacity(*this, other.size()); // may throw
- }
-
- // strong
- template <typename Iterator>
- varray(Iterator first, Iterator last)
- {
- errh::check_capacity(*this, std::distance(first, last)); // may throw
- }
-
- // basic
- varray & operator=(varray const& /*other*/)
- {
- //errh::check_capacity(*this, other.size());
- return *this;
- }
-
- // basic
- template <size_t C>
- varray & operator=(varray<value_type, C> const& other)
- {
- errh::check_capacity(*this, other.size()); // may throw
- return *this;
- }
-
- // nothrow
- ~varray() {}
-
- // strong
- void resize(size_type count)
- {
- errh::check_capacity(*this, count); // may throw
- }
-
- // strong
- void resize(size_type count, value_type const&)
- {
- errh::check_capacity(*this, count); // may throw
- }
-
-
- // nothrow
- void reserve(size_type count)
- {
- errh::check_capacity(*this, count); // may throw
- }
-
- // strong
- void push_back(value_type const&)
- {
- errh::check_capacity(*this, 1); // may throw
- }
-
- // nothrow
- void pop_back()
- {
- errh::check_not_empty(*this);
- }
-
- // basic
- void insert(iterator position, value_type const&)
- {
- errh::check_iterator_end_eq(*this, position);
- errh::check_capacity(*this, 1); // may throw
- }
-
- // basic
- void insert(iterator position, size_type count, value_type const&)
- {
- errh::check_iterator_end_eq(*this, position);
- errh::check_capacity(*this, count); // may throw
- }
-
- // basic
- template <typename Iterator>
- void insert(iterator, Iterator first, Iterator last)
- {
- // TODO - add MPL_ASSERT, check if Iterator is really an iterator
- errh::check_capacity(*this, std::distance(first, last)); // may throw
- }
-
- // basic
- void erase(iterator position)
- {
- errh::check_iterator_end_neq(*this, position);
- }
-
- // basic
- void erase(iterator first, iterator last)
- {
- errh::check_iterator_end_eq(*this, first);
- errh::check_iterator_end_eq(*this, last);
-
- //BOOST_GEOMETRY_INDEX_ASSERT(0 <= n, "invalid range");
- }
-
- // basic
- template <typename Iterator>
- void assign(Iterator first, Iterator last)
- {
- // TODO - add MPL_ASSERT, check if Iterator is really an iterator
- errh::check_capacity(*this, std::distance(first, last)); // may throw
- }
-
- // basic
- void assign(size_type count, value_type const&)
- {
- errh::check_capacity(*this, count); // may throw
- }
-
- // nothrow
- void clear() {}
-
- // strong
- reference at(size_type i)
- {
- errh::throw_out_of_bounds(*this, i); // may throw
- return *(this->begin() + i);
- }
-
- // strong
- const_reference at(size_type i) const
- {
- errh::throw_out_of_bounds(*this, i); // may throw
- return *(this->begin() + i);
- }
-
- // nothrow
- reference operator[](size_type i)
- {
- errh::check_index(*this, i);
- return *(this->begin() + i);
- }
-
- // nothrow
- const_reference operator[](size_type i) const
- {
- errh::check_index(*this, i);
- return *(this->begin() + i);
- }
-
- // nothrow
- reference front()
- {
- errh::check_not_empty(*this);
- return *(this->begin());
- }
-
- // nothrow
- const_reference front() const
- {
- errh::check_not_empty(*this);
- return *(this->begin());
- }
-
- // nothrow
- reference back()
- {
- errh::check_not_empty(*this);
- return *(this->end() - 1);
- }
-
- // nothrow
- const_reference back() const
- {
- errh::check_not_empty(*this);
- return *(this->end() - 1);
- }
-
- // nothrow
- Value * data() { return boost::addressof(*(this->ptr())); }
- const Value * data() const { return boost::addressof(*(this->ptr())); }
-
- // nothrow
- iterator begin() { return this->ptr(); }
- const_iterator begin() const { return this->ptr(); }
- const_iterator cbegin() const { return this->ptr(); }
- iterator end() { return this->begin(); }
- const_iterator end() const { return this->begin(); }
- const_iterator cend() const { return this->cbegin(); }
- // nothrow
- reverse_iterator rbegin() { return reverse_iterator(this->end()); }
- const_reverse_iterator rbegin() const { return reverse_iterator(this->end()); }
- const_reverse_iterator crbegin() const { return reverse_iterator(this->end()); }
- reverse_iterator rend() { return reverse_iterator(this->begin()); }
- const_reverse_iterator rend() const { return reverse_iterator(this->begin()); }
- const_reverse_iterator crend() const { return reverse_iterator(this->begin()); }
-
- // nothrow
- size_type capacity() const { return 0; }
- size_type max_size() const { return 0; }
- size_type size() const { return 0; }
- bool empty() const { return true; }
-
-private:
- pointer ptr()
- {
- return pointer(reinterpret_cast<Value*>(this));
- }
-
- const_pointer ptr() const
- {
- return const_pointer(reinterpret_cast<const Value*>(this));
- }
-};
-
-#endif // !BOOST_CONTAINER_DOXYGEN_INVOKED
-
-//! @brief Checks if contents of two varrays are equal.
-//!
-//! @ingroup varray_non_member
-//!
-//! @param x The first varray.
-//! @param y The second varray.
-//!
-//! @return \c true if containers have the same size and elements in both containers are equal.
-//!
-//! @par Complexity
-//! Linear O(N).
-template<typename V, std::size_t C1, std::size_t C2>
-bool operator== (varray<V, C1> const& x, varray<V, C2> const& y)
-{
- return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin());
-}
-
-//! @brief Checks if contents of two varrays are not equal.
-//!
-//! @ingroup varray_non_member
-//!
-//! @param x The first varray.
-//! @param y The second varray.
-//!
-//! @return \c true if containers have different size or elements in both containers are not equal.
-//!
-//! @par Complexity
-//! Linear O(N).
-template<typename V, std::size_t C1, std::size_t C2>
-bool operator!= (varray<V, C1> const& x, varray<V, C2> const& y)
-{
- return !(x==y);
-}
-
-//! @brief Lexicographically compares varrays.
-//!
-//! @ingroup varray_non_member
-//!
-//! @param x The first varray.
-//! @param y The second varray.
-//!
-//! @return \c true if x compares lexicographically less than y.
-//!
-//! @par Complexity
-//! Linear O(N).
-template<typename V, std::size_t C1, std::size_t C2>
-bool operator< (varray<V, C1> const& x, varray<V, C2> const& y)
-{
- return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-//! @brief Lexicographically compares varrays.
-//!
-//! @ingroup varray_non_member
-//!
-//! @param x The first varray.
-//! @param y The second varray.
-//!
-//! @return \c true if y compares lexicographically less than x.
-//!
-//! @par Complexity
-//! Linear O(N).
-template<typename V, std::size_t C1, std::size_t C2>
-bool operator> (varray<V, C1> const& x, varray<V, C2> const& y)
-{
- return y<x;
-}
-
-//! @brief Lexicographically compares varrays.
-//!
-//! @ingroup varray_non_member
-//!
-//! @param x The first varray.
-//! @param y The second varray.
-//!
-//! @return \c true if y don't compare lexicographically less than x.
-//!
-//! @par Complexity
-//! Linear O(N).
-template<typename V, std::size_t C1, std::size_t C2>
-bool operator<= (varray<V, C1> const& x, varray<V, C2> const& y)
-{
- return !(y<x);
-}
-
-//! @brief Lexicographically compares varrays.
-//!
-//! @ingroup varray_non_member
-//!
-//! @param x The first varray.
-//! @param y The second varray.
-//!
-//! @return \c true if x don't compare lexicographically less than y.
-//!
-//! @par Complexity
-//! Linear O(N).
-template<typename V, std::size_t C1, std::size_t C2>
-bool operator>= (varray<V, C1> const& x, varray<V, C2> const& y)
-{
- return !(x<y);
-}
-
-//! @brief Swaps contents of two varrays.
-//!
-//! This function calls varray::swap().
-//!
-//! @ingroup varray_non_member
-//!
-//! @param x The first varray.
-//! @param y The second varray.
-//!
-//! @par Complexity
-//! Linear O(N).
-template<typename V, std::size_t C1, std::size_t C2>
-inline void swap(varray<V, C1> & x, varray<V, C2> & y)
-{
- x.swap(y);
-}
-
-}}}} // namespace boost::geometry::index::detail
-
-// TODO - REMOVE/CHANGE
-#include <boost/container/detail/config_end.hpp>
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/detail/varray_detail.hpp b/contrib/restricted/boost/boost/geometry/index/detail/varray_detail.hpp
deleted file mode 100644
index 31b77c40fed..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/detail/varray_detail.hpp
+++ /dev/null
@@ -1,760 +0,0 @@
-// Boost.Geometry
-//
-// varray details
-//
-// Copyright (c) 2012-2015 Adam Wulkiewicz, Lodz, Poland.
-// Copyright (c) 2011-2013 Andrew Hundt.
-//
-// 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 BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_DETAIL_HPP
-#define BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_DETAIL_HPP
-
-#include <cstddef>
-#include <cstring>
-#include <memory>
-#include <limits>
-
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/and.hpp>
-#include <boost/mpl/or.hpp>
-#include <boost/mpl/int.hpp>
-
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/remove_const.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-#include <boost/type_traits/has_trivial_assign.hpp>
-#include <boost/type_traits/has_trivial_copy.hpp>
-#include <boost/type_traits/has_trivial_constructor.hpp>
-#include <boost/type_traits/has_trivial_destructor.hpp>
-#include <boost/type_traits/has_trivial_move_constructor.hpp>
-#include <boost/type_traits/has_trivial_move_assign.hpp>
-//#include <boost/type_traits/has_nothrow_constructor.hpp>
-//#include <boost/type_traits/has_nothrow_copy.hpp>
-//#include <boost/type_traits/has_nothrow_assign.hpp>
-//#include <boost/type_traits/has_nothrow_destructor.hpp>
-
-#include <boost/detail/no_exceptions_support.hpp>
-#include <boost/config.hpp>
-#include <boost/move/move.hpp>
-#include <boost/core/addressof.hpp>
-#include <boost/iterator/iterator_traits.hpp>
-
-#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
-#include <boost/move/detail/fwd_macros.hpp>
-#endif
-
-// TODO - move vectors iterators optimization to the other, optional file instead of checking defines?
-
-#if defined(BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_ENABLE_VECTOR_OPTIMIZATION) && !defined(BOOST_NO_EXCEPTIONS)
-#include <vector>
-#include <boost/container/vector.hpp>
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_ENABLE_VECTOR_OPTIMIZATION && !BOOST_NO_EXCEPTIONS
-
-namespace boost { namespace geometry { namespace index { namespace detail { namespace varray_detail {
-
-template <typename I>
-struct are_elements_contiguous : boost::is_pointer<I>
-{};
-
-// EXPERIMENTAL - not finished
-// Conditional setup - mark vector iterators defined in known implementations
-// as iterators pointing to contiguous ranges
-
-#if defined(BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_ENABLE_VECTOR_OPTIMIZATION) && !defined(BOOST_NO_EXCEPTIONS)
-
-template <typename Pointer>
-struct are_elements_contiguous<
- boost::container::container_detail::vector_const_iterator<Pointer>
-> : boost::true_type
-{};
-
-template <typename Pointer>
-struct are_elements_contiguous<
- boost::container::container_detail::vector_iterator<Pointer>
-> : boost::true_type
-{};
-
-#if defined(BOOST_DINKUMWARE_STDLIB)
-
-template <typename T>
-struct are_elements_contiguous<
- std::_Vector_const_iterator<T>
-> : boost::true_type
-{};
-
-template <typename T>
-struct are_elements_contiguous<
- std::_Vector_iterator<T>
-> : boost::true_type
-{};
-
-#elif defined(BOOST_GNU_STDLIB)
-
-template <typename P, typename T, typename A>
-struct are_elements_contiguous<
- __gnu_cxx::__normal_iterator<P, std::vector<T, A> >
-> : boost::true_type
-{};
-
-#elif defined(_LIBCPP_VERSION)
-
-// TODO - test it first
-//template <typename P>
-//struct are_elements_contiguous<
-// __wrap_iter<P>
-//> : boost::true_type
-//{};
-
-#else // OTHER_STDLIB
-
-// TODO - add other iterators implementations
-
-#endif // STDLIB
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_ENABLE_VECTOR_OPTIMIZATION && !BOOST_NO_EXCEPTIONS
-
-// True if iterator values are the same and both iterators points to the ranges of contiguous elements
-
-template <typename I, typename O>
-struct are_corresponding :
- ::boost::mpl::and_<
- ::boost::is_same<
- ::boost::remove_const<
- typename ::boost::iterator_value<I>::type
- >,
- ::boost::remove_const<
- typename ::boost::iterator_value<O>::type
- >
- >,
- are_elements_contiguous<I>,
- are_elements_contiguous<O>
- >
-{};
-
-template <typename I, typename V>
-struct is_corresponding_value :
- ::boost::is_same<
- ::boost::remove_const<
- typename ::boost::iterator_value<I>::type
- >,
- ::boost::remove_const<V>
- >
-{};
-
-// destroy(I, I)
-
-template <typename I>
-void destroy_dispatch(I /*first*/, I /*last*/,
- boost::true_type const& /*has_trivial_destructor*/)
-{}
-
-template <typename I>
-void destroy_dispatch(I first, I last,
- boost::false_type const& /*has_trivial_destructor*/)
-{
- typedef typename boost::iterator_value<I>::type value_type;
- for ( ; first != last ; ++first )
- first->~value_type();
-}
-
-template <typename I>
-void destroy(I first, I last)
-{
- typedef typename boost::iterator_value<I>::type value_type;
- destroy_dispatch(first, last, has_trivial_destructor<value_type>());
-}
-
-// destroy(I)
-
-template <typename I>
-void destroy_dispatch(I /*pos*/,
- boost::true_type const& /*has_trivial_destructor*/)
-{}
-
-template <typename I>
-void destroy_dispatch(I pos,
- boost::false_type const& /*has_trivial_destructor*/)
-{
- typedef typename boost::iterator_value<I>::type value_type;
- pos->~value_type();
-}
-
-template <typename I>
-void destroy(I pos)
-{
- typedef typename boost::iterator_value<I>::type value_type;
- destroy_dispatch(pos, has_trivial_destructor<value_type>());
-}
-
-// copy(I, I, O)
-
-template <typename I, typename O>
-inline O copy_dispatch(I first, I last, O dst,
- boost::mpl::bool_<true> const& /*use_memmove*/)
-{
- typedef typename boost::iterator_value<I>::type value_type;
- typename boost::iterator_difference<I>::type d = std::distance(first, last);
-
- ::memmove(boost::addressof(*dst), boost::addressof(*first), sizeof(value_type) * d);
- return dst + d;
-}
-
-template <typename I, typename O>
-inline O copy_dispatch(I first, I last, O dst,
- boost::mpl::bool_<false> const& /*use_memmove*/)
-{
- return std::copy(first, last, dst); // may throw
-}
-
-template <typename I, typename O>
-inline O copy(I first, I last, O dst)
-{
- typedef typename
- ::boost::mpl::and_<
- are_corresponding<I, O>,
- ::boost::has_trivial_assign<
- typename ::boost::iterator_value<O>::type
- >
- >::type
- use_memmove;
-
- return copy_dispatch(first, last, dst, use_memmove()); // may throw
-}
-
-// uninitialized_copy(I, I, O)
-
-template <typename I, typename O>
-inline
-O uninitialized_copy_dispatch(I first, I last, O dst,
- boost::mpl::bool_<true> const& /*use_memcpy*/)
-{
- typedef typename boost::iterator_value<I>::type value_type;
- typename boost::iterator_difference<I>::type d = std::distance(first, last);
-
- ::memcpy(boost::addressof(*dst), boost::addressof(*first), sizeof(value_type) * d);
- return dst + d;
-}
-
-template <typename I, typename F>
-inline
-F uninitialized_copy_dispatch(I first, I last, F dst,
- boost::mpl::bool_<false> const& /*use_memcpy*/)
-{
- return std::uninitialized_copy(first, last, dst); // may throw
-}
-
-template <typename I, typename F>
-inline
-F uninitialized_copy(I first, I last, F dst)
-{
- typedef typename
- ::boost::mpl::and_<
- are_corresponding<I, F>,
- ::boost::has_trivial_copy<
- typename ::boost::iterator_value<F>::type
- >
- >::type
- use_memcpy;
-
- return uninitialized_copy_dispatch(first, last, dst, use_memcpy()); // may throw
-}
-
-// uninitialized_move(I, I, O)
-
-template <typename I, typename O>
-inline
-O uninitialized_move_dispatch(I first, I last, O dst,
- boost::mpl::bool_<true> const& /*use_memcpy*/)
-{
- typedef typename boost::iterator_value<I>::type value_type;
- typename boost::iterator_difference<I>::type d = std::distance(first, last);
-
- ::memcpy(boost::addressof(*dst), boost::addressof(*first), sizeof(value_type) * d);
- return dst + d;
-}
-
-template <typename I, typename O>
-inline
-O uninitialized_move_dispatch(I first, I last, O dst,
- boost::mpl::bool_<false> const& /*use_memcpy*/)
-{
- //return boost::uninitialized_move(first, last, dst); // may throw
-
- O o = dst;
-
- BOOST_TRY
- {
- typedef typename std::iterator_traits<O>::value_type value_type;
- for (; first != last; ++first, ++o )
- new (boost::addressof(*o)) value_type(boost::move(*first));
- }
- BOOST_CATCH(...)
- {
- destroy(dst, o);
- BOOST_RETHROW;
- }
- BOOST_CATCH_END
-
- return dst;
-}
-
-template <typename I, typename O>
-inline
-O uninitialized_move(I first, I last, O dst)
-{
- typedef typename
- ::boost::mpl::and_<
- are_corresponding<I, O>,
- ::boost::has_trivial_copy<
- typename ::boost::iterator_value<O>::type
- >
- >::type
- use_memcpy;
-
- return uninitialized_move_dispatch(first, last, dst, use_memcpy()); // may throw
-}
-
-// TODO - move uses memmove - implement 2nd version using memcpy?
-
-// move(I, I, O)
-
-template <typename I, typename O>
-inline
-O move_dispatch(I first, I last, O dst,
- boost::mpl::bool_<true> const& /*use_memmove*/)
-{
- typedef typename boost::iterator_value<I>::type value_type;
- typename boost::iterator_difference<I>::type d = std::distance(first, last);
-
- ::memmove(boost::addressof(*dst), boost::addressof(*first), sizeof(value_type) * d);
- return dst + d;
-}
-
-template <typename I, typename O>
-inline
-O move_dispatch(I first, I last, O dst,
- boost::mpl::bool_<false> const& /*use_memmove*/)
-{
- return boost::move(first, last, dst); // may throw
-}
-
-template <typename I, typename O>
-inline
-O move(I first, I last, O dst)
-{
- typedef typename
- ::boost::mpl::and_<
- are_corresponding<I, O>,
- ::boost::has_trivial_assign<
- typename ::boost::iterator_value<O>::type
- >
- >::type
- use_memmove;
-
- return move_dispatch(first, last, dst, use_memmove()); // may throw
-}
-
-// move_backward(BDI, BDI, BDO)
-
-template <typename BDI, typename BDO>
-inline
-BDO move_backward_dispatch(BDI first, BDI last, BDO dst,
- boost::mpl::bool_<true> const& /*use_memmove*/)
-{
- typedef typename boost::iterator_value<BDI>::type value_type;
- typename boost::iterator_difference<BDI>::type d = std::distance(first, last);
-
- BDO foo(dst - d);
- ::memmove(boost::addressof(*foo), boost::addressof(*first), sizeof(value_type) * d);
- return foo;
-}
-
-template <typename BDI, typename BDO>
-inline
-BDO move_backward_dispatch(BDI first, BDI last, BDO dst,
- boost::mpl::bool_<false> const& /*use_memmove*/)
-{
- return boost::move_backward(first, last, dst); // may throw
-}
-
-template <typename BDI, typename BDO>
-inline
-BDO move_backward(BDI first, BDI last, BDO dst)
-{
- typedef typename
- ::boost::mpl::and_<
- are_corresponding<BDI, BDO>,
- ::boost::has_trivial_assign<
- typename ::boost::iterator_value<BDO>::type
- >
- >::type
- use_memmove;
-
- return move_backward_dispatch(first, last, dst, use_memmove()); // may throw
-}
-
-template <typename T>
-struct has_nothrow_move : public
- ::boost::mpl::or_<
- boost::mpl::bool_<
- ::boost::has_nothrow_move<
- typename ::boost::remove_const<T>::type
- >::value
- >,
- boost::mpl::bool_<
- ::boost::has_nothrow_move<T>::value
- >
- >
-{};
-
-// uninitialized_move_if_noexcept(I, I, O)
-
-template <typename I, typename O>
-inline
-O uninitialized_move_if_noexcept_dispatch(I first, I last, O dst, boost::mpl::bool_<true> const& /*use_move*/)
-{ return varray_detail::uninitialized_move(first, last, dst); }
-
-template <typename I, typename O>
-inline
-O uninitialized_move_if_noexcept_dispatch(I first, I last, O dst, boost::mpl::bool_<false> const& /*use_move*/)
-{ return varray_detail::uninitialized_copy(first, last, dst); }
-
-template <typename I, typename O>
-inline
-O uninitialized_move_if_noexcept(I first, I last, O dst)
-{
- typedef typename has_nothrow_move<
- typename ::boost::iterator_value<O>::type
- >::type use_move;
-
- return uninitialized_move_if_noexcept_dispatch(first, last, dst, use_move()); // may throw
-}
-
-// move_if_noexcept(I, I, O)
-
-template <typename I, typename O>
-inline
-O move_if_noexcept_dispatch(I first, I last, O dst, boost::mpl::bool_<true> const& /*use_move*/)
-{ return move(first, last, dst); }
-
-template <typename I, typename O>
-inline
-O move_if_noexcept_dispatch(I first, I last, O dst, boost::mpl::bool_<false> const& /*use_move*/)
-{ return copy(first, last, dst); }
-
-template <typename I, typename O>
-inline
-O move_if_noexcept(I first, I last, O dst)
-{
- typedef typename has_nothrow_move<
- typename ::boost::iterator_value<O>::type
- >::type use_move;
-
- return move_if_noexcept_dispatch(first, last, dst, use_move()); // may throw
-}
-
-// uninitialized_fill(I, I)
-
-template <typename I>
-inline
-void uninitialized_fill_dispatch(I /*first*/, I /*last*/,
- boost::true_type const& /*has_trivial_constructor*/,
- boost::true_type const& /*disable_trivial_init*/)
-{}
-
-template <typename I>
-inline
-void uninitialized_fill_dispatch(I first, I last,
- boost::true_type const& /*has_trivial_constructor*/,
- boost::false_type const& /*disable_trivial_init*/)
-{
- typedef typename boost::iterator_value<I>::type value_type;
- for ( ; first != last ; ++first )
- new (boost::addressof(*first)) value_type();
-}
-
-template <typename I, typename DisableTrivialInit>
-inline
-void uninitialized_fill_dispatch(I first, I last,
- boost::false_type const& /*has_trivial_constructor*/,
- DisableTrivialInit const& /*not_used*/)
-{
- typedef typename boost::iterator_value<I>::type value_type;
- I it = first;
-
- BOOST_TRY
- {
- for ( ; it != last ; ++it )
- new (boost::addressof(*it)) value_type(); // may throw
- }
- BOOST_CATCH(...)
- {
- destroy(first, it);
- BOOST_RETHROW;
- }
- BOOST_CATCH_END
-}
-
-template <typename I, typename DisableTrivialInit>
-inline
-void uninitialized_fill(I first, I last, DisableTrivialInit const& disable_trivial_init)
-{
- typedef typename boost::iterator_value<I>::type value_type;
- uninitialized_fill_dispatch(first, last, boost::has_trivial_constructor<value_type>(), disable_trivial_init); // may throw
-}
-
-// construct(I)
-
-template <typename I>
-inline
-void construct_dispatch(boost::mpl::bool_<true> const& /*dont_init*/, I /*pos*/)
-{}
-
-template <typename I>
-inline
-void construct_dispatch(boost::mpl::bool_<false> const& /*dont_init*/, I pos)
-{
- typedef typename ::boost::iterator_value<I>::type value_type;
- new (static_cast<void*>(::boost::addressof(*pos))) value_type(); // may throw
-}
-
-template <typename DisableTrivialInit, typename I>
-inline
-void construct(DisableTrivialInit const&, I pos)
-{
- typedef typename ::boost::iterator_value<I>::type value_type;
- typedef typename ::boost::mpl::and_<
- boost::has_trivial_constructor<value_type>,
- DisableTrivialInit
- >::type dont_init;
-
- construct_dispatch(dont_init(), pos); // may throw
-}
-
-// construct(I, V)
-
-template <typename I, typename V>
-inline
-void construct_copy_dispatch(I pos, V const& v,
- boost::mpl::bool_<true> const& /*use_memcpy*/)
-{
- ::memcpy(boost::addressof(*pos), boost::addressof(v), sizeof(V));
-}
-
-template <typename I, typename P>
-inline
-void construct_copy_dispatch(I pos, P const& p,
- boost::mpl::bool_<false> const& /*use_memcpy*/)
-{
- typedef typename boost::iterator_value<I>::type V;
- new (static_cast<void*>(boost::addressof(*pos))) V(p); // may throw
-}
-
-template <typename DisableTrivialInit, typename I, typename P>
-inline
-void construct(DisableTrivialInit const&,
- I pos, P const& p)
-{
- typedef typename
- ::boost::mpl::and_<
- is_corresponding_value<I, P>,
- ::boost::has_trivial_copy<P>
- >::type
- use_memcpy;
-
- construct_copy_dispatch(pos, p, use_memcpy()); // may throw
-}
-
-// Needed by push_back(V &&)
-
-template <typename I, typename V>
-inline
-void construct_move_dispatch(I pos, V const& v,
- boost::mpl::bool_<true> const& /*use_memcpy*/)
-{
- ::memcpy(boost::addressof(*pos), boost::addressof(v), sizeof(V));
-}
-
-template <typename I, typename P>
-inline
-void construct_move_dispatch(I pos, BOOST_RV_REF(P) p,
- boost::mpl::bool_<false> const& /*use_memcpy*/)
-{
- typedef typename boost::iterator_value<I>::type V;
- new (static_cast<void*>(boost::addressof(*pos))) V(::boost::move(p)); // may throw
-}
-
-template <typename DisableTrivialInit, typename I, typename P>
-inline
-void construct(DisableTrivialInit const&, I pos, BOOST_RV_REF(P) p)
-{
- typedef typename
- ::boost::mpl::and_<
- is_corresponding_value<I, P>,
- ::boost::has_trivial_move_constructor<P>
- >::type
- use_memcpy;
-
- construct_move_dispatch(pos, ::boost::move(p), use_memcpy()); // may throw
-}
-
-// Needed by emplace_back() and emplace()
-
-#if !defined(BOOST_CONTAINER_VARRAY_DISABLE_EMPLACE)
-#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
-
-template <typename DisableTrivialInit, typename I, class ...Args>
-inline
-void construct(DisableTrivialInit const&,
- I pos,
- BOOST_FWD_REF(Args) ...args)
-{
- typedef typename boost::iterator_value<I>::type V;
- new (static_cast<void*>(boost::addressof(*pos))) V(::boost::forward<Args>(args)...); // may throw
-}
-
-#else // !BOOST_NO_CXX11_VARIADIC_TEMPLATES
-
-// BOOST_NO_CXX11_RVALUE_REFERENCES -> P0 const& p0
-// !BOOST_NO_CXX11_RVALUE_REFERENCES -> P0 && p0
-// which means that version with one parameter may take V const& v
-
-#define BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_DETAIL_CONSTRUCT(N) \
-template <typename DisableTrivialInit, typename I, typename P BOOST_MOVE_I##N BOOST_MOVE_CLASS##N > \
-inline \
-void construct(DisableTrivialInit const&, \
- I pos, \
- BOOST_FWD_REF(P) p \
- BOOST_MOVE_I##N BOOST_MOVE_UREF##N) \
-{ \
- typedef typename boost::iterator_value<I>::type V; \
- new \
- (static_cast<void*>(boost::addressof(*pos))) \
- V(boost::forward<P>(p) BOOST_MOVE_I##N BOOST_MOVE_FWD##N); /*may throw*/ \
-} \
-
-BOOST_MOVE_ITERATE_1TO9(BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_DETAIL_CONSTRUCT)
-#undef BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_DETAIL_CONSTRUCT
-
-#endif // !BOOST_NO_CXX11_VARIADIC_TEMPLATES
-#endif // !BOOST_CONTAINER_VARRAY_DISABLE_EMPLACE
-
-// assign(I, V)
-
-template <typename I, typename V>
-inline
-void assign_copy_dispatch(I pos, V const& v,
- boost::mpl::bool_<true> const& /*use_memcpy*/)
-{
-// TODO - use memmove here?
- ::memcpy(boost::addressof(*pos), boost::addressof(v), sizeof(V));
-}
-
-template <typename I, typename V>
-inline
-void assign_copy_dispatch(I pos, V const& v,
- boost::mpl::bool_<false> const& /*use_memcpy*/)
-{
- *pos = v; // may throw
-}
-
-template <typename I, typename V>
-inline
-void assign(I pos, V const& v)
-{
- typedef typename
- ::boost::mpl::and_<
- is_corresponding_value<I, V>,
- ::boost::has_trivial_assign<V>
- >::type
- use_memcpy;
-
- assign_copy_dispatch(pos, v, use_memcpy()); // may throw
-}
-
-template <typename I, typename V>
-inline
-void assign_move_dispatch(I pos, V const& v,
- boost::mpl::bool_<true> const& /*use_memcpy*/)
-{
-// TODO - use memmove here?
- ::memcpy(boost::addressof(*pos), boost::addressof(v), sizeof(V));
-}
-
-template <typename I, typename V>
-inline
-void assign_move_dispatch(I pos, BOOST_RV_REF(V) v,
- boost::mpl::bool_<false> const& /*use_memcpy*/)
-{
- *pos = boost::move(v); // may throw
-}
-
-template <typename I, typename V>
-inline
-void assign(I pos, BOOST_RV_REF(V) v)
-{
- typedef typename
- ::boost::mpl::and_<
- is_corresponding_value<I, V>,
- ::boost::has_trivial_move_assign<V>
- >::type
- use_memcpy;
-
- assign_move_dispatch(pos, ::boost::move(v), use_memcpy());
-}
-
-// uninitialized_copy_s
-
-template <typename I, typename F>
-inline std::size_t uninitialized_copy_s(I first, I last, F dest, std::size_t max_count)
-{
- std::size_t count = 0;
- F it = dest;
-
- BOOST_TRY
- {
- for ( ; first != last ; ++it, ++first, ++count )
- {
- if ( max_count <= count )
- return (std::numeric_limits<std::size_t>::max)();
-
- // dummy 0 as DisableTrivialInit
- construct(0, it, *first); // may throw
- }
- }
- BOOST_CATCH(...)
- {
- destroy(dest, it);
- BOOST_RETHROW;
- }
- BOOST_CATCH_END
-
- return count;
-}
-
-// scoped_destructor
-
-template<class T>
-class scoped_destructor
-{
-public:
- scoped_destructor(T * ptr) : m_ptr(ptr) {}
-
- ~scoped_destructor()
- {
- if(m_ptr)
- destroy(m_ptr);
- }
-
- void release() { m_ptr = 0; }
-
-private:
- T * m_ptr;
-};
-
-}}}}} // namespace boost::geometry::index::detail::varray_detail
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_VARRAY_DETAIL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/distance_predicates.hpp b/contrib/restricted/boost/boost/geometry/index/distance_predicates.hpp
deleted file mode 100644
index 59b32af4753..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/distance_predicates.hpp
+++ /dev/null
@@ -1,204 +0,0 @@
-// Boost.Geometry Index
-//
-// Spatial index distance predicates, calculators and checkers used in nearest neighbor query
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_DISTANCE_PREDICATES_HPP
-#define BOOST_GEOMETRY_INDEX_DISTANCE_PREDICATES_HPP
-
-#include <boost/geometry/index/detail/distance_predicates.hpp>
-
-/*!
-\defgroup nearest_relations Nearest relations (boost::geometry::index::)
-*/
-
-namespace boost { namespace geometry { namespace index {
-
-// relations generators
-
-#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-
-/*!
-\brief Generate to_nearest() relationship.
-
-Generate a nearest query Point and Value's Indexable relationship while calculating
-distances. This function may be used to define that knn query should calculate distances
-as smallest as possible between query Point and Indexable's points. In other words it
-should be the distance to the nearest Indexable's point. This function may be also used
-to define distances bounds which indicates that Indexable's nearest point should be
-closer or further than value v. This is default relation.
-
-\ingroup nearest_relations
-
-\tparam T Type of wrapped object. This may be a Point for PointRelation or CoordinateType for
- MinRelation or MaxRelation
-
-\param v Point or distance value.
-*/
-template <typename T>
-detail::to_nearest<T> to_nearest(T const& v)
-{
- return detail::to_nearest<T>(v);
-}
-
-/*!
-\brief Generate to_centroid() relationship.
-
-Generate a nearest query Point and Value's Indexable relationship while calculating
-distances. This function may be used to define that knn query should calculate distances
-between query Point and Indexable's centroid. This function may be also used
-to define distances bounds which indicates that Indexable's centroid should be
-closer or further than value v.
-
-\ingroup nearest_relations
-
-\tparam T Type of wrapped object. This may be a Point for PointRelation or some CoordinateType for
- MinRelation or MaxRelation
-
-\param v Point or distance value.
-*/
-template <typename T>
-detail::to_centroid<T> to_centroid(T const& v)
-{
- return detail::to_centroid<T>(v);
-}
-
-/*!
-\brief Generate to_furthest() relationship.
-
-Generate a nearest query Point and Value's Indexable relationship while calculating
-distances. This function may be used to define that knn query should calculate distances
-as biggest as possible between query Point and Indexable's points. In other words it
-should be the distance to the furthest Indexable's point. This function may be also used
-to define distances bounds which indicates that Indexable's furthest point should be
-closer or further than value v.
-
-\ingroup nearest_relations
-
-\tparam T Type of wrapped object. This may be a Point for PointRelation or some CoordinateType for
- MinRelation or MaxRelation
-
-\param v Point or distance value.
-*/
-template <typename T>
-detail::to_furthest<T> to_furthest(T const& v)
-{
- return detail::to_furthest<T>(v);
-}
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-
-// distance predicates generators
-
-/*!
-\brief Generate unbounded() distance predicate.
-
-Generate a distance predicate. This defines distances bounds which are used by knn query.
-This function indicates that there is no distance bounds and Values should be returned
-if distances between Point and Indexable are the smallest. Distance calculation is defined
-by PointRelation. This is default nearest predicate.
-
-\ingroup distance_predicates
-
-\tparam PointRelation PointRelation type.
-
-\param pr The point relation. This may be generated by \c index::to_nearest(),
- \c index::to_centroid() or \c index::to_furthest() with \c Point passed as a parameter.
-*/
-//template <typename PointRelation>
-//inline detail::unbounded<PointRelation>
-//unbounded(PointRelation const& pr)
-//{
-// return detail::unbounded<PointRelation>(pr);
-//}
-
-/*!
-\brief Generate min_bounded() distance predicate.
-
-Generate a distance predicate. This defines distances bounds which are used by knn query.
-This function indicates that Values should be returned only if distances between Point and
-Indexable are greater or equal to some min_distance passed in MinRelation. Check for closest Value is
-defined by PointRelation. So it is possible e.g. to return Values with centroids closest to some
-Point but only if nearest points are further than some distance.
-
-\ingroup distance_predicates
-
-\tparam PointRelation PointRelation type.
-\tparam MinRelation MinRelation type.
-
-\param pr The point relation. This may be generated by \c to_nearest(),
- \c to_centroid() or \c to_furthest() with \c Point passed as a parameter.
-\param minr The minimum bound relation. This may be generated by \c to_nearest(),
- \c to_centroid() or \c to_furthest() with distance value passed as a parameter.
-*/
-//template <typename PointRelation, typename MinRelation>
-//inline detail::min_bounded<PointRelation, MinRelation>
-//min_bounded(PointRelation const& pr, MinRelation const& minr)
-//{
-// return detail::min_bounded<PointRelation, MinRelation>(pr, minr);
-//}
-
-/*!
-\brief Generate max_bounded() distance predicate.
-
-Generate a distance predicate. This defines distances bounds which are used by knn query.
-This function indicates that Values should be returned only if distances between Point and
-Indexable are lesser or equal to some max_distance passed in MaxRelation. Check for closest Value is
-defined by PointRelation. So it is possible e.g. to return Values with centroids closest to some
-Point but only if nearest points are closer than some distance.
-
-\ingroup distance_predicates
-
-\tparam PointRelation PointRelation type.
-\tparam MaxRelation MaxRelation type.
-
-\param pr The point relation. This may be generated by \c to_nearest(),
- \c to_centroid() or \c to_furthest() with \c Point passed as a parameter.
-\param maxr The maximum bound relation. This may be generated by \c to_nearest(),
- \c to_centroid() or \c to_furthest() with distance value passed as a parameter.
-*/
-//template <typename PointRelation, typename MaxRelation>
-//inline detail::max_bounded<PointRelation, MaxRelation>
-//max_bounded(PointRelation const& pr, MaxRelation const& maxr)
-//{
-// return detail::max_bounded<PointRelation, MaxRelation>(pr, maxr);
-//}
-
-/*!
-\brief Generate bounded() distance predicate.
-
-Generate a distance predicate. This defines distances bounds which are used by knn query.
-This function indicates that Values should be returned only if distances between Point and
-Indexable are greater or equal to some min_distance passed in MinRelation and lesser or equal to
-some max_distance passed in MaxRelation. Check for closest Value is defined by PointRelation.
-So it is possible e.g. to return Values with centroids closest to some Point but only if nearest
-points are further than some distance and closer than some other distance.
-
-\ingroup distance_predicates
-
-\tparam PointRelation PointRelation type.
-\tparam MinRelation MinRelation type.
-\tparam MaxRelation MaxRelation type.
-
-\param pr The point relation. This may be generated by \c to_nearest(),
- \c to_centroid() or \c to_furthest() with \c Point passed as a parameter.
-\param minr The minimum bound relation. This may be generated by \c to_nearest(),
- \c to_centroid() or \c to_furthest() with distance value passed as a parameter.
-\param maxr The maximum bound relation. This may be generated by \c to_nearest(),
- \c to_centroid() or \c to_furthest() with distance value passed as a parameter.
-*/
-//template <typename PointRelation, typename MinRelation, typename MaxRelation>
-//inline detail::bounded<PointRelation, MinRelation, MaxRelation>
-//bounded(PointRelation const& pr, MinRelation const& minr, MaxRelation const& maxr)
-//{
-// return detail::bounded<PointRelation, MinRelation, MaxRelation>(pr, minr, maxr);
-//}
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_DISTANCE_PREDICATES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/equal_to.hpp b/contrib/restricted/boost/boost/geometry/index/equal_to.hpp
deleted file mode 100644
index 2fb1ed216c2..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/equal_to.hpp
+++ /dev/null
@@ -1,267 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2016 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_EQUAL_TO_HPP
-#define BOOST_GEOMETRY_INDEX_EQUAL_TO_HPP
-
-#include <boost/geometry/algorithms/detail/equals/interface.hpp>
-#include <boost/geometry/index/indexable.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template <typename Geometry,
- typename Tag = typename geometry::tag<Geometry>::type>
-struct equals
-{
- inline static bool apply(Geometry const& g1, Geometry const& g2)
- {
- return geometry::equals(g1, g2);
- }
-};
-
-template <typename Geometry, typename Tag>
-struct equals<Geometry *, Tag>
-{
- inline static bool apply(const Geometry * g1, const Geometry * g2)
- {
- return g1 == g2;
- }
-};
-
-template <typename T>
-struct equals<T, void>
-{
- inline static bool apply(T const& v1, T const& v2)
- {
- return v1 == v2;
- }
-};
-
-template <typename T>
-struct equals<T *, void>
-{
- inline static bool apply(const T * v1, const T * v2)
- {
- return v1 == v2;
- }
-};
-
-template <typename Tuple, size_t I, size_t N>
-struct tuple_equals
-{
- inline static bool apply(Tuple const& t1, Tuple const& t2)
- {
- typedef typename boost::tuples::element<I, Tuple>::type T;
-
- return equals<T>::apply(boost::get<I>(t1), boost::get<I>(t2))
- && tuple_equals<Tuple, I+1, N>::apply(t1, t2);
- }
-};
-
-template <typename Tuple, size_t I>
-struct tuple_equals<Tuple, I, I>
-{
- inline static bool apply(Tuple const&, Tuple const&)
- {
- return true;
- }
-};
-
-// TODO: Consider this: Since equal_to<> is using geometry::equals() it's possible that
-// two compared Indexables are not exactly the same! They will be spatially equal
-// but not strictly equal. Consider 2 Segments with reversed order of points.
-// Therefore it's possible that during the Value removal different value will be
-// removed than the one that was passed.
-
-/*!
-\brief The function object comparing Values.
-
-It compares Geometries using geometry::equals() function. Other types are compared using operator==.
-The default version handles Values which are Indexables.
-This template is also specialized for std::pair<T1, T2> and boost::tuple<...>.
-
-\tparam Value The type of objects which are compared by this function object.
-\tparam IsIndexable If true, Values are compared using boost::geometry::equals() functions.
-*/
-template <typename Value,
- bool IsIndexable = is_indexable<Value>::value>
-struct equal_to
-{
- /*! \brief The type of result returned by function object. */
- typedef bool result_type;
-
- /*!
- \brief Compare values. If Value is a Geometry geometry::equals() function is used.
-
- \param l First value.
- \param r Second value.
- \return true if values are equal.
- */
- inline bool operator()(Value const& l, Value const& r) const
- {
- return detail::equals<Value>::apply(l ,r);
- }
-};
-
-/*!
-\brief The function object comparing Values.
-
-This specialization compares values of type std::pair<T1, T2>.
-It compares pairs' first values, then second values.
-
-\tparam T1 The first type.
-\tparam T2 The second type.
-*/
-template <typename T1, typename T2>
-struct equal_to<std::pair<T1, T2>, false>
-{
- /*! \brief The type of result returned by function object. */
- typedef bool result_type;
-
- /*!
- \brief Compare values. If pair<> Value member is a Geometry geometry::equals() function is used.
-
- \param l First value.
- \param r Second value.
- \return true if values are equal.
- */
- inline bool operator()(std::pair<T1, T2> const& l, std::pair<T1, T2> const& r) const
- {
- return detail::equals<T1>::apply(l.first, r.first)
- && detail::equals<T2>::apply(l.second, r.second);
- }
-};
-
-/*!
-\brief The function object comparing Values.
-
-This specialization compares values of type boost::tuple<...>.
-It compares all members of the tuple from the first one to the last one.
-*/
-template <typename T0, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6, typename T7, typename T8, typename T9>
-struct equal_to<boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>, false>
-{
- typedef boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> value_type;
-
- /*! \brief The type of result returned by function object. */
- typedef bool result_type;
-
- /*!
- \brief Compare values. If tuple<> Value member is a Geometry geometry::equals() function is used.
-
- \param l First value.
- \param r Second value.
- \return true if values are equal.
- */
- inline bool operator()(value_type const& l, value_type const& r) const
- {
- return detail::tuple_equals<
- value_type, 0, boost::tuples::length<value_type>::value
- >::apply(l ,r);
- }
-};
-
-}}}} // namespace boost::geometry::index::detail
-
-#if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
-
-#include <tuple>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-template <typename Tuple, size_t I, size_t N>
-struct std_tuple_equals
-{
- inline static bool apply(Tuple const& t1, Tuple const& t2)
- {
- typedef typename std::tuple_element<I, Tuple>::type T;
-
- return equals<T>::apply(std::get<I>(t1), std::get<I>(t2))
- && std_tuple_equals<Tuple, I+1, N>::apply(t1, t2);
- }
-};
-
-template <typename Tuple, size_t I>
-struct std_tuple_equals<Tuple, I, I>
-{
- inline static bool apply(Tuple const&, Tuple const&)
- {
- return true;
- }
-};
-
-/*!
-\brief The function object comparing Values.
-
-This specialization compares values of type std::tuple<Args...>.
-It's defined if the compiler supports tuples and variadic templates.
-It compares all members of the tuple from the first one to the last one.
-*/
-template <typename ...Args>
-struct equal_to<std::tuple<Args...>, false>
-{
- typedef std::tuple<Args...> value_type;
-
- /*! \brief The type of result returned by function object. */
- typedef bool result_type;
-
- /*!
- \brief Compare values. If tuple<> Value member is a Geometry geometry::equals() function is used.
-
- \param l First value.
- \param r Second value.
- \return true if values are equal.
- */
- bool operator()(value_type const& l, value_type const& r) const
- {
- return detail::std_tuple_equals<
- value_type, 0, std::tuple_size<value_type>::value
- >::apply(l ,r);
- }
-};
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
-
-namespace boost { namespace geometry { namespace index {
-
-/*!
-\brief The function object comparing Values.
-
-The default version handles Values which are Indexables, std::pair<T1, T2>, boost::tuple<...>
-and std::tuple<...> if STD tuples and variadic templates are supported.
-All members are compared from left to right, Geometries using boost::geometry::equals() function,
-other types using operator==.
-
-\tparam Value The type of objects which are compared by this function object.
-*/
-template <typename Value>
-struct equal_to
- : detail::equal_to<Value>
-{
- /*! \brief The type of result returned by function object. */
- typedef typename detail::equal_to<Value>::result_type result_type;
-
- /*!
- \brief Compare Values.
-
- \param l First value.
- \param r Second value.
- \return true if Values are equal.
- */
- inline bool operator()(Value const& l, Value const& r) const
- {
- return detail::equal_to<Value>::operator()(l ,r);
- }
-};
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_EQUAL_TO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/indexable.hpp b/contrib/restricted/boost/boost/geometry/index/indexable.hpp
deleted file mode 100644
index 831e17f6dd2..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/indexable.hpp
+++ /dev/null
@@ -1,197 +0,0 @@
-// Boost.Geometry Index
-//
-// Copyright (c) 2011-2017 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_INDEXABLE_HPP
-#define BOOST_GEOMETRY_INDEX_INDEXABLE_HPP
-
-#include <boost/mpl/assert.hpp>
-#include <boost/tuple/tuple.hpp>
-
-#include <boost/geometry/index/detail/is_indexable.hpp>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-/*!
-\brief The function object extracting Indexable from Value.
-
-It translates Value object to Indexable object. The default version handles Values which are Indexables.
-This template is also specialized for std::pair<Indexable, T2>, boost::tuple<Indexable, ...>
-and std::tuple<Indexable, ...>.
-
-\tparam Value The Value type which may be translated directly to the Indexable.
-\tparam IsIndexable If true, the const reference to Value is returned.
-*/
-template <typename Value, bool IsIndexable = is_indexable<Value>::value>
-struct indexable
-{
- BOOST_MPL_ASSERT_MSG(
- (detail::is_indexable<Value>::value),
- NOT_VALID_INDEXABLE_TYPE,
- (Value)
- );
-
- /*! \brief The type of result returned by function object. */
- typedef Value const& result_type;
-
- /*!
- \brief Return indexable extracted from the value.
-
- \param v The value.
- \return The indexable.
- */
- inline result_type operator()(Value const& v) const
- {
- return v;
- }
-};
-
-/*!
-\brief The function object extracting Indexable from Value.
-
-This specialization translates from std::pair<Indexable, T2>.
-
-\tparam Indexable The Indexable type.
-\tparam T2 The second type.
-*/
-template <typename Indexable, typename T2>
-struct indexable<std::pair<Indexable, T2>, false>
-{
- BOOST_MPL_ASSERT_MSG(
- (detail::is_indexable<Indexable>::value),
- NOT_VALID_INDEXABLE_TYPE,
- (Indexable)
- );
-
- /*! \brief The type of result returned by function object. */
- typedef Indexable const& result_type;
-
- /*!
- \brief Return indexable extracted from the value.
-
- \param v The value.
- \return The indexable.
- */
- inline result_type operator()(std::pair<Indexable, T2> const& v) const
- {
- return v.first;
- }
-};
-
-/*!
-\brief The function object extracting Indexable from Value.
-
-This specialization translates from boost::tuple<Indexable, ...>.
-
-\tparam Indexable The Indexable type.
-*/
-template <typename Indexable, typename T1, typename T2, typename T3, typename T4,
- typename T5, typename T6, typename T7, typename T8, typename T9>
-struct indexable<boost::tuple<Indexable, T1, T2, T3, T4, T5, T6, T7, T8, T9>, false>
-{
- typedef boost::tuple<Indexable, T1, T2, T3, T4, T5, T6, T7, T8, T9> value_type;
-
- BOOST_MPL_ASSERT_MSG(
- (detail::is_indexable<Indexable>::value),
- NOT_VALID_INDEXABLE_TYPE,
- (Indexable)
- );
-
- /*! \brief The type of result returned by function object. */
- typedef Indexable const& result_type;
-
- /*!
- \brief Return indexable extracted from the value.
-
- \param v The value.
- \return The indexable.
- */
- inline result_type operator()(value_type const& v) const
- {
- return boost::get<0>(v);
- }
-};
-
-}}}} // namespace boost::geometry::index::detail
-
-#if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
-
-#include <tuple>
-
-namespace boost { namespace geometry { namespace index { namespace detail {
-
-/*!
-\brief The function object extracting Indexable from Value.
-
-This specialization translates from std::tuple<Indexable, Args...>.
-It's defined if the compiler supports tuples and variadic templates.
-
-\tparam Indexable The Indexable type.
-*/
-template <typename Indexable, typename ...Args>
-struct indexable<std::tuple<Indexable, Args...>, false>
-{
- typedef std::tuple<Indexable, Args...> value_type;
-
- BOOST_MPL_ASSERT_MSG(
- (detail::is_indexable<Indexable>::value),
- NOT_VALID_INDEXABLE_TYPE,
- (Indexable)
- );
-
- /*! \brief The type of result returned by function object. */
- typedef Indexable const& result_type;
-
- /*!
- \brief Return indexable extracted from the value.
-
- \param v The value.
- \return The indexable.
- */
- result_type operator()(value_type const& v) const
- {
- return std::get<0>(v);
- }
-};
-
-}}}} // namespace boost::geometry::index::detail
-
-#endif // !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
-
-namespace boost { namespace geometry { namespace index {
-
-/*!
-\brief The function object extracting Indexable from Value.
-
-It translates Value object to Indexable object. By default, it can handle Values which are Indexables,
-std::pair<Indexable, T2>, boost::tuple<Indexable, ...> and std::tuple<Indexable, ...> if STD tuples
-and variadic templates are supported.
-
-\tparam Value The Value type which may be translated directly to the Indexable.
-*/
-template <typename Value>
-struct indexable
- : detail::indexable<Value>
-{
- /*! \brief The type of result returned by function object. It should be const Indexable reference. */
- typedef typename detail::indexable<Value>::result_type result_type;
-
- /*!
- \brief Return indexable extracted from the value.
-
- \param v The value.
- \return The indexable.
- */
- inline result_type operator()(Value const& v) const
- {
- return detail::indexable<Value>::operator()(v);
- }
-};
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_INDEXABLE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/inserter.hpp b/contrib/restricted/boost/boost/geometry/index/inserter.hpp
deleted file mode 100644
index 30280d4cb09..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/inserter.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// Boost.Geometry Index
-//
-// Insert iterator
-//
-// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_INSERTER_HPP
-#define BOOST_GEOMETRY_INDEX_INSERTER_HPP
-
-#include <iterator>
-
-/*!
-\defgroup inserters Inserters (boost::geometry::index::)
-*/
-
-namespace boost { namespace geometry { namespace index {
-
-template <class Container>
-class insert_iterator
-{
-public:
- typedef std::output_iterator_tag iterator_category;
- typedef void value_type;
- typedef void difference_type;
- typedef void pointer;
- typedef void reference;
-
- typedef Container container_type;
-
- inline explicit insert_iterator(Container & c)
- : container(&c)
- {}
-
- insert_iterator & operator=(typename Container::value_type const& value)
- {
- container->insert(value);
- return *this;
- }
-
- insert_iterator & operator* ()
- {
- return *this;
- }
-
- insert_iterator & operator++ ()
- {
- return *this;
- }
-
- insert_iterator operator++(int)
- {
- return *this;
- }
-
-private:
- Container * container;
-};
-
-/*!
-\brief Insert iterator generator.
-
-Returns insert iterator capable to insert values to the container
-(spatial index) which has member function insert(value_type const&) defined.
-
-\ingroup inserters
-
-\param c The reference to the container (spatial index) to which values will be inserted.
-
-\return The insert iterator inserting values to the container.
-*/
-template <typename Container>
-insert_iterator<Container> inserter(Container & c)
-{
- return insert_iterator<Container>(c);
-}
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_INSERTER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/parameters.hpp b/contrib/restricted/boost/boost/geometry/index/parameters.hpp
deleted file mode 100644
index 1a9469c1034..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/parameters.hpp
+++ /dev/null
@@ -1,258 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree algorithms parameters
-//
-// Copyright (c) 2011-2017 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_PARAMETERS_HPP
-#define BOOST_GEOMETRY_INDEX_PARAMETERS_HPP
-
-
-#include <limits>
-
-#include <boost/mpl/assert.hpp>
-
-#include <boost/geometry/index/detail/exception.hpp>
-
-
-namespace boost { namespace geometry { namespace index {
-
-namespace detail {
-
-template <size_t MaxElements>
-struct default_min_elements_s
-{
- static const size_t raw_value = (MaxElements * 3) / 10;
- static const size_t value = 1 <= raw_value ? raw_value : 1;
-};
-
-inline size_t default_min_elements_d()
-{
- return (std::numeric_limits<size_t>::max)();
-}
-
-inline size_t default_min_elements_d_calc(size_t max_elements, size_t min_elements)
-{
- if ( default_min_elements_d() == min_elements )
- {
- size_t raw_value = (max_elements * 3) / 10;
- return 1 <= raw_value ? raw_value : 1;
- }
-
- return min_elements;
-}
-
-template <size_t MaxElements>
-struct default_rstar_reinserted_elements_s
-{
- static const size_t value = (MaxElements * 3) / 10;
-};
-
-inline size_t default_rstar_reinserted_elements_d()
-{
- return (std::numeric_limits<size_t>::max)();
-}
-
-inline size_t default_rstar_reinserted_elements_d_calc(size_t max_elements, size_t reinserted_elements)
-{
- if ( default_rstar_reinserted_elements_d() == reinserted_elements )
- {
- return (max_elements * 3) / 10;
- }
-
- return reinserted_elements;
-}
-
-} // namespace detail
-
-/*!
-\brief Linear r-tree creation algorithm parameters.
-
-\tparam MaxElements Maximum number of elements in nodes.
-\tparam MinElements Minimum number of elements in nodes. Default: 0.3*Max.
-*/
-template <size_t MaxElements,
- size_t MinElements = detail::default_min_elements_s<MaxElements>::value>
-struct linear
-{
- BOOST_MPL_ASSERT_MSG((0 < MinElements && 2*MinElements <= MaxElements+1),
- INVALID_STATIC_MIN_MAX_PARAMETERS, (linear));
-
- static const size_t max_elements = MaxElements;
- static const size_t min_elements = MinElements;
-
- static size_t get_max_elements() { return MaxElements; }
- static size_t get_min_elements() { return MinElements; }
-};
-
-/*!
-\brief Quadratic r-tree creation algorithm parameters.
-
-\tparam MaxElements Maximum number of elements in nodes.
-\tparam MinElements Minimum number of elements in nodes. Default: 0.3*Max.
-*/
-template <size_t MaxElements,
- size_t MinElements = detail::default_min_elements_s<MaxElements>::value>
-struct quadratic
-{
- BOOST_MPL_ASSERT_MSG((0 < MinElements && 2*MinElements <= MaxElements+1),
- INVALID_STATIC_MIN_MAX_PARAMETERS, (quadratic));
-
- static const size_t max_elements = MaxElements;
- static const size_t min_elements = MinElements;
-
- static size_t get_max_elements() { return MaxElements; }
- static size_t get_min_elements() { return MinElements; }
-};
-
-/*!
-\brief R*-tree creation algorithm parameters.
-
-\tparam MaxElements Maximum number of elements in nodes.
-\tparam MinElements Minimum number of elements in nodes. Default: 0.3*Max.
-\tparam ReinsertedElements The number of elements reinserted by forced reinsertions algorithm.
- If 0 forced reinsertions are disabled. Maximum value is Max+1-Min.
- Greater values are truncated. Default: 0.3*Max.
-\tparam OverlapCostThreshold The number of most suitable leafs taken into account while choosing
- the leaf node to which currently inserted value will be added. If
- value is in range (0, MaxElements) - the algorithm calculates
- nearly minimum overlap cost, otherwise all leafs are analyzed
- and true minimum overlap cost is calculated. Default: 32.
-*/
-template <size_t MaxElements,
- size_t MinElements = detail::default_min_elements_s<MaxElements>::value,
- size_t ReinsertedElements = detail::default_rstar_reinserted_elements_s<MaxElements>::value,
- size_t OverlapCostThreshold = 32>
-struct rstar
-{
- BOOST_MPL_ASSERT_MSG((0 < MinElements && 2*MinElements <= MaxElements+1),
- INVALID_STATIC_MIN_MAX_PARAMETERS, (rstar));
-
- static const size_t max_elements = MaxElements;
- static const size_t min_elements = MinElements;
- static const size_t reinserted_elements = ReinsertedElements;
- static const size_t overlap_cost_threshold = OverlapCostThreshold;
-
- static size_t get_max_elements() { return MaxElements; }
- static size_t get_min_elements() { return MinElements; }
- static size_t get_reinserted_elements() { return ReinsertedElements; }
- static size_t get_overlap_cost_threshold() { return OverlapCostThreshold; }
-};
-
-//template <size_t MaxElements, size_t MinElements>
-//struct kmeans
-//{
-// static const size_t max_elements = MaxElements;
-// static const size_t min_elements = MinElements;
-//};
-
-/*!
-\brief Linear r-tree creation algorithm parameters - run-time version.
-*/
-class dynamic_linear
-{
-public:
- /*!
- \brief The constructor.
-
- \param max_elements Maximum number of elements in nodes.
- \param min_elements Minimum number of elements in nodes. Default: 0.3*Max.
- */
- explicit dynamic_linear(size_t max_elements,
- size_t min_elements = detail::default_min_elements_d())
- : m_max_elements(max_elements)
- , m_min_elements(detail::default_min_elements_d_calc(max_elements, min_elements))
- {
- if (!(0 < m_min_elements && 2*m_min_elements <= m_max_elements+1))
- detail::throw_invalid_argument("invalid min or/and max parameters of dynamic_linear");
- }
-
- size_t get_max_elements() const { return m_max_elements; }
- size_t get_min_elements() const { return m_min_elements; }
-
-private:
- size_t m_max_elements;
- size_t m_min_elements;
-};
-
-/*!
-\brief Quadratic r-tree creation algorithm parameters - run-time version.
-*/
-class dynamic_quadratic
-{
-public:
- /*!
- \brief The constructor.
-
- \param max_elements Maximum number of elements in nodes.
- \param min_elements Minimum number of elements in nodes. Default: 0.3*Max.
- */
- explicit dynamic_quadratic(size_t max_elements,
- size_t min_elements = detail::default_min_elements_d())
- : m_max_elements(max_elements)
- , m_min_elements(detail::default_min_elements_d_calc(max_elements, min_elements))
- {
- if (!(0 < m_min_elements && 2*m_min_elements <= m_max_elements+1))
- detail::throw_invalid_argument("invalid min or/and max parameters of dynamic_quadratic");
- }
-
- size_t get_max_elements() const { return m_max_elements; }
- size_t get_min_elements() const { return m_min_elements; }
-
-private:
- size_t m_max_elements;
- size_t m_min_elements;
-};
-
-/*!
-\brief R*-tree creation algorithm parameters - run-time version.
-*/
-class dynamic_rstar
-{
-public:
- /*!
- \brief The constructor.
-
- \param max_elements Maximum number of elements in nodes.
- \param min_elements Minimum number of elements in nodes. Default: 0.3*Max.
- \param reinserted_elements The number of elements reinserted by forced reinsertions algorithm.
- If 0 forced reinsertions are disabled. Maximum value is Max-Min+1.
- Greater values are truncated. Default: 0.3*Max.
- \param overlap_cost_threshold The number of most suitable leafs taken into account while choosing
- the leaf node to which currently inserted value will be added. If
- value is in range (0, MaxElements) - the algorithm calculates
- nearly minimum overlap cost, otherwise all leafs are analyzed
- and true minimum overlap cost is calculated. Default: 32.
- */
- explicit dynamic_rstar(size_t max_elements,
- size_t min_elements = detail::default_min_elements_d(),
- size_t reinserted_elements = detail::default_rstar_reinserted_elements_d(),
- size_t overlap_cost_threshold = 32)
- : m_max_elements(max_elements)
- , m_min_elements(detail::default_min_elements_d_calc(max_elements, min_elements))
- , m_reinserted_elements(detail::default_rstar_reinserted_elements_d_calc(max_elements, reinserted_elements))
- , m_overlap_cost_threshold(overlap_cost_threshold)
- {
- if (!(0 < m_min_elements && 2*m_min_elements <= m_max_elements+1))
- detail::throw_invalid_argument("invalid min or/and max parameters of dynamic_rstar");
- }
-
- size_t get_max_elements() const { return m_max_elements; }
- size_t get_min_elements() const { return m_min_elements; }
- size_t get_reinserted_elements() const { return m_reinserted_elements; }
- size_t get_overlap_cost_threshold() const { return m_overlap_cost_threshold; }
-
-private:
- size_t m_max_elements;
- size_t m_min_elements;
- size_t m_reinserted_elements;
- size_t m_overlap_cost_threshold;
-};
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_PARAMETERS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/predicates.hpp b/contrib/restricted/boost/boost/geometry/index/predicates.hpp
deleted file mode 100644
index a79e3f173a2..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/predicates.hpp
+++ /dev/null
@@ -1,429 +0,0 @@
-// Boost.Geometry Index
-//
-// Spatial query predicates
-//
-// Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_PREDICATES_HPP
-#define BOOST_GEOMETRY_INDEX_PREDICATES_HPP
-
-#include <boost/geometry/index/detail/predicates.hpp>
-#include <boost/geometry/index/detail/tuples.hpp>
-
-/*!
-\defgroup predicates Predicates (boost::geometry::index::)
-*/
-
-namespace boost { namespace geometry { namespace index {
-
-/*!
-\brief Generate \c contains() predicate.
-
-Generate a predicate defining Value and Geometry relationship. With this
-predicate query returns indexed Values that contain passed Geometry.
-Value is returned by the query if <tt>bg::within(Geometry, Indexable)</tt>
-returns <tt>true</tt>.
-
-\par Example
-\verbatim
-bgi::query(spatial_index, bgi::contains(box), std::back_inserter(result));
-\endverbatim
-
-\ingroup predicates
-
-\tparam Geometry The Geometry type.
-
-\param g The Geometry object.
-*/
-template <typename Geometry> inline
-detail::predicates::spatial_predicate<Geometry, detail::predicates::contains_tag, false>
-contains(Geometry const& g)
-{
- return detail::predicates::spatial_predicate
- <
- Geometry,
- detail::predicates::contains_tag,
- false
- >(g);
-}
-
-/*!
-\brief Generate \c covered_by() predicate.
-
-Generate a predicate defining Value and Geometry relationship. With this
-predicate query returns indexed Values that are covered by passed Geometry.
-Value is returned by the query if <tt>bg::covered_by(Indexable, Geometry)</tt>
-returns <tt>true</tt>.
-
-\par Example
-\verbatim
-bgi::query(spatial_index, bgi::covered_by(box), std::back_inserter(result));
-\endverbatim
-
-\ingroup predicates
-
-\tparam Geometry The Geometry type.
-
-\param g The Geometry object.
-*/
-template <typename Geometry> inline
-detail::predicates::spatial_predicate<Geometry, detail::predicates::covered_by_tag, false>
-covered_by(Geometry const& g)
-{
- return detail::predicates::spatial_predicate
- <
- Geometry,
- detail::predicates::covered_by_tag,
- false
- >(g);
-}
-
-/*!
-\brief Generate \c covers() predicate.
-
-Generate a predicate defining Value and Geometry relationship. With this
-predicate query returns indexed Values that cover passed Geometry.
-Value is returned by the query if <tt>bg::covered_by(Geometry, Indexable)</tt>
-returns <tt>true</tt>.
-
-\par Example
-\verbatim
-bgi::query(spatial_index, bgi::covers(box), std::back_inserter(result));
-\endverbatim
-
-\ingroup predicates
-
-\tparam Geometry The Geometry type.
-
-\param g The Geometry object.
-*/
-template <typename Geometry> inline
-detail::predicates::spatial_predicate<Geometry, detail::predicates::covers_tag, false>
-covers(Geometry const& g)
-{
- return detail::predicates::spatial_predicate
- <
- Geometry,
- detail::predicates::covers_tag,
- false
- >(g);
-}
-
-/*!
-\brief Generate \c disjoint() predicate.
-
-Generate a predicate defining Value and Geometry relationship. With this
-predicate query returns indexed Values that are disjoint with passed Geometry.
-Value is returned by the query if <tt>bg::disjoint(Indexable, Geometry)</tt>
-returns <tt>true</tt>.
-
-\par Example
-\verbatim
-bgi::query(spatial_index, bgi::disjoint(box), std::back_inserter(result));
-\endverbatim
-
-\ingroup predicates
-
-\tparam Geometry The Geometry type.
-
-\param g The Geometry object.
-*/
-template <typename Geometry> inline
-detail::predicates::spatial_predicate<Geometry, detail::predicates::disjoint_tag, false>
-disjoint(Geometry const& g)
-{
- return detail::predicates::spatial_predicate
- <
- Geometry,
- detail::predicates::disjoint_tag,
- false
- >(g);
-}
-
-/*!
-\brief Generate \c intersects() predicate.
-
-Generate a predicate defining Value and Geometry relationship. With this
-predicate query returns indexed Values that intersect passed Geometry.
-Value is returned by the query if <tt>bg::intersects(Indexable, Geometry)</tt>
-returns <tt>true</tt>.
-
-\par Example
-\verbatim
-bgi::query(spatial_index, bgi::intersects(box), std::back_inserter(result));
-bgi::query(spatial_index, bgi::intersects(ring), std::back_inserter(result));
-bgi::query(spatial_index, bgi::intersects(polygon), std::back_inserter(result));
-\endverbatim
-
-\ingroup predicates
-
-\tparam Geometry The Geometry type.
-
-\param g The Geometry object.
-*/
-template <typename Geometry> inline
-detail::predicates::spatial_predicate<Geometry, detail::predicates::intersects_tag, false>
-intersects(Geometry const& g)
-{
- return detail::predicates::spatial_predicate
- <
- Geometry,
- detail::predicates::intersects_tag,
- false
- >(g);
-}
-
-/*!
-\brief Generate \c overlaps() predicate.
-
-Generate a predicate defining Value and Geometry relationship. With this
-predicate query returns indexed Values that overlap passed Geometry.
-Value is returned by the query if <tt>bg::overlaps(Indexable, Geometry)</tt>
-returns <tt>true</tt>.
-
-\par Example
-\verbatim
-bgi::query(spatial_index, bgi::overlaps(box), std::back_inserter(result));
-\endverbatim
-
-\ingroup predicates
-
-\tparam Geometry The Geometry type.
-
-\param g The Geometry object.
-*/
-template <typename Geometry> inline
-detail::predicates::spatial_predicate<Geometry, detail::predicates::overlaps_tag, false>
-overlaps(Geometry const& g)
-{
- return detail::predicates::spatial_predicate
- <
- Geometry,
- detail::predicates::overlaps_tag,
- false
- >(g);
-}
-
-#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-
-/*!
-\brief Generate \c touches() predicate.
-
-Generate a predicate defining Value and Geometry relationship. With this
-predicate query returns indexed Values that touch passed Geometry.
-Value is returned by the query if <tt>bg::touches(Indexable, Geometry)</tt>
-returns <tt>true</tt>.
-
-\ingroup predicates
-
-\tparam Geometry The Geometry type.
-
-\param g The Geometry object.
-*/
-template <typename Geometry> inline
-detail::predicates::spatial_predicate<Geometry, detail::predicates::touches_tag, false>
-touches(Geometry const& g)
-{
- return detail::predicates::spatial_predicate
- <
- Geometry,
- detail::predicates::touches_tag,
- false
- >(g);
-}
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-
-/*!
-\brief Generate \c within() predicate.
-
-Generate a predicate defining Value and Geometry relationship. With this
-predicate query returns indexed Values that are within passed Geometry.
-Value is returned by the query if <tt>bg::within(Indexable, Geometry)</tt>
-returns <tt>true</tt>.
-
-\par Example
-\verbatim
-bgi::query(spatial_index, bgi::within(box), std::back_inserter(result));
-\endverbatim
-
-\ingroup predicates
-
-\tparam Geometry The Geometry type.
-
-\param g The Geometry object.
-*/
-template <typename Geometry> inline
-detail::predicates::spatial_predicate<Geometry, detail::predicates::within_tag, false>
-within(Geometry const& g)
-{
- return detail::predicates::spatial_predicate
- <
- Geometry,
- detail::predicates::within_tag,
- false
- >(g);
-}
-
-/*!
-\brief Generate satisfies() predicate.
-
-A wrapper around user-defined UnaryPredicate checking if Value should be returned by spatial query.
-
-\par Example
-\verbatim
-bool is_red(Value const& v) { return v.is_red(); }
-
-struct is_red_o {
-template <typename Value> bool operator()(Value const& v) { return v.is_red(); }
-}
-
-// ...
-
-rt.query(index::intersects(box) && index::satisfies(is_red),
-std::back_inserter(result));
-
-rt.query(index::intersects(box) && index::satisfies(is_red_o()),
-std::back_inserter(result));
-
-#ifndef BOOST_NO_CXX11_LAMBDAS
-rt.query(index::intersects(box) && index::satisfies([](Value const& v) { return v.is_red(); }),
-std::back_inserter(result));
-#endif
-\endverbatim
-
-\ingroup predicates
-
-\tparam UnaryPredicate A type of unary predicate function or function object.
-
-\param pred The unary predicate function or function object.
-*/
-template <typename UnaryPredicate> inline
-detail::predicates::satisfies<UnaryPredicate, false>
-satisfies(UnaryPredicate const& pred)
-{
- return detail::predicates::satisfies<UnaryPredicate, false>(pred);
-}
-
-/*!
-\brief Generate nearest() predicate.
-
-When nearest predicate is passed to the query, k-nearest neighbour search will be performed.
-\c nearest() predicate takes a \c Geometry from which distances to \c Values are calculated
-and the maximum number of \c Values that should be returned. Internally
-boost::geometry::comparable_distance() is used to perform the calculation.
-
-\par Example
-\verbatim
-bgi::query(spatial_index, bgi::nearest(pt, 5), std::back_inserter(result));
-bgi::query(spatial_index, bgi::nearest(pt, 5) && bgi::intersects(box), std::back_inserter(result));
-bgi::query(spatial_index, bgi::nearest(box, 5), std::back_inserter(result));
-\endverbatim
-
-\warning
-Only one \c nearest() predicate may be used in a query.
-
-\ingroup predicates
-
-\param geometry The geometry from which distance is calculated.
-\param k The maximum number of values to return.
-*/
-template <typename Geometry> inline
-detail::predicates::nearest<Geometry>
-nearest(Geometry const& geometry, unsigned k)
-{
- return detail::predicates::nearest<Geometry>(geometry, k);
-}
-
-#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-
-/*!
-\brief Generate path() predicate.
-
-When path predicate is passed to the query, the returned values are k values along the path closest to
-its begin. \c path() predicate takes a \c Segment or a \c Linestring defining the path and the maximum
-number of \c Values that should be returned.
-
-\par Example
-\verbatim
-bgi::query(spatial_index, bgi::path(segment, 5), std::back_inserter(result));
-bgi::query(spatial_index, bgi::path(linestring, 5) && bgi::intersects(box), std::back_inserter(result));
-\endverbatim
-
-\warning
-Only one distance predicate (\c nearest() or \c path()) may be used in a query.
-
-\ingroup predicates
-
-\param linestring The path along which distance is calculated.
-\param k The maximum number of values to return.
-*/
-template <typename SegmentOrLinestring> inline
-detail::predicates::path<SegmentOrLinestring>
-path(SegmentOrLinestring const& linestring, unsigned k)
-{
- return detail::predicates::path<SegmentOrLinestring>(linestring, k);
-}
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-
-namespace detail { namespace predicates {
-
-// operator! generators
-
-template <typename Fun, bool Negated> inline
-satisfies<Fun, !Negated>
-operator!(satisfies<Fun, Negated> const& p)
-{
- return satisfies<Fun, !Negated>(p);
-}
-
-template <typename Geometry, typename Tag, bool Negated> inline
-spatial_predicate<Geometry, Tag, !Negated>
-operator!(spatial_predicate<Geometry, Tag, Negated> const& p)
-{
- return spatial_predicate<Geometry, Tag, !Negated>(p.geometry);
-}
-
-// operator&& generators
-
-template <typename Pred1, typename Pred2> inline
-boost::tuples::cons<
- Pred1,
- boost::tuples::cons<Pred2, boost::tuples::null_type>
->
-operator&&(Pred1 const& p1, Pred2 const& p2)
-{
- /*typedef typename boost::mpl::if_c<is_predicate<Pred1>::value, Pred1, Pred1 const&>::type stored1;
- typedef typename boost::mpl::if_c<is_predicate<Pred2>::value, Pred2, Pred2 const&>::type stored2;*/
- namespace bt = boost::tuples;
-
- return
- bt::cons< Pred1, bt::cons<Pred2, bt::null_type> >
- ( p1, bt::cons<Pred2, bt::null_type>(p2, bt::null_type()) );
-}
-
-template <typename Head, typename Tail, typename Pred> inline
-typename tuples::push_back<
- boost::tuples::cons<Head, Tail>, Pred
->::type
-operator&&(boost::tuples::cons<Head, Tail> const& t, Pred const& p)
-{
- //typedef typename boost::mpl::if_c<is_predicate<Pred>::value, Pred, Pred const&>::type stored;
- namespace bt = boost::tuples;
-
- return
- tuples::push_back<
- bt::cons<Head, Tail>, Pred
- >::apply(t, p);
-}
-
-}} // namespace detail::predicates
-
-}}} // namespace boost::geometry::index
-
-#endif // BOOST_GEOMETRY_INDEX_PREDICATES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/index/rtree.hpp b/contrib/restricted/boost/boost/geometry/index/rtree.hpp
deleted file mode 100644
index 53c26616696..00000000000
--- a/contrib/restricted/boost/boost/geometry/index/rtree.hpp
+++ /dev/null
@@ -1,2227 +0,0 @@
-// Boost.Geometry Index
-//
-// R-tree implementation
-//
-// Copyright (c) 2008 Federico J. Fernandez.
-// Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland.
-//
-// 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 BOOST_GEOMETRY_INDEX_RTREE_HPP
-#define BOOST_GEOMETRY_INDEX_RTREE_HPP
-
-// STD
-#include <algorithm>
-
-// Boost
-#include <boost/container/new_allocator.hpp>
-#include <boost/move/move.hpp>
-#include <boost/tuple/tuple.hpp>
-
-// Boost.Geometry
-#include <boost/geometry/algorithms/detail/comparable_distance/interface.hpp>
-#include <boost/geometry/algorithms/detail/covered_by/interface.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/interface.hpp>
-#include <boost/geometry/algorithms/detail/equals/interface.hpp>
-#include <boost/geometry/algorithms/detail/intersects/interface.hpp>
-#include <boost/geometry/algorithms/detail/overlaps/interface.hpp>
-#include <boost/geometry/algorithms/detail/touches/interface.hpp>
-#include <boost/geometry/algorithms/detail/within/interface.hpp>
-#include <boost/geometry/algorithms/centroid.hpp>
-
-#include <boost/geometry/geometries/point.hpp>
-#include <boost/geometry/geometries/box.hpp>
-
-// Boost.Geometry.Index
-#include <boost/geometry/index/detail/config_begin.hpp>
-
-#include <boost/geometry/index/detail/assert.hpp>
-#include <boost/geometry/index/detail/exception.hpp>
-
-#include <boost/geometry/index/detail/rtree/options.hpp>
-
-#include <boost/geometry/index/indexable.hpp>
-#include <boost/geometry/index/equal_to.hpp>
-
-#include <boost/geometry/index/detail/translator.hpp>
-
-#include <boost/geometry/index/predicates.hpp>
-#include <boost/geometry/index/distance_predicates.hpp>
-#include <boost/geometry/index/detail/rtree/adaptors.hpp>
-
-#include <boost/geometry/index/detail/meta.hpp>
-#include <boost/geometry/index/detail/utilities.hpp>
-#include <boost/geometry/index/detail/rtree/node/node.hpp>
-
-#include <boost/geometry/index/detail/algorithms/is_valid.hpp>
-
-#include <boost/geometry/index/detail/rtree/visitors/insert.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/iterator.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/remove.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/copy.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/destroy.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/spatial_query.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/distance_query.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/count.hpp>
-#include <boost/geometry/index/detail/rtree/visitors/children_box.hpp>
-
-#include <boost/geometry/index/detail/rtree/linear/linear.hpp>
-#include <boost/geometry/index/detail/rtree/quadratic/quadratic.hpp>
-#include <boost/geometry/index/detail/rtree/rstar/rstar.hpp>
-//#include <boost/geometry/extensions/index/detail/rtree/kmeans/kmeans.hpp>
-
-#include <boost/geometry/index/detail/rtree/pack_create.hpp>
-
-#include <boost/geometry/index/inserter.hpp>
-
-#include <boost/geometry/index/detail/rtree/utilities/view.hpp>
-
-#include <boost/geometry/index/detail/rtree/iterators.hpp>
-#include <boost/geometry/index/detail/rtree/query_iterators.hpp>
-
-#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-// serialization
-#include <boost/geometry/index/detail/serialization.hpp>
-#endif
-
-// TODO change the name to bounding_tree
-
-/*!
-\defgroup rtree_functions R-tree free functions (boost::geometry::index::)
-*/
-
-namespace boost { namespace geometry { namespace index {
-
-/*!
-\brief The R-tree spatial index.
-
-This is self-balancing spatial index capable to store various types of Values
-and balancing algorithms.
-
-\par Parameters
-The user must pass a type defining the Parameters which will
-be used in rtree creation process. This type is used e.g. to specify balancing
-algorithm with specific parameters like min and max number of elements in node.
-
-\par
-Predefined algorithms with compile-time parameters are:
-\li <tt>boost::geometry::index::linear</tt>,
- \li <tt>boost::geometry::index::quadratic</tt>,
- \li <tt>boost::geometry::index::rstar</tt>.
-
-\par
-Predefined algorithms with run-time parameters are:
- \li \c boost::geometry::index::dynamic_linear,
- \li \c boost::geometry::index::dynamic_quadratic,
- \li \c boost::geometry::index::dynamic_rstar.
-
-\par IndexableGetter
-The object of IndexableGetter type translates from Value to Indexable each time
-r-tree requires it. This means that this operation is done for each Value
-access. Therefore the IndexableGetter should return the Indexable by
-a reference type. The Indexable should not be calculated since it could harm
-the performance. The default IndexableGetter can translate all types adapted
-to Point, Box or Segment concepts (called Indexables). Furthermore, it can
-handle <tt>std::pair<Indexable, T></tt>, <tt>boost::tuple<Indexable, ...></tt>
-and <tt>std::tuple<Indexable, ...></tt> when possible. For example, for Value
-of type <tt>std::pair<Box, int></tt>, the default IndexableGetter translates
-from <tt>std::pair<Box, int> const&</tt> to <tt>Box const&</tt>.
-
-\par EqualTo
-The object of EqualTo type compares Values and returns <tt>true</tt> if they
-are equal. It's similar to <tt>std::equal_to<></tt>. The default EqualTo
-returns the result of <tt>boost::geometry::equals()</tt> for types adapted to
-some Geometry concept defined in Boost.Geometry and the result of
-<tt>operator==</tt> for other types. Components of Pairs and Tuples are
-compared left-to-right.
-
-\tparam Value The type of objects stored in the container.
-\tparam Parameters Compile-time parameters.
-\tparam IndexableGetter The function object extracting Indexable from Value.
-\tparam EqualTo The function object comparing objects of type Value.
-\tparam Allocator The allocator used to allocate/deallocate memory,
- construct/destroy nodes and Values.
-*/
-template
-<
- typename Value,
- typename Parameters,
- typename IndexableGetter = index::indexable<Value>,
- typename EqualTo = index::equal_to<Value>,
- typename Allocator = boost::container::new_allocator<Value>
->
-class rtree
-{
- BOOST_COPYABLE_AND_MOVABLE(rtree)
-
-public:
- /*! \brief The type of Value stored in the container. */
- typedef Value value_type;
- /*! \brief R-tree parameters type. */
- typedef Parameters parameters_type;
- /*! \brief The function object extracting Indexable from Value. */
- typedef IndexableGetter indexable_getter;
- /*! \brief The function object comparing objects of type Value. */
- typedef EqualTo value_equal;
- /*! \brief The type of allocator used by the container. */
- typedef Allocator allocator_type;
-
- // TODO: SHOULD THIS TYPE BE REMOVED?
- /*! \brief The Indexable type to which Value is translated. */
- typedef typename index::detail::indexable_type<
- detail::translator<IndexableGetter, EqualTo>
- >::type indexable_type;
-
- /*! \brief The Box type used by the R-tree. */
- typedef geometry::model::box<
- geometry::model::point<
- typename coordinate_type<indexable_type>::type,
- dimension<indexable_type>::value,
- typename coordinate_system<indexable_type>::type
- >
- >
- bounds_type;
-
-private:
-
- typedef detail::translator<IndexableGetter, EqualTo> translator_type;
-
- typedef bounds_type box_type;
- typedef typename detail::rtree::options_type<Parameters>::type options_type;
- typedef typename options_type::node_tag node_tag;
- typedef detail::rtree::allocators<allocator_type, value_type, typename options_type::parameters_type, box_type, node_tag> allocators_type;
-
- typedef typename detail::rtree::node<value_type, typename options_type::parameters_type, box_type, allocators_type, node_tag>::type node;
- typedef typename detail::rtree::internal_node<value_type, typename options_type::parameters_type, box_type, allocators_type, node_tag>::type internal_node;
- typedef typename detail::rtree::leaf<value_type, typename options_type::parameters_type, box_type, allocators_type, node_tag>::type leaf;
-
- typedef typename allocators_type::node_pointer node_pointer;
- typedef ::boost::container::allocator_traits<Allocator> allocator_traits_type;
- typedef detail::rtree::subtree_destroyer<value_type, options_type, translator_type, box_type, allocators_type> subtree_destroyer;
-
- friend class detail::rtree::utilities::view<rtree>;
-#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
- friend class detail::rtree::private_view<rtree>;
- friend class detail::rtree::const_private_view<rtree>;
-#endif
-
-public:
-
- /*! \brief Type of reference to Value. */
- typedef typename allocators_type::reference reference;
- /*! \brief Type of reference to const Value. */
- typedef typename allocators_type::const_reference const_reference;
- /*! \brief Type of pointer to Value. */
- typedef typename allocators_type::pointer pointer;
- /*! \brief Type of pointer to const Value. */
- typedef typename allocators_type::const_pointer const_pointer;
- /*! \brief Type of difference type. */
- typedef typename allocators_type::difference_type difference_type;
- /*! \brief Unsigned integral type used by the container. */
- typedef typename allocators_type::size_type size_type;
-
- /*! \brief Type of const iterator, category ForwardIterator. */
- typedef index::detail::rtree::iterators::iterator
- <
- value_type, options_type, translator_type, box_type, allocators_type
- > const_iterator;
-
- /*! \brief Type of const query iterator, category ForwardIterator. */
- typedef index::detail::rtree::iterators::query_iterator
- <
- value_type, allocators_type
- > const_query_iterator;
-
-public:
-
- /*!
- \brief The constructor.
-
- \param parameters The parameters object.
- \param getter The function object extracting Indexable from Value.
- \param equal The function object comparing Values.
-
- \par Throws
- If allocator default constructor throws.
- */
- inline explicit rtree(parameters_type const& parameters = parameters_type(),
- indexable_getter const& getter = indexable_getter(),
- value_equal const& equal = value_equal())
- : m_members(getter, equal, parameters)
- {}
-
- /*!
- \brief The constructor.
-
- \param parameters The parameters object.
- \param getter The function object extracting Indexable from Value.
- \param equal The function object comparing Values.
- \param allocator The allocator object.
-
- \par Throws
- If allocator copy constructor throws.
- */
- inline rtree(parameters_type const& parameters,
- indexable_getter const& getter,
- value_equal const& equal,
- allocator_type const& allocator)
- : m_members(getter, equal, parameters, allocator)
- {}
-
- /*!
- \brief The constructor.
-
- The tree is created using packing algorithm.
-
- \param first The beginning of the range of Values.
- \param last The end of the range of Values.
- \param parameters The parameters object.
- \param getter The function object extracting Indexable from Value.
- \param equal The function object comparing Values.
- \param allocator The allocator object.
-
- \par Throws
- \li If allocator copy constructor throws.
- \li If Value copy constructor or copy assignment throws.
- \li If allocation throws or returns invalid value.
- */
- template<typename Iterator>
- inline rtree(Iterator first, Iterator last,
- parameters_type const& parameters = parameters_type(),
- indexable_getter const& getter = indexable_getter(),
- value_equal const& equal = value_equal(),
- allocator_type const& allocator = allocator_type())
- : m_members(getter, equal, parameters, allocator)
- {
- typedef detail::rtree::pack<value_type, options_type, translator_type, box_type, allocators_type> pack;
- size_type vc = 0, ll = 0;
- m_members.root = pack::apply(first, last, vc, ll,
- m_members.parameters(), m_members.translator(), m_members.allocators());
- m_members.values_count = vc;
- m_members.leafs_level = ll;
- }
-
- /*!
- \brief The constructor.
-
- The tree is created using packing algorithm.
-
- \param rng The range of Values.
- \param parameters The parameters object.
- \param getter The function object extracting Indexable from Value.
- \param equal The function object comparing Values.
- \param allocator The allocator object.
-
- \par Throws
- \li If allocator copy constructor throws.
- \li If Value copy constructor or copy assignment throws.
- \li If allocation throws or returns invalid value.
- */
- template<typename Range>
- inline explicit rtree(Range const& rng,
- parameters_type const& parameters = parameters_type(),
- indexable_getter const& getter = indexable_getter(),
- value_equal const& equal = value_equal(),
- allocator_type const& allocator = allocator_type())
- : m_members(getter, equal, parameters, allocator)
- {
- typedef detail::rtree::pack<value_type, options_type, translator_type, box_type, allocators_type> pack;
- size_type vc = 0, ll = 0;
- m_members.root = pack::apply(::boost::begin(rng), ::boost::end(rng), vc, ll,
- m_members.parameters(), m_members.translator(), m_members.allocators());
- m_members.values_count = vc;
- m_members.leafs_level = ll;
- }
-
- /*!
- \brief The destructor.
-
- \par Throws
- Nothing.
- */
- inline ~rtree()
- {
- this->raw_destroy(*this);
- }
-
- /*!
- \brief The copy constructor.
-
- It uses parameters, translator and allocator from the source tree.
-
- \param src The rtree which content will be copied.
-
- \par Throws
- \li If allocator copy constructor throws.
- \li If Value copy constructor throws.
- \li If allocation throws or returns invalid value.
- */
- inline rtree(rtree const& src)
- : m_members(src.m_members.indexable_getter(),
- src.m_members.equal_to(),
- src.m_members.parameters(),
- allocator_traits_type::select_on_container_copy_construction(src.get_allocator()))
- {
- this->raw_copy(src, *this, false);
- }
-
- /*!
- \brief The copy constructor.
-
- It uses Parameters and translator from the source tree.
-
- \param src The rtree which content will be copied.
- \param allocator The allocator which will be used.
-
- \par Throws
- \li If allocator copy constructor throws.
- \li If Value copy constructor throws.
- \li If allocation throws or returns invalid value.
- */
- inline rtree(rtree const& src, allocator_type const& allocator)
- : m_members(src.m_members.indexable_getter(),
- src.m_members.equal_to(),
- src.m_members.parameters(), allocator)
- {
- this->raw_copy(src, *this, false);
- }
-
- /*!
- \brief The moving constructor.
-
- It uses parameters, translator and allocator from the source tree.
-
- \param src The rtree which content will be moved.
-
- \par Throws
- Nothing.
- */
- inline rtree(BOOST_RV_REF(rtree) src)
- : m_members(src.m_members.indexable_getter(),
- src.m_members.equal_to(),
- src.m_members.parameters(),
- boost::move(src.m_members.allocators()))
- {
- boost::swap(m_members.values_count, src.m_members.values_count);
- boost::swap(m_members.leafs_level, src.m_members.leafs_level);
- boost::swap(m_members.root, src.m_members.root);
- }
-
- /*!
- \brief The moving constructor.
-
- It uses parameters and translator from the source tree.
-
- \param src The rtree which content will be moved.
- \param allocator The allocator.
-
- \par Throws
- \li If allocator copy constructor throws.
- \li If Value copy constructor throws (only if allocators aren't equal).
- \li If allocation throws or returns invalid value (only if allocators aren't equal).
- */
- inline rtree(BOOST_RV_REF(rtree) src, allocator_type const& allocator)
- : m_members(src.m_members.indexable_getter(),
- src.m_members.equal_to(),
- src.m_members.parameters(),
- allocator)
- {
- if ( src.m_members.allocators() == allocator )
- {
- boost::swap(m_members.values_count, src.m_members.values_count);
- boost::swap(m_members.leafs_level, src.m_members.leafs_level);
- boost::swap(m_members.root, src.m_members.root);
- }
- else
- {
- this->raw_copy(src, *this, false);
- }
- }
-
- /*!
- \brief The assignment operator.
-
- It uses parameters and translator from the source tree.
-
- \param src The rtree which content will be copied.
-
- \par Throws
- \li If Value copy constructor throws.
- \li If allocation throws.
- \li If allocation throws or returns invalid value.
- */
- inline rtree & operator=(BOOST_COPY_ASSIGN_REF(rtree) src)
- {
- if ( &src != this )
- {
- allocators_type & this_allocs = m_members.allocators();
- allocators_type const& src_allocs = src.m_members.allocators();
-
- // NOTE: if propagate is true for std allocators on darwin 4.2.1, glibc++
- // (allocators stored as base classes of members_holder)
- // copying them changes values_count, in this case it doesn't cause errors since data must be copied
-
- typedef boost::mpl::bool_<
- allocator_traits_type::propagate_on_container_copy_assignment::value
- > propagate;
-
- if ( propagate::value && !(this_allocs == src_allocs) )
- this->raw_destroy(*this);
- detail::assign_cond(this_allocs, src_allocs, propagate());
-
- // It uses m_allocators
- this->raw_copy(src, *this, true);
- }
-
- return *this;
- }
-
- /*!
- \brief The moving assignment.
-
- It uses parameters and translator from the source tree.
-
- \param src The rtree which content will be moved.
-
- \par Throws
- Only if allocators aren't equal.
- \li If Value copy constructor throws.
- \li If allocation throws or returns invalid value.
- */
- inline rtree & operator=(BOOST_RV_REF(rtree) src)
- {
- if ( &src != this )
- {
- allocators_type & this_allocs = m_members.allocators();
- allocators_type & src_allocs = src.m_members.allocators();
-
- if ( this_allocs == src_allocs )
- {
- this->raw_destroy(*this);
-
- m_members.indexable_getter() = src.m_members.indexable_getter();
- m_members.equal_to() = src.m_members.equal_to();
- m_members.parameters() = src.m_members.parameters();
-
- boost::swap(m_members.values_count, src.m_members.values_count);
- boost::swap(m_members.leafs_level, src.m_members.leafs_level);
- boost::swap(m_members.root, src.m_members.root);
-
- // NOTE: if propagate is true for std allocators on darwin 4.2.1, glibc++
- // (allocators stored as base classes of members_holder)
- // moving them changes values_count
-
- typedef boost::mpl::bool_<
- allocator_traits_type::propagate_on_container_move_assignment::value
- > propagate;
- detail::move_cond(this_allocs, src_allocs, propagate());
- }
- else
- {
-// TODO - shouldn't here propagate_on_container_copy_assignment be checked like in operator=(const&)?
-
- // It uses m_allocators
- this->raw_copy(src, *this, true);
- }
- }
-
- return *this;
- }
-
- /*!
- \brief Swaps contents of two rtrees.
-
- Parameters, translator and allocators are swapped as well.
-
- \param other The rtree which content will be swapped with this rtree content.
-
- \par Throws
- If allocators swap throws.
- */
- void swap(rtree & other)
- {
- boost::swap(m_members.indexable_getter(), other.m_members.indexable_getter());
- boost::swap(m_members.equal_to(), other.m_members.equal_to());
- boost::swap(m_members.parameters(), other.m_members.parameters());
-
- // NOTE: if propagate is true for std allocators on darwin 4.2.1, glibc++
- // (allocators stored as base classes of members_holder)
- // swapping them changes values_count
-
- typedef boost::mpl::bool_<
- allocator_traits_type::propagate_on_container_swap::value
- > propagate;
- detail::swap_cond(m_members.allocators(), other.m_members.allocators(), propagate());
-
- boost::swap(m_members.values_count, other.m_members.values_count);
- boost::swap(m_members.leafs_level, other.m_members.leafs_level);
- boost::swap(m_members.root, other.m_members.root);
- }
-
- /*!
- \brief Insert a value to the index.
-
- \param value The value which will be stored in the container.
-
- \par Throws
- \li If Value copy constructor or copy assignment throws.
- \li If allocation throws or returns invalid value.
-
- \warning
- This operation only guarantees that there will be no memory leaks.
- After an exception is thrown the R-tree may be left in an inconsistent state,
- elements must not be inserted or removed. Other operations are allowed however
- some of them may return invalid data.
- */
- inline void insert(value_type const& value)
- {
- if ( !m_members.root )
- this->raw_create();
-
- this->raw_insert(value);
- }
-
- /*!
- \brief Insert a range of values to the index.
-
- \param first The beginning of the range of values.
- \param last The end of the range of values.
-
- \par Throws
- \li If Value copy constructor or copy assignment throws.
- \li If allocation throws or returns invalid value.
-
- \warning
- This operation only guarantees that there will be no memory leaks.
- After an exception is thrown the R-tree may be left in an inconsistent state,
- elements must not be inserted or removed. Other operations are allowed however
- some of them may return invalid data.
- */
- template <typename Iterator>
- inline void insert(Iterator first, Iterator last)
- {
- if ( !m_members.root )
- this->raw_create();
-
- for ( ; first != last ; ++first )
- this->raw_insert(*first);
- }
-
- /*!
- \brief Insert a value created using convertible object or a range of values to the index.
-
- \param conv_or_rng An object of type convertible to value_type or a range of values.
-
- \par Throws
- \li If Value copy constructor or copy assignment throws.
- \li If allocation throws or returns invalid value.
-
- \warning
- This operation only guarantees that there will be no memory leaks.
- After an exception is thrown the R-tree may be left in an inconsistent state,
- elements must not be inserted or removed. Other operations are allowed however
- some of them may return invalid data.
- */
- template <typename ConvertibleOrRange>
- inline void insert(ConvertibleOrRange const& conv_or_rng)
- {
- if ( !m_members.root )
- this->raw_create();
-
- typedef boost::mpl::bool_
- <
- boost::is_convertible<ConvertibleOrRange, value_type>::value
- > is_conv_t;
-
- this->insert_dispatch(conv_or_rng, is_conv_t());
- }
-
- /*!
- \brief Remove a value from the container.
-
- In contrast to the \c std::set or <tt>std::map erase()</tt> method
- this method removes only one value from the container.
-
- \param value The value which will be removed from the container.
-
- \return 1 if the value was removed, 0 otherwise.
-
- \par Throws
- \li If Value copy constructor or copy assignment throws.
- \li If allocation throws or returns invalid value.
-
- \warning
- This operation only guarantees that there will be no memory leaks.
- After an exception is thrown the R-tree may be left in an inconsistent state,
- elements must not be inserted or removed. Other operations are allowed however
- some of them may return invalid data.
- */
- inline size_type remove(value_type const& value)
- {
- if ( !m_members.root )
- return 0;
-
- return this->raw_remove(value);
- }
-
- /*!
- \brief Remove a range of values from the container.
-
- In contrast to the \c std::set or <tt>std::map erase()</tt> method
- it doesn't take iterators pointing to values stored in this container. It removes values equal
- to these passed as a range. Furthermore this method removes only one value for each one passed
- in the range, not all equal values.
-
- \param first The beginning of the range of values.
- \param last The end of the range of values.
-
- \return The number of removed values.
-
- \par Throws
- \li If Value copy constructor or copy assignment throws.
- \li If allocation throws or returns invalid value.
-
- \warning
- This operation only guarantees that there will be no memory leaks.
- After an exception is thrown the R-tree may be left in an inconsistent state,
- elements must not be inserted or removed. Other operations are allowed however
- some of them may return invalid data.
- */
- template <typename Iterator>
- inline size_type remove(Iterator first, Iterator last)
- {
- size_type result = 0;
-
- if ( !m_members.root )
- return result;
-
- for ( ; first != last ; ++first )
- result += this->raw_remove(*first);
- return result;
- }
-
- /*!
- \brief Remove value corresponding to an object convertible to it or a range of values from the container.
-
- In contrast to the \c std::set or <tt>std::map erase()</tt> method
- it removes values equal to these passed as a range. Furthermore, this method removes only
- one value for each one passed in the range, not all equal values.
-
- \param conv_or_rng The object of type convertible to value_type or a range of values.
-
- \return The number of removed values.
-
- \par Throws
- \li If Value copy constructor or copy assignment throws.
- \li If allocation throws or returns invalid value.
-
- \warning
- This operation only guarantees that there will be no memory leaks.
- After an exception is thrown the R-tree may be left in an inconsistent state,
- elements must not be inserted or removed. Other operations are allowed however
- some of them may return invalid data.
- */
- template <typename ConvertibleOrRange>
- inline size_type remove(ConvertibleOrRange const& conv_or_rng)
- {
- if ( !m_members.root )
- return 0;
-
- typedef boost::mpl::bool_
- <
- boost::is_convertible<ConvertibleOrRange, value_type>::value
- > is_conv_t;
-
- return this->remove_dispatch(conv_or_rng, is_conv_t());
- }
-
- /*!
- \brief Finds values meeting passed predicates e.g. nearest to some Point and/or intersecting some Box.
-
- This query function performs spatial and k-nearest neighbor searches. It allows to pass a set of predicates.
- Values will be returned only if all predicates are met.
-
- <b>Spatial predicates</b>
-
- Spatial predicates may be generated by one of the functions listed below:
- \li \c boost::geometry::index::contains(),
- \li \c boost::geometry::index::covered_by(),
- \li \c boost::geometry::index::covers(),
- \li \c boost::geometry::index::disjoint(),
- \li \c boost::geometry::index::intersects(),
- \li \c boost::geometry::index::overlaps(),
- \li \c boost::geometry::index::within(),
-
- It is possible to negate spatial predicates:
- \li <tt>! boost::geometry::index::contains()</tt>,
- \li <tt>! boost::geometry::index::covered_by()</tt>,
- \li <tt>! boost::geometry::index::covers()</tt>,
- \li <tt>! boost::geometry::index::disjoint()</tt>,
- \li <tt>! boost::geometry::index::intersects()</tt>,
- \li <tt>! boost::geometry::index::overlaps()</tt>,
- \li <tt>! boost::geometry::index::within()</tt>
-
- <b>Satisfies predicate</b>
-
- This is a special kind of predicate which allows to pass a user-defined function or function object which checks
- if Value should be returned by the query. It's generated by:
- \li \c boost::geometry::index::satisfies().
-
- <b>Nearest predicate</b>
-
- If the nearest predicate is passed a k-nearest neighbor search will be performed. This query will result
- in returning k values to the output iterator. Only one nearest predicate may be passed to the query.
- It may be generated by:
- \li \c boost::geometry::index::nearest().
-
- <b>Connecting predicates</b>
-
- Predicates may be passed together connected with \c operator&&().
-
- \par Example
- \verbatim
- // return elements intersecting box
- tree.query(bgi::intersects(box), std::back_inserter(result));
- // return elements intersecting poly but not within box
- tree.query(bgi::intersects(poly) && !bgi::within(box), std::back_inserter(result));
- // return elements overlapping box and meeting my_fun unary predicate
- tree.query(bgi::overlaps(box) && bgi::satisfies(my_fun), std::back_inserter(result));
- // return 5 elements nearest to pt and elements are intersecting box
- tree.query(bgi::nearest(pt, 5) && bgi::intersects(box), std::back_inserter(result));
-
- // For each found value do_something (it is a type of function object)
- tree.query(bgi::intersects(box),
- boost::make_function_output_iterator(do_something()));
-
- // For each value stored in the rtree do_something
- // always_true is a type of function object always returning true
- tree.query(bgi::satisfies(always_true()),
- boost::make_function_output_iterator(do_something()));
-
- // C++11 (lambda expression)
- tree.query(bgi::intersects(box),
- boost::make_function_output_iterator([](value_type const& val){
- // do something
- }));
-
- // C++14 (generic lambda expression)
- tree.query(bgi::intersects(box),
- boost::make_function_output_iterator([](auto const& val){
- // do something
- }));
- \endverbatim
-
- \par Throws
- If Value copy constructor or copy assignment throws.
- If predicates copy throws.
-
- \warning
- Only one \c nearest() predicate may be passed to the query. Passing more of them results in compile-time error.
-
- \param predicates Predicates.
- \param out_it The output iterator, e.g. generated by std::back_inserter().
-
- \return The number of values found.
- */
- template <typename Predicates, typename OutIter>
- size_type query(Predicates const& predicates, OutIter out_it) const
- {
- if ( !m_members.root )
- return 0;
-
- static const unsigned distance_predicates_count = detail::predicates_count_distance<Predicates>::value;
- static const bool is_distance_predicate = 0 < distance_predicates_count;
- BOOST_MPL_ASSERT_MSG((distance_predicates_count <= 1), PASS_ONLY_ONE_DISTANCE_PREDICATE, (Predicates));
-
- return query_dispatch(predicates, out_it, boost::mpl::bool_<is_distance_predicate>());
- }
-
- /*!
- \brief Returns a query iterator pointing at the begin of the query range.
-
- This method returns an iterator which may be used to perform iterative queries.
- For the information about predicates which may be passed to this method see query().
-
- \par Example
- \verbatim
- for ( Rtree::const_query_iterator it = tree.qbegin(bgi::nearest(pt, 10000)) ;
- it != tree.qend() ; ++it )
- {
- // do something with value
- if ( has_enough_nearest_values() )
- break;
- }
-
- // C++11 (auto)
- for ( auto it = tree.qbegin(bgi::nearest(pt, 3)) ; it != tree.qend() ; ++it )
- {
- // do something with value
- }
-
- // C++14 (generic lambda expression)
- std::for_each(tree.qbegin(bgi::nearest(pt, 3)), tree.qend(), [](auto const& val){
- // do something with value
- });
- \endverbatim
-
- \par Iterator category
- ForwardIterator
-
- \par Throws
- If predicates copy throws.
- If allocation throws.
-
- \warning
- The modification of the rtree may invalidate the iterators.
-
- \param predicates Predicates.
-
- \return The iterator pointing at the begin of the query range.
- */
- template <typename Predicates>
- const_query_iterator qbegin(Predicates const& predicates) const
- {
- return const_query_iterator(qbegin_(predicates));
- }
-
- /*!
- \brief Returns a query iterator pointing at the end of the query range.
-
- This method returns an iterator which may be used to check if the query has ended.
-
- \par Example
- \verbatim
- for ( Rtree::const_query_iterator it = tree.qbegin(bgi::nearest(pt, 10000)) ;
- it != tree.qend() ; ++it )
- {
- // do something with value
- if ( has_enough_nearest_values() )
- break;
- }
-
- // C++11 (auto)
- for ( auto it = tree.qbegin(bgi::nearest(pt, 3)) ; it != tree.qend() ; ++it )
- {
- // do something with value
- }
-
- // C++14 (generic lambda expression)
- std::for_each(tree.qbegin(bgi::nearest(pt, 3)), tree.qend(), [](auto const& val){
- // do something with value
- });
- \endverbatim
-
- \par Iterator category
- ForwardIterator
-
- \par Throws
- Nothing
-
- \warning
- The modification of the rtree may invalidate the iterators.
-
- \return The iterator pointing at the end of the query range.
- */
- const_query_iterator qend() const
- {
- return const_query_iterator();
- }
-
-#ifndef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-private:
-#endif
- /*!
- \brief Returns a query iterator pointing at the begin of the query range.
-
- This method returns an iterator which may be used to perform iterative queries.
- For the information about predicates which may be passed to this method see query().
-
- The type of the returned iterator depends on the type of passed Predicates but the iterator of this type
- may be assigned to the variable of const_query_iterator type. If you'd like to use the type of the iterator
- returned by this method you may get the type e.g. by using C++11 decltype or Boost.Typeof library.
- This iterator may be compared with iterators returned by both versions of qend() method.
-
- \par Example
- \verbatim
- // Store the result in the container using std::copy() - it requires both iterators of the same type
- std::copy(tree.qbegin_(bgi::intersects(box)), tree.qend_(bgi::intersects(box)), std::back_inserter(result));
-
- // Store the result in the container using std::copy() and type-erased iterators
- Rtree::const_query_iterator first = tree.qbegin_(bgi::intersects(box));
- Rtree::const_query_iterator last = tree.qend_();
- std::copy(first, last, std::back_inserter(result));
-
- // Boost.Typeof
- typedef BOOST_TYPEOF(tree.qbegin(bgi::nearest(pt, 10000))) Iter;
- for ( Iter it = tree.qbegin_(bgi::nearest(pt, 10000)) ; it != tree.qend_() ; ++it )
- {
- // do something with value
- if ( has_enough_nearest_values() )
- break;
- }
-
- // C++11 (auto)
- for ( auto it = tree.qbegin_(bgi::nearest(pt, 10000)) ; it != tree.qend_() ; ++it )
- {
- // do something with value
- if ( has_enough_nearest_values() )
- break;
- }
- \endverbatim
-
- \par Iterator category
- ForwardIterator
-
- \par Throws
- If predicates copy throws.
- If allocation throws.
-
- \warning
- The modification of the rtree may invalidate the iterators.
-
- \param predicates Predicates.
-
- \return The iterator pointing at the begin of the query range.
- */
- template <typename Predicates>
- typename boost::mpl::if_c<
- detail::predicates_count_distance<Predicates>::value == 0,
- detail::rtree::iterators::spatial_query_iterator<value_type, options_type, translator_type, box_type, allocators_type, Predicates>,
- detail::rtree::iterators::distance_query_iterator<
- value_type, options_type, translator_type, box_type, allocators_type, Predicates,
- detail::predicates_find_distance<Predicates>::value
- >
- >::type
- qbegin_(Predicates const& predicates) const
- {
- static const unsigned distance_predicates_count = detail::predicates_count_distance<Predicates>::value;
- BOOST_MPL_ASSERT_MSG((distance_predicates_count <= 1), PASS_ONLY_ONE_DISTANCE_PREDICATE, (Predicates));
-
- typedef typename boost::mpl::if_c<
- detail::predicates_count_distance<Predicates>::value == 0,
- detail::rtree::iterators::spatial_query_iterator<value_type, options_type, translator_type, box_type, allocators_type, Predicates>,
- detail::rtree::iterators::distance_query_iterator<
- value_type, options_type, translator_type, box_type, allocators_type, Predicates,
- detail::predicates_find_distance<Predicates>::value
- >
- >::type iterator_type;
-
- if ( !m_members.root )
- return iterator_type(m_members.translator(), predicates);
-
- return iterator_type(m_members.root, m_members.translator(), predicates);
- }
-
- /*!
- \brief Returns the query iterator pointing at the end of the query range.
-
- This method returns the iterator which may be used to perform iterative queries. For the information
- about the predicates which may be passed to this method see query().
-
- The type of the returned iterator depends on the type of passed Predicates but the iterator of this type
- may be assigned to the variable of const_query_iterator type. If you'd like to use the type of the iterator
- returned by this method you may get the type e.g. by using C++11 decltype or Boost.Typeof library.
-
- The type of the iterator returned by this method is the same as the one returned by qbegin() to which
- the same predicates were passed.
-
- \par Example
- \verbatim
- // Store the result in the container using std::copy() - it requires both iterators of the same type
- std::copy(tree.qbegin_(bgi::intersects(box)), tree.qend_(bgi::intersects(box)), std::back_inserter(result));
- \endverbatim
-
- \par Iterator category
- ForwardIterator
-
- \par Throws
- If predicates copy throws.
-
- \warning
- The modification of the rtree may invalidate the iterators.
-
- \param predicates Predicates.
-
- \return The iterator pointing at the end of the query range.
- */
- template <typename Predicates>
- typename boost::mpl::if_c<
- detail::predicates_count_distance<Predicates>::value == 0,
- detail::rtree::iterators::spatial_query_iterator<value_type, options_type, translator_type, box_type, allocators_type, Predicates>,
- detail::rtree::iterators::distance_query_iterator<
- value_type, options_type, translator_type, box_type, allocators_type, Predicates,
- detail::predicates_find_distance<Predicates>::value
- >
- >::type
- qend_(Predicates const& predicates) const
- {
- static const unsigned distance_predicates_count = detail::predicates_count_distance<Predicates>::value;
- BOOST_MPL_ASSERT_MSG((distance_predicates_count <= 1), PASS_ONLY_ONE_DISTANCE_PREDICATE, (Predicates));
-
- typedef typename boost::mpl::if_c<
- detail::predicates_count_distance<Predicates>::value == 0,
- detail::rtree::iterators::spatial_query_iterator<value_type, options_type, translator_type, box_type, allocators_type, Predicates>,
- detail::rtree::iterators::distance_query_iterator<
- value_type, options_type, translator_type, box_type, allocators_type, Predicates,
- detail::predicates_find_distance<Predicates>::value
- >
- >::type iterator_type;
-
- return iterator_type(m_members.translator(), predicates);
- }
-
- /*!
- \brief Returns the query iterator pointing at the end of the query range.
-
- This method returns the iterator which may be compared with the iterator returned by qbegin() in order to
- check if the query has ended.
-
- The type of the returned iterator is different than the type returned by qbegin() but the iterator of this type
- may be assigned to the variable of const_query_iterator type. If you'd like to use the type of the iterator returned by this
- method, which most certainly will be faster than the type-erased iterator, you may get the type
- e.g. by using C++11 decltype or Boost.Typeof library.
-
- The type of the iterator returned by this method is different than the type returned by qbegin().
-
- \par Example
- \verbatim
- // Store the result in the container using std::copy() and type-erased iterators
- Rtree::const_query_iterator first = tree.qbegin_(bgi::intersects(box));
- Rtree::const_query_iterator last = tree.qend_();
- std::copy(first, last, std::back_inserter(result));
-
- // Boost.Typeof
- typedef BOOST_TYPEOF(tree.qbegin(bgi::nearest(pt, 10000))) Iter;
- for ( Iter it = tree.qbegin_(bgi::nearest(pt, 10000)) ; it != tree.qend_() ; ++it )
- {
- // do something with value
- if ( has_enough_nearest_values() )
- break;
- }
-
- // C++11 (auto)
- for ( auto it = tree.qbegin_(bgi::nearest(pt, 10000)) ; it != tree.qend_() ; ++it )
- {
- // do something with value
- if ( has_enough_nearest_values() )
- break;
- }
- \endverbatim
-
- \par Iterator category
- ForwardIterator
-
- \par Throws
- Nothing
-
- \warning
- The modification of the rtree may invalidate the iterators.
-
- \return The iterator pointing at the end of the query range.
- */
- detail::rtree::iterators::end_query_iterator<value_type, allocators_type>
- qend_() const
- {
- return detail::rtree::iterators::end_query_iterator<value_type, allocators_type>();
- }
-
-public:
-
- /*!
- \brief Returns the iterator pointing at the begin of the rtree values range.
-
- This method returns the iterator which may be used to iterate over all values
- stored in the rtree.
-
- \par Example
- \verbatim
- // Copy all values into the vector
- std::copy(tree.begin(), tree.end(), std::back_inserter(vec));
-
- for ( Rtree::const_iterator it = tree.begin() ; it != tree.end() ; ++it )
- {
- // do something with value
- }
-
- // C++11 (auto)
- for ( auto it = tree.begin() ; it != tree.end() ; ++it )
- {
- // do something with value
- }
-
- // C++14 (generic lambda expression)
- std::for_each(tree.begin(), tree.end(), [](auto const& val){
- // do something with value
- })
- \endverbatim
-
- \par Iterator category
- ForwardIterator
-
- \par Throws
- If allocation throws.
-
- \warning
- The modification of the rtree may invalidate the iterators.
-
- \return The iterator pointing at the begin of the range.
- */
- const_iterator begin() const
- {
- if ( !m_members.root )
- return const_iterator();
-
- return const_iterator(m_members.root);
- }
-
- /*!
- \brief Returns the iterator pointing at the end of the rtree values range.
-
- This method returns the iterator which may be compared with the iterator returned by begin()
- in order to check if the iteration has ended.
-
- \par Example
- \verbatim
- for ( Rtree::const_iterator it = tree.begin() ; it != tree.end() ; ++it )
- {
- // do something with value
- }
-
- // C++11 (lambda expression)
- std::for_each(tree.begin(), tree.end(), [](value_type const& val){
- // do something with value
- })
- \endverbatim
-
- \par Iterator category
- ForwardIterator
-
- \par Throws
- Nothing.
-
- \warning
- The modification of the rtree may invalidate the iterators.
-
- \return The iterator pointing at the end of the range.
- */
- const_iterator end() const
- {
- return const_iterator();
- }
-
- /*!
- \brief Returns the number of stored values.
-
- \return The number of stored values.
-
- \par Throws
- Nothing.
- */
- inline size_type size() const
- {
- return m_members.values_count;
- }
-
- /*!
- \brief Query if the container is empty.
-
- \return true if the container is empty.
-
- \par Throws
- Nothing.
- */
- inline bool empty() const
- {
- return 0 == m_members.values_count;
- }
-
- /*!
- \brief Removes all values stored in the container.
-
- \par Throws
- Nothing.
- */
- inline void clear()
- {
- this->raw_destroy(*this);
- }
-
- /*!
- \brief Returns the box able to contain all values stored in the container.
-
- Returns the box able to contain all values stored in the container.
- If the container is empty the result of \c geometry::assign_inverse() is returned.
-
- \return The box able to contain all values stored in the container or an invalid box if
- there are no values in the container.
-
- \par Throws
- Nothing.
- */
- inline bounds_type bounds() const
- {
- bounds_type result;
- // in order to suppress the uninitialized variable warnings
- geometry::assign_inverse(result);
-
- if ( m_members.root )
- {
- detail::rtree::visitors::children_box<value_type, options_type, translator_type, box_type, allocators_type>
- box_v(result, m_members.translator());
- detail::rtree::apply_visitor(box_v, *m_members.root);
- }
-
- return result;
- }
-
- /*!
- \brief Count Values or Indexables stored in the container.
-
- For indexable_type it returns the number of values which indexables equals the parameter.
- For value_type it returns the number of values which equals the parameter.
-
- \param vori The value or indexable which will be counted.
-
- \return The number of values found.
-
- \par Throws
- Nothing.
- */
- template <typename ValueOrIndexable>
- size_type count(ValueOrIndexable const& vori) const
- {
- if ( !m_members.root )
- return 0;
-
- // the input should be convertible to Value or Indexable type
-
- enum { as_val = 0, as_ind, dont_know };
- typedef boost::mpl::int_
- <
- boost::is_same<ValueOrIndexable, value_type>::value ?
- as_val :
- boost::is_same<ValueOrIndexable, indexable_type>::value ?
- as_ind :
- boost::is_convertible<ValueOrIndexable, indexable_type>::value ?
- as_ind :
- boost::is_convertible<ValueOrIndexable, value_type>::value ?
- as_val :
- dont_know
- > variant;
-
- BOOST_MPL_ASSERT_MSG((variant::value != dont_know),
- PASSED_OBJECT_NOT_CONVERTIBLE_TO_VALUE_NOR_INDEXABLE_TYPE,
- (ValueOrIndexable));
-
- typedef typename boost::mpl::if_c
- <
- variant::value == as_val,
- value_type,
- indexable_type
- >::type value_or_indexable;
-
- // NOTE: If an object of convertible but not the same type is passed
- // into the function, here a temporary will be created.
- return this->template raw_count<value_or_indexable>(vori);
- }
-
- /*!
- \brief Returns parameters.
-
- \return The parameters object.
-
- \par Throws
- Nothing.
- */
- inline parameters_type parameters() const
- {
- return m_members.parameters();
- }
-
- /*!
- \brief Returns function retrieving Indexable from Value.
-
- \return The indexable_getter object.
-
- \par Throws
- Nothing.
- */
- indexable_getter indexable_get() const
- {
- return m_members.indexable_getter();
- }
-
- /*!
- \brief Returns function comparing Values
-
- \return The value_equal function.
-
- \par Throws
- Nothing.
- */
- value_equal value_eq() const
- {
- return m_members.equal_to();
- }
-
- /*!
- \brief Returns allocator used by the rtree.
-
- \return The allocator.
-
- \par Throws
- If allocator copy constructor throws.
- */
- allocator_type get_allocator() const
- {
- return m_members.allocators().allocator();
- }
-
-private:
-
- /*!
- \brief Returns the translator object.
-
- \return The translator object.
-
- \par Throws
- Nothing.
- */
- inline translator_type translator() const
- {
- return m_members.translator();
- }
-
- /*!
- \brief Apply a visitor to the nodes structure in order to perform some operator.
-
- This function is not a part of the 'official' interface. However it makes
- possible e.g. to pass a visitor drawing the tree structure.
-
- \param visitor The visitor object.
-
- \par Throws
- If Visitor::operator() throws.
- */
- template <typename Visitor>
- inline void apply_visitor(Visitor & visitor) const
- {
- if ( m_members.root )
- detail::rtree::apply_visitor(visitor, *m_members.root);
- }
-
- /*!
- \brief Returns the depth of the R-tree.
-
- This function is not a part of the 'official' interface.
-
- \return The depth of the R-tree.
-
- \par Throws
- Nothing.
- */
- inline size_type depth() const
- {
- return m_members.leafs_level;
- }
-
-private:
-
- /*!
- \pre Root node must exist - m_root != 0.
-
- \brief Insert a value to the index.
-
- \param value The value which will be stored in the container.
-
- \par Exception-safety
- basic
- */
- inline void raw_insert(value_type const& value)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(m_members.root, "The root must exist");
- // CONSIDER: alternative - ignore invalid indexable or throw an exception
- BOOST_GEOMETRY_INDEX_ASSERT(detail::is_valid(m_members.translator()(value)), "Indexable is invalid");
-
- detail::rtree::visitors::insert<
- value_type,
- value_type, options_type, translator_type, box_type, allocators_type,
- typename options_type::insert_tag
- > insert_v(m_members.root, m_members.leafs_level, value,
- m_members.parameters(), m_members.translator(), m_members.allocators());
-
- detail::rtree::apply_visitor(insert_v, *m_members.root);
-
-// TODO
-// Think about this: If exception is thrown, may the root be removed?
-// Or it is just cleared?
-
-// TODO
-// If exception is thrown, m_values_count may be invalid
- ++m_members.values_count;
- }
-
- /*!
- \brief Remove the value from the container.
-
- \param value The value which will be removed from the container.
-
- \par Exception-safety
- basic
- */
- inline size_type raw_remove(value_type const& value)
- {
- // TODO: awulkiew - assert for correct value (indexable) ?
- BOOST_GEOMETRY_INDEX_ASSERT(m_members.root, "The root must exist");
-
- detail::rtree::visitors::remove<
- value_type, options_type, translator_type, box_type, allocators_type
- > remove_v(m_members.root, m_members.leafs_level, value,
- m_members.parameters(), m_members.translator(), m_members.allocators());
-
- detail::rtree::apply_visitor(remove_v, *m_members.root);
-
- // If exception is thrown, m_values_count may be invalid
-
- if ( remove_v.is_value_removed() )
- {
- BOOST_GEOMETRY_INDEX_ASSERT(0 < m_members.values_count, "unexpected state");
-
- --m_members.values_count;
-
- return 1;
- }
-
- return 0;
- }
-
- /*!
- \brief Create an empty R-tree i.e. new empty root node and clear other attributes.
-
- \par Exception-safety
- strong
- */
- inline void raw_create()
- {
- BOOST_GEOMETRY_INDEX_ASSERT(0 == m_members.root, "the tree is already created");
-
- m_members.root = detail::rtree::create_node<allocators_type, leaf>::apply(m_members.allocators()); // MAY THROW (N: alloc)
- m_members.values_count = 0;
- m_members.leafs_level = 0;
- }
-
- /*!
- \brief Destroy the R-tree i.e. all nodes and clear attributes.
-
- \param t The container which is going to be destroyed.
-
- \par Exception-safety
- nothrow
- */
- inline void raw_destroy(rtree & t)
- {
- if ( t.m_members.root )
- {
- detail::rtree::visitors::destroy<value_type, options_type, translator_type, box_type, allocators_type>
- del_v(t.m_members.root, t.m_members.allocators());
- detail::rtree::apply_visitor(del_v, *t.m_members.root);
-
- t.m_members.root = 0;
- }
- t.m_members.values_count = 0;
- t.m_members.leafs_level = 0;
- }
-
- /*!
- \brief Copy the R-tree i.e. whole nodes structure, values and other attributes.
- It uses destination's allocators to create the new structure.
-
- \param src The source R-tree.
- \param dst The destination R-tree.
- \param copy_tr_and_params If true, translator and parameters will also be copied.
-
- \par Exception-safety
- strong
- */
- inline void raw_copy(rtree const& src, rtree & dst, bool copy_tr_and_params) const
- {
- detail::rtree::visitors::copy<value_type, options_type, translator_type, box_type, allocators_type>
- copy_v(dst.m_members.allocators());
-
- if ( src.m_members.root )
- detail::rtree::apply_visitor(copy_v, *src.m_members.root); // MAY THROW (V, E: alloc, copy, N: alloc)
-
- if ( copy_tr_and_params )
- {
- dst.m_members.indexable_getter() = src.m_members.indexable_getter();
- dst.m_members.equal_to() = src.m_members.equal_to();
- dst.m_members.parameters() = src.m_members.parameters();
- }
-
- // TODO use subtree_destroyer
- if ( dst.m_members.root )
- {
- detail::rtree::visitors::destroy<value_type, options_type, translator_type, box_type, allocators_type>
- del_v(dst.m_members.root, dst.m_members.allocators());
- detail::rtree::apply_visitor(del_v, *dst.m_members.root);
- dst.m_members.root = 0;
- }
-
- dst.m_members.root = copy_v.result;
- dst.m_members.values_count = src.m_members.values_count;
- dst.m_members.leafs_level = src.m_members.leafs_level;
- }
-
- /*!
- \brief Insert a value corresponding to convertible object into the index.
-
- \param val_conv The object convertible to value.
-
- \par Exception-safety
- basic
- */
- template <typename ValueConvertible>
- inline void insert_dispatch(ValueConvertible const& val_conv,
- boost::mpl::bool_<true> const& /*is_convertible*/)
- {
- this->raw_insert(val_conv);
- }
-
- /*!
- \brief Insert a range of values into the index.
-
- \param rng The range of values.
-
- \par Exception-safety
- basic
- */
- template <typename Range>
- inline void insert_dispatch(Range const& rng,
- boost::mpl::bool_<false> const& /*is_convertible*/)
- {
- BOOST_MPL_ASSERT_MSG((detail::is_range<Range>::value),
- PASSED_OBJECT_IS_NOT_CONVERTIBLE_TO_VALUE_NOR_A_RANGE,
- (Range));
-
- typedef typename boost::range_const_iterator<Range>::type It;
- for ( It it = boost::const_begin(rng); it != boost::const_end(rng) ; ++it )
- this->raw_insert(*it);
- }
-
- /*!
- \brief Remove a value corresponding to convertible object from the index.
-
- \param val_conv The object convertible to value.
-
- \par Exception-safety
- basic
- */
- template <typename ValueConvertible>
- inline size_type remove_dispatch(ValueConvertible const& val_conv,
- boost::mpl::bool_<true> const& /*is_convertible*/)
- {
- return this->raw_remove(val_conv);
- }
-
- /*!
- \brief Remove a range of values from the index.
-
- \param rng The range of values which will be removed from the container.
-
- \par Exception-safety
- basic
- */
- template <typename Range>
- inline size_type remove_dispatch(Range const& rng,
- boost::mpl::bool_<false> const& /*is_convertible*/)
- {
- BOOST_MPL_ASSERT_MSG((detail::is_range<Range>::value),
- PASSED_OBJECT_IS_NOT_CONVERTIBLE_TO_VALUE_NOR_A_RANGE,
- (Range));
-
- size_type result = 0;
- typedef typename boost::range_const_iterator<Range>::type It;
- for ( It it = boost::const_begin(rng); it != boost::const_end(rng) ; ++it )
- result += this->raw_remove(*it);
- return result;
- }
-
- /*!
- \brief Return values meeting predicates.
-
- \par Exception-safety
- strong
- */
- template <typename Predicates, typename OutIter>
- size_type query_dispatch(Predicates const& predicates, OutIter out_it, boost::mpl::bool_<false> const& /*is_distance_predicate*/) const
- {
- detail::rtree::visitors::spatial_query<value_type, options_type, translator_type, box_type, allocators_type, Predicates, OutIter>
- find_v(m_members.translator(), predicates, out_it);
-
- detail::rtree::apply_visitor(find_v, *m_members.root);
-
- return find_v.found_count;
- }
-
- /*!
- \brief Perform nearest neighbour search.
-
- \par Exception-safety
- strong
- */
- template <typename Predicates, typename OutIter>
- size_type query_dispatch(Predicates const& predicates, OutIter out_it, boost::mpl::bool_<true> const& /*is_distance_predicate*/) const
- {
- BOOST_GEOMETRY_INDEX_ASSERT(m_members.root, "The root must exist");
-
- static const unsigned distance_predicate_index = detail::predicates_find_distance<Predicates>::value;
- detail::rtree::visitors::distance_query<
- value_type,
- options_type,
- translator_type,
- box_type,
- allocators_type,
- Predicates,
- distance_predicate_index,
- OutIter
- > distance_v(m_members.parameters(), m_members.translator(), predicates, out_it);
-
- detail::rtree::apply_visitor(distance_v, *m_members.root);
-
- return distance_v.finish();
- }
-
- /*!
- \brief Count elements corresponding to value or indexable.
-
- \par Exception-safety
- strong
- */
- template <typename ValueOrIndexable>
- size_type raw_count(ValueOrIndexable const& vori) const
- {
- BOOST_GEOMETRY_INDEX_ASSERT(m_members.root, "The root must exist");
-
- detail::rtree::visitors::count
- <
- ValueOrIndexable,
- value_type,
- options_type,
- translator_type,
- box_type,
- allocators_type
- > count_v(vori, m_members.translator());
-
- detail::rtree::apply_visitor(count_v, *m_members.root);
-
- return count_v.found_count;
- }
-
- struct members_holder
- : public translator_type
- , public Parameters
- , public allocators_type
- {
- private:
- members_holder(members_holder const&);
- members_holder & operator=(members_holder const&);
-
- public:
- template <typename IndGet, typename ValEq, typename Alloc>
- members_holder(IndGet const& ind_get,
- ValEq const& val_eq,
- Parameters const& parameters,
- BOOST_FWD_REF(Alloc) alloc)
- : translator_type(ind_get, val_eq)
- , Parameters(parameters)
- , allocators_type(boost::forward<Alloc>(alloc))
- , values_count(0)
- , leafs_level(0)
- , root(0)
- {}
-
- template <typename IndGet, typename ValEq>
- members_holder(IndGet const& ind_get,
- ValEq const& val_eq,
- Parameters const& parameters)
- : translator_type(ind_get, val_eq)
- , Parameters(parameters)
- , allocators_type()
- , values_count(0)
- , leafs_level(0)
- , root(0)
- {}
-
- translator_type const& translator() const { return *this; }
-
- IndexableGetter const& indexable_getter() const { return *this; }
- IndexableGetter & indexable_getter() { return *this; }
- EqualTo const& equal_to() const { return *this; }
- EqualTo & equal_to() { return *this; }
- Parameters const& parameters() const { return *this; }
- Parameters & parameters() { return *this; }
- allocators_type const& allocators() const { return *this; }
- allocators_type & allocators() { return *this; }
-
- size_type values_count;
- size_type leafs_level;
- node_pointer root;
- };
-
- members_holder m_members;
-};
-
-/*!
-\brief Insert a value to the index.
-
-It calls <tt>rtree::insert(value_type const&)</tt>.
-
-\ingroup rtree_functions
-
-\param tree The spatial index.
-\param v The value which will be stored in the index.
-*/
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator>
-inline void insert(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> & tree,
- Value const& v)
-{
- tree.insert(v);
-}
-
-/*!
-\brief Insert a range of values to the index.
-
-It calls <tt>rtree::insert(Iterator, Iterator)</tt>.
-
-\ingroup rtree_functions
-
-\param tree The spatial index.
-\param first The beginning of the range of values.
-\param last The end of the range of values.
-*/
-template<typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator,
- typename Iterator>
-inline void insert(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> & tree,
- Iterator first, Iterator last)
-{
- tree.insert(first, last);
-}
-
-/*!
-\brief Insert a value created using convertible object or a range of values to the index.
-
-It calls <tt>rtree::insert(ConvertibleOrRange const&)</tt>.
-
-\ingroup rtree_functions
-
-\param tree The spatial index.
-\param conv_or_rng The object of type convertible to value_type or a range of values.
-*/
-template<typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator,
- typename ConvertibleOrRange>
-inline void insert(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> & tree,
- ConvertibleOrRange const& conv_or_rng)
-{
- tree.insert(conv_or_rng);
-}
-
-/*!
-\brief Remove a value from the container.
-
-Remove a value from the container. In contrast to the \c std::set or <tt>std::map erase()</tt> method
-this function removes only one value from the container.
-
-It calls <tt>rtree::remove(value_type const&)</tt>.
-
-\ingroup rtree_functions
-
-\param tree The spatial index.
-\param v The value which will be removed from the index.
-
-\return 1 if value was removed, 0 otherwise.
-*/
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator>
-inline typename rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator>::size_type
-remove(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> & tree,
- Value const& v)
-{
- return tree.remove(v);
-}
-
-/*!
-\brief Remove a range of values from the container.
-
-Remove a range of values from the container. In contrast to the \c std::set or <tt>std::map erase()</tt> method
-it doesn't take iterators pointing to values stored in this container. It removes values equal
-to these passed as a range. Furthermore this function removes only one value for each one passed
-in the range, not all equal values.
-
-It calls <tt>rtree::remove(Iterator, Iterator)</tt>.
-
-\ingroup rtree_functions
-
-\param tree The spatial index.
-\param first The beginning of the range of values.
-\param last The end of the range of values.
-
-\return The number of removed values.
-*/
-template<typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator,
- typename Iterator>
-inline typename rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator>::size_type
-remove(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> & tree,
- Iterator first, Iterator last)
-{
- return tree.remove(first, last);
-}
-
-/*!
-\brief Remove a value corresponding to an object convertible to it or a range of values from the container.
-
-Remove a value corresponding to an object convertible to it or a range of values from the container.
-In contrast to the \c std::set or <tt>std::map erase()</tt> method
-it removes values equal to these passed as a range. Furthermore this method removes only
-one value for each one passed in the range, not all equal values.
-
-It calls <tt>rtree::remove(ConvertibleOrRange const&)</tt>.
-
-\ingroup rtree_functions
-
-\param tree The spatial index.
-\param conv_or_rng The object of type convertible to value_type or the range of values.
-
-\return The number of removed values.
-*/
-template<typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator,
- typename ConvertibleOrRange>
-inline typename rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator>::size_type
-remove(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> & tree,
- ConvertibleOrRange const& conv_or_rng)
-{
- return tree.remove(conv_or_rng);
-}
-
-/*!
-\brief Finds values meeting passed predicates e.g. nearest to some Point and/or intersecting some Box.
-
-This query function performs spatial and k-nearest neighbor searches. It allows to pass a set of predicates.
-Values will be returned only if all predicates are met.
-
-<b>Spatial predicates</b>
-
-Spatial predicates may be generated by one of the functions listed below:
-\li \c boost::geometry::index::contains(),
-\li \c boost::geometry::index::covered_by(),
-\li \c boost::geometry::index::covers(),
-\li \c boost::geometry::index::disjoint(),
-\li \c boost::geometry::index::intersects(),
-\li \c boost::geometry::index::overlaps(),
-\li \c boost::geometry::index::within(),
-
-It is possible to negate spatial predicates:
-\li <tt>! boost::geometry::index::contains()</tt>,
-\li <tt>! boost::geometry::index::covered_by()</tt>,
-\li <tt>! boost::geometry::index::covers()</tt>,
-\li <tt>! boost::geometry::index::disjoint()</tt>,
-\li <tt>! boost::geometry::index::intersects()</tt>,
-\li <tt>! boost::geometry::index::overlaps()</tt>,
-\li <tt>! boost::geometry::index::within()</tt>
-
-<b>Satisfies predicate</b>
-
-This is a special kind of predicate which allows to pass a user-defined function or function object which checks
-if Value should be returned by the query. It's generated by:
-\li \c boost::geometry::index::satisfies().
-
-<b>Nearest predicate</b>
-
-If the nearest predicate is passed a k-nearest neighbor search will be performed. This query will result
-in returning k values to the output iterator. Only one nearest predicate may be passed to the query.
-It may be generated by:
-\li \c boost::geometry::index::nearest().
-
-<b>Connecting predicates</b>
-
-Predicates may be passed together connected with \c operator&&().
-
-\par Example
-\verbatim
-// return elements intersecting box
-bgi::query(tree, bgi::intersects(box), std::back_inserter(result));
-// return elements intersecting poly but not within box
-bgi::query(tree, bgi::intersects(poly) && !bgi::within(box), std::back_inserter(result));
-// return elements overlapping box and meeting my_fun value predicate
-bgi::query(tree, bgi::overlaps(box) && bgi::satisfies(my_fun), std::back_inserter(result));
-// return 5 elements nearest to pt and elements are intersecting box
-bgi::query(tree, bgi::nearest(pt, 5) && bgi::intersects(box), std::back_inserter(result));
-
-// For each found value do_something (it is a type of function object)
-tree.query(bgi::intersects(box),
- boost::make_function_output_iterator(do_something()));
-\endverbatim
-
-\par Throws
-If Value copy constructor or copy assignment throws.
-
-\warning
-Only one \c nearest() predicate may be passed to the query. Passing more of them results in compile-time error.
-
-\ingroup rtree_functions
-
-\param tree The rtree.
-\param predicates Predicates.
-\param out_it The output iterator, e.g. generated by std::back_inserter().
-
-\return The number of values found.
-*/
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator,
- typename Predicates, typename OutIter> inline
-typename rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator>::size_type
-query(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> const& tree,
- Predicates const& predicates,
- OutIter out_it)
-{
- return tree.query(predicates, out_it);
-}
-
-/*!
-\brief Returns the query iterator pointing at the begin of the query range.
-
-This method returns the iterator which may be used to perform iterative queries. For the information
-about the predicates which may be passed to this method see query().
-
-\par Example
-\verbatim
-std::for_each(bgi::qbegin(tree, bgi::nearest(pt, 3)), bgi::qend(tree), do_something());
-\endverbatim
-
-\par Iterator category
-ForwardIterator
-
-\par Throws
-If predicates copy throws.
-If allocation throws.
-
-\warning
-The modification of the rtree may invalidate the iterators.
-
-\ingroup rtree_functions
-
-\param tree The rtree.
-\param predicates Predicates.
-
-\return The iterator pointing at the begin of the query range.
-*/
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator,
- typename Predicates> inline
-typename rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator>::const_query_iterator
-qbegin(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> const& tree,
- Predicates const& predicates)
-{
- return tree.qbegin(predicates);
-}
-
-/*!
-\brief Returns the query iterator pointing at the end of the query range.
-
-This method returns the iterator which may be used to check if the query has ended.
-
-\par Example
-\verbatim
-std::for_each(bgi::qbegin(tree, bgi::nearest(pt, 3)), bgi::qend(tree), do_something());
-\endverbatim
-
-\par Iterator category
-ForwardIterator
-
-\par Throws
-Nothing
-
-\warning
-The modification of the rtree may invalidate the iterators.
-
-\ingroup rtree_functions
-
-\return The iterator pointing at the end of the query range.
-*/
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator> inline
-typename rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator>::const_query_iterator
-qend(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> const& tree)
-{
- return tree.qend();
-}
-
-/*!
-\brief Returns the iterator pointing at the begin of the rtree values range.
-
-This method returns the iterator which may be used to iterate over all values
-stored in the rtree.
-
-\par Example
-\verbatim
-std::for_each(bgi::begin(tree), bgi::end(tree), do_something());
-// the same as
-std::for_each(boost::begin(tree), boost::end(tree), do_something());
-\endverbatim
-
-\par Iterator category
-ForwardIterator
-
-\par Throws
-If allocation throws.
-
-\warning
-The modification of the rtree may invalidate the iterators.
-
-\ingroup rtree_functions
-
-\return The iterator pointing at the begin of the range.
-*/
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator> inline
-typename rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator>::const_iterator
-begin(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> const& tree)
-{
- return tree.begin();
-}
-
-/*!
-\brief Returns the iterator pointing at the end of the rtree values range.
-
-This method returns the iterator which may be compared with the iterator returned by begin()
-in order to check if the iteration has ended.
-
-\par Example
-\verbatim
-std::for_each(bgi::begin(tree), bgi::end(tree), do_something());
-// the same as
-std::for_each(boost::begin(tree), boost::end(tree), do_something());
-\endverbatim
-
-\par Iterator category
-ForwardIterator
-
-\par Throws
-Nothing.
-
-\warning
-The modification of the rtree may invalidate the iterators.
-
-\ingroup rtree_functions
-
-\return The iterator pointing at the end of the range.
-*/
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator> inline
-typename rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator>::const_iterator
-end(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> const& tree)
-{
- return tree.end();
-}
-
-/*!
-\brief Remove all values from the index.
-
-It calls \c rtree::clear().
-
-\ingroup rtree_functions
-
-\param tree The spatial index.
-*/
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator>
-inline void clear(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> & tree)
-{
- return tree.clear();
-}
-
-/*!
-\brief Get the number of values stored in the index.
-
-It calls \c rtree::size().
-
-\ingroup rtree_functions
-
-\param tree The spatial index.
-
-\return The number of values stored in the index.
-*/
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator>
-inline size_t size(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> const& tree)
-{
- return tree.size();
-}
-
-/*!
-\brief Query if there are no values stored in the index.
-
-It calls \c rtree::empty().
-
-\ingroup rtree_functions
-
-\param tree The spatial index.
-
-\return true if there are no values in the index.
-*/
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator>
-inline bool empty(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> const& tree)
-{
- return tree.bounds();
-}
-
-/*!
-\brief Get the box containing all stored values or an invalid box if the index has no values.
-
-It calls \c rtree::envelope().
-
-\ingroup rtree_functions
-
-\param tree The spatial index.
-
-\return The box containing all stored values or an invalid box.
-*/
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator>
-inline typename rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator>::bounds_type
-bounds(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> const& tree)
-{
- return tree.bounds();
-}
-
-/*!
-\brief Exchanges the contents of the container with those of other.
-
-It calls \c rtree::swap().
-
-\ingroup rtree_functions
-
-\param l The first rtree.
-\param r The second rtree.
-*/
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator>
-inline void swap(rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> & l,
- rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator> & r)
-{
- return l.swap(r);
-}
-
-}}} // namespace boost::geometry::index
-
-// Boost.Range adaptation
-namespace boost {
-
-template <typename Value, typename Parameters, typename IndexableGetter, typename EqualTo, typename Allocator>
-struct range_mutable_iterator
- <
- boost::geometry::index::rtree<Value, Parameters, IndexableGetter, EqualTo, Allocator>
- >
-{
- typedef typename boost::geometry::index::rtree
- <
- Value, Parameters, IndexableGetter, EqualTo, Allocator
- >::const_iterator type;
-};
-
-} // namespace boost
-
-#include <boost/geometry/index/detail/config_end.hpp>
-
-#endif // BOOST_GEOMETRY_INDEX_RTREE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/io/dsv/write.hpp b/contrib/restricted/boost/boost/geometry/io/dsv/write.hpp
deleted file mode 100644
index f74ae7f95d1..00000000000
--- a/contrib/restricted/boost/boost/geometry/io/dsv/write.hpp
+++ /dev/null
@@ -1,431 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_IO_DSV_WRITE_HPP
-#define BOOST_GEOMETRY_IO_DSV_WRITE_HPP
-
-#include <cstddef>
-#include <ostream>
-#include <string>
-
-#include <boost/concept_check.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace dsv
-{
-
-struct dsv_settings
-{
- std::string coordinate_separator;
- std::string point_open;
- std::string point_close;
- std::string point_separator;
- std::string list_open;
- std::string list_close;
- std::string list_separator;
-
- dsv_settings(std::string const& sep
- , std::string const& open
- , std::string const& close
- , std::string const& psep
- , std::string const& lopen
- , std::string const& lclose
- , std::string const& lsep
- )
- : coordinate_separator(sep)
- , point_open(open)
- , point_close(close)
- , point_separator(psep)
- , list_open(lopen)
- , list_close(lclose)
- , list_separator(lsep)
- {}
-};
-
-/*!
-\brief Stream coordinate of a point as \ref DSV
-*/
-template <typename Point, std::size_t Dimension, std::size_t Count>
-struct stream_coordinate
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Point const& point,
- dsv_settings const& settings)
- {
- os << (Dimension > 0 ? settings.coordinate_separator : "")
- << get<Dimension>(point);
-
- stream_coordinate
- <
- Point, Dimension + 1, Count
- >::apply(os, point, settings);
- }
-};
-
-template <typename Point, std::size_t Count>
-struct stream_coordinate<Point, Count, Count>
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>&,
- Point const&,
- dsv_settings const& )
- {
- }
-};
-
-/*!
-\brief Stream indexed coordinate of a box/segment as \ref DSV
-*/
-template
-<
- typename Geometry,
- std::size_t Index,
- std::size_t Dimension,
- std::size_t Count
->
-struct stream_indexed
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Geometry const& geometry,
- dsv_settings const& settings)
- {
- os << (Dimension > 0 ? settings.coordinate_separator : "")
- << get<Index, Dimension>(geometry);
- stream_indexed
- <
- Geometry, Index, Dimension + 1, Count
- >::apply(os, geometry, settings);
- }
-};
-
-template <typename Geometry, std::size_t Index, std::size_t Count>
-struct stream_indexed<Geometry, Index, Count, Count>
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>&, Geometry const&,
- dsv_settings const& )
- {
- }
-};
-
-/*!
-\brief Stream points as \ref DSV
-*/
-template <typename Point>
-struct dsv_point
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Point const& p,
- dsv_settings const& settings)
- {
- os << settings.point_open;
- stream_coordinate<Point, 0, dimension<Point>::type::value>::apply(os, p, settings);
- os << settings.point_close;
- }
-};
-
-/*!
-\brief Stream ranges as DSV
-\note policy is used to stream prefix/postfix, enabling derived classes to override this
-*/
-template <typename Range>
-struct dsv_range
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Range const& range,
- dsv_settings const& settings)
- {
- typedef typename boost::range_iterator<Range const>::type iterator_type;
-
- bool first = true;
-
- os << settings.list_open;
-
- for (iterator_type it = boost::begin(range);
- it != boost::end(range);
- ++it)
- {
- os << (first ? "" : settings.point_separator)
- << settings.point_open;
-
- stream_coordinate
- <
- point_type, 0, dimension<point_type>::type::value
- >::apply(os, *it, settings);
- os << settings.point_close;
-
- first = false;
- }
-
- os << settings.list_close;
- }
-
-private:
- typedef typename boost::range_value<Range>::type point_type;
-};
-
-/*!
-\brief Stream sequence of points as DSV-part, e.g. (1 2),(3 4)
-\note Used in polygon, all multi-geometries
-*/
-
-template <typename Polygon>
-struct dsv_poly
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Polygon const& poly,
- dsv_settings const& settings)
- {
- typedef typename ring_type<Polygon>::type ring;
-
- os << settings.list_open;
-
- dsv_range<ring>::apply(os, exterior_ring(poly), settings);
-
- typename interior_return_type<Polygon const>::type
- rings = interior_rings(poly);
- for (typename detail::interior_iterator<Polygon const>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- os << settings.list_separator;
- dsv_range<ring>::apply(os, *it, settings);
- }
- os << settings.list_close;
- }
-};
-
-template <typename Geometry, std::size_t Index>
-struct dsv_per_index
-{
- typedef typename point_type<Geometry>::type point_type;
-
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Geometry const& geometry,
- dsv_settings const& settings)
- {
- os << settings.point_open;
- stream_indexed
- <
- Geometry, Index, 0, dimension<Geometry>::type::value
- >::apply(os, geometry, settings);
- os << settings.point_close;
- }
-};
-
-template <typename Geometry>
-struct dsv_indexed
-{
- typedef typename point_type<Geometry>::type point_type;
-
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Geometry const& geometry,
- dsv_settings const& settings)
- {
- os << settings.list_open;
- dsv_per_index<Geometry, 0>::apply(os, geometry, settings);
- os << settings.point_separator;
- dsv_per_index<Geometry, 1>::apply(os, geometry, settings);
- os << settings.list_close;
- }
-};
-
-}} // namespace detail::dsv
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag, typename Geometry>
-struct dsv {};
-
-template <typename Point>
-struct dsv<point_tag, Point>
- : detail::dsv::dsv_point<Point>
-{};
-
-template <typename Linestring>
-struct dsv<linestring_tag, Linestring>
- : detail::dsv::dsv_range<Linestring>
-{};
-
-template <typename Box>
-struct dsv<box_tag, Box>
- : detail::dsv::dsv_indexed<Box>
-{};
-
-template <typename Segment>
-struct dsv<segment_tag, Segment>
- : detail::dsv::dsv_indexed<Segment>
-{};
-
-template <typename Ring>
-struct dsv<ring_tag, Ring>
- : detail::dsv::dsv_range<Ring>
-{};
-
-template <typename Polygon>
-struct dsv<polygon_tag, Polygon>
- : detail::dsv::dsv_poly<Polygon>
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace dsv
-{
-
-// FIXME: This class is not copyable/assignable but it is used as such --mloskot
-template <typename Geometry>
-class dsv_manipulator
-{
-public:
-
- inline dsv_manipulator(Geometry const& g,
- dsv_settings const& settings)
- : m_geometry(g)
- , m_settings(settings)
- {}
-
- template <typename Char, typename Traits>
- inline friend std::basic_ostream<Char, Traits>& operator<<(
- std::basic_ostream<Char, Traits>& os,
- dsv_manipulator const& m)
- {
- dispatch::dsv
- <
- typename tag_cast
- <
- typename tag<Geometry>::type,
- multi_tag
- >::type,
- Geometry
- >::apply(os, m.m_geometry, m.m_settings);
- os.flush();
- return os;
- }
-
-private:
- Geometry const& m_geometry;
- dsv_settings m_settings;
-};
-
-
-template <typename MultiGeometry>
-struct dsv_multi
-{
- typedef dispatch::dsv
- <
- typename single_tag_of
- <
- typename tag<MultiGeometry>::type
- >::type,
- typename boost::range_value<MultiGeometry>::type
- > dispatch_one;
-
- typedef typename boost::range_iterator
- <
- MultiGeometry const
- >::type iterator;
-
-
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- MultiGeometry const& multi,
- dsv_settings const& settings)
- {
- os << settings.list_open;
-
- bool first = true;
- for(iterator it = boost::begin(multi);
- it != boost::end(multi);
- ++it, first = false)
- {
- os << (first ? "" : settings.list_separator);
- dispatch_one::apply(os, *it, settings);
- }
- os << settings.list_close;
- }
-};
-
-}} // namespace detail::dsv
-#endif // DOXYGEN_NO_DETAIL
-
-// TODO: The alternative to this could be a forward declaration of dispatch::dsv<>
-// or braking the code into the interface and implementation part
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Geometry>
-struct dsv<multi_tag, Geometry>
- : detail::dsv::dsv_multi<Geometry>
-{};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-\brief Main DSV-streaming function
-\details DSV stands for Delimiter Separated Values. Geometries can be streamed
- as DSV. There are defaults for all separators.
-\note Useful for examples and testing purposes
-\note With this function GeoJSON objects can be created, using the right
- delimiters
-\ingroup utility
-*/
-template <typename Geometry>
-inline detail::dsv::dsv_manipulator<Geometry> dsv(Geometry const& geometry
- , std::string const& coordinate_separator = ", "
- , std::string const& point_open = "("
- , std::string const& point_close = ")"
- , std::string const& point_separator = ", "
- , std::string const& list_open = "("
- , std::string const& list_close = ")"
- , std::string const& list_separator = ", "
- )
-{
- concepts::check<Geometry const>();
-
- return detail::dsv::dsv_manipulator<Geometry>(geometry,
- detail::dsv::dsv_settings(coordinate_separator,
- point_open, point_close, point_separator,
- list_open, list_close, list_separator));
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_IO_DSV_WRITE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/io/io.hpp b/contrib/restricted/boost/boost/geometry/io/io.hpp
deleted file mode 100644
index caafccf2bfc..00000000000
--- a/contrib/restricted/boost/boost/geometry/io/io.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_IO_HPP
-#define BOOST_GEOMETRY_IO_HPP
-
-#include <boost/geometry/io/wkt/read.hpp>
-#include <boost/geometry/io/wkt/write.hpp>
-
-namespace boost { namespace geometry
-{
-
-struct format_wkt {};
-struct format_wkb {}; // TODO
-struct format_dsv {}; // TODO
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-template <typename Tag, typename Geometry>
-struct read
-{
-};
-
-template <typename Geometry>
-struct read<format_wkt, Geometry>
-{
- static inline void apply(Geometry& geometry, std::string const& wkt)
- {
- read_wkt<typename tag<Geometry>::type, Geometry>::apply(wkt, geometry);
- }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-template <typename Format, typename Geometry>
-inline void read(Geometry& geometry, std::string const& wkt)
-{
- geometry::concepts::check<Geometry>();
- dispatch::read<Format, Geometry>::apply(geometry, wkt);
-}
-
-// TODO: wriite
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_IO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/io/svg/svg_mapper.hpp b/contrib/restricted/boost/boost/geometry/io/svg/svg_mapper.hpp
deleted file mode 100644
index d8137f10602..00000000000
--- a/contrib/restricted/boost/boost/geometry/io/svg/svg_mapper.hpp
+++ /dev/null
@@ -1,450 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2009-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015, 2016.
-// Modifications copyright (c) 2015-2016, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_IO_SVG_MAPPER_HPP
-#define BOOST_GEOMETRY_IO_SVG_MAPPER_HPP
-
-#include <cstdio>
-
-#include <vector>
-
-#include <boost/config.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/noncopyable.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/remove_const.hpp>
-
-#include <boost/algorithm/string/split.hpp>
-#include <boost/algorithm/string/classification.hpp>
-
-
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-
-#include <boost/geometry/algorithms/envelope.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-#include <boost/geometry/algorithms/is_empty.hpp>
-#include <boost/geometry/algorithms/transform.hpp>
-#include <boost/geometry/strategies/transform/map_transformer.hpp>
-#include <boost/geometry/views/segment_view.hpp>
-
-#include <boost/geometry/io/svg/write.hpp>
-
-// Helper geometries (all points are transformed to svg-points)
-#include <boost/geometry/geometries/geometries.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename GeometryTag, typename Geometry, typename SvgPoint>
-struct svg_map
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (Geometry)
- );
-};
-
-
-template <typename Point, typename SvgPoint>
-struct svg_map<point_tag, Point, SvgPoint>
-{
- template <typename TransformStrategy>
- static inline void apply(std::ostream& stream,
- std::string const& style, double size,
- Point const& point, TransformStrategy const& strategy)
- {
- SvgPoint ipoint;
- geometry::transform(point, ipoint, strategy);
- stream << geometry::svg(ipoint, style, size) << std::endl;
- }
-};
-
-template <typename BoxSeg1, typename BoxSeg2, typename SvgPoint>
-struct svg_map_box_seg
-{
- template <typename TransformStrategy>
- static inline void apply(std::ostream& stream,
- std::string const& style, double size,
- BoxSeg1 const& box_seg, TransformStrategy const& strategy)
- {
- BoxSeg2 ibox_seg;
-
- // Fix bug in gcc compiler warning for possible uninitialization
-#if defined(BOOST_GCC)
- geometry::assign_zero(ibox_seg);
-#endif
- geometry::transform(box_seg, ibox_seg, strategy);
-
- stream << geometry::svg(ibox_seg, style, size) << std::endl;
- }
-};
-
-template <typename Box, typename SvgPoint>
-struct svg_map<box_tag, Box, SvgPoint>
- : svg_map_box_seg<Box, model::box<SvgPoint>, SvgPoint>
-{};
-
-template <typename Segment, typename SvgPoint>
-struct svg_map<segment_tag, Segment, SvgPoint>
- : svg_map_box_seg<Segment, model::segment<SvgPoint>, SvgPoint>
-{};
-
-
-template <typename Range1, typename Range2, typename SvgPoint>
-struct svg_map_range
-{
- template <typename TransformStrategy>
- static inline void apply(std::ostream& stream,
- std::string const& style, double size,
- Range1 const& range, TransformStrategy const& strategy)
- {
- Range2 irange;
- geometry::transform(range, irange, strategy);
- stream << geometry::svg(irange, style, size) << std::endl;
- }
-};
-
-template <typename Ring, typename SvgPoint>
-struct svg_map<ring_tag, Ring, SvgPoint>
- : svg_map_range<Ring, model::ring<SvgPoint>, SvgPoint>
-{};
-
-
-template <typename Linestring, typename SvgPoint>
-struct svg_map<linestring_tag, Linestring, SvgPoint>
- : svg_map_range<Linestring, model::linestring<SvgPoint>, SvgPoint>
-{};
-
-
-template <typename Polygon, typename SvgPoint>
-struct svg_map<polygon_tag, Polygon, SvgPoint>
-{
- template <typename TransformStrategy>
- static inline void apply(std::ostream& stream,
- std::string const& style, double size,
- Polygon const& polygon, TransformStrategy const& strategy)
- {
- model::polygon<SvgPoint> ipoly;
- geometry::transform(polygon, ipoly, strategy);
- stream << geometry::svg(ipoly, style, size) << std::endl;
- }
-};
-
-
-template <typename Multi, typename SvgPoint>
-struct svg_map<multi_tag, Multi, SvgPoint>
-{
- typedef typename single_tag_of
- <
- typename geometry::tag<Multi>::type
- >::type stag;
-
- template <typename TransformStrategy>
- static inline void apply(std::ostream& stream,
- std::string const& style, double size,
- Multi const& multi, TransformStrategy const& strategy)
- {
- for (typename boost::range_iterator<Multi const>::type it
- = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- svg_map
- <
- stag,
- typename boost::range_value<Multi>::type,
- SvgPoint
- >::apply(stream, style, size, *it, strategy);
- }
- }
-};
-
-
-template <typename SvgPoint, typename Geometry>
-struct devarianted_svg_map
-{
- template <typename TransformStrategy>
- static inline void apply(std::ostream& stream,
- std::string const& style,
- double size,
- Geometry const& geometry,
- TransformStrategy const& strategy)
- {
- svg_map
- <
- typename tag_cast
- <
- typename tag<Geometry>::type,
- multi_tag
- >::type,
- typename boost::remove_const<Geometry>::type,
- SvgPoint
- >::apply(stream, style, size, geometry, strategy);
- }
-};
-
-template <typename SvgPoint, BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct devarianted_svg_map<SvgPoint, variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename TransformStrategy>
- struct visitor: static_visitor<void>
- {
- std::ostream& m_os;
- std::string const& m_style;
- double m_size;
- TransformStrategy const& m_strategy;
-
- visitor(std::ostream& os,
- std::string const& style,
- double size,
- TransformStrategy const& strategy)
- : m_os(os)
- , m_style(style)
- , m_size(size)
- , m_strategy(strategy)
- {}
-
- template <typename Geometry>
- inline void operator()(Geometry const& geometry) const
- {
- devarianted_svg_map<SvgPoint, Geometry>::apply(m_os, m_style, m_size, geometry, m_strategy);
- }
- };
-
- template <typename TransformStrategy>
- static inline void apply(std::ostream& stream,
- std::string const& style,
- double size,
- variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- TransformStrategy const& strategy)
- {
- boost::apply_visitor(visitor<TransformStrategy>(stream, style, size, strategy), geometry);
- }
-};
-
-
-} // namespace dispatch
-#endif
-
-
-template <typename SvgPoint, typename Geometry, typename TransformStrategy>
-inline void svg_map(std::ostream& stream,
- std::string const& style, double size,
- Geometry const& geometry, TransformStrategy const& strategy)
-{
- dispatch::devarianted_svg_map<SvgPoint, Geometry>::apply(stream,
- style, size, geometry, strategy);
-}
-
-
-/*!
-\brief Helper class to create SVG maps
-\tparam Point Point type, for input geometries.
-\tparam SameScale Boolean flag indicating if horizontal and vertical scale should
- be the same. The default value is true
-\tparam SvgCoordinateType Coordinate type of SVG points. SVG is capable to
- use floating point coordinates. Therefore the default value is double
-\ingroup svg
-
-\qbk{[include reference/io/svg.qbk]}
-*/
-template
-<
- typename Point,
- bool SameScale = true,
- typename SvgCoordinateType = double
->
-class svg_mapper : boost::noncopyable
-{
- typedef model::point<SvgCoordinateType, 2, cs::cartesian> svg_point_type;
-
- typedef typename geometry::select_most_precise
- <
- typename coordinate_type<Point>::type,
- double
- >::type calculation_type;
-
- typedef strategy::transform::map_transformer
- <
- calculation_type,
- geometry::dimension<Point>::type::value,
- geometry::dimension<Point>::type::value,
- true,
- SameScale
- > transformer_type;
-
- model::box<Point> m_bounding_box;
- boost::scoped_ptr<transformer_type> m_matrix;
- std::ostream& m_stream;
- SvgCoordinateType m_width, m_height;
- std::string m_width_height; // for <svg> tag only, defaults to 2x 100%
-
- void init_matrix()
- {
- if (! m_matrix)
- {
- m_matrix.reset(new transformer_type(m_bounding_box,
- m_width, m_height));
-
-
- m_stream << "<?xml version=\"1.0\" standalone=\"no\"?>"
- << std::endl
- << "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\""
- << std::endl
- << "\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">"
- << std::endl
- << "<svg " << m_width_height << " version=\"1.1\""
- << std::endl
- << "xmlns=\"http://www.w3.org/2000/svg\""
- << std::endl
- << "xmlns:xlink=\"http://www.w3.org/1999/xlink\""
- << ">"
- << std::endl;
- }
- }
-
-public :
-
- /*!
- \brief Constructor, initializing the SVG map. Opens and initializes the SVG.
- Should be called explicitly.
- \param stream Output stream, should be a stream already open
- \param width Width of the SVG map (in SVG pixels)
- \param height Height of the SVG map (in SVG pixels)
- \param width_height Optional information to increase width and/or height
- */
- svg_mapper(std::ostream& stream
- , SvgCoordinateType width
- , SvgCoordinateType height
- , std::string const& width_height = "width=\"100%\" height=\"100%\"")
- : m_stream(stream)
- , m_width(width)
- , m_height(height)
- , m_width_height(width_height)
- {
- assign_inverse(m_bounding_box);
- }
-
- /*!
- \brief Destructor, called automatically. Closes the SVG by streaming <\/svg>
- */
- virtual ~svg_mapper()
- {
- m_stream << "</svg>" << std::endl;
- }
-
- /*!
- \brief Adds a geometry to the transformation matrix. After doing this,
- the specified geometry can be mapped fully into the SVG map
- \tparam Geometry \tparam_geometry
- \param geometry \param_geometry
- */
- template <typename Geometry>
- void add(Geometry const& geometry)
- {
- if (! geometry::is_empty(geometry))
- {
- expand(m_bounding_box,
- return_envelope
- <
- model::box<Point>
- >(geometry));
- }
- }
-
- /*!
- \brief Maps a geometry into the SVG map using the specified style
- \tparam Geometry \tparam_geometry
- \param geometry \param_geometry
- \param style String containing verbatim SVG style information
- \param size Optional size (used for SVG points) in SVG pixels. For linestrings,
- specify linewidth in the SVG style information
- */
- template <typename Geometry>
- void map(Geometry const& geometry, std::string const& style,
- double size = -1.0)
- {
- init_matrix();
- svg_map<svg_point_type>(m_stream, style, size, geometry, *m_matrix);
- }
-
- /*!
- \brief Adds a text to the SVG map
- \tparam TextPoint \tparam_point
- \param point Location of the text (in map units)
- \param s The text itself
- \param style String containing verbatim SVG style information, of the text
- \param offset_x Offset in SVG pixels, defaults to 0
- \param offset_y Offset in SVG pixels, defaults to 0
- \param lineheight Line height in SVG pixels, in case the text contains \n
- */
- template <typename TextPoint>
- void text(TextPoint const& point, std::string const& s,
- std::string const& style,
- double offset_x = 0.0, double offset_y = 0.0,
- double lineheight = 10.0)
- {
- init_matrix();
- svg_point_type map_point;
- transform(point, map_point, *m_matrix);
- m_stream
- << "<text style=\"" << style << "\""
- << " x=\"" << get<0>(map_point) + offset_x << "\""
- << " y=\"" << get<1>(map_point) + offset_y << "\""
- << ">";
- if (s.find('\n') == std::string::npos)
- {
- m_stream << s;
- }
- else
- {
- // Multi-line modus
-
- std::vector<std::string> splitted;
- boost::split(splitted, s, boost::is_any_of("\n"));
- for (std::vector<std::string>::const_iterator it
- = splitted.begin();
- it != splitted.end();
- ++it, offset_y += lineheight)
- {
- m_stream
- << "<tspan x=\"" << get<0>(map_point) + offset_x
- << "\""
- << " y=\"" << get<1>(map_point) + offset_y
- << "\""
- << ">" << *it << "</tspan>";
- }
- }
- m_stream << "</text>" << std::endl;
- }
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_IO_SVG_MAPPER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/io/svg/write.hpp b/contrib/restricted/boost/boost/geometry/io/svg/write.hpp
deleted file mode 100644
index 70858021fc0..00000000000
--- a/contrib/restricted/boost/boost/geometry/io/svg/write.hpp
+++ /dev/null
@@ -1,418 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2016.
-// Modifications copyright (c) 2016, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_IO_SVG_WRITE_HPP
-#define BOOST_GEOMETRY_IO_SVG_WRITE_HPP
-
-#include <ostream>
-#include <string>
-
-#include <boost/config.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/range.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace svg
-{
-
-
-template <typename Point>
-struct svg_point
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Point const& p, std::string const& style, double size)
- {
- os << "<circle cx=\"" << geometry::get<0>(p)
- << "\" cy=\"" << geometry::get<1>(p)
- << "\" r=\"" << (size < 0 ? 5 : size)
- << "\" style=\"" << style << "\"/>";
- }
-};
-
-
-template <typename Box>
-struct svg_box
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Box const& box, std::string const& style, double)
- {
- // Prevent invisible boxes, making them >=1, using "max"
- BOOST_USING_STD_MAX();
-
- typedef typename coordinate_type<Box>::type ct;
- ct x = geometry::get<geometry::min_corner, 0>(box);
- ct y = geometry::get<geometry::min_corner, 1>(box);
- ct width = max BOOST_PREVENT_MACRO_SUBSTITUTION (ct(1),
- geometry::get<geometry::max_corner, 0>(box) - x);
- ct height = max BOOST_PREVENT_MACRO_SUBSTITUTION (ct(1),
- geometry::get<geometry::max_corner, 1>(box) - y);
-
- os << "<rect x=\"" << x << "\" y=\"" << y
- << "\" width=\"" << width << "\" height=\"" << height
- << "\" style=\"" << style << "\"/>";
- }
-};
-
-template <typename Segment>
-struct svg_segment
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Segment const& segment, std::string const& style, double)
- {
- typedef typename coordinate_type<Segment>::type ct;
- ct x1 = geometry::get<0, 0>(segment);
- ct y1 = geometry::get<0, 1>(segment);
- ct x2 = geometry::get<1, 0>(segment);
- ct y2 = geometry::get<1, 1>(segment);
-
- os << "<line x1=\"" << x1 << "\" y1=\"" << y1
- << "\" x2=\"" << x2 << "\" y2=\"" << y2
- << "\" style=\"" << style << "\"/>";
- }
-};
-
-/*!
-\brief Stream ranges as SVG
-\note policy is used to select type (polyline/polygon)
-*/
-template <typename Range, typename Policy>
-struct svg_range
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Range const& range, std::string const& style, double)
- {
- typedef typename boost::range_iterator<Range const>::type iterator;
-
- bool first = true;
-
- os << "<" << Policy::prefix() << " points=\"";
-
- for (iterator it = boost::begin(range);
- it != boost::end(range);
- ++it, first = false)
- {
- os << (first ? "" : " " )
- << geometry::get<0>(*it)
- << ","
- << geometry::get<1>(*it);
- }
- os << "\" style=\"" << style << Policy::style() << "\"/>";
- }
-};
-
-
-
-template <typename Polygon>
-struct svg_poly
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Polygon const& polygon, std::string const& style, double)
- {
- typedef typename geometry::ring_type<Polygon>::type ring_type;
- typedef typename boost::range_iterator<ring_type const>::type iterator_type;
-
- bool first = true;
- os << "<g fill-rule=\"evenodd\"><path d=\"";
-
- ring_type const& ring = geometry::exterior_ring(polygon);
- for (iterator_type it = boost::begin(ring);
- it != boost::end(ring);
- ++it, first = false)
- {
- os << (first ? "M" : " L") << " "
- << geometry::get<0>(*it)
- << ","
- << geometry::get<1>(*it);
- }
-
- // Inner rings:
- {
- typename interior_return_type<Polygon const>::type
- rings = interior_rings(polygon);
- for (typename detail::interior_iterator<Polygon const>::type
- rit = boost::begin(rings); rit != boost::end(rings); ++rit)
- {
- first = true;
- for (typename detail::interior_ring_iterator<Polygon const>::type
- it = boost::begin(*rit); it != boost::end(*rit);
- ++it, first = false)
- {
- os << (first ? "M" : " L") << " "
- << geometry::get<0>(*it)
- << ","
- << geometry::get<1>(*it);
- }
- }
- }
- os << " z \" style=\"" << style << "\"/></g>";
-
- }
-};
-
-
-
-struct prefix_linestring
-{
- static inline const char* prefix() { return "polyline"; }
- static inline const char* style() { return ";fill:none"; }
-};
-
-
-struct prefix_ring
-{
- static inline const char* prefix() { return "polygon"; }
- static inline const char* style() { return ""; }
-};
-
-
-template <typename MultiGeometry, typename Policy>
-struct svg_multi
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- MultiGeometry const& multi, std::string const& style, double size)
- {
- for (typename boost::range_iterator<MultiGeometry const>::type
- it = boost::begin(multi);
- it != boost::end(multi);
- ++it)
- {
- Policy::apply(os, *it, style, size);
- }
-
- }
-
-};
-
-
-}} // namespace detail::svg
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-/*!
-\brief Dispatching base struct for SVG streaming, specialized below per geometry type
-\details Specializations should implement a static method "stream" to stream a geometry
-The static method should have the signature:
-
-template <typename Char, typename Traits>
-static inline void apply(std::basic_ostream<Char, Traits>& os, G const& geometry)
-*/
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct svg
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (Geometry)
- );
-};
-
-template <typename Point>
-struct svg<Point, point_tag> : detail::svg::svg_point<Point> {};
-
-template <typename Segment>
-struct svg<Segment, segment_tag> : detail::svg::svg_segment<Segment> {};
-
-template <typename Box>
-struct svg<Box, box_tag> : detail::svg::svg_box<Box> {};
-
-template <typename Linestring>
-struct svg<Linestring, linestring_tag>
- : detail::svg::svg_range<Linestring, detail::svg::prefix_linestring> {};
-
-template <typename Ring>
-struct svg<Ring, ring_tag>
- : detail::svg::svg_range<Ring, detail::svg::prefix_ring> {};
-
-template <typename Polygon>
-struct svg<Polygon, polygon_tag>
- : detail::svg::svg_poly<Polygon> {};
-
-template <typename MultiPoint>
-struct svg<MultiPoint, multi_point_tag>
- : detail::svg::svg_multi
- <
- MultiPoint,
- detail::svg::svg_point
- <
- typename boost::range_value<MultiPoint>::type
- >
-
- >
-{};
-
-template <typename MultiLinestring>
-struct svg<MultiLinestring, multi_linestring_tag>
- : detail::svg::svg_multi
- <
- MultiLinestring,
- detail::svg::svg_range
- <
- typename boost::range_value<MultiLinestring>::type,
- detail::svg::prefix_linestring
- >
-
- >
-{};
-
-template <typename MultiPolygon>
-struct svg<MultiPolygon, multi_polygon_tag>
- : detail::svg::svg_multi
- <
- MultiPolygon,
- detail::svg::svg_poly
- <
- typename boost::range_value<MultiPolygon>::type
- >
-
- >
-{};
-
-
-template <typename Geometry>
-struct devarianted_svg
-{
- template <typename OutputStream>
- static inline void apply(OutputStream& os,
- Geometry const& geometry,
- std::string const& style,
- double size)
- {
- svg<Geometry>::apply(os, geometry, style, size);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct devarianted_svg<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename OutputStream>
- struct visitor: static_visitor<void>
- {
- OutputStream& m_os;
- std::string const& m_style;
- double m_size;
-
- visitor(OutputStream& os, std::string const& style, double size)
- : m_os(os)
- , m_style(style)
- , m_size(size)
- {}
-
- template <typename Geometry>
- inline void operator()(Geometry const& geometry) const
- {
- devarianted_svg<Geometry>::apply(m_os, geometry, m_style, m_size);
- }
- };
-
- template <typename OutputStream>
- static inline void apply(
- OutputStream& os,
- variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- std::string const& style,
- double size
- )
- {
- boost::apply_visitor(visitor<OutputStream>(os, style, size), geometry);
- }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-/*!
-\brief Generic geometry template manipulator class, takes corresponding output class from traits class
-\ingroup svg
-\details Stream manipulator, streams geometry classes as SVG (Scalable Vector Graphics)
-*/
-template <typename Geometry>
-class svg_manipulator
-{
-public:
-
- inline svg_manipulator(Geometry const& g, std::string const& style, double size)
- : m_geometry(g)
- , m_style(style)
- , m_size(size)
- {}
-
- template <typename Char, typename Traits>
- inline friend std::basic_ostream<Char, Traits>& operator<<(
- std::basic_ostream<Char, Traits>& os, svg_manipulator const& m)
- {
- dispatch::devarianted_svg<Geometry>::apply(os,
- m.m_geometry,
- m.m_style,
- m.m_size);
- os.flush();
- return os;
- }
-
-private:
- Geometry const& m_geometry;
- std::string const& m_style;
- double m_size;
-};
-
-/*!
-\brief Manipulator to stream geometries as SVG
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\param style String containing verbatim SVG style information
-\param size Optional size (used for SVG points) in SVG pixels. For linestrings,
- specify linewidth in the SVG style information
-\ingroup svg
-*/
-template <typename Geometry>
-inline svg_manipulator<Geometry> svg(Geometry const& geometry,
- std::string const& style, double size = -1.0)
-{
- concepts::check<Geometry const>();
-
- return svg_manipulator<Geometry>(geometry, style, size);
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_IO_SVG_WRITE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/io/svg/write_svg.hpp b/contrib/restricted/boost/boost/geometry/io/svg/write_svg.hpp
deleted file mode 100644
index 371a80bc692..00000000000
--- a/contrib/restricted/boost/boost/geometry/io/svg/write_svg.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2016.
-// Modifications copyright (c) 2016, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_IO_SVG_WRITE_SVG_HPP
-#define BOOST_GEOMETRY_IO_SVG_WRITE_SVG_HPP
-
-
-// THIS FILE WAS LEFT HERE FOR BACKWARD COMPATIBILITY
-
-
-#include <boost/geometry/io/svg/write.hpp>
-
-
-#endif // BOOST_GEOMETRY_IO_SVG_WRITE_SVG_HPP
diff --git a/contrib/restricted/boost/boost/geometry/io/svg/write_svg_multi.hpp b/contrib/restricted/boost/boost/geometry/io/svg/write_svg_multi.hpp
deleted file mode 100644
index d07a2c204e8..00000000000
--- a/contrib/restricted/boost/boost/geometry/io/svg/write_svg_multi.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2016.
-// Modifications copyright (c) 2016, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_IO_SVG_WRITE_SVG_MULTI_HPP
-#define BOOST_GEOMETRY_IO_SVG_WRITE_SVG_MULTI_HPP
-
-
-// THIS FILE WAS LEFT HERE FOR BACKWARD COMPATIBILITY
-
-
-#include <boost/geometry/io/svg/write.hpp>
-
-
-#endif // BOOST_GEOMETRY_IO_SVG_WRITE_SVG_MULTI_HPP
diff --git a/contrib/restricted/boost/boost/geometry/io/wkt/detail/prefix.hpp b/contrib/restricted/boost/boost/geometry/io/wkt/detail/prefix.hpp
deleted file mode 100644
index b566e02aa6a..00000000000
--- a/contrib/restricted/boost/boost/geometry/io/wkt/detail/prefix.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_IO_WKT_DETAIL_PREFIX_HPP
-#define BOOST_GEOMETRY_IO_WKT_DETAIL_PREFIX_HPP
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace wkt
-{
-
-struct prefix_null
-{
- static inline const char* apply() { return ""; }
-};
-
-struct prefix_point
-{
- static inline const char* apply() { return "POINT"; }
-};
-
-struct prefix_polygon
-{
- static inline const char* apply() { return "POLYGON"; }
-};
-
-struct prefix_linestring
-{
- static inline const char* apply() { return "LINESTRING"; }
-};
-
-struct prefix_multipoint
-{
- static inline const char* apply() { return "MULTIPOINT"; }
-};
-
-struct prefix_multilinestring
-{
- static inline const char* apply() { return "MULTILINESTRING"; }
-};
-
-struct prefix_multipolygon
-{
- static inline const char* apply() { return "MULTIPOLYGON"; }
-};
-
-}} // namespace wkt::impl
-#endif
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_IO_WKT_DETAIL_PREFIX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/io/wkt/detail/wkt_multi.hpp b/contrib/restricted/boost/boost/geometry/io/wkt/detail/wkt_multi.hpp
deleted file mode 100644
index 2b2d1946ad8..00000000000
--- a/contrib/restricted/boost/boost/geometry/io/wkt/detail/wkt_multi.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_DETAIL_WKT_MULTI_HPP
-#define BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_DETAIL_WKT_MULTI_HPP
-
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/domains/gis/io/wkt/write.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace wkt
-{
-
-struct prefix_null
-{
- static inline const char* apply() { return ""; }
-};
-
-struct prefix_multipoint
-{
- static inline const char* apply() { return "MULTIPOINT"; }
-};
-
-struct prefix_multilinestring
-{
- static inline const char* apply() { return "MULTILINESTRING"; }
-};
-
-struct prefix_multipolygon
-{
- static inline const char* apply() { return "MULTIPOLYGON"; }
-};
-
-
-
-}} // namespace wkt::impl
-#endif
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_DOMAINS_GIS_IO_WKT_DETAIL_WKT_MULTI_HPP
diff --git a/contrib/restricted/boost/boost/geometry/io/wkt/read.hpp b/contrib/restricted/boost/boost/geometry/io/wkt/read.hpp
deleted file mode 100644
index 28d745a8fa7..00000000000
--- a/contrib/restricted/boost/boost/geometry/io/wkt/read.hpp
+++ /dev/null
@@ -1,907 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014, 2015.
-// Modifications copyright (c) 2014-2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_IO_WKT_READ_HPP
-#define BOOST_GEOMETRY_IO_WKT_READ_HPP
-
-#include <cstddef>
-#include <string>
-
-#include <boost/lexical_cast.hpp>
-#include <boost/tokenizer.hpp>
-
-#include <boost/algorithm/string.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/range/begin.hpp>
-#include <boost/range/end.hpp>
-#include <boost/range/size.hpp>
-#include <boost/range/value_type.hpp>
-#include <boost/throw_exception.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/append.hpp>
-#include <boost/geometry/algorithms/clear.hpp>
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/exception.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/geometry_id.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-#include <boost/geometry/util/coordinate_cast.hpp>
-
-#include <boost/geometry/io/wkt/detail/prefix.hpp>
-
-namespace boost { namespace geometry
-{
-
-/*!
-\brief Exception showing things wrong with WKT parsing
-\ingroup wkt
-*/
-struct read_wkt_exception : public geometry::exception
-{
- template <typename Iterator>
- read_wkt_exception(std::string const& msg,
- Iterator const& it,
- Iterator const& end,
- std::string const& wkt)
- : message(msg)
- , wkt(wkt)
- {
- if (it != end)
- {
- source = " at '";
- source += it->c_str();
- source += "'";
- }
- complete = message + source + " in '" + wkt.substr(0, 100) + "'";
- }
-
- read_wkt_exception(std::string const& msg, std::string const& wkt)
- : message(msg)
- , wkt(wkt)
- {
- complete = message + "' in (" + wkt.substr(0, 100) + ")";
- }
-
- virtual ~read_wkt_exception() {}
-
- virtual const char* what() const noexcept
- {
- return complete.c_str();
- }
-private :
- std::string source;
- std::string message;
- std::string wkt;
- std::string complete;
-};
-
-
-#ifndef DOXYGEN_NO_DETAIL
-// (wkt: Well Known Text, defined by OGC for all geometries and implemented by e.g. databases (MySQL, PostGIS))
-namespace detail { namespace wkt
-{
-
-typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
-
-template <typename Point,
- std::size_t Dimension = 0,
- std::size_t DimensionCount = geometry::dimension<Point>::value>
-struct parsing_assigner
-{
- static inline void apply(tokenizer::iterator& it,
- tokenizer::iterator const& end,
- Point& point,
- std::string const& wkt)
- {
- typedef typename coordinate_type<Point>::type coordinate_type;
-
- // Stop at end of tokens, or at "," ot ")"
- bool finished = (it == end || *it == "," || *it == ")");
-
- try
- {
- // Initialize missing coordinates to default constructor (zero)
- // OR
- // Use lexical_cast for conversion to double/int
- // Note that it is much slower than atof. However, it is more standard
- // and in parsing the change in performance falls probably away against
- // the tokenizing
- set<Dimension>(point, finished
- ? coordinate_type()
- : coordinate_cast<coordinate_type>::apply(*it));
- }
- catch(boost::bad_lexical_cast const& blc)
- {
- BOOST_THROW_EXCEPTION(read_wkt_exception(blc.what(), it, end, wkt));
- }
- catch(std::exception const& e)
- {
- BOOST_THROW_EXCEPTION(read_wkt_exception(e.what(), it, end, wkt));
- }
- catch(...)
- {
- BOOST_THROW_EXCEPTION(read_wkt_exception("", it, end, wkt));
- }
-
- parsing_assigner<Point, Dimension + 1, DimensionCount>::apply(
- (finished ? it : ++it), end, point, wkt);
- }
-};
-
-template <typename Point, std::size_t DimensionCount>
-struct parsing_assigner<Point, DimensionCount, DimensionCount>
-{
- static inline void apply(tokenizer::iterator&,
- tokenizer::iterator const&,
- Point&,
- std::string const&)
- {
- }
-};
-
-
-
-template <typename Iterator>
-inline void handle_open_parenthesis(Iterator& it,
- Iterator const& end,
- std::string const& wkt)
-{
- if (it == end || *it != "(")
- {
- BOOST_THROW_EXCEPTION(read_wkt_exception("Expected '('", it, end, wkt));
- }
- ++it;
-}
-
-
-template <typename Iterator>
-inline void handle_close_parenthesis(Iterator& it,
- Iterator const& end,
- std::string const& wkt)
-{
- if (it != end && *it == ")")
- {
- ++it;
- }
- else
- {
- BOOST_THROW_EXCEPTION(read_wkt_exception("Expected ')'", it, end, wkt));
- }
-}
-
-template <typename Iterator>
-inline void check_end(Iterator& it,
- Iterator const& end,
- std::string const& wkt)
-{
- if (it != end)
- {
- BOOST_THROW_EXCEPTION(read_wkt_exception("Too many tokens", it, end, wkt));
- }
-}
-
-/*!
-\brief Internal, parses coordinate sequences, strings are formated like "(1 2,3 4,...)"
-\param it token-iterator, should be pre-positioned at "(", is post-positions after last ")"
-\param end end-token-iterator
-\param out Output itererator receiving coordinates
-*/
-template <typename Point>
-struct container_inserter
-{
- // Version with output iterator
- template <typename OutputIterator>
- static inline void apply(tokenizer::iterator& it,
- tokenizer::iterator const& end,
- std::string const& wkt,
- OutputIterator out)
- {
- handle_open_parenthesis(it, end, wkt);
-
- Point point;
-
- // Parse points until closing parenthesis
-
- while (it != end && *it != ")")
- {
- parsing_assigner<Point>::apply(it, end, point, wkt);
- out = point;
- ++out;
- if (it != end && *it == ",")
- {
- ++it;
- }
- }
-
- handle_close_parenthesis(it, end, wkt);
- }
-};
-
-
-template <typename Geometry,
- closure_selector Closure = closure<Geometry>::value>
-struct stateful_range_appender
-{
- typedef typename geometry::point_type<Geometry>::type point_type;
-
- // NOTE: Geometry is a reference
- inline void append(Geometry geom, point_type const& point, bool)
- {
- geometry::append(geom, point);
- }
-};
-
-template <typename Geometry>
-struct stateful_range_appender<Geometry, open>
-{
- typedef typename geometry::point_type<Geometry>::type point_type;
- typedef typename boost::range_size
- <
- typename util::bare_type<Geometry>::type
- >::type size_type;
-
- BOOST_STATIC_ASSERT(( boost::is_same
- <
- typename tag<Geometry>::type,
- ring_tag
- >::value ));
-
- inline stateful_range_appender()
- : pt_index(0)
- {}
-
- // NOTE: Geometry is a reference
- inline void append(Geometry geom, point_type const& point, bool is_next_expected)
- {
- bool should_append = true;
-
- if (pt_index == 0)
- {
- first_point = point;
- //should_append = true;
- }
- else
- {
- // NOTE: if there is not enough Points, they're always appended
- should_append
- = is_next_expected
- || pt_index < core_detail::closure::minimum_ring_size<open>::value
- || !detail::equals::equals_point_point(point, first_point);
- }
- ++pt_index;
-
- if (should_append)
- {
- geometry::append(geom, point);
- }
- }
-
-private:
- size_type pt_index;
- point_type first_point;
-};
-
-// Geometry is a value-type or reference-type
-template <typename Geometry>
-struct container_appender
-{
- typedef typename geometry::point_type<Geometry>::type point_type;
-
- static inline void apply(tokenizer::iterator& it,
- tokenizer::iterator const& end,
- std::string const& wkt,
- Geometry out)
- {
- handle_open_parenthesis(it, end, wkt);
-
- stateful_range_appender<Geometry> appender;
-
- // Parse points until closing parenthesis
- while (it != end && *it != ")")
- {
- point_type point;
-
- parsing_assigner<point_type>::apply(it, end, point, wkt);
-
- bool const is_next_expected = it != end && *it == ",";
-
- appender.append(out, point, is_next_expected);
-
- if (is_next_expected)
- {
- ++it;
- }
- }
-
- handle_close_parenthesis(it, end, wkt);
- }
-};
-
-/*!
-\brief Internal, parses a point from a string like this "(x y)"
-\note used for parsing points and multi-points
-*/
-template <typename P>
-struct point_parser
-{
- static inline void apply(tokenizer::iterator& it,
- tokenizer::iterator const& end,
- std::string const& wkt,
- P& point)
- {
- handle_open_parenthesis(it, end, wkt);
- parsing_assigner<P>::apply(it, end, point, wkt);
- handle_close_parenthesis(it, end, wkt);
- }
-};
-
-
-template <typename Geometry>
-struct linestring_parser
-{
- static inline void apply(tokenizer::iterator& it,
- tokenizer::iterator const& end,
- std::string const& wkt,
- Geometry& geometry)
- {
- container_appender<Geometry&>::apply(it, end, wkt, geometry);
- }
-};
-
-
-template <typename Ring>
-struct ring_parser
-{
- static inline void apply(tokenizer::iterator& it,
- tokenizer::iterator const& end,
- std::string const& wkt,
- Ring& ring)
- {
- // A ring should look like polygon((x y,x y,x y...))
- // So handle the extra opening/closing parentheses
- // and in between parse using the container-inserter
- handle_open_parenthesis(it, end, wkt);
- container_appender<Ring&>::apply(it, end, wkt, ring);
- handle_close_parenthesis(it, end, wkt);
- }
-};
-
-
-/*!
-\brief Internal, parses a polygon from a string like this "((x y,x y),(x y,x y))"
-\note used for parsing polygons and multi-polygons
-*/
-template <typename Polygon>
-struct polygon_parser
-{
- typedef typename ring_return_type<Polygon>::type ring_return_type;
- typedef container_appender<ring_return_type> appender;
-
- static inline void apply(tokenizer::iterator& it,
- tokenizer::iterator const& end,
- std::string const& wkt,
- Polygon& poly)
- {
-
- handle_open_parenthesis(it, end, wkt);
-
- int n = -1;
-
- // Stop at ")"
- while (it != end && *it != ")")
- {
- // Parse ring
- if (++n == 0)
- {
- appender::apply(it, end, wkt, exterior_ring(poly));
- }
- else
- {
- typename ring_type<Polygon>::type ring;
- appender::apply(it, end, wkt, ring);
- traits::push_back
- <
- typename boost::remove_reference
- <
- typename traits::interior_mutable_type<Polygon>::type
- >::type
- >::apply(interior_rings(poly), ring);
- }
-
- if (it != end && *it == ",")
- {
- // Skip "," after ring is parsed
- ++it;
- }
- }
-
- handle_close_parenthesis(it, end, wkt);
- }
-};
-
-
-inline bool one_of(tokenizer::iterator const& it,
- std::string const& value,
- bool& is_present)
-{
- if (boost::iequals(*it, value))
- {
- is_present = true;
- return true;
- }
- return false;
-}
-
-inline bool one_of(tokenizer::iterator const& it,
- std::string const& value,
- bool& present1,
- bool& present2)
-{
- if (boost::iequals(*it, value))
- {
- present1 = true;
- present2 = true;
- return true;
- }
- return false;
-}
-
-
-inline void handle_empty_z_m(tokenizer::iterator& it,
- tokenizer::iterator const& end,
- bool& has_empty,
- bool& has_z,
- bool& has_m)
-{
- has_empty = false;
- has_z = false;
- has_m = false;
-
- // WKT can optionally have Z and M (measured) values as in
- // POINT ZM (1 1 5 60), POINT M (1 1 80), POINT Z (1 1 5)
- // GGL supports any of them as coordinate values, but is not aware
- // of any Measured value.
- while (it != end
- && (one_of(it, "M", has_m)
- || one_of(it, "Z", has_z)
- || one_of(it, "EMPTY", has_empty)
- || one_of(it, "MZ", has_m, has_z)
- || one_of(it, "ZM", has_z, has_m)
- )
- )
- {
- ++it;
- }
-}
-
-/*!
-\brief Internal, starts parsing
-\param tokens boost tokens, parsed with separator " " and keeping separator "()"
-\param geometry string to compare with first token
-*/
-template <typename Geometry>
-inline bool initialize(tokenizer const& tokens,
- std::string const& geometry_name,
- std::string const& wkt,
- tokenizer::iterator& it,
- tokenizer::iterator& end)
-{
- it = tokens.begin();
- end = tokens.end();
-
- if (it == end || ! boost::iequals(*it++, geometry_name))
- {
- BOOST_THROW_EXCEPTION(read_wkt_exception(std::string("Should start with '") + geometry_name + "'", wkt));
- }
-
- bool has_empty, has_z, has_m;
-
- handle_empty_z_m(it, end, has_empty, has_z, has_m);
-
-// Silence warning C4127: conditional expression is constant
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
-#endif
-
- if (has_z && dimension<Geometry>::type::value < 3)
- {
- BOOST_THROW_EXCEPTION(read_wkt_exception("Z only allowed for 3 or more dimensions", wkt));
- }
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
- if (has_empty)
- {
- check_end(it, end, wkt);
- return false;
- }
- // M is ignored at all.
-
- return true;
-}
-
-
-template <typename Geometry, template<typename> class Parser, typename PrefixPolicy>
-struct geometry_parser
-{
- static inline void apply(std::string const& wkt, Geometry& geometry)
- {
- geometry::clear(geometry);
-
- tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
- tokenizer::iterator it, end;
- if (initialize<Geometry>(tokens, PrefixPolicy::apply(), wkt, it, end))
- {
- Parser<Geometry>::apply(it, end, wkt, geometry);
- check_end(it, end, wkt);
- }
- }
-};
-
-
-template <typename MultiGeometry, template<typename> class Parser, typename PrefixPolicy>
-struct multi_parser
-{
- static inline void apply(std::string const& wkt, MultiGeometry& geometry)
- {
- traits::clear<MultiGeometry>::apply(geometry);
-
- tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
- tokenizer::iterator it, end;
- if (initialize<MultiGeometry>(tokens, PrefixPolicy::apply(), wkt, it, end))
- {
- handle_open_parenthesis(it, end, wkt);
-
- // Parse sub-geometries
- while(it != end && *it != ")")
- {
- traits::resize<MultiGeometry>::apply(geometry, boost::size(geometry) + 1);
- Parser
- <
- typename boost::range_value<MultiGeometry>::type
- >::apply(it, end, wkt, *(boost::end(geometry) - 1));
- if (it != end && *it == ",")
- {
- // Skip "," after multi-element is parsed
- ++it;
- }
- }
-
- handle_close_parenthesis(it, end, wkt);
- }
-
- check_end(it, end, wkt);
- }
-};
-
-template <typename P>
-struct noparenthesis_point_parser
-{
- static inline void apply(tokenizer::iterator& it,
- tokenizer::iterator const& end,
- std::string const& wkt,
- P& point)
- {
- parsing_assigner<P>::apply(it, end, point, wkt);
- }
-};
-
-template <typename MultiGeometry, typename PrefixPolicy>
-struct multi_point_parser
-{
- static inline void apply(std::string const& wkt, MultiGeometry& geometry)
- {
- traits::clear<MultiGeometry>::apply(geometry);
-
- tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
- tokenizer::iterator it, end;
-
- if (initialize<MultiGeometry>(tokens, PrefixPolicy::apply(), wkt, it, end))
- {
- handle_open_parenthesis(it, end, wkt);
-
- // If first point definition starts with "(" then parse points as (x y)
- // otherwise as "x y"
- bool using_brackets = (it != end && *it == "(");
-
- while(it != end && *it != ")")
- {
- traits::resize<MultiGeometry>::apply(geometry, boost::size(geometry) + 1);
-
- if (using_brackets)
- {
- point_parser
- <
- typename boost::range_value<MultiGeometry>::type
- >::apply(it, end, wkt, *(boost::end(geometry) - 1));
- }
- else
- {
- noparenthesis_point_parser
- <
- typename boost::range_value<MultiGeometry>::type
- >::apply(it, end, wkt, *(boost::end(geometry) - 1));
- }
-
- if (it != end && *it == ",")
- {
- // Skip "," after point is parsed
- ++it;
- }
- }
-
- handle_close_parenthesis(it, end, wkt);
- }
-
- check_end(it, end, wkt);
- }
-};
-
-
-/*!
-\brief Supports box parsing
-\note OGC does not define the box geometry, and WKT does not support boxes.
- However, to be generic GGL supports reading and writing from and to boxes.
- Boxes are outputted as a standard POLYGON. GGL can read boxes from
- a standard POLYGON, from a POLYGON with 2 points of from a BOX
-\tparam Box the box
-*/
-template <typename Box>
-struct box_parser
-{
- static inline void apply(std::string const& wkt, Box& box)
- {
- bool should_close = false;
- tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
- tokenizer::iterator it = tokens.begin();
- tokenizer::iterator end = tokens.end();
- if (it != end && boost::iequals(*it, "POLYGON"))
- {
- ++it;
- bool has_empty, has_z, has_m;
- handle_empty_z_m(it, end, has_empty, has_z, has_m);
- if (has_empty)
- {
- assign_zero(box);
- return;
- }
- handle_open_parenthesis(it, end, wkt);
- should_close = true;
- }
- else if (it != end && boost::iequals(*it, "BOX"))
- {
- ++it;
- }
- else
- {
- BOOST_THROW_EXCEPTION(read_wkt_exception("Should start with 'POLYGON' or 'BOX'", wkt));
- }
-
- typedef typename point_type<Box>::type point_type;
- std::vector<point_type> points;
- container_inserter<point_type>::apply(it, end, wkt, std::back_inserter(points));
-
- if (should_close)
- {
- handle_close_parenthesis(it, end, wkt);
- }
- check_end(it, end, wkt);
-
- unsigned int index = 0;
- std::size_t n = boost::size(points);
- if (n == 2)
- {
- index = 1;
- }
- else if (n == 4 || n == 5)
- {
- // In case of 4 or 5 points, we do not check the other ones, just
- // take the opposite corner which is always 2
- index = 2;
- }
- else
- {
- BOOST_THROW_EXCEPTION(read_wkt_exception("Box should have 2,4 or 5 points", wkt));
- }
-
- geometry::detail::assign_point_to_index<min_corner>(points.front(), box);
- geometry::detail::assign_point_to_index<max_corner>(points[index], box);
- }
-};
-
-
-/*!
-\brief Supports segment parsing
-\note OGC does not define the segment, and WKT does not support segmentes.
- However, it is useful to implement it, also for testing purposes
-\tparam Segment the segment
-*/
-template <typename Segment>
-struct segment_parser
-{
- static inline void apply(std::string const& wkt, Segment& segment)
- {
- tokenizer tokens(wkt, boost::char_separator<char>(" ", ",()"));
- tokenizer::iterator it = tokens.begin();
- tokenizer::iterator end = tokens.end();
- if (it != end &&
- (boost::iequals(*it, "SEGMENT")
- || boost::iequals(*it, "LINESTRING") ))
- {
- ++it;
- }
- else
- {
- BOOST_THROW_EXCEPTION(read_wkt_exception("Should start with 'LINESTRING' or 'SEGMENT'", wkt));
- }
-
- typedef typename point_type<Segment>::type point_type;
- std::vector<point_type> points;
- container_inserter<point_type>::apply(it, end, wkt, std::back_inserter(points));
-
- check_end(it, end, wkt);
-
- if (boost::size(points) == 2)
- {
- geometry::detail::assign_point_to_index<0>(points.front(), segment);
- geometry::detail::assign_point_to_index<1>(points.back(), segment);
- }
- else
- {
- BOOST_THROW_EXCEPTION(read_wkt_exception("Segment should have 2 points", wkt));
- }
-
- }
-};
-
-
-}} // namespace detail::wkt
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Tag, typename Geometry>
-struct read_wkt {};
-
-
-template <typename Point>
-struct read_wkt<point_tag, Point>
- : detail::wkt::geometry_parser
- <
- Point,
- detail::wkt::point_parser,
- detail::wkt::prefix_point
- >
-{};
-
-
-template <typename L>
-struct read_wkt<linestring_tag, L>
- : detail::wkt::geometry_parser
- <
- L,
- detail::wkt::linestring_parser,
- detail::wkt::prefix_linestring
- >
-{};
-
-template <typename Ring>
-struct read_wkt<ring_tag, Ring>
- : detail::wkt::geometry_parser
- <
- Ring,
- detail::wkt::ring_parser,
- detail::wkt::prefix_polygon
- >
-{};
-
-template <typename Geometry>
-struct read_wkt<polygon_tag, Geometry>
- : detail::wkt::geometry_parser
- <
- Geometry,
- detail::wkt::polygon_parser,
- detail::wkt::prefix_polygon
- >
-{};
-
-
-template <typename MultiGeometry>
-struct read_wkt<multi_point_tag, MultiGeometry>
- : detail::wkt::multi_point_parser
- <
- MultiGeometry,
- detail::wkt::prefix_multipoint
- >
-{};
-
-template <typename MultiGeometry>
-struct read_wkt<multi_linestring_tag, MultiGeometry>
- : detail::wkt::multi_parser
- <
- MultiGeometry,
- detail::wkt::linestring_parser,
- detail::wkt::prefix_multilinestring
- >
-{};
-
-template <typename MultiGeometry>
-struct read_wkt<multi_polygon_tag, MultiGeometry>
- : detail::wkt::multi_parser
- <
- MultiGeometry,
- detail::wkt::polygon_parser,
- detail::wkt::prefix_multipolygon
- >
-{};
-
-
-// Box (Non-OGC)
-template <typename Box>
-struct read_wkt<box_tag, Box>
- : detail::wkt::box_parser<Box>
-{};
-
-// Segment (Non-OGC)
-template <typename Segment>
-struct read_wkt<segment_tag, Segment>
- : detail::wkt::segment_parser<Segment>
-{};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-\brief Parses OGC Well-Known Text (\ref WKT) into a geometry (any geometry)
-\ingroup wkt
-\tparam Geometry \tparam_geometry
-\param wkt string containing \ref WKT
-\param geometry \param_geometry output geometry
-\ingroup wkt
-\qbk{[include reference/io/read_wkt.qbk]}
-*/
-template <typename Geometry>
-inline void read_wkt(std::string const& wkt, Geometry& geometry)
-{
- geometry::concepts::check<Geometry>();
- dispatch::read_wkt<typename tag<Geometry>::type, Geometry>::apply(wkt, geometry);
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_IO_WKT_READ_HPP
diff --git a/contrib/restricted/boost/boost/geometry/io/wkt/stream.hpp b/contrib/restricted/boost/boost/geometry/io/wkt/stream.hpp
deleted file mode 100644
index 3849dda5946..00000000000
--- a/contrib/restricted/boost/boost/geometry/io/wkt/stream.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_IO_WKT_STREAM_HPP
-#define BOOST_GEOMETRY_IO_WKT_STREAM_HPP
-
-#include <boost/geometry/io/wkt/write.hpp>
-
-// This short file contains only one manipulator, streaming as WKT
-// Don't include this in any standard-included header file.
-
-// Don't use namespace boost::geometry, to enable the library to stream custom
-// geometries which are living outside the namespace boost::geometry
-
-// This is currently not documented on purpose: the Doxygen 2 QBK generator
-// should be updated w.r.t. << which in the end ruins the DocBook XML
-template<typename Char, typename Traits, typename Geometry>
-inline std::basic_ostream<Char, Traits>& operator<<
- (
- std::basic_ostream<Char, Traits> &os,
- Geometry const& geom
- )
-{
- os << boost::geometry::wkt(geom);
- return os;
-}
-
-#endif // BOOST_GEOMETRY_IO_WKT_STREAM_HPP
diff --git a/contrib/restricted/boost/boost/geometry/io/wkt/wkt.hpp b/contrib/restricted/boost/boost/geometry/io/wkt/wkt.hpp
deleted file mode 100644
index 28bd1e42aab..00000000000
--- a/contrib/restricted/boost/boost/geometry/io/wkt/wkt.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_IO_WKT_WKT_HPP
-#define BOOST_GEOMETRY_IO_WKT_WKT_HPP
-
-#include <boost/geometry/io/wkt/read.hpp>
-#include <boost/geometry/io/wkt/write.hpp>
-
-// BSG 2011-02-03
-// We don't include stream.hpp by default. That tries to stream anything not known
-// by default (such as ttmath) and reports errors.
-// Users can include stream.hpp themselves (if they want to)
-
-#endif // BOOST_GEOMETRY_IO_WKT_WKT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/io/wkt/write.hpp b/contrib/restricted/boost/boost/geometry/io/wkt/write.hpp
deleted file mode 100644
index 34af432fc60..00000000000
--- a/contrib/restricted/boost/boost/geometry/io/wkt/write.hpp
+++ /dev/null
@@ -1,546 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2017 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2017 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2017 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_IO_WKT_WRITE_HPP
-#define BOOST_GEOMETRY_IO_WKT_WRITE_HPP
-
-#include <ostream>
-#include <string>
-
-#include <boost/array.hpp>
-#include <boost/range.hpp>
-
-#include <boost/variant/apply_visitor.hpp>
-#include <boost/variant/static_visitor.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/algorithms/detail/interior_iterator.hpp>
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/point_point.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-#include <boost/geometry/geometries/ring.hpp>
-
-#include <boost/geometry/io/wkt/detail/prefix.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-// Silence warning C4512: 'boost::geometry::wkt_manipulator<Geometry>' : assignment operator could not be generated
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4512)
-#endif
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace wkt
-{
-
-template <typename P, int I, int Count>
-struct stream_coordinate
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os, P const& p)
- {
- os << (I > 0 ? " " : "") << get<I>(p);
- stream_coordinate<P, I + 1, Count>::apply(os, p);
- }
-};
-
-template <typename P, int Count>
-struct stream_coordinate<P, Count, Count>
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>&, P const&)
- {}
-};
-
-struct prefix_linestring_par
-{
- static inline const char* apply() { return "LINESTRING("; }
-};
-
-struct prefix_ring_par_par
-{
- // Note, double parentheses are intentional, indicating WKT ring begin/end
- static inline const char* apply() { return "POLYGON(("; }
-};
-
-struct opening_parenthesis
-{
- static inline const char* apply() { return "("; }
-};
-
-struct closing_parenthesis
-{
- static inline const char* apply() { return ")"; }
-};
-
-struct double_closing_parenthesis
-{
- static inline const char* apply() { return "))"; }
-};
-
-/*!
-\brief Stream points as \ref WKT
-*/
-template <typename Point, typename Policy>
-struct wkt_point
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os, Point const& p, bool)
- {
- os << Policy::apply() << "(";
- stream_coordinate<Point, 0, dimension<Point>::type::value>::apply(os, p);
- os << ")";
- }
-};
-
-/*!
-\brief Stream ranges as WKT
-\note policy is used to stream prefix/postfix, enabling derived classes to override this
-*/
-template
-<
- typename Range,
- bool ForceClosurePossible,
- typename PrefixPolicy,
- typename SuffixPolicy
->
-struct wkt_range
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Range const& range, bool force_closure = ForceClosurePossible)
- {
- typedef typename boost::range_iterator<Range const>::type iterator_type;
-
- typedef stream_coordinate
- <
- point_type, 0, dimension<point_type>::type::value
- > stream_type;
-
- bool first = true;
-
- os << PrefixPolicy::apply();
-
- // TODO: check EMPTY here
-
- iterator_type begin = boost::begin(range);
- iterator_type end = boost::end(range);
- for (iterator_type it = begin; it != end; ++it)
- {
- os << (first ? "" : ",");
- stream_type::apply(os, *it);
- first = false;
- }
-
- // optionally, close range to ring by repeating the first point
- if (ForceClosurePossible
- && force_closure
- && boost::size(range) > 1
- && detail::disjoint::disjoint_point_point(*begin, *(end - 1)))
- {
- os << ",";
- stream_type::apply(os, *begin);
- }
-
- os << SuffixPolicy::apply();
- }
-
-
-private:
- typedef typename boost::range_value<Range>::type point_type;
-};
-
-/*!
-\brief Stream sequence of points as WKT-part, e.g. (1 2),(3 4)
-\note Used in polygon, all multi-geometries
-*/
-template <typename Range, bool ForceClosurePossible = true>
-struct wkt_sequence
- : wkt_range
- <
- Range,
- ForceClosurePossible,
- opening_parenthesis,
- closing_parenthesis
- >
-{};
-
-template <typename Polygon, typename PrefixPolicy>
-struct wkt_poly
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Polygon const& poly, bool force_closure)
- {
- typedef typename ring_type<Polygon const>::type ring;
-
- os << PrefixPolicy::apply();
- // TODO: check EMPTY here
- os << "(";
- wkt_sequence<ring>::apply(os, exterior_ring(poly), force_closure);
-
- typename interior_return_type<Polygon const>::type
- rings = interior_rings(poly);
- for (typename detail::interior_iterator<Polygon const>::type
- it = boost::begin(rings); it != boost::end(rings); ++it)
- {
- os << ",";
- wkt_sequence<ring>::apply(os, *it, force_closure);
- }
- os << ")";
- }
-
-};
-
-template <typename Multi, typename StreamPolicy, typename PrefixPolicy>
-struct wkt_multi
-{
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Multi const& geometry, bool force_closure)
- {
- os << PrefixPolicy::apply();
- // TODO: check EMPTY here
- os << "(";
-
- for (typename boost::range_iterator<Multi const>::type
- it = boost::begin(geometry);
- it != boost::end(geometry);
- ++it)
- {
- if (it != boost::begin(geometry))
- {
- os << ",";
- }
- StreamPolicy::apply(os, *it, force_closure);
- }
-
- os << ")";
- }
-};
-
-template <typename Box>
-struct wkt_box
-{
- typedef typename point_type<Box>::type point_type;
-
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Box const& box, bool force_closure)
- {
- // Convert to a clockwire ring, then stream.
- // Never close it based on last point (box might be empty and
- // that should result in POLYGON((0 0,0 0,0 0,0 0, ...)) )
- if (force_closure)
- {
- do_apply<model::ring<point_type, true, true> >(os, box);
- }
- else
- {
- do_apply<model::ring<point_type, true, false> >(os, box);
- }
- }
-
- private:
-
- inline wkt_box()
- {
- // Only streaming of boxes with two dimensions is support, otherwise it is a polyhedron!
- //assert_dimension<B, 2>();
- }
-
- template <typename RingType, typename Char, typename Traits>
- static inline void do_apply(std::basic_ostream<Char, Traits>& os,
- Box const& box)
- {
- RingType ring;
- geometry::convert(box, ring);
- os << "POLYGON(";
- wkt_sequence<RingType, false>::apply(os, ring);
- os << ")";
- }
-
-};
-
-
-template <typename Segment>
-struct wkt_segment
-{
- typedef typename point_type<Segment>::type point_type;
-
- template <typename Char, typename Traits>
- static inline void apply(std::basic_ostream<Char, Traits>& os,
- Segment const& segment, bool)
- {
- // Convert to two points, then stream
- typedef boost::array<point_type, 2> sequence;
-
- sequence points;
- geometry::detail::assign_point_from_index<0>(segment, points[0]);
- geometry::detail::assign_point_from_index<1>(segment, points[1]);
-
- // In Boost.Geometry a segment is represented
- // in WKT-format like (for 2D): LINESTRING(x y,x y)
- os << "LINESTRING";
- wkt_sequence<sequence, false>::apply(os, points);
- }
-
- private:
-
- inline wkt_segment()
- {}
-};
-
-}} // namespace detail::wkt
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct wkt: not_implemented<Tag>
-{};
-
-template <typename Point>
-struct wkt<Point, point_tag>
- : detail::wkt::wkt_point
- <
- Point,
- detail::wkt::prefix_point
- >
-{};
-
-template <typename Linestring>
-struct wkt<Linestring, linestring_tag>
- : detail::wkt::wkt_range
- <
- Linestring,
- false,
- detail::wkt::prefix_linestring_par,
- detail::wkt::closing_parenthesis
- >
-{};
-
-/*!
-\brief Specialization to stream a box as WKT
-\details A "box" does not exist in WKT.
-It is therefore streamed as a polygon
-*/
-template <typename Box>
-struct wkt<Box, box_tag>
- : detail::wkt::wkt_box<Box>
-{};
-
-template <typename Segment>
-struct wkt<Segment, segment_tag>
- : detail::wkt::wkt_segment<Segment>
-{};
-
-/*!
-\brief Specialization to stream a ring as WKT
-\details A ring or "linear_ring" does not exist in WKT.
-A ring is equivalent to a polygon without inner rings
-It is therefore streamed as a polygon
-*/
-template <typename Ring>
-struct wkt<Ring, ring_tag>
- : detail::wkt::wkt_range
- <
- Ring,
- true,
- detail::wkt::prefix_ring_par_par,
- detail::wkt::double_closing_parenthesis
- >
-{};
-
-/*!
-\brief Specialization to stream polygon as WKT
-*/
-template <typename Polygon>
-struct wkt<Polygon, polygon_tag>
- : detail::wkt::wkt_poly
- <
- Polygon,
- detail::wkt::prefix_polygon
- >
-{};
-
-template <typename Multi>
-struct wkt<Multi, multi_point_tag>
- : detail::wkt::wkt_multi
- <
- Multi,
- detail::wkt::wkt_point
- <
- typename boost::range_value<Multi>::type,
- detail::wkt::prefix_null
- >,
- detail::wkt::prefix_multipoint
- >
-{};
-
-template <typename Multi>
-struct wkt<Multi, multi_linestring_tag>
- : detail::wkt::wkt_multi
- <
- Multi,
- detail::wkt::wkt_sequence
- <
- typename boost::range_value<Multi>::type,
- false
- >,
- detail::wkt::prefix_multilinestring
- >
-{};
-
-template <typename Multi>
-struct wkt<Multi, multi_polygon_tag>
- : detail::wkt::wkt_multi
- <
- Multi,
- detail::wkt::wkt_poly
- <
- typename boost::range_value<Multi>::type,
- detail::wkt::prefix_null
- >,
- detail::wkt::prefix_multipolygon
- >
-{};
-
-
-template <typename Geometry>
-struct devarianted_wkt
-{
- template <typename OutputStream>
- static inline void apply(OutputStream& os, Geometry const& geometry,
- bool force_closure)
- {
- wkt<Geometry>::apply(os, geometry, force_closure);
- }
-};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct devarianted_wkt<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- template <typename OutputStream>
- struct visitor: static_visitor<void>
- {
- OutputStream& m_os;
- bool m_force_closure;
-
- visitor(OutputStream& os, bool force_closure)
- : m_os(os)
- , m_force_closure(force_closure)
- {}
-
- template <typename Geometry>
- inline void operator()(Geometry const& geometry) const
- {
- devarianted_wkt<Geometry>::apply(m_os, geometry, m_force_closure);
- }
- };
-
- template <typename OutputStream>
- static inline void apply(
- OutputStream& os,
- variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry,
- bool force_closure)
- {
- boost::apply_visitor(visitor<OutputStream>(os, force_closure), geometry);
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-/*!
-\brief Generic geometry template manipulator class, takes corresponding output class from traits class
-\ingroup wkt
-\details Stream manipulator, streams geometry classes as \ref WKT streams
-\par Example:
-Small example showing how to use the wkt class
-\dontinclude doxygen_1.cpp
-\skip example_as_wkt_point
-\line {
-\until }
-*/
-template <typename Geometry>
-class wkt_manipulator
-{
- static const bool is_ring = boost::is_same<typename tag<Geometry>::type, ring_tag>::value;
-
-public:
-
- // Boost.Geometry, by default, closes polygons explictly, but not rings
- // NOTE: this might change in the future!
- inline wkt_manipulator(Geometry const& g,
- bool force_closure = ! is_ring)
- : m_geometry(g)
- , m_force_closure(force_closure)
- {}
-
- template <typename Char, typename Traits>
- inline friend std::basic_ostream<Char, Traits>& operator<<(
- std::basic_ostream<Char, Traits>& os,
- wkt_manipulator const& m)
- {
- dispatch::devarianted_wkt<Geometry>::apply(os, m.m_geometry, m.m_force_closure);
- os.flush();
- return os;
- }
-
-private:
- Geometry const& m_geometry;
- bool m_force_closure;
-};
-
-/*!
-\brief Main WKT-streaming function
-\tparam Geometry \tparam_geometry
-\param geometry \param_geometry
-\ingroup wkt
-\qbk{[include reference/io/wkt.qbk]}
-*/
-template <typename Geometry>
-inline wkt_manipulator<Geometry> wkt(Geometry const& geometry)
-{
- concepts::check<Geometry const>();
-
- return wkt_manipulator<Geometry>(geometry);
-}
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_IO_WKT_WRITE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/base.hpp b/contrib/restricted/boost/boost/geometry/iterators/base.hpp
deleted file mode 100644
index 01f198d1d48..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/base.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ITERATORS_BASE_HPP
-#define BOOST_GEOMETRY_ITERATORS_BASE_HPP
-
-#include <boost/iterator/iterator_adaptor.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-#include <boost/mpl/if.hpp>
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace boost { namespace geometry { namespace detail { namespace iterators
-{
-
-template
-<
- typename DerivedClass,
- typename Iterator,
- typename TraversalFlag = boost::bidirectional_traversal_tag
->
-struct iterator_base
- : public boost::iterator_adaptor
- <
- DerivedClass,
- Iterator,
- boost::use_default,
- typename boost::mpl::if_
- <
- boost::is_convertible
- <
- typename boost::iterator_traversal<Iterator>::type,
- boost::random_access_traversal_tag
- >,
- TraversalFlag,
- boost::use_default
- >::type
- >
-{
- // Define operator cast to Iterator to be able to write things like Iterator it = myit++
- inline operator Iterator() const
- {
- return this->base();
- }
-
- /*inline bool operator==(Iterator const& other) const
- {
- return this->base() == other;
- }
- inline bool operator!=(Iterator const& other) const
- {
- return ! operator==(other);
- }*/
-};
-
-}}}} // namespace boost::geometry::detail::iterators
-#endif
-
-
-#endif // BOOST_GEOMETRY_ITERATORS_BASE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/closing_iterator.hpp b/contrib/restricted/boost/boost/geometry/iterators/closing_iterator.hpp
deleted file mode 100644
index a0ec6a5c908..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/closing_iterator.hpp
+++ /dev/null
@@ -1,147 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ITERATORS_CLOSING_ITERATOR_HPP
-#define BOOST_GEOMETRY_ITERATORS_CLOSING_ITERATOR_HPP
-
-#include <boost/range.hpp>
-#include <boost/iterator/iterator_facade.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-/*!
-\brief Iterator which iterates through a range, but adds first element at end of the range
-\tparam Range range on which this class is based on
-\ingroup iterators
-\note It's const iterator treating the Range as one containing non-mutable elements.
- For both "closing_iterator<Range> and "closing_iterator<Range const>
- const reference is always returned when dereferenced.
-\note This class is normally used from "closeable_view" if Close==true
-*/
-template <typename Range>
-struct closing_iterator
- : public boost::iterator_facade
- <
- closing_iterator<Range>,
- typename boost::range_value<Range>::type const,
- boost::random_access_traversal_tag
- >
-{
- typedef typename boost::range_difference<Range>::type difference_type;
-
- /// Constructor including the range it is based on
- explicit inline closing_iterator(Range& range)
- : m_range(&range)
- , m_iterator(boost::begin(range))
- , m_end(boost::end(range))
- , m_size(static_cast<difference_type>(boost::size(range)))
- , m_index(0)
- {}
-
- /// Constructor to indicate the end of a range
- explicit inline closing_iterator(Range& range, bool)
- : m_range(&range)
- , m_iterator(boost::end(range))
- , m_end(boost::end(range))
- , m_size(static_cast<difference_type>(boost::size(range)))
- , m_index((m_size == 0) ? 0 : m_size + 1)
- {}
-
- /// Default constructor
- explicit inline closing_iterator()
- : m_range(NULL)
- , m_size(0)
- , m_index(0)
- {}
-
-private:
- friend class boost::iterator_core_access;
-
- inline typename boost::range_value<Range>::type const& dereference() const
- {
- return *m_iterator;
- }
-
- inline difference_type distance_to(closing_iterator<Range> const& other) const
- {
- return other.m_index - this->m_index;
- }
-
- inline bool equal(closing_iterator<Range> const& other) const
- {
- return this->m_range == other.m_range
- && this->m_index == other.m_index;
- }
-
- inline void increment()
- {
- if (++m_index < m_size)
- {
- ++m_iterator;
- }
- else
- {
- update_iterator();
- }
- }
-
- inline void decrement()
- {
- if (m_index-- < m_size)
- {
- --m_iterator;
- }
- else
- {
- update_iterator();
- }
- }
-
- inline void advance(difference_type n)
- {
- if (m_index < m_size && m_index + n < m_size)
- {
- m_index += n;
- m_iterator += n;
- }
- else
- {
- m_index += n;
- update_iterator();
- }
- }
-
- inline void update_iterator()
- {
- this->m_iterator = m_index <= m_size
- ? boost::begin(*m_range) + (m_index % m_size)
- : boost::end(*m_range)
- ;
- }
-
- Range* m_range;
- typename boost::range_iterator<Range>::type m_iterator;
- typename boost::range_iterator<Range>::type m_end;
- difference_type m_size;
- difference_type m_index;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ITERATORS_CLOSING_ITERATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/concatenate_iterator.hpp b/contrib/restricted/boost/boost/geometry/iterators/concatenate_iterator.hpp
deleted file mode 100644
index 99d890e449d..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/concatenate_iterator.hpp
+++ /dev/null
@@ -1,152 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_CONCATENATE_ITERATOR_HPP
-#define BOOST_GEOMETRY_ITERATORS_CONCATENATE_ITERATOR_HPP
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/iterator/iterator_facade.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-
-template
-<
- typename Iterator1,
- typename Iterator2,
- typename Value,
- typename Reference = Value&
->
-class concatenate_iterator
- : public boost::iterator_facade
- <
- concatenate_iterator<Iterator1, Iterator2, Value, Reference>,
- Value,
- boost::bidirectional_traversal_tag,
- Reference
- >
-{
-private:
- Iterator1 m_it1, m_end1;
- Iterator2 m_begin2, m_it2;
-
-public:
- typedef Iterator1 first_iterator_type;
- typedef Iterator2 second_iterator_type;
-
- // default constructor
- concatenate_iterator() {}
-
- // for begin
- concatenate_iterator(Iterator1 it1, Iterator1 end1,
- Iterator2 begin2, Iterator2 it2)
- : m_it1(it1), m_end1(end1), m_begin2(begin2), m_it2(it2)
- {}
-
- // for end
- concatenate_iterator(Iterator1 end1, Iterator2 begin2, Iterator2 end2)
- : m_it1(end1), m_end1(end1), m_begin2(begin2), m_it2(end2)
- {}
-
- template
- <
- typename OtherIt1,
- typename OtherIt2,
- typename OtherValue,
- typename OtherReference
- >
- concatenate_iterator(concatenate_iterator
- <
- OtherIt1,
- OtherIt2,
- OtherValue,
- OtherReference
- > const& other)
- : m_it1(other.m_it1)
- , m_end1(other.m_end1)
- , m_begin2(other.m_begin2)
- , m_it2(other.m_it2)
- {
- static const bool are_conv
- = boost::is_convertible<OtherIt1, Iterator1>::value
- && boost::is_convertible<OtherIt2, Iterator2>::value;
-
- BOOST_MPL_ASSERT_MSG((are_conv),
- NOT_CONVERTIBLE,
- (types<OtherIt1, OtherIt2>));
- }
-
-private:
- friend class boost::iterator_core_access;
-
- template <typename It1, typename It2, typename V, typename R>
- friend class concatenate_iterator;
-
- inline Reference dereference() const
- {
- if ( m_it1 == m_end1 )
- {
- return *m_it2;
- }
- return *m_it1;
- }
-
- template
- <
- typename OtherIt1,
- typename OtherIt2,
- typename OtherValue,
- typename OtherReference
- >
- inline bool equal(concatenate_iterator
- <
- OtherIt1,
- OtherIt2,
- OtherValue,
- OtherReference
- > const& other) const
- {
- return m_it1 == other.m_it1 && m_it2 == other.m_it2;
- }
-
- inline void increment()
- {
- if ( m_it1 == m_end1 )
- {
- ++m_it2;
- }
- else
- {
- ++m_it1;
- }
- }
-
- inline void decrement()
- {
- if ( m_it2 == m_begin2 )
- {
- --m_it1;
- }
- else
- {
- --m_it2;
- }
- }
-};
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ITERATORS_CONCATENATE_ITERATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/detail/point_iterator/inner_range_type.hpp b/contrib/restricted/boost/boost/geometry/iterators/detail/point_iterator/inner_range_type.hpp
deleted file mode 100644
index b2239fb8ddc..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/detail/point_iterator/inner_range_type.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_DETAIL_POINT_ITERATOR_INNER_RANGE_TYPE_HPP
-#define BOOST_GEOMETRY_ITERATORS_DETAIL_POINT_ITERATOR_INNER_RANGE_TYPE_HPP
-
-#include <boost/range.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/mpl/if.hpp>
-
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace point_iterator
-{
-
-
-template
-<
- typename Geometry,
- typename Tag = typename tag<Geometry>::type
->
-struct inner_range_type
-{
- typedef typename boost::mpl::if_c
- <
- !boost::is_const<Geometry>::type::value,
- typename boost::range_value<Geometry>::type,
- typename boost::range_value<Geometry>::type const
- >::type type;
-};
-
-
-template <typename Polygon>
-struct inner_range_type<Polygon, polygon_tag>
-{
- typedef typename boost::mpl::if_c
- <
- !boost::is_const<Polygon>::type::value,
- typename geometry::ring_type<Polygon>::type,
- typename geometry::ring_type<Polygon>::type const
- >::type type;
-};
-
-
-}} // namespace detail::point_iterator
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ITERATORS_DETAIL_POINT_ITERATOR_INNER_RANGE_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/detail/point_iterator/iterator_type.hpp b/contrib/restricted/boost/boost/geometry/iterators/detail/point_iterator/iterator_type.hpp
deleted file mode 100644
index a7805b127b5..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/detail/point_iterator/iterator_type.hpp
+++ /dev/null
@@ -1,136 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_DETAIL_POINT_ITERATOR_ITERATOR_TYPE_HPP
-#define BOOST_GEOMETRY_ITERATORS_DETAIL_POINT_ITERATOR_ITERATOR_TYPE_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/iterators/flatten_iterator.hpp>
-#include <boost/geometry/iterators/concatenate_iterator.hpp>
-
-#include <boost/geometry/iterators/detail/point_iterator/inner_range_type.hpp>
-#include <boost/geometry/iterators/detail/point_iterator/value_type.hpp>
-
-#include <boost/geometry/iterators/dispatch/point_iterator.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace point_iterator
-{
-
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct iterator_type
- : not_implemented<Geometry>
-{};
-
-
-
-
-template <typename Linestring>
-struct iterator_type<Linestring, linestring_tag>
-{
- typedef typename boost::range_iterator<Linestring>::type type;
-};
-
-
-template <typename Ring>
-struct iterator_type<Ring, ring_tag>
-{
- typedef typename boost::range_iterator<Ring>::type type;
-};
-
-
-template <typename Polygon>
-class iterator_type<Polygon, polygon_tag>
-{
-private:
- typedef typename inner_range_type<Polygon>::type inner_range;
-
-public:
- typedef concatenate_iterator
- <
- typename boost::range_iterator<inner_range>::type,
- flatten_iterator
- <
- typename boost::range_iterator
- <
- typename geometry::interior_type<Polygon>::type
- >::type,
- typename iterator_type<inner_range>::type,
- typename value_type<Polygon>::type,
- dispatch::points_begin<inner_range>,
- dispatch::points_end<inner_range>
- >,
- typename value_type<Polygon>::type
- > type;
-};
-
-
-template <typename MultiPoint>
-struct iterator_type<MultiPoint, multi_point_tag>
-{
- typedef typename boost::range_iterator<MultiPoint>::type type;
-};
-
-
-template <typename MultiLinestring>
-class iterator_type<MultiLinestring, multi_linestring_tag>
-{
-private:
- typedef typename inner_range_type<MultiLinestring>::type inner_range;
-
-public:
- typedef flatten_iterator
- <
- typename boost::range_iterator<MultiLinestring>::type,
- typename iterator_type<inner_range>::type,
- typename value_type<MultiLinestring>::type,
- dispatch::points_begin<inner_range>,
- dispatch::points_end<inner_range>
- > type;
-};
-
-
-template <typename MultiPolygon>
-class iterator_type<MultiPolygon, multi_polygon_tag>
-{
-private:
- typedef typename inner_range_type<MultiPolygon>::type inner_range;
-
-public:
- typedef flatten_iterator
- <
- typename boost::range_iterator<MultiPolygon>::type,
- typename iterator_type<inner_range>::type,
- typename value_type<MultiPolygon>::type,
- dispatch::points_begin<inner_range>,
- dispatch::points_end<inner_range>
- > type;
-};
-
-
-}} // namespace detail::point_iterator
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ITERATORS_DETAIL_POINT_ITERATOR_ITERATOR_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/detail/point_iterator/value_type.hpp b/contrib/restricted/boost/boost/geometry/iterators/detail/point_iterator/value_type.hpp
deleted file mode 100644
index 7cdf3663916..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/detail/point_iterator/value_type.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_DETAIL_POINT_ITERATOR_VALUE_TYPE_HPP
-#define BOOST_GEOMETRY_ITERATORS_DETAIL_POINT_ITERATOR_VALUE_TYPE_HPP
-
-#include <boost/type_traits/is_const.hpp>
-#include <boost/mpl/if.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace point_iterator
-{
-
-
-template <typename Geometry>
-struct value_type
-{
- typedef typename boost::mpl::if_c
- <
- !boost::is_const<Geometry>::type::value,
- typename geometry::point_type<Geometry>::type,
- typename geometry::point_type<Geometry>::type const
- >::type type;
-};
-
-
-}} // namespace detail::point_iterator
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ITERATORS_DETAIL_POINT_ITERATOR_VALUE_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/detail/segment_iterator/iterator_type.hpp b/contrib/restricted/boost/boost/geometry/iterators/detail/segment_iterator/iterator_type.hpp
deleted file mode 100644
index 57a524e7e42..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/detail/segment_iterator/iterator_type.hpp
+++ /dev/null
@@ -1,153 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_ITERATOR_TYPE_HPP
-#define BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_ITERATOR_TYPE_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/interior_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-#include <boost/geometry/iterators/concatenate_iterator.hpp>
-#include <boost/geometry/iterators/flatten_iterator.hpp>
-#include <boost/geometry/iterators/detail/point_iterator/inner_range_type.hpp>
-
-#include <boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp>
-#include <boost/geometry/iterators/detail/segment_iterator/value_type.hpp>
-
-#include <boost/geometry/iterators/dispatch/segment_iterator.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace segment_iterator
-{
-
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct iterator_type
- : not_implemented<Geometry>
-{};
-
-
-template <typename Linestring>
-struct iterator_type<Linestring, linestring_tag>
-{
- typedef range_segment_iterator
- <
- Linestring, typename value_type<Linestring>::type
- > type;
-};
-
-
-template <typename Ring>
-struct iterator_type<Ring, ring_tag>
-{
- typedef range_segment_iterator
- <
- Ring, typename value_type<Ring>::type
- > type;
-};
-
-
-template <typename Polygon>
-class iterator_type<Polygon, polygon_tag>
-{
-private:
- typedef typename detail::point_iterator::inner_range_type
- <
- Polygon
- >::type inner_range;
-
-public:
- typedef concatenate_iterator
- <
- range_segment_iterator
- <
- inner_range,
- typename value_type<Polygon>::type
- >,
- flatten_iterator
- <
- typename boost::range_iterator
- <
- typename geometry::interior_type<Polygon>::type
- >::type,
- typename iterator_type<inner_range>::type,
- typename value_type<Polygon>::type,
- dispatch::segments_begin<inner_range>,
- dispatch::segments_end<inner_range>,
- typename value_type<Polygon>::type
- >,
- typename value_type<Polygon>::type,
- typename value_type<Polygon>::type
- > type;
-};
-
-
-template <typename MultiLinestring>
-class iterator_type<MultiLinestring, multi_linestring_tag>
-{
-private:
- typedef typename detail::point_iterator::inner_range_type
- <
- MultiLinestring
- >::type inner_range;
-
-public:
- typedef flatten_iterator
- <
- typename boost::range_iterator<MultiLinestring>::type,
- typename iterator_type<inner_range>::type,
- typename value_type<MultiLinestring>::type,
- dispatch::segments_begin<inner_range>,
- dispatch::segments_end<inner_range>,
- typename value_type<MultiLinestring>::type
- > type;
-};
-
-
-template <typename MultiPolygon>
-class iterator_type<MultiPolygon, multi_polygon_tag>
-{
-private:
- typedef typename detail::point_iterator::inner_range_type
- <
- MultiPolygon
- >::type inner_range;
-public:
- typedef flatten_iterator
- <
- typename boost::range_iterator<MultiPolygon>::type,
- typename iterator_type<inner_range>::type,
- typename value_type<MultiPolygon>::type,
- dispatch::segments_begin<inner_range>,
- dispatch::segments_end<inner_range>,
- typename value_type<MultiPolygon>::type
- > type;
-};
-
-
-
-}} // namespace detail::segment_iterator
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_ITERATOR_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp b/contrib/restricted/boost/boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp
deleted file mode 100644
index f60993caf85..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp
+++ /dev/null
@@ -1,214 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_RANGE_SEGMENT_ITERATOR_HPP
-#define BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_RANGE_SEGMENT_ITERATOR_HPP
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/iterator/iterator_facade.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/iterators/closing_iterator.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace segment_iterator
-{
-
-
-template <typename Range, closure_selector Closure = closure<Range>::value>
-struct range_iterator_type
-{
- typedef typename boost::range_iterator<Range>::type type;
-};
-
-template <typename Range>
-struct range_iterator_type<Range, open>
-{
- typedef closing_iterator<Range> type;
-};
-
-
-
-template <typename Range, closure_selector Closure = closure<Range>::value>
-struct range_iterator_begin
-{
- static inline typename range_iterator_type<Range, Closure>::type
- apply(Range& range)
- {
- return boost::begin(range);
- }
-};
-
-template <typename Range>
-struct range_iterator_begin<Range, open>
-{
- static inline typename range_iterator_type<Range, open>::type
- apply(Range& range)
- {
- return closing_iterator<Range>(range);
- }
-};
-
-
-
-template <typename Range, closure_selector Closure = closure<Range>::value>
-struct range_iterator_end
-{
- static inline typename range_iterator_type<Range, Closure>::type
- apply(Range& range)
- {
- return boost::end(range);
- }
-};
-
-template <typename Range>
-struct range_iterator_end<Range, open>
-{
- static inline typename range_iterator_type<Range, open>::type
- apply(Range& range)
- {
- return closing_iterator<Range>(range, true);
- }
-};
-
-
-
-
-
-
-template <typename Range, typename Value, typename Reference = Value>
-class range_segment_iterator
- : public boost::iterator_facade
- <
- range_segment_iterator<Range, Value, Reference>,
- Value,
- boost::bidirectional_traversal_tag,
- Reference
- >
-{
- static inline bool has_less_than_two_elements(Range const& r)
- {
- return boost::size(r) < ((closure<Range>::value == open) ? 1u : 2u);
- }
-
-public:
- typedef typename range_iterator_type<Range>::type iterator_type;
-
- // default constructor
- range_segment_iterator()
- : m_it(), m_has_less_than_two_elements(false)
- {}
-
- // for begin
- range_segment_iterator(Range& r)
- : m_it(range_iterator_begin<Range>::apply(r))
- , m_has_less_than_two_elements(has_less_than_two_elements(r))
- {}
-
- // for end
- range_segment_iterator(Range& r, bool)
- : m_it(range_iterator_end<Range>::apply(r))
- , m_has_less_than_two_elements(has_less_than_two_elements(r))
- {
- if (! m_has_less_than_two_elements)
- {
- // the range consists of at least two items
- --m_it;
- }
- }
-
- template
- <
- typename OtherRange,
- typename OtherValue,
- typename OtherReference
- >
- range_segment_iterator(range_segment_iterator
- <
- OtherRange,
- OtherValue,
- OtherReference
- > const& other)
- : m_it(other.m_it)
- {
- typedef typename range_segment_iterator
- <
- OtherRange, OtherValue, OtherReference
- >::iterator_type other_iterator_type;
-
- static const bool are_conv
- = boost::is_convertible<other_iterator_type, iterator_type>::value;
-
- BOOST_MPL_ASSERT_MSG((are_conv), NOT_CONVERTIBLE, (types<OtherRange>));
- }
-
-private:
- friend class boost::iterator_core_access;
-
- template <typename Rng, typename V, typename R>
- friend class range_segment_iterator;
-
- inline Reference dereference() const
- {
- if (m_has_less_than_two_elements)
- {
- return Reference(*m_it, *m_it);
- }
-
- iterator_type next(m_it);
- ++next;
- return Reference(*m_it, *next);
- }
-
- template
- <
- typename OtherRange,
- typename OtherValue,
- typename OtherReference
- >
- inline bool equal(range_segment_iterator
- <
- OtherRange,
- OtherValue,
- OtherReference
- > const& other) const
- {
- return m_it == other.m_it;
- }
-
- inline void increment()
- {
- ++m_it;
- }
-
- inline void decrement()
- {
- --m_it;
- }
-
-private:
- iterator_type m_it;
- bool m_has_less_than_two_elements;
-};
-
-
-}} // namespace detail::segment_iterator
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_RANGE_SEGMENT_ITERATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/detail/segment_iterator/value_type.hpp b/contrib/restricted/boost/boost/geometry/iterators/detail/segment_iterator/value_type.hpp
deleted file mode 100644
index ff3267c8842..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/detail/segment_iterator/value_type.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_VALUE_TYPE_HPP
-#define BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_VALUE_TYPE_HPP
-
-#include <iterator>
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_reference.hpp>
-
-#include <boost/geometry/iterators/point_iterator.hpp>
-#include <boost/geometry/util/bare_type.hpp>
-#include <boost/geometry/geometries/segment.hpp>
-#include <boost/geometry/geometries/pointing_segment.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace segment_iterator
-{
-
-template <typename Geometry>
-struct value_type
-{
- typedef typename std::iterator_traits
- <
- geometry::point_iterator<Geometry>
- >::reference point_iterator_reference_type;
-
- typedef typename detail::point_iterator::value_type
- <
- Geometry
- >::type point_iterator_value_type;
-
- // If the reference type of the point iterator is not really a
- // reference, then dereferencing a point iterator would create
- // a temporary object.
- // In this case using a pointing_segment to represent the
- // dereferenced value of the segment iterator cannot be used, as
- // it would store pointers to temporary objects. Instead we use a
- // segment, which does a full copy of the temporary objects
- // returned by the point iterator.
- typedef typename boost::mpl::if_
- <
- boost::is_reference<point_iterator_reference_type>,
- geometry::model::pointing_segment<point_iterator_value_type>,
- geometry::model::segment
- <
- typename geometry::util::bare_type
- <
- point_iterator_value_type
- >::type
- >
- >::type type;
-};
-
-}} // namespace detail::segment_iterator
-#endif // DOXYGEN_NO_DETAIL
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_VALUE_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/dispatch/point_iterator.hpp b/contrib/restricted/boost/boost/geometry/iterators/dispatch/point_iterator.hpp
deleted file mode 100644
index 938dfd8ebc2..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/dispatch/point_iterator.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_DISPATCH_POINT_ITERATOR_HPP
-#define BOOST_GEOMETRY_ITERATORS_DISPATCH_POINT_ITERATOR_HPP
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// dispatch for points_begin
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct points_begin
- : not_implemented<Geometry>
-{};
-
-
-
-// dispatch for points_end
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct points_end
- : not_implemented<Geometry>
-{};
-
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ITERATORS_DISPATCH_POINT_ITERATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/dispatch/segment_iterator.hpp b/contrib/restricted/boost/boost/geometry/iterators/dispatch/segment_iterator.hpp
deleted file mode 100644
index 0c0a1b09a78..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/dispatch/segment_iterator.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_DISPATCH_SEGMENT_ITERATOR_HPP
-#define BOOST_GEOMETRY_ITERATORS_DISPATCH_SEGMENT_ITERATOR_HPP
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// dispatch for segments_begin
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct segments_begin
- : not_implemented<Geometry>
-{};
-
-
-
-// dispatch for segments_end
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct segments_end
- : not_implemented<Geometry>
-{};
-
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ITERATORS_DISPATCH_SEGMENT_ITERATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/ever_circling_iterator.hpp b/contrib/restricted/boost/boost/geometry/iterators/ever_circling_iterator.hpp
deleted file mode 100644
index 569688aac23..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/ever_circling_iterator.hpp
+++ /dev/null
@@ -1,202 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ITERATORS_EVER_CIRCLING_ITERATOR_HPP
-#define BOOST_GEOMETRY_ITERATORS_EVER_CIRCLING_ITERATOR_HPP
-
-#include <boost/range.hpp>
-#include <boost/iterator/iterator_adaptor.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-
-#include <boost/geometry/iterators/base.hpp>
-
-namespace boost { namespace geometry
-{
-
-/*!
- \brief Iterator which ever circles through a range
- \tparam Iterator iterator on which this class is based on
- \ingroup iterators
- \details If the iterator arrives at range.end() it restarts from the
- beginning. So it has to be stopped in another way.
- Don't call for(....; it++) because it will turn in an endless loop
- \note Name inspired on David Bowie's
- "Chant Of The Ever Circling Skeletal Family"
-*/
-template <typename Iterator>
-struct ever_circling_iterator :
- public detail::iterators::iterator_base
- <
- ever_circling_iterator<Iterator>,
- Iterator
- >
-{
- friend class boost::iterator_core_access;
-
- explicit inline ever_circling_iterator(Iterator begin, Iterator end,
- bool skip_first = false)
- : m_begin(begin)
- , m_end(end)
- , m_skip_first(skip_first)
- {
- this->base_reference() = begin;
- }
-
- explicit inline ever_circling_iterator(Iterator begin, Iterator end, Iterator start,
- bool skip_first = false)
- : m_begin(begin)
- , m_end(end)
- , m_skip_first(skip_first)
- {
- this->base_reference() = start;
- }
-
- /// Navigate to a certain position, should be in [start .. end], if at end
- /// it will circle again.
- inline void moveto(Iterator it)
- {
- this->base_reference() = it;
- check_end();
- }
-
-private:
-
- inline void increment(bool possibly_skip = true)
- {
- (this->base_reference())++;
- check_end(possibly_skip);
- }
-
- inline void check_end(bool possibly_skip = true)
- {
- if (this->base() == this->m_end)
- {
- this->base_reference() = this->m_begin;
- if (m_skip_first && possibly_skip)
- {
- increment(false);
- }
- }
- }
-
- Iterator m_begin;
- Iterator m_end;
- bool m_skip_first;
-};
-
-template <typename Range>
-struct ever_circling_range_iterator
- : public boost::iterator_facade
- <
- ever_circling_range_iterator<Range>,
- typename boost::range_value<Range>::type const,
- boost::random_access_traversal_tag
- >
-{
- /// Constructor including the range it is based on
- explicit inline ever_circling_range_iterator(Range& range)
- : m_range(&range)
- , m_iterator(boost::begin(range))
- , m_size(boost::size(range))
- , m_index(0)
- {}
-
- /// Default constructor
- explicit inline ever_circling_range_iterator()
- : m_range(NULL)
- , m_size(0)
- , m_index(0)
- {}
-
- typedef std::ptrdiff_t difference_type;
-
-private:
- friend class boost::iterator_core_access;
-
- inline typename boost::range_value<Range>::type const& dereference() const
- {
- return *m_iterator;
- }
-
- inline difference_type distance_to(ever_circling_range_iterator<Range> const& other) const
- {
- return other.m_index - this->m_index;
- }
-
- inline bool equal(ever_circling_range_iterator<Range> const& other) const
- {
- return this->m_range == other.m_range
- && this->m_index == other.m_index;
- }
-
- inline void increment()
- {
- ++m_index;
- if (m_index >= 0 && m_index < m_size)
- {
- ++m_iterator;
- }
- else
- {
- update_iterator();
- }
- }
-
- inline void decrement()
- {
- --m_index;
- if (m_index >= 0 && m_index < m_size)
- {
- --m_iterator;
- }
- else
- {
- update_iterator();
- }
- }
-
- inline void advance(difference_type n)
- {
- if (m_index >= 0 && m_index < m_size
- && m_index + n >= 0 && m_index + n < m_size)
- {
- m_index += n;
- m_iterator += n;
- }
- else
- {
- m_index += n;
- update_iterator();
- }
- }
-
- inline void update_iterator()
- {
- while (m_index < 0)
- {
- m_index += m_size;
- }
- m_index = m_index % m_size;
- this->m_iterator = boost::begin(*m_range) + m_index;
- }
-
- Range* m_range;
- typename boost::range_iterator<Range>::type m_iterator;
- difference_type m_size;
- difference_type m_index;
-};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ITERATORS_EVER_CIRCLING_ITERATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/flatten_iterator.hpp b/contrib/restricted/boost/boost/geometry/iterators/flatten_iterator.hpp
deleted file mode 100644
index 2fd5d86689b..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/flatten_iterator.hpp
+++ /dev/null
@@ -1,230 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_FLATTEN_ITERATOR_HPP
-#define BOOST_GEOMETRY_ITERATORS_FLATTEN_ITERATOR_HPP
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/iterator/iterator_facade.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-
-template
-<
- typename OuterIterator,
- typename InnerIterator,
- typename Value,
- typename AccessInnerBegin,
- typename AccessInnerEnd,
- typename Reference = Value&
->
-class flatten_iterator
- : public boost::iterator_facade
- <
- flatten_iterator
- <
- OuterIterator,
- InnerIterator,
- Value,
- AccessInnerBegin,
- AccessInnerEnd,
- Reference
- >,
- Value,
- boost::bidirectional_traversal_tag,
- Reference
- >
-{
-private:
- OuterIterator m_outer_it, m_outer_end;
- InnerIterator m_inner_it;
-
-public:
- typedef OuterIterator outer_iterator_type;
- typedef InnerIterator inner_iterator_type;
-
- // default constructor
- flatten_iterator() {}
-
- flatten_iterator(const flatten_iterator& other) = default;
-
- // for begin
- flatten_iterator(OuterIterator outer_it, OuterIterator outer_end)
- : m_outer_it(outer_it), m_outer_end(outer_end)
- {
- advance_through_empty();
- }
-
- // for end
- flatten_iterator(OuterIterator outer_end)
- : m_outer_it(outer_end), m_outer_end(outer_end)
- {}
-
- template
- <
- typename OtherOuterIterator, typename OtherInnerIterator,
- typename OtherValue,
- typename OtherAccessInnerBegin, typename OtherAccessInnerEnd,
- typename OtherReference
- >
- flatten_iterator(flatten_iterator
- <
- OtherOuterIterator,
- OtherInnerIterator,
- OtherValue,
- OtherAccessInnerBegin,
- OtherAccessInnerEnd,
- OtherReference
- > const& other)
- : m_outer_it(other.m_outer_it),
- m_outer_end(other.m_outer_end),
- m_inner_it(other.m_inner_it)
- {
- static const bool are_conv
- = boost::is_convertible
- <
- OtherOuterIterator, OuterIterator
- >::value
- && boost::is_convertible
- <
- OtherInnerIterator, InnerIterator
- >::value;
-
- BOOST_MPL_ASSERT_MSG((are_conv),
- NOT_CONVERTIBLE,
- (types<OtherOuterIterator, OtherInnerIterator>));
- }
-
- flatten_iterator& operator=(flatten_iterator const& other)
- {
- m_outer_it = other.m_outer_it;
- m_outer_end = other.m_outer_end;
- // avoid assigning an iterator having singular value
- if ( other.m_outer_it != other.m_outer_end )
- {
- m_inner_it = other.m_inner_it;
- }
- return *this;
- }
-
-private:
- friend class boost::iterator_core_access;
-
- template
- <
- typename Outer,
- typename Inner,
- typename V,
- typename InnerBegin,
- typename InnerEnd,
- typename R
- >
- friend class flatten_iterator;
-
- static inline bool empty(OuterIterator outer_it)
- {
- return AccessInnerBegin::apply(*outer_it)
- == AccessInnerEnd::apply(*outer_it);
- }
-
- inline void advance_through_empty()
- {
- while ( m_outer_it != m_outer_end && empty(m_outer_it) )
- {
- ++m_outer_it;
- }
-
- if ( m_outer_it != m_outer_end )
- {
- m_inner_it = AccessInnerBegin::apply(*m_outer_it);
- }
- }
-
- inline Reference dereference() const
- {
- BOOST_GEOMETRY_ASSERT( m_outer_it != m_outer_end );
- BOOST_GEOMETRY_ASSERT( m_inner_it != AccessInnerEnd::apply(*m_outer_it) );
- return *m_inner_it;
- }
-
-
- template
- <
- typename OtherOuterIterator,
- typename OtherInnerIterator,
- typename OtherValue,
- typename OtherAccessInnerBegin,
- typename OtherAccessInnerEnd,
- typename OtherReference
- >
- inline bool equal(flatten_iterator
- <
- OtherOuterIterator,
- OtherInnerIterator,
- OtherValue,
- OtherAccessInnerBegin,
- OtherAccessInnerEnd,
- OtherReference
- > const& other) const
- {
- if ( m_outer_it != other.m_outer_it )
- {
- return false;
- }
-
- if ( m_outer_it == m_outer_end )
- {
- return true;
- }
-
- return m_inner_it == other.m_inner_it;
- }
-
- inline void increment()
- {
- BOOST_GEOMETRY_ASSERT( m_outer_it != m_outer_end );
- BOOST_GEOMETRY_ASSERT( m_inner_it != AccessInnerEnd::apply(*m_outer_it) );
-
- ++m_inner_it;
- if ( m_inner_it == AccessInnerEnd::apply(*m_outer_it) )
- {
- ++m_outer_it;
- advance_through_empty();
- }
- }
-
- inline void decrement()
- {
- if ( m_outer_it == m_outer_end
- || m_inner_it == AccessInnerBegin::apply(*m_outer_it) )
- {
- do
- {
- --m_outer_it;
- }
- while ( empty(m_outer_it) );
- m_inner_it = AccessInnerEnd::apply(*m_outer_it);
- }
- --m_inner_it;
- }
-};
-
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ITERATORS_FLATTEN_ITERATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/has_one_element.hpp b/contrib/restricted/boost/boost/geometry/iterators/has_one_element.hpp
deleted file mode 100644
index 2f9acefc1eb..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/has_one_element.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_HAS_ONE_ELEMENT_HPP
-#define BOOST_GEOMETRY_ITERATORS_HAS_ONE_ELEMENT_HPP
-
-
-namespace boost { namespace geometry
-{
-
-
-// free function to test if an iterator range has a single element
-template <typename Iterator>
-inline bool has_one_element(Iterator first, Iterator beyond)
-{
- return first != beyond && ++first == beyond;
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ITERATORS_HAS_ONE_ELEMENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/point_iterator.hpp b/contrib/restricted/boost/boost/geometry/iterators/point_iterator.hpp
deleted file mode 100644
index 5ee0e54917b..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/point_iterator.hpp
+++ /dev/null
@@ -1,308 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_POINT_ITERATOR_HPP
-#define BOOST_GEOMETRY_ITERATORS_POINT_ITERATOR_HPP
-
-#include <boost/iterator/iterator_adaptor.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/iterators/dispatch/point_iterator.hpp>
-#include <boost/geometry/iterators/detail/point_iterator/iterator_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// specializations for points_begin
-
-
-template <typename Linestring>
-struct points_begin<Linestring, linestring_tag>
-{
- static inline typename detail::point_iterator::iterator_type
- <
- Linestring
- >::type
- apply(Linestring& linestring)
- {
- return boost::begin(linestring);
- }
-};
-
-
-template <typename Ring>
-struct points_begin<Ring, ring_tag>
-{
- static inline typename detail::point_iterator::iterator_type<Ring>::type
- apply(Ring& ring)
- {
- return boost::begin(ring);
- }
-};
-
-
-template <typename Polygon>
-struct points_begin<Polygon, polygon_tag>
-{
- typedef typename detail::point_iterator::iterator_type
- <
- Polygon
- >::type return_type;
-
- static inline return_type apply(Polygon& polygon)
- {
- typedef typename return_type::second_iterator_type flatten_iterator;
-
- return return_type
- (boost::begin(geometry::exterior_ring(polygon)),
- boost::end(geometry::exterior_ring(polygon)),
- flatten_iterator(boost::begin(geometry::interior_rings(polygon)),
- boost::end(geometry::interior_rings(polygon))
- ),
- flatten_iterator(boost::begin(geometry::interior_rings(polygon)),
- boost::end(geometry::interior_rings(polygon))
- )
- );
- }
-};
-
-
-template <typename MultiPoint>
-struct points_begin<MultiPoint, multi_point_tag>
-{
- static inline typename detail::point_iterator::iterator_type
- <
- MultiPoint
- >::type
- apply(MultiPoint& multipoint)
- {
- return boost::begin(multipoint);
- }
-};
-
-
-template <typename MultiLinestring>
-struct points_begin<MultiLinestring, multi_linestring_tag>
-{
- typedef typename detail::point_iterator::iterator_type
- <
- MultiLinestring
- >::type return_type;
-
- static inline return_type apply(MultiLinestring& multilinestring)
- {
- return return_type(boost::begin(multilinestring),
- boost::end(multilinestring));
- }
-};
-
-
-template <typename MultiPolygon>
-struct points_begin<MultiPolygon, multi_polygon_tag>
-{
- typedef typename detail::point_iterator::iterator_type
- <
- MultiPolygon
- >::type return_type;
-
- static inline return_type apply(MultiPolygon& multipolygon)
- {
- return return_type(boost::begin(multipolygon),
- boost::end(multipolygon));
- }
-};
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// specializations for points_end
-
-
-template <typename Linestring>
-struct points_end<Linestring, linestring_tag>
-{
- static inline typename detail::point_iterator::iterator_type
- <
- Linestring
- >::type
- apply(Linestring& linestring)
- {
- return boost::end(linestring);
- }
-};
-
-
-template <typename Ring>
-struct points_end<Ring, ring_tag>
-{
- static inline typename detail::point_iterator::iterator_type<Ring>::type
- apply(Ring& ring)
- {
- return boost::end(ring);
- }
-};
-
-
-template <typename Polygon>
-struct points_end<Polygon, polygon_tag>
-{
- typedef typename detail::point_iterator::iterator_type
- <
- Polygon
- >::type return_type;
-
- static inline return_type apply(Polygon& polygon)
- {
- typedef typename return_type::second_iterator_type flatten_iterator;
-
- return return_type
- (boost::end(geometry::exterior_ring(polygon)),
- flatten_iterator(boost::begin(geometry::interior_rings(polygon)),
- boost::end(geometry::interior_rings(polygon))
- ),
- flatten_iterator( boost::end(geometry::interior_rings(polygon)) )
- );
- }
-};
-
-
-template <typename MultiPoint>
-struct points_end<MultiPoint, multi_point_tag>
-{
- static inline typename detail::point_iterator::iterator_type
- <
- MultiPoint
- >::type
- apply(MultiPoint& multipoint)
- {
- return boost::end(multipoint);
- }
-};
-
-
-template <typename MultiLinestring>
-struct points_end<MultiLinestring, multi_linestring_tag>
-{
- typedef typename detail::point_iterator::iterator_type
- <
- MultiLinestring
- >::type return_type;
-
- static inline return_type apply(MultiLinestring& multilinestring)
- {
- return return_type(boost::end(multilinestring));
- }
-};
-
-
-template <typename MultiPolygon>
-struct points_end<MultiPolygon, multi_polygon_tag>
-{
- typedef typename detail::point_iterator::iterator_type
- <
- MultiPolygon
- >::type return_type;
-
- static inline return_type apply(MultiPolygon& multipolygon)
- {
- return return_type(boost::end(multipolygon));
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-// MK:: need to add doc here
-template <typename Geometry>
-class point_iterator
- : public boost::iterator_adaptor
- <
- point_iterator<Geometry>,
- typename detail::point_iterator::iterator_type<Geometry>::type
- >
-{
-private:
- template <typename OtherGeometry> friend class point_iterator;
- template <typename G> friend inline point_iterator<G> points_begin(G&);
- template <typename G> friend inline point_iterator<G> points_end(G&);
-
- inline point_iterator(typename point_iterator::base_type const& base_it)
- : point_iterator::iterator_adaptor_(base_it) {}
-
-public:
- inline point_iterator() {}
-
- template <typename OtherGeometry>
- inline point_iterator(point_iterator<OtherGeometry> const& other)
- : point_iterator::iterator_adaptor_(other.base())
- {
- static const bool is_conv
- = boost::is_convertible<
- typename detail::point_iterator::iterator_type
- <
- OtherGeometry
- >::type,
- typename detail::point_iterator::iterator_type
- <
- Geometry
- >::type
- >::value;
-
- BOOST_MPL_ASSERT_MSG((is_conv),
- NOT_CONVERTIBLE,
- (point_iterator<OtherGeometry>));
- }
-};
-
-
-// MK:: need to add doc here
-template <typename Geometry>
-inline point_iterator<Geometry>
-points_begin(Geometry& geometry)
-{
- return dispatch::points_begin<Geometry>::apply(geometry);
-}
-
-
-// MK:: need to add doc here
-template <typename Geometry>
-inline point_iterator<Geometry>
-points_end(Geometry& geometry)
-{
- return dispatch::points_end<Geometry>::apply(geometry);
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ITERATORS_POINT_ITERATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/point_reverse_iterator.hpp b/contrib/restricted/boost/boost/geometry/iterators/point_reverse_iterator.hpp
deleted file mode 100644
index b464c5f22ab..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/point_reverse_iterator.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_POINT_REVERSE_ITERATOR_HPP
-#define BOOST_GEOMETRY_ITERATORS_POINT_REVERSE_ITERATOR_HPP
-
-#include <iterator>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-
-#include <boost/geometry/iterators/point_iterator.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-// MK:: need to add doc here
-template <typename Geometry>
-class point_reverse_iterator
- : public std::reverse_iterator<point_iterator<Geometry> >
-{
-private:
- typedef std::reverse_iterator<point_iterator<Geometry> > base_type;
-
- template <typename OtherGeometry> friend class point_reverse_iterator;
- template <typename G>
- friend inline point_reverse_iterator<G> points_rbegin(G&);
-
- template <typename G>
- friend inline point_reverse_iterator<G> points_rend(G&);
-
- inline point_reverse_iterator(base_type const& base_it)
- : base_type(base_it) {}
-
-public:
- inline point_reverse_iterator() {}
-
- template <typename OtherGeometry>
- inline
- point_reverse_iterator(point_reverse_iterator<OtherGeometry> const& other)
- : base_type(other.base())
- {
- static const bool is_conv = boost::is_convertible
- <
- std::reverse_iterator<point_iterator<Geometry> >,
- std::reverse_iterator<point_iterator<OtherGeometry> >
- >::value;
-
- BOOST_MPL_ASSERT_MSG((is_conv),
- NOT_CONVERTIBLE,
- (point_reverse_iterator<OtherGeometry>));
- }
-};
-
-
-// MK:: need to add doc here
-template <typename Geometry>
-inline point_reverse_iterator<Geometry>
-points_rbegin(Geometry& geometry)
-{
- return std::reverse_iterator
- <
- point_iterator<Geometry>
- >(points_end(geometry));
-}
-
-
-// MK:: need to add doc here
-template <typename Geometry>
-inline point_reverse_iterator<Geometry>
-points_rend(Geometry& geometry)
-{
- return std::reverse_iterator
- <
- point_iterator<Geometry>
- >(points_begin(geometry));
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ITERATORS_POINT_REVERSE_ITERATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/iterators/segment_iterator.hpp b/contrib/restricted/boost/boost/geometry/iterators/segment_iterator.hpp
deleted file mode 100644
index 71aff39c43c..00000000000
--- a/contrib/restricted/boost/boost/geometry/iterators/segment_iterator.hpp
+++ /dev/null
@@ -1,353 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ITERATORS_SEGMENT_ITERATOR_HPP
-#define BOOST_GEOMETRY_ITERATORS_SEGMENT_ITERATOR_HPP
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/iterators/detail/point_iterator/inner_range_type.hpp>
-#include <boost/geometry/iterators/detail/segment_iterator/iterator_type.hpp>
-
-#include <boost/geometry/iterators/dispatch/segment_iterator.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// specializations for segments_begin
-
-
-template <typename Linestring>
-struct segments_begin<Linestring, linestring_tag>
-{
- typedef typename detail::segment_iterator::iterator_type
- <
- Linestring
- >::type return_type;
-
- static inline return_type apply(Linestring& linestring)
- {
- return return_type(linestring);
- }
-};
-
-
-template <typename Ring>
-struct segments_begin<Ring, ring_tag>
-{
- typedef typename detail::segment_iterator::iterator_type
- <
- Ring
- >::type return_type;
-
- static inline return_type apply(Ring& ring)
- {
- return return_type(ring);
- }
-};
-
-
-template <typename Polygon>
-struct segments_begin<Polygon, polygon_tag>
-{
- typedef typename detail::point_iterator::inner_range_type
- <
- Polygon
- >::type inner_range;
-
- typedef typename detail::segment_iterator::iterator_type
- <
- Polygon
- >::type return_type;
-
- static inline return_type apply(Polygon& polygon)
- {
- typedef typename return_type::second_iterator_type flatten_iterator;
-
- return return_type
- (segments_begin
- <
- inner_range
- >::apply(geometry::exterior_ring(polygon)),
- segments_end
- <
- inner_range
- >::apply(geometry::exterior_ring(polygon)),
- flatten_iterator(boost::begin(geometry::interior_rings(polygon)),
- boost::end(geometry::interior_rings(polygon))
- ),
- flatten_iterator(boost::begin(geometry::interior_rings(polygon)),
- boost::end(geometry::interior_rings(polygon))
- )
- );
- }
-};
-
-
-template <typename MultiLinestring>
-struct segments_begin<MultiLinestring, multi_linestring_tag>
-{
- typedef typename detail::segment_iterator::iterator_type
- <
- MultiLinestring
- >::type return_type;
-
- static inline return_type apply(MultiLinestring& multilinestring)
- {
- return return_type(boost::begin(multilinestring),
- boost::end(multilinestring));
- }
-};
-
-
-template <typename MultiPolygon>
-struct segments_begin<MultiPolygon, multi_polygon_tag>
-{
- typedef typename detail::segment_iterator::iterator_type
- <
- MultiPolygon
- >::type return_type;
-
- static inline return_type apply(MultiPolygon& multipolygon)
- {
- return return_type(boost::begin(multipolygon),
- boost::end(multipolygon));
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-// specializations for segments_end
-
-
-template <typename Linestring>
-struct segments_end<Linestring, linestring_tag>
-{
- typedef typename detail::segment_iterator::iterator_type
- <
- Linestring
- >::type return_type;
-
- static inline return_type apply(Linestring& linestring)
- {
- return return_type(linestring, true);
- }
-};
-
-
-template <typename Ring>
-struct segments_end<Ring, ring_tag>
-{
- typedef typename detail::segment_iterator::iterator_type
- <
- Ring
- >::type return_type;
-
- static inline return_type apply(Ring& ring)
- {
- return return_type(ring, true);
- }
-};
-
-
-template <typename Polygon>
-struct segments_end<Polygon, polygon_tag>
-{
- typedef typename detail::point_iterator::inner_range_type
- <
- Polygon
- >::type inner_range;
-
- typedef typename detail::segment_iterator::iterator_type
- <
- Polygon
- >::type return_type;
-
- static inline return_type apply(Polygon& polygon)
- {
- typedef typename return_type::second_iterator_type flatten_iterator;
-
- return return_type
- (segments_end
- <
- inner_range
- >::apply(geometry::exterior_ring(polygon)),
- flatten_iterator(boost::begin(geometry::interior_rings(polygon)),
- boost::end(geometry::interior_rings(polygon))
- ),
- flatten_iterator( boost::end(geometry::interior_rings(polygon)) )
- );
- }
-};
-
-
-template <typename MultiLinestring>
-struct segments_end<MultiLinestring, multi_linestring_tag>
-{
- typedef typename detail::segment_iterator::iterator_type
- <
- MultiLinestring
- >::type return_type;
-
- static inline return_type apply(MultiLinestring& multilinestring)
- {
- return return_type(boost::end(multilinestring));
- }
-};
-
-
-template <typename MultiPolygon>
-struct segments_end<MultiPolygon, multi_polygon_tag>
-{
- typedef typename detail::segment_iterator::iterator_type
- <
- MultiPolygon
- >::type return_type;
-
- static inline return_type apply(MultiPolygon& multipolygon)
- {
- return return_type(boost::end(multipolygon));
- }
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-// MK:: need to add doc here
-template <typename Geometry>
-class segment_iterator
- : public detail::segment_iterator::iterator_type<Geometry>::type
-{
-private:
- typedef typename detail::segment_iterator::iterator_type
- <
- Geometry
- >::type base;
-
- inline base const* base_ptr() const
- {
- return this;
- }
-
- template <typename OtherGeometry> friend class segment_iterator;
-
- template <typename G>
- friend inline segment_iterator<G const> segments_begin(G const&);
-
- template <typename G>
- friend inline segment_iterator<G const> segments_end(G const&);
-
- inline segment_iterator(base const& base_it) : base(base_it) {}
-
-public:
- // The following typedef is needed for this iterator to be
- // bidirectional.
- // Normally we would not have to define this. However, due to the
- // fact that the value type of the iterator is not a reference,
- // the iterator_facade framework (used to define the base class of
- // this iterator) degrades automatically the iterator's category
- // to input iterator. With the following typedef we recover the
- // correct iterator category.
- typedef std::bidirectional_iterator_tag iterator_category;
-
- inline segment_iterator() {}
-
- template <typename OtherGeometry>
- inline segment_iterator(segment_iterator<OtherGeometry> const& other)
- : base(*other.base_ptr())
- {
- static const bool is_conv
- = boost::is_convertible<
- typename detail::segment_iterator::iterator_type
- <
- OtherGeometry
- >::type,
- typename detail::segment_iterator::iterator_type<Geometry>::type
- >::value;
-
- BOOST_MPL_ASSERT_MSG((is_conv),
- NOT_CONVERTIBLE,
- (segment_iterator<OtherGeometry>));
- }
-
- inline segment_iterator& operator++() // prefix
- {
- base::operator++();
- return *this;
- }
-
- inline segment_iterator& operator--() // prefix
- {
- base::operator--();
- return *this;
- }
-
- inline segment_iterator operator++(int) // postfix
- {
- segment_iterator copy(*this);
- base::operator++();
- return copy;
- }
-
- inline segment_iterator operator--(int) // postfix
- {
- segment_iterator copy(*this);
- base::operator--();
- return copy;
- }
-};
-
-
-// MK:: need to add doc here
-template <typename Geometry>
-inline segment_iterator<Geometry const>
-segments_begin(Geometry const& geometry)
-{
- return dispatch::segments_begin<Geometry const>::apply(geometry);
-}
-
-
-// MK:: need to add doc here
-template <typename Geometry>
-inline segment_iterator<Geometry const>
-segments_end(Geometry const& geometry)
-{
- return dispatch::segments_end<Geometry const>::apply(geometry);
-}
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ITERATORS_SEGMENT_ITERATOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/append.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/append.hpp
deleted file mode 100644
index d1589aca849..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/append.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_APPEND_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_APPEND_HPP
-
-
-#include <boost/geometry/algorithms/append.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_APPEND_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/area.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/area.hpp
deleted file mode 100644
index 0e25ffc64ed..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/area.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_AREA_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_AREA_HPP
-
-
-#include <boost/geometry/algorithms/area.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_AREA_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/centroid.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/centroid.hpp
deleted file mode 100644
index 1c9902f2bff..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/centroid.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_CENTROID_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_CENTROID_HPP
-
-
-#include <boost/geometry/algorithms/centroid.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CENTROID_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/clear.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/clear.hpp
deleted file mode 100644
index 6d9e284d0a8..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/clear.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_CLEAR_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_CLEAR_HPP
-
-
-#include <boost/geometry/algorithms/clear.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CLEAR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/convert.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/convert.hpp
deleted file mode 100644
index 0e7b2946d4e..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/convert.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_CONVERT_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_CONVERT_HPP
-
-
-#include <boost/geometry/algorithms/convert.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CONVERT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/correct.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/correct.hpp
deleted file mode 100644
index 83d26ca60c9..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/correct.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_CORRECT_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_CORRECT_HPP
-
-
-#include <boost/geometry/algorithms/correct.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_CORRECT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/covered_by.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/covered_by.hpp
deleted file mode 100644
index 706bc78475e..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/covered_by.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014.
-// Modifications copyright (c) 2013, 2014 Oracle and/or its affiliates.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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)
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP
-
-
-#include <boost/geometry/algorithms/covered_by.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_COVERED_BY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/extreme_points.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/extreme_points.hpp
deleted file mode 100644
index da2ac5e9fa1..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/extreme_points.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
-// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
-
-// 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_EXTREME_POINTS_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_EXTREME_POINTS_HPP
-
-
-#include <boost/geometry/algorithms/detail/extreme_points.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_EXTREME_POINTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp
deleted file mode 100644
index 2fe475ed583..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/for_each_range.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP
-
-
-#include <boost/geometry/algorithms/detail/for_each_range.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_FOR_EACH_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/modify.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/modify.hpp
deleted file mode 100644
index ae52e002f02..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/modify.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_HPP
-
-
-#include <boost/geometry/algorithms/detail/multi_modify.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp
deleted file mode 100644
index 1a82a671421..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_WITH_PREDICATE_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_WITH_PREDICATE_HPP
-
-
-#include <boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MODIFY_WITH_PREDICATE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp
deleted file mode 100644
index b91970a1644..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/multi_sum.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MULTI_SUM_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MULTI_SUM_HPP
-
-
-#include <boost/geometry/algorithms/detail/multi_sum.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_MULTI_SUM_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp
deleted file mode 100644
index 5e23cf4bad4..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013.
-// Modifications copyright (c) 2013, Oracle and/or its affiliates.
-
-// 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP
-
-
-#include <boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENT_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp
deleted file mode 100644
index 54114bfae4b..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP
-
-
-#include <boost/geometry/algorithms/detail/overlay/copy_segments.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_COPY_SEGMENTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp
deleted file mode 100644
index 65e00d064bb..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP
-
-
-#include <boost/geometry/algorithms/detail/overlay/get_ring.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_RING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp
deleted file mode 100644
index a83fb773934..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP
-
-
-#include <boost/geometry/algorithms/detail/overlay/get_turns.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_GET_TURNS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp
deleted file mode 100644
index 39bfea2fb3f..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP
-
-
-#include <boost/geometry/algorithms/detail/overlay/self_turn_points.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_OVERLAY_SELF_TURN_POINTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp
deleted file mode 100644
index 2ee789c5da8..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/point_on_border.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013.
-// Modifications copyright (c) 2013, Oracle and/or its affiliates.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP
-
-
-#include <boost/geometry/algorithms/detail/point_on_border.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_POINT_ON_BORDER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp
deleted file mode 100644
index 5604d9d74f9..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013.
-// Modifications copyright (c) 2013, Oracle and/or its affiliates.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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)
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP
-
-
-#include <boost/geometry/algorithms/detail/sections/range_by_section.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_RANGE_BY_SECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp
deleted file mode 100644
index ef98021237a..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013.
-// Modifications copyright (c) 2013, Oracle and/or its affiliates.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP
-
-
-#include <boost/geometry/algorithms/detail/sections/sectionalize.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DETAIL_SECTIONS_SECTIONALIZE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/disjoint.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/disjoint.hpp
deleted file mode 100644
index 55f0f01cd6c..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/disjoint.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2012-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2012-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DISJOINT_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DISJOINT_HPP
-
-#include <boost/geometry/algorithms/disjoint.hpp>
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DISJOINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/distance.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/distance.hpp
deleted file mode 100644
index 4946b6f3e1e..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/distance.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_DISTANCE_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_DISTANCE_HPP
-
-// this file is intentionally empty (with the exception of the #include below)
-// it is used for backward compatinility and may be removed in the future
-
-#include <boost/geometry/algorithms/distance.hpp>
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_DISTANCE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/envelope.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/envelope.hpp
deleted file mode 100644
index 457dfaf3bc7..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/envelope.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_ENVELOPE_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_ENVELOPE_HPP
-
-
-#include <boost/geometry/algorithms/envelope.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_ENVELOPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/equals.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/equals.hpp
deleted file mode 100644
index 0f045fff90b..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/equals.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_EQUALS_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_EQUALS_HPP
-
-
-#include <boost/geometry/algorithms/equals.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_EQUALS_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/for_each.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/for_each.hpp
deleted file mode 100644
index d8b3af1ff25..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/for_each.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_FOR_EACH_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_FOR_EACH_HPP
-
-
-#include <boost/geometry/algorithms/for_each.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_FOR_EACH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/intersection.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/intersection.hpp
deleted file mode 100644
index f434463253e..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/intersection.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_INTERSECTION_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_INTERSECTION_HPP
-
-
-#include <boost/geometry/algorithms/intersection.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_INTERSECTION_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/length.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/length.hpp
deleted file mode 100644
index 168e6a732f9..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/length.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_LENGTH_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_LENGTH_HPP
-
-
-#include <boost/geometry/algorithms/length.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_LENGTH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/num_geometries.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/num_geometries.hpp
deleted file mode 100644
index 3a85f4e4bff..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/num_geometries.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_GEOMETRIES_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_GEOMETRIES_HPP
-
-
-#include <boost/geometry/algorithms/num_geometries.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_GEOMETRIES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp
deleted file mode 100644
index fbaa113aff5..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/num_interior_rings.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_INTERIOR_RINGS_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_INTERIOR_RINGS_HPP
-
-
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_INTERIOR_RINGS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/num_points.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/num_points.hpp
deleted file mode 100644
index a736f4254b2..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/num_points.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_POINTS_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_POINTS_HPP
-
-
-#include <boost/geometry/algorithms/num_points.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_NUM_POINTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/perimeter.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/perimeter.hpp
deleted file mode 100644
index 4820111f1f7..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/perimeter.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_PERIMETER_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_PERIMETER_HPP
-
-
-#include <boost/geometry/algorithms/perimeter.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_PERIMETER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/remove_spikes.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/remove_spikes.hpp
deleted file mode 100644
index af224ec478c..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/remove_spikes.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
-// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
-
-// 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_REMOVE_SPIKES_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_REMOVE_SPIKES_HPP
-
-
-#include <boost/geometry/algorithms/remove_spikes.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_REMOVE_SPIKES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/reverse.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/reverse.hpp
deleted file mode 100644
index a7872bdd2a0..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/reverse.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_REVERSE_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_REVERSE_HPP
-
-
-#include <boost/geometry/algorithms/reverse.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_REVERSE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/simplify.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/simplify.hpp
deleted file mode 100644
index 8648d366d1f..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/simplify.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_SIMPLIFY_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_SIMPLIFY_HPP
-
-
-#include <boost/geometry/algorithms/simplify.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_SIMPLIFY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/transform.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/transform.hpp
deleted file mode 100644
index 7aa691ec4a8..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/transform.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_TRANSFORM_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_TRANSFORM_HPP
-
-
-#include <boost/geometry/algorithms/transform.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_TRANSFORM_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/unique.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/unique.hpp
deleted file mode 100644
index fa063a312dd..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/unique.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_ALGORITHMS_UNIQUE_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_UNIQUE_HPP
-
-
-#include <boost/geometry/algorithms/unique.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_UNIQUE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/algorithms/within.hpp b/contrib/restricted/boost/boost/geometry/multi/algorithms/within.hpp
deleted file mode 100644
index 9fdc5dd39aa..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/algorithms/within.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014.
-// Modifications copyright (c) 2013, 2014 Oracle and/or its affiliates.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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)
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_MULTI_ALGORITHMS_WITHIN_HPP
-#define BOOST_GEOMETRY_MULTI_ALGORITHMS_WITHIN_HPP
-
-#include <boost/geometry/algorithms/within.hpp>
-
-#endif // BOOST_GEOMETRY_MULTI_ALGORITHMS_WITHIN_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/core/closure.hpp b/contrib/restricted/boost/boost/geometry/multi/core/closure.hpp
deleted file mode 100644
index 9e7cf3c248e..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/core/closure.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_CORE_CLOSURE_HPP
-#define BOOST_GEOMETRY_MULTI_CORE_CLOSURE_HPP
-
-#include <boost/geometry/core/closure.hpp>
-
-#endif // BOOST_GEOMETRY_MULTI_CORE_CLOSURE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/core/geometry_id.hpp b/contrib/restricted/boost/boost/geometry/multi/core/geometry_id.hpp
deleted file mode 100644
index 7d5e888babd..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/core/geometry_id.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_CORE_GEOMETRY_ID_HPP
-#define BOOST_GEOMETRY_MULTI_CORE_GEOMETRY_ID_HPP
-
-#include <boost/geometry/core/geometry_id.hpp>
-
-#endif // BOOST_GEOMETRY_MULTI_CORE_GEOMETRY_ID_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/core/interior_rings.hpp b/contrib/restricted/boost/boost/geometry/multi/core/interior_rings.hpp
deleted file mode 100644
index deeeff81d0e..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/core/interior_rings.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_CORE_INTERIOR_RINGS_HPP
-#define BOOST_GEOMETRY_MULTI_CORE_INTERIOR_RINGS_HPP
-
-
-#include <boost/geometry/core/interior_rings.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_CORE_INTERIOR_RINGS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/core/is_areal.hpp b/contrib/restricted/boost/boost/geometry/multi/core/is_areal.hpp
deleted file mode 100644
index 30f98527ab7..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/core/is_areal.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_CORE_IS_AREAL_HPP
-#define BOOST_GEOMETRY_MULTI_CORE_IS_AREAL_HPP
-
-
-#include <boost/geometry/core/is_areal.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_CORE_IS_AREAL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/core/point_order.hpp b/contrib/restricted/boost/boost/geometry/multi/core/point_order.hpp
deleted file mode 100644
index 119e55c3ba1..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/core/point_order.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_CORE_POINT_ORDER_HPP
-#define BOOST_GEOMETRY_MULTI_CORE_POINT_ORDER_HPP
-
-
-#include <boost/geometry/core/point_order.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_CORE_POINT_ORDER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/core/point_type.hpp b/contrib/restricted/boost/boost/geometry/multi/core/point_type.hpp
deleted file mode 100644
index a7277d09a91..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/core/point_type.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_CORE_POINT_TYPE_HPP
-#define BOOST_GEOMETRY_MULTI_CORE_POINT_TYPE_HPP
-
-
-#include <boost/geometry/core/point_type.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_CORE_POINT_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/core/ring_type.hpp b/contrib/restricted/boost/boost/geometry/multi/core/ring_type.hpp
deleted file mode 100644
index b27b5527c22..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/core/ring_type.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013.
-// Modifications copyright (c) 2013, Oracle and/or its affiliates.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_CORE_RING_TYPE_HPP
-#define BOOST_GEOMETRY_MULTI_CORE_RING_TYPE_HPP
-
-
-#include <boost/geometry/core/ring_type.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_CORE_RING_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/core/tags.hpp b/contrib/restricted/boost/boost/geometry/multi/core/tags.hpp
deleted file mode 100644
index fb0758d95f8..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/core/tags.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_CORE_TAGS_HPP
-#define BOOST_GEOMETRY_MULTI_CORE_TAGS_HPP
-
-
-#include <boost/geometry/core/tags.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_CORE_TAGS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/core/topological_dimension.hpp b/contrib/restricted/boost/boost/geometry/multi/core/topological_dimension.hpp
deleted file mode 100644
index b4f1e89ae87..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/core/topological_dimension.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_TOPOLOGICAL_DIMENSION_HPP
-#define BOOST_GEOMETRY_MULTI_TOPOLOGICAL_DIMENSION_HPP
-
-
-#include <boost/geometry/core/topological_dimension.hpp>
-
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/multi/geometries/concepts/check.hpp b/contrib/restricted/boost/boost/geometry/multi/geometries/concepts/check.hpp
deleted file mode 100644
index c741afd7948..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/geometries/concepts/check.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_CHECK_HPP
-#define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_CHECK_HPP
-
-
-#include <boost/geometry/geometries/concepts/check.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_CHECK_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp b/contrib/restricted/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp
deleted file mode 100644
index 9a9438efccb..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP
-#define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP
-
-
-#include <boost/geometry/geometries/concepts/multi_linestring_concept.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp b/contrib/restricted/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp
deleted file mode 100644
index 14c1d25e57a..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP
-#define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP
-
-
-#include <boost/geometry/geometries/concepts/multi_point_concept.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp b/contrib/restricted/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp
deleted file mode 100644
index 5e46fb75395..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP
-#define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP
-
-
-#include <boost/geometry/geometries/concepts/multi_polygon_concept.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/geometries/multi_geometries.hpp b/contrib/restricted/boost/boost/geometry/multi/geometries/multi_geometries.hpp
deleted file mode 100644
index 53042091bdf..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/geometries/multi_geometries.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_GEOMETRIES_HPP
-#define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_GEOMETRIES_HPP
-
-#include <boost/geometry/geometries/multi_point.hpp>
-#include <boost/geometry/geometries/multi_linestring.hpp>
-#include <boost/geometry/geometries/multi_polygon.hpp>
-
-#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_GEOMETRIES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/geometries/multi_linestring.hpp b/contrib/restricted/boost/boost/geometry/multi/geometries/multi_linestring.hpp
deleted file mode 100644
index 696d907dccf..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/geometries/multi_linestring.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_LINESTRING_HPP
-#define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_LINESTRING_HPP
-
-
-#include <boost/geometry/geometries/multi_linestring.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_LINESTRING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/geometries/multi_point.hpp b/contrib/restricted/boost/boost/geometry/multi/geometries/multi_point.hpp
deleted file mode 100644
index 750ad7802a6..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/geometries/multi_point.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POINT_HPP
-#define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POINT_HPP
-
-
-#include <boost/geometry/geometries/multi_point.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/geometries/multi_polygon.hpp b/contrib/restricted/boost/boost/geometry/multi/geometries/multi_polygon.hpp
deleted file mode 100644
index 06fefc7856b..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/geometries/multi_polygon.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POLYGON_HPP
-#define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POLYGON_HPP
-
-
-#include <boost/geometry/geometries/multi_polygon.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POLYGON_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp b/contrib/restricted/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp
deleted file mode 100644
index 2783a8455b6..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/geometries/register/multi_linestring.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP
-#define BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP
-
-
-#include <boost/geometry/geometries/register/multi_linestring.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/geometries/register/multi_point.hpp b/contrib/restricted/boost/boost/geometry/multi/geometries/register/multi_point.hpp
deleted file mode 100644
index 6063492c2b4..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/geometries/register/multi_point.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POINT_HPP
-#define BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POINT_HPP
-
-
-#include <boost/geometry/geometries/register/multi_point.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp b/contrib/restricted/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp
deleted file mode 100644
index 6a3e47e3da5..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/geometries/register/multi_polygon.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP
-#define BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP
-
-
-#include <boost/geometry/geometries/register/multi_polygon.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/io/dsv/write.hpp b/contrib/restricted/boost/boost/geometry/multi/io/dsv/write.hpp
deleted file mode 100644
index 092869f56c1..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/io/dsv/write.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_IO_DSV_WRITE_HPP
-#define BOOST_GEOMETRY_MULTI_IO_DSV_WRITE_HPP
-
-
-#include <boost/geometry/io/dsv/write.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_IO_DSV_WRITE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/io/wkt/detail/prefix.hpp b/contrib/restricted/boost/boost/geometry/multi/io/wkt/detail/prefix.hpp
deleted file mode 100644
index 34e2b241d09..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/io/wkt/detail/prefix.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_IO_WKT_DETAIL_PREFIX_HPP
-#define BOOST_GEOMETRY_MULTI_IO_WKT_DETAIL_PREFIX_HPP
-
-
-#include <boost/geometry/io/wkt/detail/prefix.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_IO_WKT_DETAIL_PREFIX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/io/wkt/read.hpp b/contrib/restricted/boost/boost/geometry/multi/io/wkt/read.hpp
deleted file mode 100644
index 37e5f9e72e6..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/io/wkt/read.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_IO_WKT_READ_MULTI_HPP
-#define BOOST_GEOMETRY_MULTI_IO_WKT_READ_MULTI_HPP
-
-
-#include <boost/geometry/io/wkt/read.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_IO_WKT_READ_MULTI_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/io/wkt/wkt.hpp b/contrib/restricted/boost/boost/geometry/multi/io/wkt/wkt.hpp
deleted file mode 100644
index a6159e1409a..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/io/wkt/wkt.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_IO_WKT_WKT_HPP
-#define BOOST_GEOMETRY_MULTI_IO_WKT_WKT_HPP
-
-#include <boost/geometry/io/wkt/read.hpp>
-#include <boost/geometry/io/wkt/write.hpp>
-
-#endif // BOOST_GEOMETRY_MULTI_IO_WKT_WKT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/io/wkt/write.hpp b/contrib/restricted/boost/boost/geometry/multi/io/wkt/write.hpp
deleted file mode 100644
index 2c26d3d2e40..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/io/wkt/write.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP
-#define BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP
-
-
-#include <boost/geometry/io/wkt/write.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_IO_WKT_WRITE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/multi.hpp b/contrib/restricted/boost/boost/geometry/multi/multi.hpp
deleted file mode 100644
index 85d763ee6ef..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/multi.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2013, 2015.
-// Modifications copyright (c) 2013-2015, Oracle and/or its affiliates.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_HPP
-#define BOOST_GEOMETRY_MULTI_HPP
-
-// keep this file for now, for backward compatibility
-// functionality-wise, make it equivalent to boost/geometry/geometry.hpp
-#include <boost/geometry/geometry.hpp>
-
-#endif // BOOST_GEOMETRY_MULTI_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp b/contrib/restricted/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp
deleted file mode 100644
index ce614e2e76b..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/strategies/cartesian/centroid_average.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
-#define BOOST_GEOMETRY_MULTI_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
-
-
-#include <boost/geometry/strategies/cartesian/centroid_average.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/multi/views/detail/range_type.hpp b/contrib/restricted/boost/boost/geometry/multi/views/detail/range_type.hpp
deleted file mode 100644
index f8cb0e6e533..00000000000
--- a/contrib/restricted/boost/boost/geometry/multi/views/detail/range_type.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_MULTI_VIEWS_DETAIL_RANGE_TYPE_HPP
-#define BOOST_GEOMETRY_MULTI_VIEWS_DETAIL_RANGE_TYPE_HPP
-
-
-#include <boost/geometry/views/detail/range_type.hpp>
-
-
-#endif // BOOST_GEOMETRY_MULTI_VIEWS_DETAIL_RANGE_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/compare.hpp b/contrib/restricted/boost/boost/geometry/policies/compare.hpp
deleted file mode 100644
index 7f32b7ab30b..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/compare.hpp
+++ /dev/null
@@ -1,182 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_POLICIES_COMPARE_HPP
-#define BOOST_GEOMETRY_POLICIES_COMPARE_HPP
-
-
-#include <cstddef>
-
-#include <boost/geometry/strategies/compare.hpp>
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
-\brief Less functor, to sort points in ascending order.
-\ingroup compare
-\details This functor compares points and orders them on x,
- then on y, then on z coordinate.
-\tparam Point the geometry
-\tparam Dimension the dimension to sort on, defaults to -1,
- indicating ALL dimensions. That's to say, first on x,
- on equal x-es then on y, etc.
- If a dimension is specified, only that dimension is considered
-*/
-template
-<
- typename Point = void,
- int Dimension = -1
->
-struct less
-{
- typedef Point first_argument_type;
- typedef Point second_argument_type;
- typedef bool result_type;
-
- inline bool operator()(Point const& left, Point const& right) const
- {
- typedef typename strategy::compare::services::default_strategy
- <
- strategy::compare::less,
- Point, Point,
- Dimension
- >::type strategy_type;
-
- return strategy_type::apply(left, right);
- }
-};
-
-template <int Dimension>
-struct less<void, Dimension>
-{
- template <typename Point1, typename Point2>
- inline bool operator()(Point1 const& left, Point2 const& right) const
- {
- typedef typename strategy::compare::services::default_strategy
- <
- strategy::compare::less,
- Point1, Point2,
- Dimension
- >::type strategy_type;
-
- return strategy_type::apply(left, right);
- }
-};
-
-
-/*!
-\brief Greater functor
-\ingroup compare
-\details Can be used to sort points in reverse order
-\see Less functor
-*/
-template
-<
- typename Point = void,
- int Dimension = -1
->
-struct greater
-{
- typedef Point first_argument_type;
- typedef Point second_argument_type;
- typedef bool result_type;
-
- bool operator()(Point const& left, Point const& right) const
- {
- typedef typename strategy::compare::services::default_strategy
- <
- strategy::compare::greater,
- Point, Point,
- Dimension
- >::type strategy_type;
-
- return strategy_type::apply(left, right);
- }
-};
-
-template <int Dimension>
-struct greater<void, Dimension>
-{
- template <typename Point1, typename Point2>
- bool operator()(Point1 const& left, Point2 const& right) const
- {
- typedef typename strategy::compare::services::default_strategy
- <
- strategy::compare::greater,
- Point1, Point2,
- Dimension
- >::type strategy_type;
-
- return strategy_type::apply(left, right);
- }
-};
-
-
-/*!
-\brief Equal To functor, to compare if points are equal
-\ingroup compare
-\tparam Geometry the geometry
-\tparam Dimension the dimension to compare on, defaults to -1,
- indicating ALL dimensions.
- If a dimension is specified, only that dimension is considered
-*/
-template
-<
- typename Point,
- int Dimension = -1
->
-struct equal_to
-{
- typedef Point first_argument_type;
- typedef Point second_argument_type;
- typedef bool result_type;
-
- bool operator()(Point const& left, Point const& right) const
- {
- typedef typename strategy::compare::services::default_strategy
- <
- strategy::compare::equal_to,
- Point, Point,
- Dimension
- >::type strategy_type;
-
- return strategy_type::apply(left, right);
- }
-};
-
-template <int Dimension>
-struct equal_to<void, Dimension>
-{
- template <typename Point1, typename Point2>
- bool operator()(Point1 const& left, Point2 const& right) const
- {
- typedef typename strategy::compare::services::default_strategy
- <
- strategy::compare::equal_to,
- Point1, Point2,
- Dimension
- >::type strategy_type;
-
- return strategy_type::apply(left, right);
- }
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_POLICIES_COMPARE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/disjoint_interrupt_policy.hpp b/contrib/restricted/boost/boost/geometry/policies/disjoint_interrupt_policy.hpp
deleted file mode 100644
index 2a6e54b0794..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/disjoint_interrupt_policy.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2014.
-// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_ALGORITHMS_POLICIES_DISJOINT_INTERRUPT_POLICY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_POLICIES_DISJOINT_INTERRUPT_POLICY_HPP
-
-#include <boost/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace disjoint
-{
-
-
-struct disjoint_interrupt_policy
-{
- static bool const enabled = true;
- bool has_intersections;
-
- inline disjoint_interrupt_policy()
- : has_intersections(false)
- {}
-
- template <typename Range>
- inline bool apply(Range const& range)
- {
- // If there is any IP in the range, it is NOT disjoint
- if (boost::size(range) > 0)
- {
- has_intersections = true;
- return true;
- }
- return false;
- }
-};
-
-
-
-}} // namespace detail::disjoint
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_POLICIES_DISJOINT_INTERRUPT_POLICY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/is_valid/default_policy.hpp b/contrib/restricted/boost/boost/geometry/policies/is_valid/default_policy.hpp
deleted file mode 100644
index c1bd347e11a..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/is_valid/default_policy.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_POLICIES_IS_VALID_DEFAULT_POLICY_HPP
-#define BOOST_GEOMETRY_POLICIES_IS_VALID_DEFAULT_POLICY_HPP
-
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-template <bool AllowDuplicates = true, bool AllowSpikes = true>
-class is_valid_default_policy
-{
-protected:
- static inline bool is_valid(validity_failure_type failure)
- {
- return failure == no_failure
- || (AllowDuplicates && failure == failure_duplicate_points);
- }
-
- static inline bool is_valid(validity_failure_type failure, bool is_linear)
- {
- return is_valid(failure)
- || (is_linear && AllowSpikes && failure == failure_spikes);
- }
-
-public:
- template <validity_failure_type Failure>
- static inline bool apply()
- {
- return is_valid(Failure);
- }
-
- template <validity_failure_type Failure, typename Data>
- static inline bool apply(Data const&)
- {
- return is_valid(Failure);
- }
-
- template <validity_failure_type Failure, typename Data1, typename Data2>
- static inline bool apply(Data1 const& data1, Data2 const&)
- {
- return is_valid(Failure, data1);
- }
-};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_POLICIES_IS_VALID_DEFAULT_POLICY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/is_valid/failing_reason_policy.hpp b/contrib/restricted/boost/boost/geometry/policies/is_valid/failing_reason_policy.hpp
deleted file mode 100644
index bb28091d988..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/is_valid/failing_reason_policy.hpp
+++ /dev/null
@@ -1,224 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_POLICIES_IS_VALID_FAILING_REASON_POLICY_HPP
-#define BOOST_GEOMETRY_POLICIES_IS_VALID_FAILING_REASON_POLICY_HPP
-
-#include <sstream>
-
-#include <boost/geometry/io/dsv/write.hpp>
-#include <boost/geometry/util/condition.hpp>
-#include <boost/geometry/util/range.hpp>
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-#include <boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-inline char const* validity_failure_type_message(validity_failure_type failure)
-{
- switch (failure)
- {
- case no_failure:
- return "Geometry is valid";
- case failure_few_points:
- return "Geometry has too few points";
- case failure_wrong_topological_dimension:
- return "Geometry has wrong topological dimension";
- case failure_not_closed:
- return "Geometry is defined as closed but is open";
- case failure_spikes:
- return "Geometry has spikes";
- case failure_self_intersections:
- return "Geometry has invalid self-intersections";
- case failure_wrong_orientation:
- return "Geometry has wrong orientation";
- case failure_interior_rings_outside:
- return "Geometry has interior rings defined outside the outer boundary";
- case failure_nested_interior_rings:
- return "Geometry has nested interior rings";
- case failure_disconnected_interior:
- return "Geometry has disconnected interior";
- case failure_intersecting_interiors:
- return "Multi-polygon has intersecting interiors";
- case failure_duplicate_points:
- return "Geometry has duplicate (consecutive) points";
- case failure_wrong_corner_order:
- return "Box has corners in wrong order";
- case failure_invalid_coordinate:
- return "Geometry has point(s) with invalid coordinate(s)";
- default: // to avoid -Wreturn-type warning
- return "";
- }
-}
-
-
-template <bool AllowDuplicates = true, bool AllowSpikes = true>
-class failing_reason_policy
-{
-private:
- static inline
- validity_failure_type transform_failure_type(validity_failure_type failure)
- {
- if (BOOST_GEOMETRY_CONDITION(
- AllowDuplicates && failure == failure_duplicate_points))
- {
- return no_failure;
- }
- return failure;
- }
-
- static inline
- validity_failure_type transform_failure_type(validity_failure_type failure,
- bool is_linear)
- {
- if (BOOST_GEOMETRY_CONDITION(
- is_linear && AllowSpikes && failure == failure_spikes))
- {
- return no_failure;
- }
- return transform_failure_type(failure);
- }
-
- inline void set_failure_message(validity_failure_type failure)
- {
- m_oss.str("");
- m_oss.clear();
- m_oss << validity_failure_type_message(failure);
- }
-
- template
- <
- validity_failure_type Failure,
- typename Data1,
- typename Data2 = Data1,
- typename Dummy = void
- >
- struct process_data
- {
- static inline void apply(std::ostringstream&, Data1 const&)
- {
- }
-
- static inline void apply(std::ostringstream&,
- Data1 const&,
- Data2 const&)
- {
- }
- };
-
- template <typename SpikePoint>
- struct process_data<failure_spikes, bool, SpikePoint>
- {
- static inline void apply(std::ostringstream& oss,
- bool is_linear,
- SpikePoint const& spike_point)
- {
- if (BOOST_GEOMETRY_CONDITION(is_linear && AllowSpikes))
- {
- return;
- }
-
- oss << ". A spike point was found with apex at "
- << geometry::dsv(spike_point);
- }
- };
-
- template <typename Turns>
- struct process_data<failure_self_intersections, Turns>
- {
- static inline
- void apply_to_segment_identifier(std::ostringstream& oss,
- segment_identifier seg_id)
- {
- oss << "{" << seg_id.source_index
- << ", " << seg_id.multi_index
- << ", " << seg_id.ring_index
- << ", " << seg_id.segment_index
- << "}";
- }
-
- static inline void apply(std::ostringstream& oss,
- Turns const& turns)
- {
- typedef typename boost::range_value<Turns>::type turn_type;
- turn_type const& turn = range::front(turns);
- oss << ". A self-intersection point was found at "
- << geometry::dsv(turn.point);
-
- oss << "; method: " << method_char(turn.method)
- << "; operations: "
- << operation_char(turn.operations[0].operation)
- << "/"
- << operation_char(turn.operations[1].operation)
- << "; segment IDs {source, multi, ring, segment}: ";
- apply_to_segment_identifier(oss, turn.operations[0].seg_id);
- oss << "/";
- apply_to_segment_identifier(oss, turn.operations[1].seg_id);
- }
- };
-
- template <typename Point>
- struct process_data<failure_duplicate_points, Point>
- {
- static inline void apply(std::ostringstream& oss,
- Point const& point)
- {
- if (BOOST_GEOMETRY_CONDITION(AllowDuplicates))
- {
- return;
- }
- oss << ". Duplicate points were found near point "
- << geometry::dsv(point);
- }
- };
-
-public:
- failing_reason_policy(std::ostringstream& oss)
- : m_oss(oss)
- {}
-
- template <validity_failure_type Failure>
- inline bool apply()
- {
- validity_failure_type const failure = transform_failure_type(Failure);
- set_failure_message(failure);
- return failure == no_failure;
- }
-
- template <validity_failure_type Failure, typename Data>
- inline bool apply(Data const& data)
- {
- validity_failure_type const failure = transform_failure_type(Failure);
- set_failure_message(failure);
- process_data<Failure, Data>::apply(m_oss, data);
- return failure == no_failure;
- }
-
- template <validity_failure_type Failure, typename Data1, typename Data2>
- inline bool apply(Data1 const& data1, Data2 const& data2)
- {
- validity_failure_type const failure
- = transform_failure_type(Failure, data1);
- set_failure_message(failure);
- process_data<Failure, Data1, Data2>::apply(m_oss, data1, data2);
- return failure == no_failure;
- }
-
-private:
- std::ostringstream& m_oss;
-};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_POLICIES_IS_VALID_FAILING_REASON_POLICY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/is_valid/failure_type_policy.hpp b/contrib/restricted/boost/boost/geometry/policies/is_valid/failure_type_policy.hpp
deleted file mode 100644
index 9fb569e283f..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/is_valid/failure_type_policy.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_POLICIES_IS_VALID_FAILURE_TYPE_POLICY_HPP
-#define BOOST_GEOMETRY_POLICIES_IS_VALID_FAILURE_TYPE_POLICY_HPP
-
-#include <boost/geometry/algorithms/validity_failure_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-// policy that simply keeps (and can return) the failure type
-template <bool AllowDuplicates = true, bool AllowSpikes = true>
-class failure_type_policy
-{
-private:
- static inline
- validity_failure_type transform_failure_type(validity_failure_type failure)
- {
- if (AllowDuplicates && failure == failure_duplicate_points)
- {
- return no_failure;
- }
- return failure;
- }
-
- static inline
- validity_failure_type transform_failure_type(validity_failure_type failure,
- bool is_linear)
- {
- if (is_linear && AllowSpikes && failure == failure_spikes)
- {
- return no_failure;
- }
- return transform_failure_type(failure);
- }
-
-public:
- failure_type_policy()
- : m_failure(no_failure)
- {}
-
- template <validity_failure_type Failure>
- inline bool apply()
- {
- m_failure = transform_failure_type(Failure);
- return m_failure == no_failure;
- }
-
- template <validity_failure_type Failure, typename Data>
- inline bool apply(Data const&)
- {
- return apply<Failure>();
- }
-
- template <validity_failure_type Failure, typename Data1, typename Data2>
- inline bool apply(Data1 const& data1, Data2 const&)
- {
- m_failure = transform_failure_type(Failure, data1);
- return m_failure == no_failure;
- }
-
- validity_failure_type failure() const
- {
- return m_failure;
- }
-
-private:
- validity_failure_type m_failure;
-};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_POLICIES_IS_VALID_FAILURE_TYPE_POLICY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/predicate_based_interrupt_policy.hpp b/contrib/restricted/boost/boost/geometry/policies/predicate_based_interrupt_policy.hpp
deleted file mode 100644
index 0021b12dc62..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/predicate_based_interrupt_policy.hpp
+++ /dev/null
@@ -1,101 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_ALGORITHMS_POLICIES_PREDICATE_BASED_INTERRUPT_POLICY_HPP
-#define BOOST_GEOMETRY_ALGORITHMS_POLICIES_PREDICATE_BASED_INTERRUPT_POLICY_HPP
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace overlay
-{
-
-
-template
-<
- typename IsAcceptableTurnPredicate,
- bool AllowEmptyTurnRange = true // by default, allow an empty turn range
->
-struct stateless_predicate_based_interrupt_policy
-{
- static bool const enabled = true;
- bool has_intersections; // set to true if there is at least one
- // unacceptable turn
-
- inline stateless_predicate_based_interrupt_policy()
- : has_intersections(false)
- {}
-
- template <typename Range>
- inline bool apply(Range const& range)
- {
- // if there is at least one unacceptable turn in the range, return false
- has_intersections = !detail::check_iterator_range
- <
- IsAcceptableTurnPredicate,
- AllowEmptyTurnRange
- >::apply(boost::begin(range), boost::end(range));
-
- return has_intersections;
- }
-};
-
-
-
-
-template
-<
- typename IsAcceptableTurnPredicate,
- bool AllowEmptyTurnRange = true // by default, allow an empty turn range
->
-struct predicate_based_interrupt_policy
-{
- static bool const enabled = true;
- bool has_intersections; // set to true if there is at least one
- // unacceptable turn
- IsAcceptableTurnPredicate const& m_predicate;
-
- inline
- predicate_based_interrupt_policy(IsAcceptableTurnPredicate const& predicate)
- : has_intersections(false)
- , m_predicate(predicate)
- {}
-
- template <typename Range>
- inline bool apply(Range const& range)
- {
- // if there is at least one unacceptable turn in the range, return false
- has_intersections = !detail::check_iterator_range
- <
- IsAcceptableTurnPredicate,
- AllowEmptyTurnRange
- >::apply(boost::begin(range), boost::end(range), m_predicate);
-
- return has_intersections;
- }
-};
-
-
-
-
-}} // namespace detail::overlay
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_POLICIES_PREDICATE_BASED_INTERRUPT_POLICY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/relate/direction.hpp b/contrib/restricted/boost/boost/geometry/policies/relate/direction.hpp
deleted file mode 100644
index 2c903bd79f5..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/relate/direction.hpp
+++ /dev/null
@@ -1,391 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_DIRECTION_HPP
-#define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_DIRECTION_HPP
-
-
-#include <cstddef>
-#include <string>
-
-#include <boost/concept_check.hpp>
-
-#include <boost/geometry/arithmetic/determinant.hpp>
-#include <boost/geometry/strategies/side_info.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace policies { namespace relate
-{
-
-struct direction_type
-{
- // NOTE: "char" will be replaced by enum in future version
-
- inline direction_type(side_info const& s, char h,
- int ha, int hb,
- int da = 0, int db = 0,
- bool op = false)
- : how(h)
- , opposite(op)
- , how_a(ha)
- , how_b(hb)
- , dir_a(da)
- , dir_b(db)
- , sides(s)
- {
- arrival[0] = ha;
- arrival[1] = hb;
- }
-
- inline direction_type(char h, bool op, int ha = 0, int hb = 0)
- : how(h)
- , opposite(op)
- , how_a(ha)
- , how_b(hb)
- , dir_a(0)
- , dir_b(0)
- {
- arrival[0] = ha;
- arrival[1] = hb;
- }
-
-
- // TODO: replace this
- // NOTE: "char" will be replaced by enum in future version
- // "How" is the intersection formed?
- char how;
-
- // Is it opposite (for collinear/equal cases)
- bool opposite;
-
- // Information on how A arrives at intersection, how B arrives at intersection
- // 1: arrives at intersection
- // -1: starts from intersection
- int how_a;
- int how_b;
-
- // Direction: how is A positioned from B
- // 1: points left, seen from IP
- // -1: points right, seen from IP
- // In case of intersection: B's TO direction
- // In case that B's TO direction is at A: B's from direction
- // In collinear cases: it is 0
- int dir_a; // Direction of A-s TO from IP
- int dir_b; // Direction of B-s TO from IP
-
- // New information
- side_info sides;
- // THIS IS EQUAL TO arrival_a, arrival_b - they probably can go now we have robust fractions
- int arrival[2]; // 1=arrival, -1=departure, 0=neutral; == how_a//how_b
-
-
- // About arrival[0] (== arrival of a2 w.r.t. b) for COLLINEAR cases
- // Arrival 1: a1--------->a2 (a arrives within b)
- // b1----->b2
-
- // Arrival 1: (a in b)
- //
-
-
- // Arrival -1: a1--------->a2 (a does not arrive within b)
- // b1----->b2
-
- // Arrival -1: (b in a) a_1-------------a_2
- // b_1---b_2
-
- // Arrival 0: a1------->a2 (a arrives at TO-border of b)
- // b1--->b2
-
-};
-
-struct segments_direction
-{
- typedef direction_type return_type;
-
- template
- <
- typename Segment1,
- typename Segment2,
- typename SegmentIntersectionInfo
- >
- static inline return_type segments_crosses(side_info const& sides,
- SegmentIntersectionInfo const& ,
- Segment1 const& , Segment2 const& )
- {
- bool const ra0 = sides.get<0,0>() == 0;
- bool const ra1 = sides.get<0,1>() == 0;
- bool const rb0 = sides.get<1,0>() == 0;
- bool const rb1 = sides.get<1,1>() == 0;
-
- return
- // opposite and same starting point (FROM)
- ra0 && rb0 ? calculate_side<1>(sides, 'f', -1, -1)
-
- // opposite and point to each other (TO)
- : ra1 && rb1 ? calculate_side<0>(sides, 't', 1, 1)
-
- // not opposite, forming an angle, first a then b,
- // directed either both left, or both right
- // Check side of B2 from A. This is not calculated before
- : ra1 && rb0 ? angle<1>(sides, 'a', 1, -1)
-
- // not opposite, forming a angle, first b then a,
- // directed either both left, or both right
- : ra0 && rb1 ? angle<0>(sides, 'a', -1, 1)
-
- // b starts from interior of a
- : rb0 ? starts_from_middle(sides, 'B', 0, -1)
-
- // a starts from interior of b (#39)
- : ra0 ? starts_from_middle(sides, 'A', -1, 0)
-
- // b ends at interior of a, calculate direction of A from IP
- : rb1 ? b_ends_at_middle(sides)
-
- // a ends at interior of b
- : ra1 ? a_ends_at_middle(sides)
-
- // normal intersection
- : calculate_side<1>(sides, 'i', -1, -1)
- ;
- }
-
- template <typename Ratio>
- static inline int arrival_value(Ratio const& r_from, Ratio const& r_to)
- {
- // a1--------->a2
- // b1----->b2
- // a departs: -1
-
- // a1--------->a2
- // b1----->b2
- // a arrives: 1
-
- // a1--------->a2
- // b1----->b2
- // both arrive there -> r-to = 1/1, or 0/1 (on_segment)
-
- // First check the TO (for arrival), then FROM (for departure)
- return r_to.in_segment() ? 1
- : r_to.on_segment() ? 0
- : r_from.on_segment() ? -1
- : -1
- ;
- }
-
- template <typename Ratio>
- static inline void analyze(Ratio const& r,
- int& in_segment_count,
- int& on_end_count,
- int& outside_segment_count)
- {
- if (r.on_end())
- {
- on_end_count++;
- }
- else if (r.in_segment())
- {
- in_segment_count++;
- }
- else
- {
- outside_segment_count++;
- }
- }
-
- static inline int arrival_from_position_value(int /*v_from*/, int v_to)
- {
- return v_to == 2 ? 1
- : v_to == 1 || v_to == 3 ? 0
- //: v_from >= 1 && v_from <= 3 ? -1
- : -1;
-
- // NOTE: this should be an equivalent of the above for the other order
- /* (v_from < 3 && v_to > 3) || (v_from > 3 && v_to < 3) ? 1
- : v_from == 3 || v_to == 3 ? 0
- : -1;*/
- }
-
- static inline void analyse_position_value(int pos_val,
- int & in_segment_count,
- int & on_end_count,
- int & outside_segment_count)
- {
- if ( pos_val == 1 || pos_val == 3 )
- {
- on_end_count++;
- }
- else if ( pos_val == 2 )
- {
- in_segment_count++;
- }
- else
- {
- outside_segment_count++;
- }
- }
-
- template <typename Segment1, typename Segment2, typename Ratio>
- static inline return_type segments_collinear(
- Segment1 const& , Segment2 const& , bool opposite,
- int a1_wrt_b, int a2_wrt_b, int b1_wrt_a, int b2_wrt_a,
- Ratio const& /*ra_from_wrt_b*/, Ratio const& /*ra_to_wrt_b*/,
- Ratio const& /*rb_from_wrt_a*/, Ratio const& /*rb_to_wrt_a*/)
- {
- return_type r('c', opposite);
-
- // IMPORTANT: the order of conditions is different as in intersection_points.hpp
- // We assign A in 0 and B in 1
- r.arrival[0] = arrival_from_position_value(a1_wrt_b, a2_wrt_b);
- r.arrival[1] = arrival_from_position_value(b1_wrt_a, b2_wrt_a);
-
- // Analyse them
- int a_in_segment_count = 0;
- int a_on_end_count = 0;
- int a_outside_segment_count = 0;
- int b_in_segment_count = 0;
- int b_on_end_count = 0;
- int b_outside_segment_count = 0;
- analyse_position_value(a1_wrt_b,
- a_in_segment_count, a_on_end_count, a_outside_segment_count);
- analyse_position_value(a2_wrt_b,
- a_in_segment_count, a_on_end_count, a_outside_segment_count);
- analyse_position_value(b1_wrt_a,
- b_in_segment_count, b_on_end_count, b_outside_segment_count);
- analyse_position_value(b2_wrt_a,
- b_in_segment_count, b_on_end_count, b_outside_segment_count);
-
- if (a_on_end_count == 1
- && b_on_end_count == 1
- && a_outside_segment_count == 1
- && b_outside_segment_count == 1)
- {
- // This is a collinear touch
- // --------> A (or B)
- // <---------- B (or A)
- // We adapt the "how"
- // TODO: how was to be refactored anyway,
- if (! opposite)
- {
- r.how = 'a';
- }
- else
- {
- r.how = r.arrival[0] == 0 ? 't' : 'f';
- }
- }
- else if (a_on_end_count == 2
- && b_on_end_count == 2)
- {
- r.how = 'e';
- }
-
- return r;
- }
-
- template <typename Segment>
- static inline return_type degenerate(Segment const& , bool)
- {
- return return_type('0', false);
- }
-
- template <typename Segment, typename Ratio>
- static inline return_type one_degenerate(Segment const& ,
- Ratio const& ,
- bool)
- {
- // To be decided
- return return_type('0', false);
- }
-
- static inline return_type disjoint()
- {
- return return_type('d', false);
- }
-
- static inline return_type error(std::string const&)
- {
- // Return "E" to denote error
- // This will throw an error in get_turn_info
- // TODO: change to enum or similar
- return return_type('E', false);
- }
-
-private :
-
- template <std::size_t I>
- static inline return_type calculate_side(side_info const& sides,
- char how, int how_a, int how_b)
- {
- int const dir = sides.get<1, I>() == 1 ? 1 : -1;
- return return_type(sides, how, how_a, how_b, -dir, dir);
- }
-
- template <std::size_t I>
- static inline return_type angle(side_info const& sides,
- char how, int how_a, int how_b)
- {
- int const dir = sides.get<1, I>() == 1 ? 1 : -1;
- return return_type(sides, how, how_a, how_b, dir, dir);
- }
-
-
- static inline return_type starts_from_middle(side_info const& sides,
- char which,
- int how_a, int how_b)
- {
- // Calculate ARROW of b segment w.r.t. s1
- int dir = sides.get<1, 1>() == 1 ? 1 : -1;
-
- // From other perspective, then reverse
- bool const is_a = which == 'A';
- if (is_a)
- {
- dir = -dir;
- }
-
- return return_type(sides, 's',
- how_a,
- how_b,
- is_a ? dir : -dir,
- ! is_a ? dir : -dir);
- }
-
-
-
- // To be harmonized
- static inline return_type a_ends_at_middle(side_info const& sides)
- {
- // Ending at the middle, one ARRIVES, the other one is NEUTRAL
- // (because it both "arrives" and "departs" there)
- int const dir = sides.get<1, 1>() == 1 ? 1 : -1;
- return return_type(sides, 'm', 1, 0, dir, dir);
- }
-
-
- static inline return_type b_ends_at_middle(side_info const& sides)
- {
- int const dir = sides.get<0, 1>() == 1 ? 1 : -1;
- return return_type(sides, 'm', 0, 1, dir, dir);
- }
-
-};
-
-}} // namespace policies::relate
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_DIRECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/relate/intersection_points.hpp b/contrib/restricted/boost/boost/geometry/policies/relate/intersection_points.hpp
deleted file mode 100644
index 1ba08452fdd..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/relate/intersection_points.hpp
+++ /dev/null
@@ -1,193 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2016.
-// Modifications copyright (c) 2016 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP
-#define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP
-
-
-#include <algorithm>
-#include <string>
-
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/strategies/side_info.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace policies { namespace relate
-{
-
-
-/*!
-\brief Policy calculating the intersection points themselves
- */
-template
-<
- typename ReturnType
->
-struct segments_intersection_points
-{
- typedef ReturnType return_type;
-
- template
- <
- typename Segment1,
- typename Segment2,
- typename SegmentIntersectionInfo
- >
- static inline return_type segments_crosses(side_info const&,
- SegmentIntersectionInfo const& sinfo,
- Segment1 const& s1, Segment2 const& s2)
- {
- return_type result;
- result.count = 1;
- sinfo.calculate(result.intersections[0], s1, s2);
-
- // Temporary - this should go later
- result.fractions[0].assign(sinfo);
-
- return result;
- }
-
- template <typename Segment1, typename Segment2, typename Ratio>
- static inline return_type segments_collinear(
- Segment1 const& a, Segment2 const& b, bool /*opposite*/,
- int a1_wrt_b, int a2_wrt_b, int b1_wrt_a, int b2_wrt_a,
- Ratio const& ra_from_wrt_b, Ratio const& ra_to_wrt_b,
- Ratio const& rb_from_wrt_a, Ratio const& rb_to_wrt_a)
- {
- return_type result;
- unsigned int index = 0, count_a = 0, count_b = 0;
- Ratio on_a[2];
-
- // The conditions "index < 2" are necessary for non-robust handling,
- // if index would be 2 this indicate an (currently uncatched) error
-
- // IMPORTANT: the order of conditions is different as in direction.hpp
- if (a1_wrt_b >= 1 && a1_wrt_b <= 3 // ra_from_wrt_b.on_segment()
- && index < 2)
- {
- // a1--------->a2
- // b1----->b2
- //
- // ra1 (relative to b) is between 0/1:
- // -> First point of A is intersection point
- detail::assign_point_from_index<0>(a, result.intersections[index]);
- result.fractions[index].assign(Ratio::zero(), ra_from_wrt_b);
- on_a[index] = Ratio::zero();
- index++;
- count_a++;
- }
- if (b1_wrt_a == 2 //rb_from_wrt_a.in_segment()
- && index < 2)
- {
- // We take the first intersection point of B
- // a1--------->a2
- // b1----->b2
- // But only if it is not located on A
- // a1--------->a2
- // b1----->b2 rb_from_wrt_a == 0/1 -> a already taken
-
- detail::assign_point_from_index<0>(b, result.intersections[index]);
- result.fractions[index].assign(rb_from_wrt_a, Ratio::zero());
- on_a[index] = rb_from_wrt_a;
- index++;
- count_b++;
- }
-
- if (a2_wrt_b >= 1 && a2_wrt_b <= 3 //ra_to_wrt_b.on_segment()
- && index < 2)
- {
- // Similarly, second IP (here a2)
- // a1--------->a2
- // b1----->b2
- detail::assign_point_from_index<1>(a, result.intersections[index]);
- result.fractions[index].assign(Ratio::one(), ra_to_wrt_b);
- on_a[index] = Ratio::one();
- index++;
- count_a++;
- }
- if (b2_wrt_a == 2 // rb_to_wrt_a.in_segment()
- && index < 2)
- {
- detail::assign_point_from_index<1>(b, result.intersections[index]);
- result.fractions[index].assign(rb_to_wrt_a, Ratio::one());
- on_a[index] = rb_to_wrt_a;
- index++;
- count_b++;
- }
-
- // TEMPORARY
- // If both are from b, and b is reversed w.r.t. a, we swap IP's
- // to align them w.r.t. a
- // get_turn_info still relies on some order (in some collinear cases)
- if (index == 2 && on_a[1] < on_a[0])
- {
- std::swap(result.fractions[0], result.fractions[1]);
- std::swap(result.intersections[0], result.intersections[1]);
- }
-
- result.count = index;
-
- return result;
- }
-
- static inline return_type disjoint()
- {
- return return_type();
- }
- static inline return_type error(std::string const&)
- {
- return return_type();
- }
-
- // Both degenerate
- template <typename Segment>
- static inline return_type degenerate(Segment const& segment, bool)
- {
- return_type result;
- result.count = 1;
- set<0>(result.intersections[0], get<0, 0>(segment));
- set<1>(result.intersections[0], get<0, 1>(segment));
- return result;
- }
-
- // One degenerate
- template <typename Segment, typename Ratio>
- static inline return_type one_degenerate(Segment const& degenerate_segment,
- Ratio const& ratio, bool a_degenerate)
- {
- return_type result;
- result.count = 1;
- set<0>(result.intersections[0], get<0, 0>(degenerate_segment));
- set<1>(result.intersections[0], get<0, 1>(degenerate_segment));
- if (a_degenerate)
- {
- // IP lies on ratio w.r.t. segment b
- result.fractions[0].assign(Ratio::zero(), ratio);
- }
- else
- {
- result.fractions[0].assign(ratio, Ratio::zero());
- }
- return result;
- }
-};
-
-
-}} // namespace policies::relate
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_POINTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/relate/intersection_ratios.hpp b/contrib/restricted/boost/boost/geometry/policies/relate/intersection_ratios.hpp
deleted file mode 100644
index 81ecba0b54c..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/relate/intersection_ratios.hpp
+++ /dev/null
@@ -1,127 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_RATIOS_HPP
-#define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_RATIOS_HPP
-
-
-#include <algorithm>
-#include <string>
-
-#include <boost/concept_check.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/strategies/side_info.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace policies { namespace relate
-{
-
-
-/*!
-\brief Policy returning segment ratios
-\note Template argument FractionType should be a fraction_type<SegmentRatio>
- */
-template
-<
- typename FractionType
->
-struct segments_intersection_ratios
-{
- typedef FractionType return_type;
-
- template
- <
- typename Segment1,
- typename Segment2,
- typename SegmentIntersectionInfo
- >
- static inline return_type segments_crosses(side_info const&,
- SegmentIntersectionInfo const& sinfo,
- Segment1 const& , Segment2 const& )
- {
- return_type result;
- result.assign(sinfo);
- return result;
- }
-
- template <typename Segment1, typename Segment2, typename Ratio>
- static inline return_type segments_collinear(
- Segment1 const& , Segment2 const& ,
- Ratio const& ra_from_wrt_b, Ratio const& ra_to_wrt_b,
- Ratio const& rb_from_wrt_a, Ratio const& rb_to_wrt_a)
- {
- // We have only one result, for (potentially) two IP's,
- // so we take a first one
- return_type result;
-
- if (ra_from_wrt_b.on_segment())
- {
- result.assign(Ratio::zero(), ra_from_wrt_b);
- }
- else if (rb_from_wrt_a.in_segment())
- {
- result.assign(rb_from_wrt_a, Ratio::zero());
- }
- else if (ra_to_wrt_b.on_segment())
- {
- result.assign(Ratio::one(), ra_to_wrt_b);
- }
- else if (rb_to_wrt_a.in_segment())
- {
- result.assign(rb_to_wrt_a, Ratio::one());
- }
-
- return result;
- }
-
- static inline return_type disjoint()
- {
- return return_type();
- }
- static inline return_type error(std::string const&)
- {
- return return_type();
- }
-
- template <typename Segment>
- static inline return_type degenerate(Segment const& segment, bool)
- {
- return return_type();
- }
-
- template <typename Segment, typename Ratio>
- static inline return_type one_degenerate(Segment const& ,
- Ratio const& ratio, bool a_degenerate)
- {
- return_type result;
- if (a_degenerate)
- {
- // IP lies on ratio w.r.t. segment b
- result.assign(Ratio::zero(), ratio);
- }
- else
- {
- result.assign(ratio, Ratio::zero());
- }
- return result;
- }
-
-};
-
-
-}} // namespace policies::relate
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_INTERSECTION_RATIOS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/relate/tupled.hpp b/contrib/restricted/boost/boost/geometry/policies/relate/tupled.hpp
deleted file mode 100644
index 4b65432f20e..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/relate/tupled.hpp
+++ /dev/null
@@ -1,116 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, 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 BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_TUPLED_HPP
-#define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_TUPLED_HPP
-
-
-#include <string>
-
-#include <boost/tuple/tuple.hpp>
-#include <boost/geometry/strategies/side_info.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace policies { namespace relate
-{
-
-
-// "tupled" to return intersection results together.
-// Now with two, with some meta-programming and derivations it can also be three (or more)
-template <typename Policy1, typename Policy2>
-struct segments_tupled
-{
- typedef boost::tuple
- <
- typename Policy1::return_type,
- typename Policy2::return_type
- > return_type;
-
- template <typename Segment1, typename Segment2, typename SegmentIntersectionInfo>
- static inline return_type segments_crosses(side_info const& sides,
- SegmentIntersectionInfo const& sinfo,
- Segment1 const& s1, Segment2 const& s2)
- {
- return boost::make_tuple
- (
- Policy1::segments_crosses(sides, sinfo, s1, s2),
- Policy2::segments_crosses(sides, sinfo, s1, s2)
- );
- }
-
- template <typename Segment1, typename Segment2, typename Ratio>
- static inline return_type segments_collinear(
- Segment1 const& segment1, Segment2 const& segment2,
- bool opposite,
- int pa1, int pa2, int pb1, int pb2,
- Ratio const& ra1, Ratio const& ra2,
- Ratio const& rb1, Ratio const& rb2)
- {
- return boost::make_tuple
- (
- Policy1::segments_collinear(segment1, segment2,
- opposite,
- pa1, pa2, pb1, pb2,
- ra1, ra2, rb1, rb2),
- Policy2::segments_collinear(segment1, segment2,
- opposite,
- pa1, pa2, pb1, pb2,
- ra1, ra2, rb1, rb2)
- );
- }
-
- template <typename Segment>
- static inline return_type degenerate(Segment const& segment,
- bool a_degenerate)
- {
- return boost::make_tuple
- (
- Policy1::degenerate(segment, a_degenerate),
- Policy2::degenerate(segment, a_degenerate)
- );
- }
-
- template <typename Segment, typename Ratio>
- static inline return_type one_degenerate(Segment const& segment,
- Ratio const& ratio,
- bool a_degenerate)
- {
- return boost::make_tuple
- (
- Policy1::one_degenerate(segment, ratio, a_degenerate),
- Policy2::one_degenerate(segment, ratio, a_degenerate)
- );
- }
-
- static inline return_type disjoint()
- {
- return boost::make_tuple
- (
- Policy1::disjoint(),
- Policy2::disjoint()
- );
- }
-
- static inline return_type error(std::string const& msg)
- {
- return boost::make_tuple
- (
- Policy1::error(msg),
- Policy2::error(msg)
- );
- }
-
-};
-
-}} // namespace policies::relate
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_TUPLED_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/robustness/get_rescale_policy.hpp b/contrib/restricted/boost/boost/geometry/policies/robustness/get_rescale_policy.hpp
deleted file mode 100644
index daf32d3057b..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/robustness/get_rescale_policy.hpp
+++ /dev/null
@@ -1,341 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2014-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2014-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_POLICIES_ROBUSTNESS_GET_RESCALE_POLICY_HPP
-#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_GET_RESCALE_POLICY_HPP
-
-
-#include <cstddef>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_floating_point.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-
-#include <boost/geometry/algorithms/envelope.hpp>
-#include <boost/geometry/algorithms/expand.hpp>
-#include <boost/geometry/algorithms/is_empty.hpp>
-#include <boost/geometry/algorithms/detail/recalculate.hpp>
-#include <boost/geometry/algorithms/detail/get_max_size.hpp>
-#include <boost/geometry/policies/robustness/robust_type.hpp>
-
-#include <boost/geometry/geometries/point.hpp>
-#include <boost/geometry/geometries/box.hpp>
-
-#include <boost/geometry/policies/robustness/no_rescale_policy.hpp>
-#include <boost/geometry/policies/robustness/rescale_policy.hpp>
-
-#include <boost/geometry/util/promote_floating_point.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace get_rescale_policy
-{
-
-template
-<
- typename Box,
- typename Point,
- typename RobustPoint,
- typename Factor
->
-inline void scale_box_to_integer_range(Box const& box,
- Point& min_point,
- RobustPoint& min_robust_point,
- Factor& factor)
-{
- // Scale box to integer-range
- typedef typename promote_floating_point
- <
- typename geometry::coordinate_type<Point>::type
- >::type num_type;
- num_type const diff = boost::numeric_cast<num_type>(detail::get_max_size(box));
- num_type const range = 10000000.0; // Define a large range to get precise integer coordinates
- num_type const half = 0.5;
- if (math::equals(diff, num_type())
- || diff >= range
- || ! boost::math::isfinite(diff))
- {
- factor = 1;
- }
- else
- {
- factor = boost::numeric_cast<num_type>(
- boost::numeric_cast<boost::long_long_type>(half + range / diff));
- BOOST_GEOMETRY_ASSERT(factor >= 1);
- }
-
- // Assign input/output minimal points
- detail::assign_point_from_index<0>(box, min_point);
- num_type const two = 2;
- boost::long_long_type const min_coordinate
- = boost::numeric_cast<boost::long_long_type>(-range / two);
- assign_values(min_robust_point, min_coordinate, min_coordinate);
-}
-
-template <typename Point, typename RobustPoint, typename Geometry, typename Factor>
-static inline void init_rescale_policy(Geometry const& geometry,
- Point& min_point,
- RobustPoint& min_robust_point,
- Factor& factor)
-{
- if (geometry::is_empty(geometry))
- {
- return;
- }
-
- // Get bounding boxes
- model::box<Point> env = geometry::return_envelope<model::box<Point> >(geometry);
-
- scale_box_to_integer_range(env, min_point, min_robust_point, factor);
-}
-
-template <typename Point, typename RobustPoint, typename Geometry1, typename Geometry2, typename Factor>
-static inline void init_rescale_policy(Geometry1 const& geometry1,
- Geometry2 const& geometry2,
- Point& min_point,
- RobustPoint& min_robust_point,
- Factor& factor)
-{
- // Get bounding boxes (when at least one of the geometries is not empty)
- bool const is_empty1 = geometry::is_empty(geometry1);
- bool const is_empty2 = geometry::is_empty(geometry2);
- if (is_empty1 && is_empty2)
- {
- return;
- }
-
- model::box<Point> env;
- if (is_empty1)
- {
- geometry::envelope(geometry2, env);
- }
- else if (is_empty2)
- {
- geometry::envelope(geometry1, env);
- }
- else
- {
- // The following approach (envelope + expand) may not give the
- // optimal MBR when then two geometries are in the spherical
- // equatorial or geographic coordinate systems.
- // TODO: implement envelope for two (or possibly more geometries)
- geometry::envelope(geometry1, env);
- model::box<Point> env2 = geometry::return_envelope
- <
- model::box<Point>
- >(geometry2);
- geometry::expand(env, env2);
- }
-
- scale_box_to_integer_range(env, min_point, min_robust_point, factor);
-}
-
-
-template
-<
- typename Point,
- bool IsFloatingPoint
->
-struct rescale_policy_type
-{
- typedef no_rescale_policy type;
-};
-
-// We rescale only all FP types
-template
-<
- typename Point
->
-struct rescale_policy_type<Point, true>
-{
- typedef typename geometry::coordinate_type<Point>::type coordinate_type;
- typedef model::point
- <
- typename detail::robust_type<coordinate_type>::type,
- geometry::dimension<Point>::value,
- typename geometry::coordinate_system<Point>::type
- > robust_point_type;
- typedef typename promote_floating_point<coordinate_type>::type factor_type;
- typedef detail::robust_policy<Point, robust_point_type, factor_type> type;
-};
-
-template <typename Policy>
-struct get_rescale_policy
-{
- template <typename Geometry>
- static inline Policy apply(Geometry const& geometry)
- {
- typedef typename point_type<Geometry>::type point_type;
- typedef typename geometry::coordinate_type<Geometry>::type coordinate_type;
- typedef typename promote_floating_point<coordinate_type>::type factor_type;
- typedef model::point
- <
- typename detail::robust_type<coordinate_type>::type,
- geometry::dimension<point_type>::value,
- typename geometry::coordinate_system<point_type>::type
- > robust_point_type;
-
- point_type min_point;
- robust_point_type min_robust_point;
- factor_type factor;
- init_rescale_policy(geometry, min_point, min_robust_point, factor);
-
- return Policy(min_point, min_robust_point, factor);
- }
-
- template <typename Geometry1, typename Geometry2>
- static inline Policy apply(Geometry1 const& geometry1, Geometry2 const& geometry2)
- {
- typedef typename point_type<Geometry1>::type point_type;
- typedef typename geometry::coordinate_type<Geometry1>::type coordinate_type;
- typedef typename promote_floating_point<coordinate_type>::type factor_type;
- typedef model::point
- <
- typename detail::robust_type<coordinate_type>::type,
- geometry::dimension<point_type>::value,
- typename geometry::coordinate_system<point_type>::type
- > robust_point_type;
-
- point_type min_point;
- robust_point_type min_robust_point;
- factor_type factor;
- init_rescale_policy(geometry1, geometry2, min_point, min_robust_point, factor);
-
- return Policy(min_point, min_robust_point, factor);
- }
-};
-
-// Specialization for no-rescaling
-template <>
-struct get_rescale_policy<no_rescale_policy>
-{
- template <typename Geometry>
- static inline no_rescale_policy apply(Geometry const& )
- {
- return no_rescale_policy();
- }
-
- template <typename Geometry1, typename Geometry2>
- static inline no_rescale_policy apply(Geometry1 const& , Geometry2 const& )
- {
- return no_rescale_policy();
- }
-};
-
-
-}} // namespace detail::get_rescale_policy
-#endif // DOXYGEN_NO_DETAIL
-
-template<typename Point>
-struct rescale_policy_type
- : public detail::get_rescale_policy::rescale_policy_type
- <
- Point,
-#if defined(BOOST_GEOMETRY_NO_ROBUSTNESS)
- false
-#else
- boost::is_floating_point
- <
- typename geometry::coordinate_type<Point>::type
- >::type::value
- &&
- boost::is_same
- <
- typename geometry::coordinate_system<Point>::type,
- geometry::cs::cartesian
- >::value
-#endif
- >
-{
- static const bool is_point
- = boost::is_same
- <
- typename geometry::tag<Point>::type,
- geometry::point_tag
- >::type::value;
-
- BOOST_MPL_ASSERT_MSG((is_point),
- INVALID_INPUT_GEOMETRY,
- (typename geometry::tag<Point>::type));
-};
-
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename tag_cast
- <
- typename tag<Geometry1>::type,
- box_tag,
- pointlike_tag,
- linear_tag,
- areal_tag
- >::type,
- typename Tag2 = typename tag_cast
- <
- typename tag<Geometry2>::type,
- box_tag,
- pointlike_tag,
- linear_tag,
- areal_tag
- >::type
->
-struct rescale_overlay_policy_type
- // Default: no rescaling
- : public detail::get_rescale_policy::rescale_policy_type
- <
- typename geometry::point_type<Geometry1>::type,
- false
- >
-{};
-
-// Areal/areal: get rescale policy based on coordinate type
-template
-<
- typename Geometry1,
- typename Geometry2
->
-struct rescale_overlay_policy_type<Geometry1, Geometry2, areal_tag, areal_tag>
- : public rescale_policy_type
- <
- typename geometry::point_type<Geometry1>::type
- >
-{};
-
-
-template <typename Policy, typename Geometry>
-inline Policy get_rescale_policy(Geometry const& geometry)
-{
- return detail::get_rescale_policy::get_rescale_policy<Policy>::apply(geometry);
-}
-
-template <typename Policy, typename Geometry1, typename Geometry2>
-inline Policy get_rescale_policy(Geometry1 const& geometry1, Geometry2 const& geometry2)
-{
- return detail::get_rescale_policy::get_rescale_policy<Policy>::apply(geometry1, geometry2);
-}
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_GET_RESCALE_POLICY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/robustness/no_rescale_policy.hpp b/contrib/restricted/boost/boost/geometry/policies/robustness/no_rescale_policy.hpp
deleted file mode 100644
index a7899842c10..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/robustness/no_rescale_policy.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2013 Bruno Lalande, Paris, France.
-// Copyright (c) 2013 Mateusz Loskot, London, UK.
-// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
-
-// 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 BOOST_GEOMETRY_POLICIES_ROBUSTNESS_NO_RESCALE_POLICY_HPP
-#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_NO_RESCALE_POLICY_HPP
-
-#include <stddef.h>
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/policies/robustness/robust_point_type.hpp>
-#include <boost/geometry/policies/robustness/segment_ratio.hpp>
-#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-// Probably this will be moved out of namespace detail
-struct no_rescale_policy
-{
- static bool const enabled = false;
-
- // We don't rescale but return the reference of the input
- template <std::size_t Dimension, typename Value>
- inline Value const& apply(Value const& value) const
- {
- return value;
- }
-};
-
-} // namespace detail
-#endif
-
-
-// Implement meta-functions for this policy
-template <typename Point>
-struct robust_point_type<Point, detail::no_rescale_policy>
-{
- // The point itself
- typedef Point type;
-};
-
-template <typename Point>
-struct segment_ratio_type<Point, detail::no_rescale_policy>
-{
- // Define a segment_ratio defined on coordinate type, e.g.
- // int/int or float/float
- typedef typename geometry::coordinate_type<Point>::type coordinate_type;
- typedef segment_ratio<coordinate_type> type;
-};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_NO_RESCALE_POLICY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/robustness/rescale_policy.hpp b/contrib/restricted/boost/boost/geometry/policies/robustness/rescale_policy.hpp
deleted file mode 100644
index b92f6e1ec7a..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/robustness/rescale_policy.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2014-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2014-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_POLICIES_ROBUSTNESS_RESCALE_POLICY_HPP
-#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_RESCALE_POLICY_HPP
-
-#include <cstddef>
-
-#include <boost/geometry/policies/robustness/segment_ratio.hpp>
-#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
-#include <boost/geometry/policies/robustness/robust_point_type.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename FpPoint, typename IntPoint, typename CalculationType>
-struct robust_policy
-{
- static bool const enabled = true;
-
- typedef typename geometry::coordinate_type<IntPoint>::type output_ct;
-
- robust_policy(FpPoint const& fp_min, IntPoint const& int_min, CalculationType const& the_factor)
- : m_fp_min(fp_min)
- , m_int_min(int_min)
- , m_multiplier(the_factor)
- {
- }
-
- template <std::size_t Dimension, typename Value>
- inline output_ct apply(Value const& value) const
- {
- // a + (v-b)*f
- CalculationType const a = static_cast<CalculationType>(get<Dimension>(m_int_min));
- CalculationType const b = static_cast<CalculationType>(get<Dimension>(m_fp_min));
- CalculationType const result = a + (value - b) * m_multiplier;
-
- return geometry::math::rounding_cast<output_ct>(result);
- }
-
- FpPoint m_fp_min;
- IntPoint m_int_min;
- CalculationType m_multiplier;
-};
-
-} // namespace detail
-#endif
-
-
-// Implement meta-functions for this policy
-
-// Define the IntPoint as a robust-point type
-template <typename Point, typename FpPoint, typename IntPoint, typename CalculationType>
-struct robust_point_type<Point, detail::robust_policy<FpPoint, IntPoint, CalculationType> >
-{
- typedef IntPoint type;
-};
-
-// Meta function for rescaling, if rescaling is done segment_ratio is based on long long
-template <typename Point, typename FpPoint, typename IntPoint, typename CalculationType>
-struct segment_ratio_type<Point, detail::robust_policy<FpPoint, IntPoint, CalculationType> >
-{
- typedef segment_ratio<boost::long_long_type> type;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_RESCALE_POLICY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/robustness/robust_point_type.hpp b/contrib/restricted/boost/boost/geometry/policies/robustness/robust_point_type.hpp
deleted file mode 100644
index 25639227f00..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/robustness/robust_point_type.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2013 Bruno Lalande, Paris, France.
-// Copyright (c) 2013 Mateusz Loskot, London, UK.
-// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
-
-// 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 BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_POINT_TYPE_HPP
-#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_POINT_TYPE_HPP
-
-namespace boost { namespace geometry
-{
-
-// Meta-function to typedef a robust point type for a policy
-template <typename Point, typename Policy>
-struct robust_point_type
-{
- // By default, the point itself is the robust type
- typedef Point type;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_POINT_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/robustness/robust_type.hpp b/contrib/restricted/boost/boost/geometry/policies/robustness/robust_type.hpp
deleted file mode 100644
index 7342f905bf0..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/robustness/robust_type.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
-
-// 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 BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_TYPE_HPP
-#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_TYPE_HPP
-
-
-#include <boost/config.hpp>
-#include <boost/type_traits/is_floating_point.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-
-namespace detail_dispatch
-{
-
-template <typename CoordinateType, typename IsFloatingPoint>
-struct robust_type
-{
-};
-
-template <typename CoordinateType>
-struct robust_type<CoordinateType, boost::false_type>
-{
- typedef CoordinateType type;
-};
-
-template <typename CoordinateType>
-struct robust_type<CoordinateType, boost::true_type>
-{
- typedef boost::long_long_type type;
-};
-
-} // namespace detail_dispatch
-
-namespace detail
-{
-
-template <typename CoordinateType>
-struct robust_type
-{
- typedef typename detail_dispatch::robust_type
- <
- CoordinateType,
- typename boost::is_floating_point<CoordinateType>::type
- >::type type;
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_ROBUST_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/robustness/segment_ratio.hpp b/contrib/restricted/boost/boost/geometry/policies/robustness/segment_ratio.hpp
deleted file mode 100644
index 9b313fdfaf2..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/robustness/segment_ratio.hpp
+++ /dev/null
@@ -1,267 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2016.
-// Modifications copyright (c) 2016 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_HPP
-#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_HPP
-
-#include <boost/config.hpp>
-#include <boost/rational.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-namespace detail { namespace segment_ratio
-{
-
-template
-<
- typename Type,
- bool IsIntegral = boost::is_integral<Type>::type::value
->
-struct less {};
-
-template <typename Type>
-struct less<Type, true>
-{
- template <typename Ratio>
- static inline bool apply(Ratio const& lhs, Ratio const& rhs)
- {
- return boost::rational<Type>(lhs.numerator(), lhs.denominator())
- < boost::rational<Type>(rhs.numerator(), rhs.denominator());
- }
-};
-
-template <typename Type>
-struct less<Type, false>
-{
- template <typename Ratio>
- static inline bool apply(Ratio const& lhs, Ratio const& rhs)
- {
- BOOST_GEOMETRY_ASSERT(lhs.denominator() != 0);
- BOOST_GEOMETRY_ASSERT(rhs.denominator() != 0);
- return lhs.numerator() * rhs.denominator()
- < rhs.numerator() * lhs.denominator();
- }
-};
-
-template
-<
- typename Type,
- bool IsIntegral = boost::is_integral<Type>::type::value
->
-struct equal {};
-
-template <typename Type>
-struct equal<Type, true>
-{
- template <typename Ratio>
- static inline bool apply(Ratio const& lhs, Ratio const& rhs)
- {
- return boost::rational<Type>(lhs.numerator(), lhs.denominator())
- == boost::rational<Type>(rhs.numerator(), rhs.denominator());
- }
-};
-
-template <typename Type>
-struct equal<Type, false>
-{
- template <typename Ratio>
- static inline bool apply(Ratio const& lhs, Ratio const& rhs)
- {
- BOOST_GEOMETRY_ASSERT(lhs.denominator() != 0);
- BOOST_GEOMETRY_ASSERT(rhs.denominator() != 0);
- return geometry::math::equals
- (
- lhs.numerator() * rhs.denominator(),
- rhs.numerator() * lhs.denominator()
- );
- }
-};
-
-}}
-
-//! Small class to keep a ratio (e.g. 1/4)
-//! Main purpose is intersections and checking on 0, 1, and smaller/larger
-//! The prototype used Boost.Rational. However, we also want to store FP ratios,
-//! (so numerator/denominator both in float)
-//! and Boost.Rational starts with GCD which we prefer to avoid if not necessary
-//! On a segment means: this ratio is between 0 and 1 (both inclusive)
-//!
-template <typename Type>
-class segment_ratio
-{
-public :
- typedef Type numeric_type;
-
- // Type-alias for the type itself
- typedef segment_ratio<Type> thistype;
-
- inline segment_ratio()
- : m_numerator(0)
- , m_denominator(1)
- , m_approximation(0)
- {}
-
- inline segment_ratio(const Type& nominator, const Type& denominator)
- : m_numerator(nominator)
- , m_denominator(denominator)
- {
- initialize();
- }
-
- inline Type const& numerator() const { return m_numerator; }
- inline Type const& denominator() const { return m_denominator; }
-
- inline void assign(const Type& nominator, const Type& denominator)
- {
- m_numerator = nominator;
- m_denominator = denominator;
- initialize();
- }
-
- inline void initialize()
- {
- // Minimal normalization
- // 1/-4 => -1/4, -1/-4 => 1/4
- if (m_denominator < 0)
- {
- m_numerator = -m_numerator;
- m_denominator = -m_denominator;
- }
-
- m_approximation =
- m_denominator == 0 ? 0
- : (
- boost::numeric_cast<fp_type>(m_numerator) * scale()
- / boost::numeric_cast<fp_type>(m_denominator)
- );
- }
-
- inline bool is_zero() const { return math::equals(m_numerator, 0); }
- inline bool is_one() const { return math::equals(m_numerator, m_denominator); }
- inline bool on_segment() const
- {
- // e.g. 0/4 or 4/4 or 2/4
- return m_numerator >= 0 && m_numerator <= m_denominator;
- }
- inline bool in_segment() const
- {
- // e.g. 1/4
- return m_numerator > 0 && m_numerator < m_denominator;
- }
- inline bool on_end() const
- {
- // e.g. 0/4 or 4/4
- return is_zero() || is_one();
- }
- inline bool left() const
- {
- // e.g. -1/4
- return m_numerator < 0;
- }
- inline bool right() const
- {
- // e.g. 5/4
- return m_numerator > m_denominator;
- }
-
- inline bool near_end() const
- {
- if (left() || right())
- {
- return false;
- }
-
- static fp_type const small_part_of_scale = scale() / 100;
- return m_approximation < small_part_of_scale
- || m_approximation > scale() - small_part_of_scale;
- }
-
- inline bool close_to(thistype const& other) const
- {
- return geometry::math::abs(m_approximation - other.m_approximation) < 50;
- }
-
- inline bool operator< (thistype const& other) const
- {
- return close_to(other)
- ? detail::segment_ratio::less<Type>::apply(*this, other)
- : m_approximation < other.m_approximation;
- }
-
- inline bool operator== (thistype const& other) const
- {
- return close_to(other)
- && detail::segment_ratio::equal<Type>::apply(*this, other);
- }
-
- static inline thistype zero()
- {
- static thistype result(0, 1);
- return result;
- }
-
- static inline thistype one()
- {
- static thistype result(1, 1);
- return result;
- }
-
-#if defined(BOOST_GEOMETRY_DEFINE_STREAM_OPERATOR_SEGMENT_RATIO)
- friend std::ostream& operator<<(std::ostream &os, segment_ratio const& ratio)
- {
- os << ratio.m_numerator << "/" << ratio.m_denominator
- << " (" << (static_cast<double>(ratio.m_numerator)
- / static_cast<double>(ratio.m_denominator))
- << ")";
- return os;
- }
-#endif
-
-
-
-private :
- // NOTE: if this typedef is used then fp_type is non-fundamental type
- // if Type is non-fundamental type
- //typedef typename promote_floating_point<Type>::type fp_type;
-
- typedef typename boost::mpl::if_c
- <
- boost::is_float<Type>::value, Type, double
- >::type fp_type;
-
- Type m_numerator;
- Type m_denominator;
-
- // Contains ratio on scale 0..1000000 (for 0..1)
- // This is an approximation for fast and rough comparisons
- // Boost.Rational is used if the approximations are close.
- // Reason: performance, Boost.Rational does a GCD by default and also the
- // comparisons contain while-loops.
- fp_type m_approximation;
-
-
- static inline fp_type scale()
- {
- return 1000000.0;
- }
-};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/policies/robustness/segment_ratio_type.hpp b/contrib/restricted/boost/boost/geometry/policies/robustness/segment_ratio_type.hpp
deleted file mode 100644
index 19e935bbb93..00000000000
--- a/contrib/restricted/boost/boost/geometry/policies/robustness/segment_ratio_type.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2013 Bruno Lalande, Paris, France.
-// Copyright (c) 2013 Mateusz Loskot, London, UK.
-// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
-
-// 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 BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_TYPE_HPP
-#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_TYPE_HPP
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-namespace boost { namespace geometry
-{
-
-// Meta-function to access segment-ratio for a policy
-template <typename Point, typename Policy>
-struct segment_ratio_type {}; // : not_implemented<> {};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/epsg.hpp b/contrib/restricted/boost/boost/geometry/srs/epsg.hpp
deleted file mode 100644
index 0641c186111..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/epsg.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_SRS_EPSG_HPP
-#define BOOST_GEOMETRY_SRS_EPSG_HPP
-
-
-#include <boost/geometry/srs/projection.hpp>
-#include <boost/geometry/srs/projections/epsg.hpp>
-#include <boost/geometry/srs/projections/epsg_params.hpp>
-#include <boost/geometry/srs/projections/epsg_traits.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace projections
-{
-
-template <typename CT>
-struct dynamic_parameters<srs::epsg, CT>
-{
- static inline projections::parameters<CT> apply(srs::epsg const& params)
- {
- return projections::detail::pj_init_plus<CT>(
- srs::dynamic(),
- projections::detail::epsg_to_string(params.code),
- false);
- }
-};
-
-template <int Code, typename CT>
-class proj_wrapper<srs::static_epsg<Code>, CT>
- : public static_proj_wrapper_base
- <
- typename projections::detail::epsg_traits<Code>::static_parameters_type,
- CT
- >
-{
- typedef projections::detail::epsg_traits<Code> epsg_traits;
- typedef typename epsg_traits::static_parameters_type static_parameters_type;
- typedef static_proj_wrapper_base<static_parameters_type, CT> base_t;
-
-public:
- proj_wrapper()
- : base_t(epsg_traits::s_par(), epsg_traits::par())
- {}
-};
-
-
-} // namespace projections
-
-
-namespace srs
-{
-
-
-template <int Code, typename CT>
-class projection<srs::static_epsg<Code>, CT>
- : public projections::projection<srs::static_epsg<Code>, CT>
-{
- typedef projections::projection<srs::static_epsg<Code>, CT> base_t;
-
-public:
- projection()
- {}
-};
-
-
-} // namespace srs
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_SRS_EPSG_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/esri.hpp b/contrib/restricted/boost/boost/geometry/srs/esri.hpp
deleted file mode 100644
index 6b4a800fb9f..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/esri.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_SRS_ESRI_HPP
-#define BOOST_GEOMETRY_SRS_ESRI_HPP
-
-
-#include <boost/geometry/srs/projection.hpp>
-#include <boost/geometry/srs/projections/esri.hpp>
-#include <boost/geometry/srs/projections/esri_params.hpp>
-#include <boost/geometry/srs/projections/esri_traits.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace projections
-{
-
-template <typename CT>
-struct dynamic_parameters<srs::esri, CT>
-{
- static inline projections::parameters<CT> apply(srs::esri const& params)
- {
- return projections::detail::pj_init_plus<CT>(
- srs::dynamic(),
- projections::detail::esri_to_string(params.code),
- false);
- }
-};
-
-template <int Code, typename CT>
-class proj_wrapper<srs::static_esri<Code>, CT>
- : public static_proj_wrapper_base
- <
- typename projections::detail::esri_traits<Code>::static_parameters_type,
- CT
- >
-{
- typedef projections::detail::esri_traits<Code> esri_traits;
- typedef typename esri_traits::static_parameters_type static_parameters_type;
- typedef static_proj_wrapper_base<static_parameters_type, CT> base_t;
-
-public:
- proj_wrapper()
- : base_t(esri_traits::s_par(), esri_traits::par())
- {}
-};
-
-
-} // namespace projections
-
-
-namespace srs
-{
-
-
-template <int Code, typename CT>
-class projection<srs::static_esri<Code>, CT>
- : public projections::projection<srs::static_esri<Code>, CT>
-{
- typedef projections::projection<srs::static_esri<Code>, CT> base_t;
-
-public:
- projection()
- {}
-};
-
-
-} // namespace srs
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_SRS_ESRI_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/iau2000.hpp b/contrib/restricted/boost/boost/geometry/srs/iau2000.hpp
deleted file mode 100644
index 8b02ab4a06c..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/iau2000.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_SRS_IAU2000_HPP
-#define BOOST_GEOMETRY_SRS_IAU2000_HPP
-
-
-#include <boost/geometry/srs/projection.hpp>
-#include <boost/geometry/srs/projections/iau2000.hpp>
-#include <boost/geometry/srs/projections/iau2000_params.hpp>
-#include <boost/geometry/srs/projections/iau2000_traits.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace projections
-{
-
-template <typename CT>
-struct dynamic_parameters<srs::iau2000, CT>
-{
- static inline projections::parameters<CT> apply(srs::iau2000 const& params)
- {
- return projections::detail::pj_init_plus<CT>(
- srs::dynamic(),
- projections::detail::iau2000_to_string(params.code),
- false);
- }
-};
-
-template <int Code, typename CT>
-class proj_wrapper<srs::static_iau2000<Code>, CT>
- : public static_proj_wrapper_base
- <
- typename projections::detail::iau2000_traits<Code>::static_parameters_type,
- CT
- >
-{
- typedef projections::detail::iau2000_traits<Code> iau2000_traits;
- typedef typename iau2000_traits::static_parameters_type static_parameters_type;
- typedef static_proj_wrapper_base<static_parameters_type, CT> base_t;
-
-public:
- proj_wrapper()
- : base_t(iau2000_traits::s_par(), iau2000_traits::par())
- {}
-};
-
-
-} // namespace projections
-
-
-namespace srs
-{
-
-
-template <int Code, typename CT>
-class projection<srs::static_iau2000<Code>, CT>
- : public projections::projection<srs::static_iau2000<Code>, CT>
-{
- typedef projections::projection<srs::static_iau2000<Code>, CT> base_t;
-
-public:
- projection()
- {}
-};
-
-
-} // namespace srs
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_SRS_IAU2000_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projection.hpp b/contrib/restricted/boost/boost/geometry/srs/projection.hpp
deleted file mode 100644
index 59c3e8c047b..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projection.hpp
+++ /dev/null
@@ -1,591 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_SRS_PROJECTION_HPP
-#define BOOST_GEOMETRY_SRS_PROJECTION_HPP
-
-
-#include <string>
-
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
-
-#include <boost/geometry/core/coordinate_dimension.hpp>
-
-#include <boost/geometry/srs/projections/exception.hpp>
-#include <boost/geometry/srs/projections/factory.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/pj_init.hpp>
-#include <boost/geometry/srs/projections/invalid_point.hpp>
-#include <boost/geometry/srs/projections/par4.hpp>
-#include <boost/geometry/srs/projections/proj4.hpp>
-
-#include <boost/geometry/views/detail/indexed_point_view.hpp>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/smart_ptr/shared_ptr.hpp>
-#include <boost/throw_exception.hpp>
-#include <boost/type_traits/is_integral.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace projections
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename G1, typename G2>
-struct same_tags
-{
- static const bool value = boost::is_same
- <
- typename geometry::tag<G1>::type,
- typename geometry::tag<G2>::type
- >::value;
-};
-
-template <typename CT>
-struct promote_to_double
-{
- typedef typename boost::mpl::if_c
- <
- boost::is_integral<CT>::value || boost::is_same<CT, float>::value,
- double, CT
- >::type type;
-};
-
-// Copy coordinates of dimensions >= MinDim
-template <std::size_t MinDim, typename Point1, typename Point2>
-inline void copy_higher_dimensions(Point1 const& point1, Point2 & point2)
-{
- static const std::size_t dim1 = geometry::dimension<Point1>::value;
- static const std::size_t dim2 = geometry::dimension<Point2>::value;
- static const std::size_t lesser_dim = dim1 < dim2 ? dim1 : dim2;
- BOOST_MPL_ASSERT_MSG((lesser_dim >= MinDim),
- THE_DIMENSION_OF_POINTS_IS_TOO_SMALL,
- (Point1, Point2));
-
- geometry::detail::conversion::point_to_point
- <
- Point1, Point2, MinDim, lesser_dim
- > ::apply(point1, point2);
-
- // TODO: fill point2 with zeros if dim1 < dim2 ?
- // currently no need because equal dimensions are checked
-}
-
-
-struct forward_point_projection_policy
-{
- template <typename LL, typename XY, typename Proj>
- static inline bool apply(LL const& ll, XY & xy, Proj const& proj)
- {
- return proj.forward(ll, xy);
- }
-};
-
-struct inverse_point_projection_policy
-{
- template <typename XY, typename LL, typename Proj>
- static inline bool apply(XY const& xy, LL & ll, Proj const& proj)
- {
- return proj.inverse(xy, ll);
- }
-};
-
-template <typename PointPolicy>
-struct project_point
-{
- template <typename P1, typename P2, typename Proj>
- static inline bool apply(P1 const& p1, P2 & p2, Proj const& proj)
- {
- // (Geographic -> Cartesian) will be projected, rest will be copied.
- // So first copy third or higher dimensions
- projections::detail::copy_higher_dimensions<2>(p1, p2);
-
- if (! PointPolicy::apply(p1, p2, proj))
- {
- // For consistency with transformation
- set_invalid_point(p2);
- return false;
- }
-
- return true;
- }
-};
-
-template <typename PointPolicy>
-struct project_range
-{
- template <typename Proj>
- struct convert_policy
- {
- explicit convert_policy(Proj const& proj)
- : m_proj(proj)
- , m_result(true)
- {}
-
- template <typename Point1, typename Point2>
- inline void apply(Point1 const& point1, Point2 & point2)
- {
- if (! project_point<PointPolicy>::apply(point1, point2, m_proj) )
- m_result = false;
- }
-
- bool result() const
- {
- return m_result;
- }
-
- private:
- Proj const& m_proj;
- bool m_result;
- };
-
- template <typename R1, typename R2, typename Proj>
- static inline bool apply(R1 const& r1, R2 & r2, Proj const& proj)
- {
- return geometry::detail::conversion::range_to_range
- <
- R1, R2,
- geometry::point_order<R1>::value != geometry::point_order<R2>::value
- >::apply(r1, r2, convert_policy<Proj>(proj)).result();
- }
-};
-
-template <typename Policy>
-struct project_multi
-{
- template <typename G1, typename G2, typename Proj>
- static inline bool apply(G1 const& g1, G2 & g2, Proj const& proj)
- {
- range::resize(g2, boost::size(g1));
- return apply(boost::begin(g1), boost::end(g1),
- boost::begin(g2),
- proj);
- }
-
-private:
- template <typename It1, typename It2, typename Proj>
- static inline bool apply(It1 g1_first, It1 g1_last, It2 g2_first, Proj const& proj)
- {
- bool result = true;
- for ( ; g1_first != g1_last ; ++g1_first, ++g2_first )
- {
- if (! Policy::apply(*g1_first, *g2_first, proj))
- {
- result = false;
- }
- }
- return result;
- }
-};
-
-template
-<
- typename Geometry,
- typename PointPolicy,
- typename Tag = typename geometry::tag<Geometry>::type
->
-struct project_geometry
-{};
-
-template <typename Geometry, typename PointPolicy>
-struct project_geometry<Geometry, PointPolicy, point_tag>
- : project_point<PointPolicy>
-{};
-
-template <typename Geometry, typename PointPolicy>
-struct project_geometry<Geometry, PointPolicy, multi_point_tag>
- : project_range<PointPolicy>
-{};
-
-template <typename Geometry, typename PointPolicy>
-struct project_geometry<Geometry, PointPolicy, segment_tag>
-{
- template <typename G1, typename G2, typename Proj>
- static inline bool apply(G1 const& g1, G2 & g2, Proj const& proj)
- {
- bool r1 = apply<0>(g1, g2, proj);
- bool r2 = apply<1>(g1, g2, proj);
- return r1 && r2;
- }
-
-private:
- template <std::size_t Index, typename G1, typename G2, typename Proj>
- static inline bool apply(G1 const& g1, G2 & g2, Proj const& proj)
- {
- geometry::detail::indexed_point_view<G1 const, Index> pt1(g1);
- geometry::detail::indexed_point_view<G2, Index> pt2(g2);
- return project_point<PointPolicy>::apply(pt1, pt2, proj);
- }
-};
-
-template <typename Geometry, typename PointPolicy>
-struct project_geometry<Geometry, PointPolicy, linestring_tag>
- : project_range<PointPolicy>
-{};
-
-template <typename Geometry, typename PointPolicy>
-struct project_geometry<Geometry, PointPolicy, multi_linestring_tag>
- : project_multi< project_range<PointPolicy> >
-{};
-
-template <typename Geometry, typename PointPolicy>
-struct project_geometry<Geometry, PointPolicy, ring_tag>
- : project_range<PointPolicy>
-{};
-
-template <typename Geometry, typename PointPolicy>
-struct project_geometry<Geometry, PointPolicy, polygon_tag>
-{
- template <typename G1, typename G2, typename Proj>
- static inline bool apply(G1 const& g1, G2 & g2, Proj const& proj)
- {
- bool r1 = project_range
- <
- PointPolicy
- >::apply(geometry::exterior_ring(g1),
- geometry::exterior_ring(g2),
- proj);
- bool r2 = project_multi
- <
- project_range<PointPolicy>
- >::apply(geometry::interior_rings(g1),
- geometry::interior_rings(g2),
- proj);
- return r1 && r2;
- }
-};
-
-template <typename MultiPolygon, typename PointPolicy>
-struct project_geometry<MultiPolygon, PointPolicy, multi_polygon_tag>
- : project_multi
- <
- project_geometry
- <
- typename boost::range_value<MultiPolygon>::type,
- PointPolicy,
- polygon_tag
- >
- >
-{};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-template <typename Params, typename CT>
-struct dynamic_parameters
-{
- BOOST_MPL_ASSERT_MSG((false),
- NOT_IMPLEMENTED_FOR_THESE_PARAMETERS,
- (Params));
-};
-
-template <typename CT>
-struct dynamic_parameters<srs::proj4, CT>
-{
- static inline projections::parameters<CT> apply(srs::proj4 const& params)
- {
- return projections::detail::pj_init_plus<CT>(srs::dynamic(), params.str);
- }
-};
-
-// proj_wrapper class and its specializations wrapps the internal projection
-// representation and implements transparent creation of projection object
-template <typename Proj, typename CT>
-class proj_wrapper
-{
- BOOST_MPL_ASSERT_MSG((false),
- NOT_IMPLEMENTED_FOR_THIS_PROJECTION,
- (Proj));
-};
-
-template <typename CT>
-class proj_wrapper<srs::dynamic, CT>
-{
- // Some projections do not work with float -> wrong results
- // select <double> from int/float/double and else selects T
- typedef typename projections::detail::promote_to_double<CT>::type calc_t;
-
- typedef projections::parameters<calc_t> parameters_type;
- typedef projections::detail::base_v<calc_t, parameters_type> vprj_t;
-
-public:
- template <typename Params>
- proj_wrapper(Params const& params)
- : m_ptr(create(projections::dynamic_parameters<Params, calc_t>::apply(params)))
- {}
-
- vprj_t const& proj() const { return *m_ptr; }
- vprj_t & mutable_proj() { return *m_ptr; }
-
-private:
- static vprj_t* create(parameters_type const& pj_params)
- {
- vprj_t* result = projections::detail::create_new(pj_params);
-
- if (result == NULL)
- {
- if (pj_params.name.empty())
- {
- BOOST_THROW_EXCEPTION(projection_not_named_exception());
- }
- else
- {
- BOOST_THROW_EXCEPTION(projection_unknown_id_exception(pj_params.name));
- }
- }
-
- return result;
- }
-
- boost::shared_ptr<vprj_t> m_ptr;
-};
-
-template <typename StaticParameters, typename CT>
-class static_proj_wrapper_base
-{
- typedef typename projections::detail::promote_to_double<CT>::type calc_t;
-
- typedef projections::parameters<calc_t> parameters_type;
-
- typedef typename srs::par4::detail::pick_proj_tag
- <
- StaticParameters
- >::type proj_tag;
- typedef typename srs::par4::detail::pick_ellps
- <
- StaticParameters
- >::type ellps_type;
-
- typedef typename projections::detail::static_projection_type
- <
- proj_tag,
- typename geometry::tag
- <
- typename srs::par4::detail::ellps_traits
- <
- ellps_type
- >::model_type
- >::type,
- StaticParameters,
- calc_t,
- parameters_type
- >::type projection_type;
-
-public:
- projection_type const& proj() const { return m_proj; }
- projection_type & mutable_proj() { return m_proj; }
-
-protected:
- explicit static_proj_wrapper_base(StaticParameters const& s_params,
- bool use_defaults = true)
- : m_proj(get_parameters(s_params, "", use_defaults))
- {}
-
- static_proj_wrapper_base(StaticParameters const& s_params,
- srs::proj4 const& params,
- bool use_defaults = true)
- : m_proj(get_parameters(s_params, params.str, use_defaults))
- {}
-
-private:
- static parameters_type get_parameters(StaticParameters const& s_params,
- std::string const& params_str,
- bool use_defaults)
- {
- return projections::detail::pj_init_plus<calc_t>(s_params, params_str, use_defaults);
- }
-
- projection_type m_proj;
-};
-
-template <BOOST_GEOMETRY_PROJECTIONS_DETAIL_TYPENAME_PX, typename CT>
-class proj_wrapper<srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX>, CT>
- : public static_proj_wrapper_base<srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX>, CT>
-{
- typedef srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX>
- static_parameters_type;
- typedef static_proj_wrapper_base
- <
- static_parameters_type,
- CT
- > base_t;
-
-public:
- proj_wrapper()
- : base_t(static_parameters_type())
- {}
-
- proj_wrapper(static_parameters_type const& s_params)
- : base_t(s_params)
- {}
-
- proj_wrapper(srs::proj4 const& params)
- : base_t(static_parameters_type(), params)
- {}
-
- proj_wrapper(static_parameters_type const& s_params,
- srs::proj4 const& params)
- : base_t(s_params, params)
- {}
-};
-
-
-// projection class implements transparent forward/inverse projection interface
-template <typename Proj, typename CT>
-class projection
- : private proj_wrapper<Proj, CT>
-{
- typedef proj_wrapper<Proj, CT> base_t;
-
-public:
- projection()
- {}
-
- template <typename Params>
- explicit projection(Params const& params)
- : base_t(params)
- {}
-
- template <typename SParams, typename Params>
- projection(SParams const& s_params, Params const& params)
- : base_t(s_params, params)
- {}
-
- /// Forward projection, from Latitude-Longitude to Cartesian
- template <typename LL, typename XY>
- inline bool forward(LL const& ll, XY& xy) const
- {
- BOOST_MPL_ASSERT_MSG((projections::detail::same_tags<LL, XY>::value),
- NOT_SUPPORTED_COMBINATION_OF_GEOMETRIES,
- (LL, XY));
-
- concepts::check_concepts_and_equal_dimensions<LL const, XY>();
-
- return projections::detail::project_geometry
- <
- LL,
- projections::detail::forward_point_projection_policy
- >::apply(ll, xy, base_t::proj());
- }
-
- /// Inverse projection, from Cartesian to Latitude-Longitude
- template <typename XY, typename LL>
- inline bool inverse(XY const& xy, LL& ll) const
- {
- BOOST_MPL_ASSERT_MSG((projections::detail::same_tags<XY, LL>::value),
- NOT_SUPPORTED_COMBINATION_OF_GEOMETRIES,
- (XY, LL));
-
- concepts::check_concepts_and_equal_dimensions<XY const, LL>();
-
- return projections::detail::project_geometry
- <
- XY,
- projections::detail::inverse_point_projection_policy
- >::apply(xy, ll, base_t::proj());
- }
-};
-
-} // namespace projections
-
-
-namespace srs
-{
-
-
-/*!
- \brief Representation of projection
- \details Either dynamic or static projection representation
- \ingroup projection
- \tparam Proj default_dynamic or static projection parameters
- \tparam CT calculation type used internally
-*/
-template
-<
- typename Proj = srs::dynamic,
- typename CT = double
->
-class projection
-{
- BOOST_MPL_ASSERT_MSG((false),
- NOT_IMPLEMENTED_FOR_THIS_PROJECTION,
- (Proj));
-};
-
-template <typename CT>
-class projection<srs::dynamic, CT>
- : public projections::projection<srs::dynamic, CT>
-{
- typedef projections::projection<srs::dynamic, CT> base_t;
-
-public:
- /*!
- \ingroup projection
- \brief Initializes a projection as a string, using the format with + and =
- \details The projection can be initialized with a string (with the same format as the PROJ4 package) for
- convenient initialization from, for example, the command line
- \par Example
- <tt>+proj=labrd +ellps=intl +lon_0=46d26'13.95E +lat_0=18d54S +azi=18d54 +k_0=.9995 +x_0=400000 +y_0=800000</tt>
- for the Madagascar projection.
- \note Parameters are described in the group
- */
- template <typename Params>
- projection(Params const& params)
- : base_t(params)
- {}
-};
-
-template <BOOST_GEOMETRY_PROJECTIONS_DETAIL_TYPENAME_PX, typename CT>
-class projection<srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX>, CT>
- : public projections::projection<srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX>, CT>
-{
- typedef projections::projection<srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX>, CT> base_t;
-
-public:
- projection()
- {}
-
- projection(srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX> const& params)
- : base_t(params)
- {}
-
-#ifdef BOOST_GEOMETRY_SRS_ENABLE_STATIC_PROJECTION_HYBRID_INTERFACE
- projection(srs::proj4 const& params)
- : base_t(params)
- {}
-
- projection(srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX> const& s_params,
- srs::proj4 const& params)
- : base_t(s_params, params)
- {}
-#endif
-};
-
-} // namespace srs
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_SRS_PROJECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/code.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/code.hpp
deleted file mode 100644
index 852153d485b..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/code.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_CODE_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_CODE_HPP
-
-
-#include <algorithm>
-#include <string>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
- struct code_element
- {
- int code;
- std::string proj4_str;
- };
-
- struct code_element_less
- {
- inline bool operator()(code_element const& l, code_element const& r) const
- {
- return l.code < r.code;
- }
- };
-
- template<typename RandIt>
- inline RandIt binary_find_code_element(RandIt first, RandIt last, int code)
- {
- code_element_less comp;
- code_element value;
- value.code = code;
- first = std::lower_bound(first, last, value, code_element_less());
- return first != last && !comp(value, *first) ? first : last;
- }
-
-}
-#endif // DOXYGEN_NO_DETAIL
-
-
-}}} // namespace boost::geometry::projections
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/epsg.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/epsg.hpp
deleted file mode 100644
index 87f58b980d4..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/epsg.hpp
+++ /dev/null
@@ -1,4409 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_EPGS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_EPGS_HPP
-
-
-#include <boost/geometry/srs/projections/code.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
- inline std::string epsg_to_string(int code)
- {
- static const code_element arr[] = {
- {2000, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs"},
- {2001, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs"},
- {2002, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs"},
- {2003, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs"},
- {2004, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs"},
- {2005, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs"},
- {2006, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs"},
- {2007, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs"},
- {2008, "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2009, "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2010, "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2011, "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2012, "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2013, "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2014, "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2015, "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2016, "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2017, "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2018, "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2019, "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2020, "+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2021, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2022, "+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2023, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2024, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2025, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2026, "+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2027, "+proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs"},
- {2028, "+proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs"},
- {2029, "+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs"},
- {2030, "+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs"},
- {2031, "+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs"},
- {2032, "+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs"},
- {2033, "+proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs"},
- {2034, "+proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs"},
- {2035, "+proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs"},
- {2036, "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2037, "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2038, "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2039, "+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs"},
- {2040, "+proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs"},
- {2041, "+proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs"},
- {2042, "+proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs"},
- {2043, "+proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs"},
- {2044, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs"},
- {2045, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs"},
- //{2046, ""},
- //{2047, ""},
- //{2048, ""},
- //{2049, ""},
- //{2050, ""},
- //{2051, ""},
- //{2052, ""},
- //{2053, ""},
- //{2054, ""},
- //{2055, ""},
- {2056, "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs"},
- {2057, "+proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs"},
- {2058, "+proj=utm +zone=38 +ellps=intl +units=m +no_defs"},
- {2059, "+proj=utm +zone=39 +ellps=intl +units=m +no_defs"},
- {2060, "+proj=utm +zone=40 +ellps=intl +units=m +no_defs"},
- {2061, "+proj=utm +zone=41 +ellps=intl +units=m +no_defs"},
- {2062, "+proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs"},
- {2063, "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs"},
- {2064, "+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs"},
- {2065, "+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {2066, "+proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs"},
- {2067, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs"},
- {2068, "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2069, "+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2070, "+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2071, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2072, "+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2073, "+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2074, "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2075, "+proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2076, "+proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2077, "+proj=utm +zone=32 +ellps=intl +units=m +no_defs"},
- {2078, "+proj=utm +zone=33 +ellps=intl +units=m +no_defs"},
- {2079, "+proj=utm +zone=34 +ellps=intl +units=m +no_defs"},
- {2080, "+proj=utm +zone=35 +ellps=intl +units=m +no_defs"},
- {2081, "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2082, "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs"},
- {2083, "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2084, "+proj=utm +zone=19 +south +ellps=intl +units=m +no_defs"},
- {2085, "+proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {2086, "+proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {2087, "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2088, "+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {2089, "+proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2090, "+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2091, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs"},
- {2092, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs"},
- {2093, "+proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs"},
- {2094, "+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {2095, "+proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs"},
- {2096, "+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs"},
- {2097, "+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs"},
- {2098, "+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs"},
- {2099, "+proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs"},
- {2100, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs"},
- {2101, "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs"},
- {2102, "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs"},
- {2103, "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs"},
- {2104, "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs"},
- {2105, "+proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2106, "+proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2107, "+proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2108, "+proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2109, "+proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2110, "+proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2111, "+proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2112, "+proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2113, "+proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2114, "+proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2115, "+proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2116, "+proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2117, "+proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2118, "+proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2119, "+proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2120, "+proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2121, "+proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2122, "+proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2123, "+proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2124, "+proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2125, "+proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2126, "+proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2127, "+proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2128, "+proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2129, "+proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2130, "+proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2131, "+proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2132, "+proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2133, "+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2134, "+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2135, "+proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2136, "+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs"},
- {2137, "+proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs"},
- {2138, "+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {2139, "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2140, "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2141, "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2142, "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2143, "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2144, "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2145, "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2146, "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2147, "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2148, "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2149, "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2150, "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2151, "+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2152, "+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2153, "+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2154, "+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2155, "+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {2156, "+proj=utm +zone=59 +south +ellps=GRS80 +units=m +no_defs"},
- {2157, "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2158, "+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2159, "+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs"},
- {2160, "+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs"},
- {2161, "+proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs"},
- {2162, "+proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs"},
- {2163, "+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs"},
- {2164, "+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs"},
- {2165, "+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs"},
- {2166, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs"},
- {2167, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs"},
- {2168, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs"},
- {2169, "+proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs"},
- {2170, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {2171, "+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {2172, "+proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {2173, "+proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {2174, "+proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {2175, "+proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {2176, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2177, "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2178, "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2179, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2180, "+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs"},
- {2188, "+proj=utm +zone=25 +ellps=intl +units=m +no_defs"},
- {2189, "+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs"},
- {2190, "+proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs"},
- {2191, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs"},
- {2192, "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +units=m +no_defs"},
- {2193, "+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2194, "+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {2195, "+proj=utm +zone=2 +south +ellps=GRS80 +units=m +no_defs"},
- {2196, "+proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2197, "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2198, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2199, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2200, "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs"},
- {2201, "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2202, "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2203, "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2204, "+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {2205, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {2206, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2207, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2208, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2209, "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2210, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2211, "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2212, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2213, "+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2214, "+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs"},
- {2215, "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs"},
- {2216, "+proj=utm +zone=22 +ellps=intl +units=m +no_defs"},
- {2217, "+proj=utm +zone=23 +ellps=intl +units=m +no_defs"},
- //{2218, ""},
- {2219, "+proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs"},
- {2220, "+proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs"},
- //{2221, ""},
- {2222, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2223, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2224, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2225, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2226, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2227, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2228, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2229, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2230, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2231, "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2232, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2233, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2234, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2235, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2236, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2237, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2238, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2239, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2240, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2241, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2242, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2243, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2244, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2245, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2246, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2247, "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2248, "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2249, "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2250, "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2251, "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2252, "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2253, "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2254, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2255, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2256, "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2257, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2258, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2259, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2260, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2261, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2262, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2263, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2264, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2265, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2266, "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2267, "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2268, "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2269, "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2270, "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2271, "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2272, "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2273, "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2274, "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2275, "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2276, "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2277, "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2278, "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2279, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2280, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2281, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2282, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2283, "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2284, "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2285, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2286, "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2287, "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2288, "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2289, "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2290, "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs"},
- {2291, "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs"},
- {2292, "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2294, "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs"},
- {2295, "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs"},
- //{2296, ""},
- //{2297, ""},
- //{2298, ""},
- //{2299, ""},
- //{2300, ""},
- //{2301, ""},
- //{2302, ""},
- //{2303, ""},
- //{2304, ""},
- //{2305, ""},
- //{2306, ""},
- //{2307, ""},
- {2308, "+proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m +no_defs"},
- {2309, "+proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {2310, "+proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {2311, "+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {2312, "+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs"},
- {2313, "+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs"},
- {2314, "+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs"},
- {2315, "+proj=utm +zone=19 +south +ellps=intl +units=m +no_defs"},
- {2316, "+proj=utm +zone=20 +south +ellps=intl +units=m +no_defs"},
- {2317, "+proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs"},
- {2318, "+proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2319, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2320, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2321, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2322, "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2323, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2324, "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2325, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2326, "+proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs"},
- {2327, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2328, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2329, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2330, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2331, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2332, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2333, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2334, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2335, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2336, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2337, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2338, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2339, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2340, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2341, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2342, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2343, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2344, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2345, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2346, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2347, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2348, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2349, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2350, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2351, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2352, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2353, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2354, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2355, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2356, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2357, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2358, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2359, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2360, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2361, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2362, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2363, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2364, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2365, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2366, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2367, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2368, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2369, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2370, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2371, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2372, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2373, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2374, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2375, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2376, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2377, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2378, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2379, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2380, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2381, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2382, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2383, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2384, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2385, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2386, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2387, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2388, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2389, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2390, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs"},
- {2391, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2392, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2393, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2394, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {2395, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs"},
- {2396, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs"},
- {2397, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs"},
- {2398, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs"},
- {2399, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs"},
- {2400, "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {2401, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2402, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2403, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2404, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2405, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2406, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2407, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2408, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2409, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2410, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2411, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2412, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2413, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2414, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2415, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2416, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2417, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2418, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2419, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2420, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2421, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2422, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2423, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2424, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2425, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2426, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2427, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2428, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2429, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2430, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2431, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2432, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2433, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2434, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2435, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2436, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2437, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2438, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2439, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2440, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2441, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2442, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2443, "+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2444, "+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2445, "+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2446, "+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2447, "+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2448, "+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2449, "+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2450, "+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2451, "+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2452, "+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2453, "+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2454, "+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2455, "+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2456, "+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2457, "+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2458, "+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2459, "+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2460, "+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2461, "+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2462, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2463, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2464, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2465, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2466, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2467, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2468, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2469, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2470, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2471, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2472, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2473, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2474, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2475, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2476, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2477, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2478, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2479, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2480, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2481, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2482, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2483, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2484, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2485, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2486, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2487, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2488, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2489, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2490, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2491, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2492, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2493, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2494, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2495, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2496, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2497, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2498, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2499, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2500, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2501, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2502, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2503, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2504, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2505, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2506, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2507, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2508, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2509, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2510, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2511, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2512, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2513, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2514, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2515, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2516, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2517, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2518, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2519, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2520, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2521, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2522, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2523, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2524, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2525, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2526, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2527, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2528, "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2529, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2530, "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2531, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2532, "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2533, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2534, "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2535, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2536, "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2537, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2538, "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2539, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2540, "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2541, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2542, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2543, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2544, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2545, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2546, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2547, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2548, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2549, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2550, "+proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs"},
- {2551, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2552, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2553, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2554, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2555, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2556, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2557, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2558, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2559, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2560, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2561, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2562, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2563, "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2564, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2565, "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2566, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2567, "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2568, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2569, "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2570, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2571, "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2572, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2573, "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2574, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2575, "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2576, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2577, "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2578, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2579, "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2580, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2581, "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2582, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2583, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2584, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2585, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2586, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2587, "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2588, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2589, "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2590, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2591, "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2592, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2593, "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2594, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2595, "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2596, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2597, "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2598, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2599, "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2600, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2601, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2602, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2603, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2604, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2605, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2606, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2607, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2608, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2609, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2610, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2611, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2612, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2613, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2614, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2615, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2616, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2617, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2618, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2619, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2620, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2621, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2622, "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2623, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2624, "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2625, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2626, "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2627, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2628, "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2629, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2630, "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2631, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2632, "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2633, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2634, "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2635, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2636, "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2637, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2638, "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2639, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2640, "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2641, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2642, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2643, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2644, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2645, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2646, "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2647, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2648, "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2649, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2650, "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2651, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2652, "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2653, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2654, "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2655, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2656, "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2657, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2658, "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2659, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2660, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2661, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2662, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2663, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2664, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2665, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2666, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2667, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2668, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2669, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2670, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2671, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2672, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2673, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2674, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2675, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2676, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2677, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2678, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2679, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2680, "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2681, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2682, "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2683, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2684, "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2685, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2686, "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2687, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2688, "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2689, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2690, "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2691, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2692, "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2693, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2694, "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2695, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2696, "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2697, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2698, "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2699, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2700, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2701, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2702, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2703, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2704, "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2705, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2706, "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2707, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2708, "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2709, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2710, "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2711, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2712, "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2713, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2714, "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2715, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2716, "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2717, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2718, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2719, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2720, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2721, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2722, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2723, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2724, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2725, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2726, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2727, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2728, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2729, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2730, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2731, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2732, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2733, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2734, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2735, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2736, "+proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_defs"},
- {2737, "+proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_defs"},
- {2738, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2739, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2740, "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2741, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2742, "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2743, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2744, "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2745, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2746, "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2747, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2748, "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2749, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2750, "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2751, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2752, "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2753, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2754, "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2755, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2756, "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2757, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2758, "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2759, "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2760, "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2761, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2762, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2763, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2764, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2765, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs"},
- {2766, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {2767, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {2768, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {2769, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {2770, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {2771, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {2772, "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs"},
- {2773, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs"},
- {2774, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs"},
- {2775, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m +no_defs"},
- {2776, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2777, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2778, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2779, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2780, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2781, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2782, "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2783, "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2784, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2785, "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2786, "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2787, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2788, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2789, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2790, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2791, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2792, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m +no_defs"},
- {2793, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m +no_defs"},
- {2794, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs"},
- {2795, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2796, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2797, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs"},
- {2798, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2799, "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {2800, "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2801, "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2802, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2803, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2804, "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2805, "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m +no_defs"},
- {2806, "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2807, "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2808, "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2809, "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2810, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs"},
- {2811, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs"},
- {2812, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs"},
- {2813, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2814, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2815, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2816, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2817, "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2818, "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2819, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2820, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m +no_defs"},
- {2821, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs"},
- {2822, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs"},
- {2823, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2824, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2825, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2826, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2827, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2828, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2829, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2830, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2831, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2832, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2833, "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2834, "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2835, "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2836, "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2837, "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2838, "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2839, "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2840, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2841, "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2842, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2843, "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2844, "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs"},
- {2845, "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs"},
- {2846, "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs"},
- {2847, "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs"},
- {2848, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs"},
- {2849, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs"},
- {2850, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs"},
- {2851, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs"},
- {2852, "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2853, "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs"},
- {2854, "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs"},
- {2855, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2856, "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2857, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2858, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2859, "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2860, "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2861, "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2862, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2863, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m +no_defs"},
- {2864, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2865, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs"},
- {2866, "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m +no_defs"},
- {2867, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2868, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2869, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2870, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2871, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2872, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2873, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2874, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2875, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2876, "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2877, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2878, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2879, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2880, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2881, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2882, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2883, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2884, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2885, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2886, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2887, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2888, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2889, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2890, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2891, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2892, "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2893, "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2894, "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2895, "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2896, "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2897, "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2898, "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2899, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2900, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2901, "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2902, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2903, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2904, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2905, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2906, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2907, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2908, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2909, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2910, "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2911, "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2912, "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2913, "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2914, "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2915, "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2916, "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2917, "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2918, "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2919, "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2920, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2921, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2922, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2923, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2924, "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2925, "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2926, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2927, "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2928, "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2929, "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2930, "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2931, "+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs"},
- {2932, "+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs"},
- {2933, "+proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs"},
- {2934, "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs"},
- {2935, "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2936, "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2937, "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2938, "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2939, "+proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2940, "+proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2941, "+proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {2942, "+proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs"},
- {2943, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs"},
- {2944, "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2945, "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2946, "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2947, "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2948, "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2949, "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2950, "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2951, "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2952, "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2953, "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +units=m +no_defs"},
- {2954, "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +units=m +no_defs"},
- {2955, "+proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs"},
- {2956, "+proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs"},
- {2957, "+proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs"},
- {2958, "+proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs"},
- {2959, "+proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs"},
- {2960, "+proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs"},
- {2961, "+proj=utm +zone=20 +ellps=GRS80 +units=m +no_defs"},
- {2962, "+proj=utm +zone=21 +ellps=GRS80 +units=m +no_defs"},
- //{2963, ""},
- {2964, "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {2965, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2966, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {2967, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2968, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {2969, "+proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs"},
- {2970, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs"},
- {2971, "+proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs"},
- {2972, "+proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs"},
- {2973, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs"},
- {2975, "+proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2976, "+proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs"},
- {2977, "+proj=utm +zone=5 +south +ellps=intl +units=m +no_defs"},
- {2978, "+proj=utm +zone=7 +south +ellps=intl +units=m +no_defs"},
- {2979, "+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs"},
- {2980, "+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs"},
- {2981, "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs"},
- {2982, "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs"},
- {2983, "+proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs"},
- {2984, "+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- //{2985, ""},
- //{2986, ""},
- {2987, "+proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs"},
- {2988, "+proj=utm +zone=1 +south +ellps=intl +units=m +no_defs"},
- {2989, "+proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {2990, "+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m +no_defs"},
- {2991, "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {2992, "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs"},
- {2993, "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {2994, "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {2995, "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs"},
- {2996, "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs"},
- {2997, "+proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs"},
- {2998, "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs"},
- {2999, "+proj=utm +zone=38 +south +ellps=intl +units=m +no_defs"},
- {3000, "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs"},
- {3001, "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs"},
- {3002, "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs"},
- {3003, "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {3004, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {3005, "+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3006, "+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3007, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3008, "+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3009, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3010, "+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3011, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3012, "+proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3013, "+proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3014, "+proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3015, "+proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3016, "+proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3017, "+proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3018, "+proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3019, "+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3020, "+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3021, "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3022, "+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3023, "+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3024, "+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3025, "+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3026, "+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3027, "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3028, "+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3029, "+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3030, "+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3031, "+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3032, "+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3033, "+proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3034, "+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +units=m +no_defs"},
- {3035, "+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs"},
- {3036, "+proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs"},
- {3037, "+proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs"},
- {3038, "+proj=utm +zone=26 +ellps=GRS80 +units=m +no_defs"},
- {3039, "+proj=utm +zone=27 +ellps=GRS80 +units=m +no_defs"},
- {3040, "+proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs"},
- {3041, "+proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs"},
- {3042, "+proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs"},
- {3043, "+proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs"},
- {3044, "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs"},
- {3045, "+proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs"},
- {3046, "+proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs"},
- {3047, "+proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs"},
- {3048, "+proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs"},
- {3049, "+proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs"},
- {3050, "+proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs"},
- {3051, "+proj=utm +zone=39 +ellps=GRS80 +units=m +no_defs"},
- //{3052, ""},
- //{3053, ""},
- {3054, "+proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs"},
- {3055, "+proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs"},
- {3056, "+proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs"},
- {3057, "+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3058, "+proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +units=m +no_defs"},
- {3059, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3060, "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs"},
- {3061, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs"},
- {3062, "+proj=utm +zone=26 +ellps=intl +units=m +no_defs"},
- {3063, "+proj=utm +zone=26 +ellps=intl +units=m +no_defs"},
- {3064, "+proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3065, "+proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3066, "+proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +units=m +no_defs"},
- {3067, "+proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs"},
- {3068, "+proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +datum=potsdam +units=m +no_defs"},
- {3069, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {3070, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3071, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +units=m +no_defs"},
- {3072, "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3073, "+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3074, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3075, "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3076, "+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3077, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3078, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3079, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +units=m +no_defs"},
- {3080, "+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048 +no_defs"},
- {3081, "+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3082, "+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3083, "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3084, "+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs"},
- {3085, "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs"},
- {3086, "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3087, "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3088, "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3089, "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3090, "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs"},
- {3091, "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3092, "+proj=utm +zone=51 +ellps=bessel +units=m +no_defs"},
- {3093, "+proj=utm +zone=52 +ellps=bessel +units=m +no_defs"},
- {3094, "+proj=utm +zone=53 +ellps=bessel +units=m +no_defs"},
- {3095, "+proj=utm +zone=54 +ellps=bessel +units=m +no_defs"},
- {3096, "+proj=utm +zone=55 +ellps=bessel +units=m +no_defs"},
- {3097, "+proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3098, "+proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3099, "+proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3100, "+proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3101, "+proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3102, "+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3103, "+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs"},
- {3104, "+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs"},
- {3105, "+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs"},
- {3106, "+proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs"},
- {3107, "+proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3108, "+proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +units=m +no_defs"},
- {3109, "+proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +units=m +no_defs"},
- {3110, "+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +units=m +no_defs"},
- {3111, "+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3112, "+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3113, "+proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3114, "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3115, "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3116, "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3117, "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3118, "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3119, "+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs"},
- {3120, "+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {3121, "+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs"},
- {3122, "+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs"},
- {3123, "+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs"},
- {3124, "+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs"},
- {3125, "+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs"},
- {3126, "+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3127, "+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3128, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3129, "+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3130, "+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3131, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3132, "+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3133, "+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3134, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3135, "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3136, "+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3137, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3138, "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- //{3139, ""},
- {3140, "+proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168 +no_defs"},
- {3141, "+proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs"},
- {3142, "+proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs"},
- {3143, "+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs"},
- //{3144, ""},
- //{3145, ""},
- {3146, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {3147, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {3148, "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs"},
- {3149, "+proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs"},
- {3150, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {3151, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {3152, "+proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3153, "+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3154, "+proj=utm +zone=7 +ellps=GRS80 +units=m +no_defs"},
- {3155, "+proj=utm +zone=8 +ellps=GRS80 +units=m +no_defs"},
- {3156, "+proj=utm +zone=9 +ellps=GRS80 +units=m +no_defs"},
- {3157, "+proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs"},
- {3158, "+proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs"},
- {3159, "+proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs"},
- {3160, "+proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs"},
- {3161, "+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3162, "+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +units=m +no_defs"},
- {3163, "+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3164, "+proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs"},
- {3165, "+proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +units=m +no_defs"},
- {3166, "+proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +units=m +no_defs"},
- {3167, "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs"},
- {3168, "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs"},
- {3169, "+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3170, "+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3171, "+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3172, "+proj=utm +zone=59 +south +ellps=intl +units=m +no_defs"},
- //{3173, ""},
- {3174, "+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3175, "+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3176, "+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs"},
- {3177, "+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3178, "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3179, "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3180, "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3181, "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3182, "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3183, "+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3184, "+proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3185, "+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3186, "+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3187, "+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3188, "+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3189, "+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3190, "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3191, "+proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3192, "+proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3193, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3194, "+proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3195, "+proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3196, "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3197, "+proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3198, "+proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3199, "+proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3200, "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs"},
- {3201, "+proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3202, "+proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3203, "+proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs"},
- {3204, "+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3205, "+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3206, "+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3207, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3208, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3209, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3210, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3211, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3212, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3213, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3214, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3215, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3216, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3217, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3218, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3219, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3220, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3221, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3222, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3223, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3224, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3225, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3226, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3227, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3228, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3229, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3230, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3231, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3232, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3233, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3234, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3235, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3236, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3237, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3238, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3239, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3240, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3241, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3242, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3243, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3244, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3245, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3246, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3247, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3248, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3249, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3250, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3251, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3252, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3253, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3254, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3255, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3256, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3257, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3258, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3259, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3260, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3261, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3262, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3263, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3264, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3265, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3266, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3267, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3268, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3269, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3270, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3271, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3272, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3273, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3274, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3275, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3276, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3277, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3278, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3279, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3280, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3281, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3282, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3283, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3284, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3285, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3286, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3287, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3288, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3289, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3290, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3291, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3292, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3293, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3294, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- //{3295, ""},
- {3296, "+proj=utm +zone=5 +south +ellps=GRS80 +units=m +no_defs"},
- {3297, "+proj=utm +zone=6 +south +ellps=GRS80 +units=m +no_defs"},
- {3298, "+proj=utm +zone=7 +south +ellps=GRS80 +units=m +no_defs"},
- {3299, "+proj=utm +zone=8 +south +ellps=GRS80 +units=m +no_defs"},
- {3300, "+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs"},
- {3301, "+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3302, "+proj=utm +zone=7 +south +ellps=intl +units=m +no_defs"},
- {3303, "+proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs"},
- {3304, "+proj=utm +zone=6 +south +ellps=intl +units=m +no_defs"},
- {3305, "+proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs"},
- {3306, "+proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs"},
- {3307, "+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs"},
- {3308, "+proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3309, "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {3310, "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3311, "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +units=m +no_defs"},
- {3312, "+proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs"},
- {3313, "+proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs"},
- {3314, "+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {3315, "+proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {3316, "+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {3317, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {3318, "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {3319, "+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {3320, "+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {3321, "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {3322, "+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {3323, "+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {3324, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {3325, "+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {3326, "+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {3327, "+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {3328, "+proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {3329, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {3330, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {3331, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {3332, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {3333, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {3334, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {3335, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs"},
- {3336, "+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs"},
- {3337, "+proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs"},
- {3338, "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3339, "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs"},
- {3340, "+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs"},
- {3341, "+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs"},
- {3342, "+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs"},
- {3343, "+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3344, "+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3345, "+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3346, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3347, "+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3348, "+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs"},
- {3349, "+proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3350, "+proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {3351, "+proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {3352, "+proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {3353, "+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs"},
- {3354, "+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs"},
- {3355, "+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs"},
- {3356, "+proj=utm +zone=17 +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +units=m +no_defs"},
- {3357, "+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs"},
- {3358, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3359, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {3360, "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3361, "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs"},
- {3362, "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3363, "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3364, "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3365, "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3366, "+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs"},
- {3367, "+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs"},
- {3368, "+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs"},
- {3369, "+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs"},
- {3370, "+proj=utm +zone=59 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {3371, "+proj=utm +zone=60 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {3372, "+proj=utm +zone=59 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3373, "+proj=utm +zone=60 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3374, "+proj=utm +zone=29 +ellps=intl +units=m +no_defs"},
- {3375, "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3376, "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3377, "+proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs"},
- {3378, "+proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs"},
- {3379, "+proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs"},
- {3380, "+proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs"},
- {3381, "+proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs"},
- {3382, "+proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs"},
- {3383, "+proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3384, "+proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs"},
- {3385, "+proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs"},
- {3386, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {3387, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {3388, "+proj=merc +lon_0=51 +k=1 +x_0=0 +y_0=0 +ellps=krass +units=m +no_defs"},
- {3389, "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {3390, "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {3391, "+proj=utm +zone=37 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs"},
- {3392, "+proj=utm +zone=38 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs"},
- {3393, "+proj=utm +zone=39 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs"},
- {3394, "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs"},
- {3395, "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3396, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3397, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3398, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3399, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {3400, "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3401, "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3402, "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3403, "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3404, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3405, "+proj=utm +zone=48 +ellps=WGS84 +units=m +no_defs"},
- {3406, "+proj=utm +zone=49 +ellps=WGS84 +units=m +no_defs"},
- {3407, "+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs"},
- {3408, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs"},
- {3409, "+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs"},
- {3410, "+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs"},
- {3411, "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs"},
- {3412, "+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs"},
- {3413, "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3414, "+proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs"},
- {3415, "+proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {3416, "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs"},
- {3417, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3418, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3419, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3420, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3421, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3422, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3423, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3424, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3425, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3426, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3427, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3428, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3429, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3430, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3431, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3432, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3433, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3434, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3435, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3436, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3437, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3438, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3439, "+proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs"},
- {3440, "+proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs"},
- {3441, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3442, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3443, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3444, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3445, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3446, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3447, "+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +units=m +no_defs"},
- {3448, "+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3449, "+proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3450, "+proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3451, "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3452, "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3453, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3454, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3455, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3456, "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3457, "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3458, "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3459, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3460, "+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs"},
- {3461, "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs"},
- {3462, "+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs"},
- {3463, "+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3464, "+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3465, "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3466, "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3467, "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3468, "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3469, "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3470, "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3471, "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3472, "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3473, "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3474, "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3475, "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3476, "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3477, "+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3478, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3479, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3480, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3481, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3482, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3483, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3484, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3485, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3486, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3487, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3488, "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3489, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3490, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3491, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3492, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3493, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3494, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3495, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3496, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3497, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3498, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3499, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3500, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3501, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3502, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3503, "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3504, "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3505, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3506, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3507, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3508, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3509, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3510, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3511, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3512, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3513, "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3514, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3515, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3516, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3517, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3518, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3519, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3520, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3521, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3522, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3523, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3524, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3525, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3526, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3527, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3528, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3529, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3530, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3531, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3532, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3533, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3534, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3535, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3536, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3537, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3538, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3539, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3540, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3541, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3542, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3543, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3544, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3545, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3546, "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3547, "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3548, "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3549, "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3550, "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3551, "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3552, "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3553, "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3554, "+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3555, "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3556, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3557, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3558, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3559, "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3560, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3561, "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs"},
- {3562, "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs"},
- {3563, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs"},
- {3564, "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs"},
- {3565, "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs"},
- {3566, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3567, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3568, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3569, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3570, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3571, "+proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3572, "+proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3573, "+proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3574, "+proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3575, "+proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3576, "+proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3577, "+proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3578, "+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3579, "+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {3580, "+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3581, "+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3582, "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3583, "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3584, "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3585, "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3586, "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3587, "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3588, "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3589, "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3590, "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3591, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3592, "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3593, "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3594, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3595, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3596, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3597, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3598, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3599, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3600, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3601, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3602, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3603, "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3604, "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3605, "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3606, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3607, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3608, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3609, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3610, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3611, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3612, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3613, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3614, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3615, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3616, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3617, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3618, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3619, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3620, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3621, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3622, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3623, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3624, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3625, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3626, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3627, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3628, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3629, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3630, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3631, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3632, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3633, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3634, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3635, "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3636, "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3637, "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3638, "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3639, "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3640, "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3641, "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3642, "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3643, "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3644, "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3645, "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3646, "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3647, "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3648, "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3649, "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3650, "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3651, "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3652, "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3653, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3654, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3655, "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3656, "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3657, "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3658, "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3659, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3660, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3661, "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3662, "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3663, "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3664, "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3665, "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3666, "+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3667, "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3668, "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3669, "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3670, "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3671, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3672, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3673, "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3674, "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3675, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3676, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3677, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3678, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3679, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3680, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3681, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3682, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs"},
- {3683, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3684, "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3685, "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3686, "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3687, "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3688, "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3689, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3690, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3691, "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3692, "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3693, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3694, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3695, "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3696, "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3697, "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3698, "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3699, "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3700, "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3701, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3702, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3703, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3704, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3705, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3706, "+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3707, "+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3708, "+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3709, "+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3710, "+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3711, "+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3712, "+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3713, "+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3714, "+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3715, "+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3716, "+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3717, "+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3718, "+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3719, "+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3720, "+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3721, "+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3722, "+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3723, "+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3724, "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3725, "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3726, "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3727, "+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m +no_defs"},
- {3728, "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3729, "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3730, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3731, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3732, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3733, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3734, "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3735, "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3736, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3737, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3738, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3739, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3740, "+proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs"},
- {3741, "+proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs"},
- {3742, "+proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs"},
- {3743, "+proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs"},
- {3744, "+proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs"},
- {3745, "+proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs"},
- {3746, "+proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs"},
- {3747, "+proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs"},
- {3748, "+proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs"},
- {3749, "+proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs"},
- {3750, "+proj=utm +zone=4 +ellps=GRS80 +units=m +no_defs"},
- {3751, "+proj=utm +zone=5 +ellps=GRS80 +units=m +no_defs"},
- {3752, "+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3753, "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3754, "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3755, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3756, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3757, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3758, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3759, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {3760, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {3761, "+proj=utm +zone=22 +ellps=GRS80 +units=m +no_defs"},
- {3762, "+proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {3763, "+proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3764, "+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3765, "+proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3766, "+proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3767, "+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3768, "+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3769, "+proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs"},
- {3770, "+proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3771, "+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {3772, "+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {3773, "+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {3774, "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {3775, "+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3776, "+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3777, "+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3778, "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3779, "+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3780, "+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3781, "+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3782, "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3783, "+proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3784, "+proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs"},
- {3785, "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3786, "+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs"},
- {3787, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {3788, "+proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3789, "+proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3790, "+proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3791, "+proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3793, "+proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3794, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3795, "+proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {3796, "+proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {3797, "+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {3798, "+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3799, "+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {3800, "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {3801, "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {3802, "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- //{3812, ""},
- //{3814, ""},
- //{3815, ""},
- //{3816, ""},
- {3819, "+proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,2.9383,-0.853,-0.7029504596901044 +no_defs"},
- {3821, "+proj=longlat +ellps=aust_SA +no_defs"},
- //{3822, ""},
- {3823, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {3824, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{3825, ""},
- //{3826, ""},
- //{3827, ""},
- //{3828, ""},
- //{3829, ""},
- //{3832, ""},
- //{3833, ""},
- //{3834, ""},
- //{3835, ""},
- //{3836, ""},
- //{3837, ""},
- //{3838, ""},
- //{3839, ""},
- //{3840, ""},
- //{3841, ""},
- //{3842, ""},
- //{3843, ""},
- //{3844, ""},
- //{3845, ""},
- //{3846, ""},
- //{3847, ""},
- //{3848, ""},
- //{3849, ""},
- //{3850, ""},
- {3920, "+proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs"},
- {3942, "+proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3943, "+proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3944, "+proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3945, "+proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3946, "+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3947, "+proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3948, "+proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3949, "+proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3950, "+proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {3991, "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {3992, "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- //{3993, ""},
- //{3994, ""},
- //{3995, ""},
- //{3996, ""},
- //{3997, ""},
- {4001, "+proj=longlat +ellps=airy +no_defs"},
- {4002, "+proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs"},
- {4003, "+proj=longlat +ellps=aust_SA +no_defs"},
- {4004, "+proj=longlat +ellps=bessel +no_defs"},
- {4005, "+proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs"},
- {4006, "+proj=longlat +ellps=bess_nam +no_defs"},
- {4007, "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs"},
- {4008, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4009, "+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs"},
- {4010, "+proj=longlat +a=6378300.789 +b=6356566.435 +no_defs"},
- {4011, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4012, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4013, "+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs"},
- {4014, "+proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs"},
- {4015, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs"},
- {4016, "+proj=longlat +ellps=evrstSS +no_defs"},
- {4018, "+proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs"},
- {4019, "+proj=longlat +ellps=GRS80 +no_defs"},
- {4020, "+proj=longlat +ellps=helmert +no_defs"},
- {4021, "+proj=longlat +a=6378160 +b=6356774.50408554 +no_defs"},
- {4022, "+proj=longlat +ellps=intl +no_defs"},
- {4024, "+proj=longlat +ellps=krass +no_defs"},
- {4025, "+proj=longlat +ellps=WGS66 +no_defs"},
- {4027, "+proj=longlat +a=6376523 +b=6355862.933255573 +no_defs"},
- {4028, "+proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs"},
- {4029, "+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs"},
- {4030, "+proj=longlat +ellps=WGS84 +no_defs"},
- {4031, "+proj=longlat +ellps=WGS84 +no_defs"},
- {4032, "+proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs"},
- {4033, "+proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs"},
- {4034, "+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs"},
- {4035, "+proj=longlat +a=6371000 +b=6371000 +no_defs"},
- {4036, "+proj=longlat +ellps=GRS67 +no_defs"},
- {4041, "+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs"},
- {4042, "+proj=longlat +a=6377299.36559538 +b=6356098.359005157 +no_defs"},
- {4043, "+proj=longlat +ellps=WGS72 +no_defs"},
- {4044, "+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs"},
- {4045, "+proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs"},
- {4047, "+proj=longlat +a=6371007 +b=6371007 +no_defs"},
- {4052, "+proj=longlat +a=6370997 +b=6370997 +no_defs"},
- {4053, "+proj=longlat +a=6371228 +b=6371228 +no_defs"},
- {4054, "+proj=longlat +a=6378273 +b=6356889.449 +no_defs"},
- {4055, "+proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4120, "+proj=longlat +ellps=bessel +no_defs"},
- {4121, "+proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs"},
- {4122, "+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs"},
- {4123, "+proj=longlat +ellps=intl +no_defs"},
- {4124, "+proj=longlat +ellps=bessel +no_defs"},
- {4125, "+proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs"},
- {4126, "+proj=longlat +ellps=GRS80 +no_defs"},
- {4127, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4128, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4129, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4130, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs"},
- {4131, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs"},
- {4132, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4133, "+proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs"},
- {4134, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4135, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4136, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4137, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4138, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4139, "+proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs"},
- {4140, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4141, "+proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs"},
- {4142, "+proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs"},
- {4143, "+proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs"},
- {4144, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs"},
- {4145, "+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs"},
- {4146, "+proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs"},
- {4147, "+proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs"},
- {4148, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4149, "+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs"},
- {4150, "+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs"},
- {4151, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4152, "+proj=longlat +ellps=GRS80 +no_defs"},
- {4153, "+proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs"},
- {4154, "+proj=longlat +ellps=intl +no_defs"},
- {4155, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs"},
- {4156, "+proj=longlat +ellps=bessel +no_defs"},
- {4157, "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs"},
- {4158, "+proj=longlat +ellps=intl +no_defs"},
- {4159, "+proj=longlat +ellps=intl +no_defs"},
- {4160, "+proj=longlat +ellps=intl +no_defs"},
- {4161, "+proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs"},
- {4162, "+proj=longlat +ellps=bessel +no_defs"},
- {4163, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4164, "+proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs"},
- {4165, "+proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs"},
- {4166, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4167, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4168, "+proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs"},
- {4169, "+proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs"},
- {4170, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4171, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4172, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4173, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4174, "+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs"},
- {4175, "+proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs"},
- {4176, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4178, "+proj=longlat +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +no_defs"},
- {4179, "+proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs"},
- {4180, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4181, "+proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs"},
- {4182, "+proj=longlat +ellps=intl +no_defs"},
- {4183, "+proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs"},
- {4184, "+proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs"},
- {4185, "+proj=longlat +ellps=intl +no_defs"},
- {4188, "+proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs"},
- {4189, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4190, "+proj=longlat +ellps=GRS80 +no_defs"},
- {4191, "+proj=longlat +ellps=krass +no_defs"},
- {4192, "+proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs"},
- {4193, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs"},
- {4194, "+proj=longlat +ellps=intl +no_defs"},
- {4195, "+proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs"},
- {4196, "+proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs"},
- {4197, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4198, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4199, "+proj=longlat +ellps=intl +no_defs"},
- {4200, "+proj=longlat +ellps=krass +no_defs"},
- {4201, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4202, "+proj=longlat +ellps=aust_SA +no_defs"},
- {4203, "+proj=longlat +ellps=aust_SA +no_defs"},
- {4204, "+proj=longlat +ellps=intl +no_defs"},
- {4205, "+proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs"},
- {4206, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4207, "+proj=longlat +ellps=intl +no_defs"},
- {4208, "+proj=longlat +ellps=intl +no_defs"},
- {4209, "+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs"},
- {4210, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4211, "+proj=longlat +ellps=bessel +no_defs"},
- {4212, "+proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs"},
- {4213, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs"},
- {4214, "+proj=longlat +ellps=krass +no_defs"},
- {4215, "+proj=longlat +ellps=intl +no_defs"},
- {4216, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4218, "+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs"},
- {4219, "+proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs"},
- {4220, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4221, "+proj=longlat +ellps=intl +no_defs"},
- {4222, "+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs"},
- {4223, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4224, "+proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs"},
- {4225, "+proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs"},
- {4226, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4227, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4228, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4229, "+proj=longlat +ellps=helmert +no_defs"},
- {4230, "+proj=longlat +ellps=intl +no_defs"},
- {4231, "+proj=longlat +ellps=intl +no_defs"},
- {4232, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4233, "+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs"},
- {4234, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4235, "+proj=longlat +ellps=intl +no_defs"},
- {4236, "+proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs"},
- {4237, "+proj=longlat +ellps=GRS67 +no_defs"},
- {4238, "+proj=longlat +a=6378160 +b=6356774.50408554 +no_defs"},
- {4239, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs"},
- {4240, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs"},
- {4241, "+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs"},
- {4242, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4243, "+proj=longlat +a=6377299.36559538 +b=6356098.359005157 +no_defs"},
- {4244, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs"},
- {4245, "+proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs"},
- {4246, "+proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs"},
- {4247, "+proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs"},
- {4248, "+proj=longlat +ellps=intl +no_defs"},
- {4249, "+proj=longlat +ellps=intl +no_defs"},
- {4250, "+proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs"},
- {4251, "+proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs"},
- {4252, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4253, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4254, "+proj=longlat +ellps=intl +no_defs"},
- {4255, "+proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs"},
- {4256, "+proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs"},
- {4257, "+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs"},
- {4258, "+proj=longlat +ellps=GRS80 +no_defs"},
- {4259, "+proj=longlat +ellps=intl +no_defs"},
- {4260, "+proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs"},
- {4261, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs"},
- {4262, "+proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs"},
- {4263, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4264, "+proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs"},
- {4265, "+proj=longlat +ellps=intl +no_defs"},
- {4266, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4267, "+proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs"},
- {4268, "+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs"},
- {4269, "+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs"},
- {4270, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4271, "+proj=longlat +ellps=intl +no_defs"},
- {4272, "+proj=longlat +ellps=intl +datum=nzgd49 +no_defs"},
- {4273, "+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs"},
- {4274, "+proj=longlat +ellps=intl +no_defs"},
- {4275, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs"},
- {4276, "+proj=longlat +ellps=WGS66 +no_defs"},
- {4277, "+proj=longlat +ellps=airy +datum=OSGB36 +no_defs"},
- {4278, "+proj=longlat +ellps=airy +no_defs"},
- {4279, "+proj=longlat +ellps=airy +no_defs"},
- {4280, "+proj=longlat +ellps=bessel +no_defs"},
- {4281, "+proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs"},
- {4282, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4283, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4284, "+proj=longlat +ellps=krass +no_defs"},
- {4285, "+proj=longlat +ellps=intl +no_defs"},
- {4286, "+proj=longlat +ellps=helmert +no_defs"},
- {4287, "+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs"},
- {4288, "+proj=longlat +ellps=intl +no_defs"},
- {4289, "+proj=longlat +ellps=bessel +no_defs"},
- {4291, "+proj=longlat +ellps=GRS67 +no_defs"},
- {4292, "+proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs"},
- {4293, "+proj=longlat +ellps=bess_nam +no_defs"},
- {4294, "+proj=longlat +ellps=bessel +no_defs"},
- {4295, "+proj=longlat +ellps=bessel +no_defs"},
- {4296, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4297, "+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs"},
- {4298, "+proj=longlat +ellps=evrstSS +no_defs"},
- {4299, "+proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs"},
- {4300, "+proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs"},
- {4301, "+proj=longlat +ellps=bessel +no_defs"},
- {4302, "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs"},
- {4303, "+proj=longlat +ellps=helmert +no_defs"},
- {4304, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs"},
- {4306, "+proj=longlat +ellps=bessel +no_defs"},
- {4307, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4308, "+proj=longlat +ellps=bessel +no_defs"},
- {4309, "+proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs"},
- {4310, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4311, "+proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs"},
- {4312, "+proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +no_defs"},
- {4313, "+proj=longlat +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +no_defs"},
- {4314, "+proj=longlat +ellps=bessel +datum=potsdam +no_defs"},
- {4315, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs"},
- {4316, "+proj=longlat +ellps=intl +no_defs"},
- {4317, "+proj=longlat +ellps=krass +no_defs"},
- {4318, "+proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs"},
- {4319, "+proj=longlat +ellps=GRS80 +no_defs"},
- {4322, "+proj=longlat +ellps=WGS72 +no_defs"},
- {4324, "+proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs"},
- {4326, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"},
- {4327, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"},
- //{4328, ""},
- {4329, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"},
- //{4330, ""},
- //{4331, ""},
- //{4332, ""},
- //{4333, ""},
- //{4334, ""},
- //{4335, ""},
- //{4336, ""},
- //{4337, ""},
- //{4338, ""},
- {4339, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4340, ""},
- {4341, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4342, ""},
- {4343, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4344, ""},
- {4345, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4346, ""},
- {4347, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4348, ""},
- {4349, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4350, ""},
- {4351, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4352, ""},
- {4353, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4354, ""},
- {4355, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4356, ""},
- {4357, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,-0.0,0.0,0.0,0.0 +no_defs"},
- //{4358, ""},
- {4359, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs"},
- //{4360, ""},
- {4361, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs"},
- //{4362, ""},
- {4363, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4364, ""},
- {4365, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4366, ""},
- {4367, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4368, ""},
- {4369, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4370, ""},
- {4371, "+proj=longlat +ellps=GRS80 +towgs84=2.0,2.0,-2.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4372, ""},
- {4373, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4374, ""},
- {4375, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4376, ""},
- {4377, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4378, ""},
- {4379, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4380, ""},
- {4381, "+proj=longlat +ellps=intl +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4382, ""},
- {4383, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4384, ""},
- //{4385, ""},
- {4386, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4387, ""},
- {4388, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4389, ""},
- {4600, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4601, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4602, "+proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs"},
- {4603, "+proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs"},
- {4604, "+proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs"},
- {4605, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4606, "+proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs"},
- {4607, "+proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs"},
- {4608, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4609, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4610, "+proj=longlat +a=6378140 +b=6356755.288157528 +no_defs"},
- {4611, "+proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs"},
- {4612, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4613, "+proj=longlat +ellps=bessel +no_defs"},
- {4614, "+proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs"},
- {4615, "+proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs"},
- {4616, "+proj=longlat +ellps=intl +no_defs"},
- {4617, "+proj=longlat +ellps=GRS80 +no_defs"},
- {4618, "+proj=longlat +ellps=aust_SA +no_defs"},
- {4619, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4620, "+proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs"},
- {4621, "+proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs"},
- {4622, "+proj=longlat +ellps=intl +no_defs"},
- {4623, "+proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs"},
- {4624, "+proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs"},
- {4625, "+proj=longlat +ellps=intl +no_defs"},
- {4626, "+proj=longlat +ellps=intl +no_defs"},
- {4627, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4628, "+proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs"},
- {4629, "+proj=longlat +ellps=intl +no_defs"},
- {4630, "+proj=longlat +ellps=intl +no_defs"},
- {4631, "+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs"},
- {4632, "+proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs"},
- {4633, "+proj=longlat +ellps=intl +no_defs"},
- {4634, "+proj=longlat +ellps=intl +no_defs"},
- {4635, "+proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs"},
- {4636, "+proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs"},
- {4637, "+proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs"},
- {4638, "+proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs"},
- {4639, "+proj=longlat +ellps=intl +no_defs"},
- {4640, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4641, "+proj=longlat +ellps=intl +no_defs"},
- {4642, "+proj=longlat +ellps=intl +no_defs"},
- {4643, "+proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs"},
- {4644, "+proj=longlat +ellps=intl +no_defs"},
- {4645, "+proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4646, "+proj=longlat +ellps=intl +no_defs"},
- {4657, "+proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs"},
- {4658, "+proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs"},
- {4659, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4660, "+proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +no_defs"},
- {4661, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4662, "+proj=longlat +ellps=intl +no_defs"},
- {4663, "+proj=longlat +ellps=intl +no_defs"},
- {4664, "+proj=longlat +ellps=intl +no_defs"},
- {4665, "+proj=longlat +ellps=intl +no_defs"},
- {4666, "+proj=longlat +ellps=bessel +no_defs"},
- {4667, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4668, "+proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs"},
- {4669, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4670, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4671, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {4672, "+proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs"},
- {4673, "+proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs"},
- {4674, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4675, "+proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs"},
- {4676, "+proj=longlat +ellps=krass +no_defs"},
- {4677, "+proj=longlat +ellps=krass +no_defs"},
- {4678, "+proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs"},
- {4679, "+proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs"},
- {4680, "+proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs"},
- {4681, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4682, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs"},
- {4683, "+proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs"},
- {4684, "+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs"},
- {4685, "+proj=longlat +ellps=intl +no_defs"},
- {4686, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4687, "+proj=longlat +ellps=GRS80 +no_defs"},
- {4688, "+proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs"},
- {4689, "+proj=longlat +ellps=intl +no_defs"},
- {4690, "+proj=longlat +ellps=intl +no_defs"},
- {4691, "+proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs"},
- {4692, "+proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs"},
- {4693, "+proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs"},
- {4694, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4695, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4696, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4697, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4698, "+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs"},
- {4699, "+proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs"},
- {4700, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4701, "+proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs"},
- {4702, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4703, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4704, "+proj=longlat +ellps=intl +no_defs"},
- {4705, "+proj=longlat +ellps=intl +no_defs"},
- {4706, "+proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs"},
- {4707, "+proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs"},
- {4708, "+proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs"},
- {4709, "+proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs"},
- {4710, "+proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs"},
- {4711, "+proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs"},
- {4712, "+proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs"},
- {4713, "+proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs"},
- {4714, "+proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs"},
- {4715, "+proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs"},
- {4716, "+proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs"},
- {4717, "+proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs"},
- {4718, "+proj=longlat +ellps=intl +no_defs"},
- {4719, "+proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs"},
- {4720, "+proj=longlat +ellps=WGS72 +no_defs"},
- {4721, "+proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs"},
- {4722, "+proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs"},
- {4723, "+proj=longlat +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +no_defs"},
- {4724, "+proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs"},
- {4725, "+proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs"},
- {4726, "+proj=longlat +ellps=clrk66 +no_defs"},
- {4727, "+proj=longlat +ellps=intl +no_defs"},
- {4728, "+proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs"},
- {4729, "+proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs"},
- {4730, "+proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs"},
- {4731, "+proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs"},
- {4732, "+proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs"},
- {4733, "+proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs"},
- {4734, "+proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs"},
- {4735, "+proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs"},
- {4736, "+proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs"},
- {4737, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4738, "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs"},
- {4739, "+proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs"},
- {4740, "+proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0,0,1.5,-0,-0,0.076,0 +no_defs"},
- {4741, "+proj=longlat +ellps=intl +no_defs"},
- {4742, "+proj=longlat +ellps=GRS80 +no_defs"},
- {4743, "+proj=longlat +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +no_defs"},
- {4744, "+proj=longlat +ellps=clrk80 +no_defs"},
- {4745, "+proj=longlat +ellps=bessel +no_defs"},
- {4746, "+proj=longlat +ellps=bessel +no_defs"},
- {4747, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4748, "+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs"},
- {4749, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4750, "+proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs"},
- {4751, "+proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs"},
- {4752, "+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs"},
- {4753, "+proj=longlat +ellps=intl +no_defs"},
- {4754, "+proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs"},
- {4755, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4756, "+proj=longlat +ellps=WGS84 +no_defs"},
- {4757, "+proj=longlat +ellps=WGS84 +no_defs"},
- {4758, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4759, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4760, "+proj=longlat +ellps=WGS66 +no_defs"},
- {4761, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4762, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4763, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4764, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4765, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"},
- {4801, "+proj=longlat +ellps=bessel +pm=bern +no_defs"},
- {4802, "+proj=longlat +ellps=intl +pm=bogota +no_defs"},
- {4803, "+proj=longlat +ellps=intl +pm=lisbon +no_defs"},
- {4804, "+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs"},
- {4805, "+proj=longlat +ellps=bessel +pm=ferro +no_defs"},
- {4806, "+proj=longlat +ellps=intl +pm=rome +no_defs"},
- {4807, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs"},
- {4808, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs"},
- {4809, "+proj=longlat +ellps=intl +pm=brussels +no_defs"},
- {4810, "+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs"},
- {4811, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs"},
- {4813, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs"},
- {4814, "+proj=longlat +ellps=bessel +pm=stockholm +no_defs"},
- {4815, "+proj=longlat +ellps=bessel +pm=athens +no_defs"},
- {4816, "+proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs"},
- {4817, "+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs"},
- {4818, "+proj=longlat +ellps=bessel +pm=ferro +no_defs"},
- {4819, "+proj=longlat +ellps=clrk80 +pm=paris +no_defs"},
- {4820, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs"},
- {4821, "+proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs"},
- //{4882, ""},
- {4883, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4884, ""},
- {4885, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4886, ""},
- {4887, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4888, ""},
- {4889, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4890, ""},
- {4891, "+proj=longlat +ellps=WGS66 +no_defs"},
- //{4892, ""},
- {4893, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4894, ""},
- {4895, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4896, ""},
- //{4897, ""},
- {4898, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4899, ""},
- {4900, "+proj=longlat +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0.0,0.0,0.0,0.0 +no_defs"},
- {4901, "+proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +no_defs"},
- {4902, "+proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs"},
- {4903, "+proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs"},
- {4904, "+proj=longlat +ellps=bessel +pm=lisbon +no_defs"},
- //{4906, ""},
- {4907, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4908, ""},
- {4909, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4910, ""},
- //{4911, ""},
- //{4912, ""},
- //{4913, ""},
- //{4914, ""},
- //{4915, ""},
- //{4916, ""},
- //{4917, ""},
- //{4918, ""},
- //{4919, ""},
- //{4920, ""},
- {4921, "+proj=longlat +ellps=GRS80 +no_defs"},
- //{4922, ""},
- {4923, "+proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0.0,0.0,1.5,-0.0,0.0,-0.076,0.0 +no_defs"},
- //{4924, ""},
- {4925, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4926, ""},
- {4927, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4928, ""},
- {4929, "+proj=longlat +ellps=GRS80 +no_defs"},
- //{4930, ""},
- {4931, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4932, ""},
- {4933, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4934, ""},
- {4935, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4936, ""},
- {4937, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4938, ""},
- {4939, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4940, ""},
- {4941, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4942, ""},
- {4943, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4944, ""},
- {4945, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4946, ""},
- {4947, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4948, ""},
- {4949, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4950, ""},
- {4951, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4952, ""},
- {4953, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,-0.0,0.0,0.0,0.0 +no_defs"},
- //{4954, ""},
- {4955, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs"},
- //{4956, ""},
- {4957, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs"},
- //{4958, ""},
- {4959, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4960, ""},
- {4961, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4962, ""},
- {4963, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4964, ""},
- {4965, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4966, ""},
- {4967, "+proj=longlat +ellps=GRS80 +towgs84=2.0,2.0,-2.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4968, ""},
- {4969, "+proj=longlat +ellps=intl +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4970, ""},
- {4971, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4972, ""},
- {4973, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4974, ""},
- {4975, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4976, ""},
- {4977, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4978, ""},
- {4979, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"},
- //{4980, ""},
- {4981, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4982, ""},
- {4983, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4984, ""},
- {4985, "+proj=longlat +ellps=WGS72 +towgs84=0.0,0.0,4.5,0.0,0.0,0.554,0.045171992568114105 +no_defs"},
- //{4986, ""},
- {4987, "+proj=longlat +ellps=WGS72 +towgs84=0.0,0.0,1.9,0.0,0.0,0.814,-0.07838062637389662 +no_defs"},
- //{4988, ""},
- {4989, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4990, ""},
- {4991, "+proj=longlat +ellps=krass +no_defs"},
- //{4992, ""},
- {4993, "+proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0.0,0.0,0.0,0.0 +no_defs"},
- //{4994, ""},
- {4995, "+proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,-4.903,-1.578,-0.21864069462192215 +no_defs"},
- //{4996, ""},
- {4997, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- //{4998, ""},
- {4999, "+proj=longlat +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,-0.0003,0.007,-0.001918262698097996 +no_defs"},
- //{5600, ""},
- //{5601, ""},
- //{5602, ""},
- //{5603, ""},
- //{5604, ""},
- //{5605, ""},
- //{5606, ""},
- //{5607, ""},
- //{5608, ""},
- //{5609, ""},
- //{5610, ""},
- //{5611, ""},
- //{5612, ""},
- //{5613, ""},
- //{5614, ""},
- //{5615, ""},
- //{5616, ""},
- //{5617, ""},
- //{5618, ""},
- //{5619, ""},
- //{5620, ""},
- //{5701, ""},
- //{5702, ""},
- //{5703, ""},
- //{5704, ""},
- //{5705, ""},
- //{5706, ""},
- //{5709, ""},
- //{5710, ""},
- //{5711, ""},
- //{5712, ""},
- //{5713, ""},
- //{5714, ""},
- //{5715, ""},
- //{5716, ""},
- //{5717, ""},
- //{5718, ""},
- //{5719, ""},
- //{5720, ""},
- //{5721, ""},
- //{5722, ""},
- //{5723, ""},
- //{5724, ""},
- //{5725, ""},
- //{5726, ""},
- //{5727, ""},
- //{5728, ""},
- //{5729, ""},
- //{5730, ""},
- //{5731, ""},
- //{5732, ""},
- //{5733, ""},
- //{5734, ""},
- //{5735, ""},
- //{5736, ""},
- //{5737, ""},
- //{5738, ""},
- //{5739, ""},
- //{5740, ""},
- //{5741, ""},
- //{5742, ""},
- //{5743, ""},
- //{5744, ""},
- //{5745, ""},
- //{5746, ""},
- //{5747, ""},
- //{5748, ""},
- //{5749, ""},
- //{5750, ""},
- //{5751, ""},
- //{5752, ""},
- //{5753, ""},
- //{5754, ""},
- //{5755, ""},
- //{5756, ""},
- //{5757, ""},
- //{5758, ""},
- //{5759, ""},
- //{5760, ""},
- //{5761, ""},
- //{5762, ""},
- //{5763, ""},
- //{5764, ""},
- //{5765, ""},
- //{5766, ""},
- //{5767, ""},
- //{5768, ""},
- //{5769, ""},
- //{5770, ""},
- //{5771, ""},
- //{5772, ""},
- //{5773, ""},
- //{5774, ""},
- //{5775, ""},
- //{5776, ""},
- //{5777, ""},
- //{5778, ""},
- //{5779, ""},
- //{5780, ""},
- //{5781, ""},
- //{5782, ""},
- //{5783, ""},
- //{5784, ""},
- //{5785, ""},
- //{5786, ""},
- //{5787, ""},
- //{5788, ""},
- //{5789, ""},
- //{5790, ""},
- //{5791, ""},
- //{5792, ""},
- //{5793, ""},
- //{5794, ""},
- //{5795, ""},
- //{5796, ""},
- //{5797, ""},
- //{5798, ""},
- //{5799, ""},
- //{5800, ""},
- //{5801, ""},
- //{5802, ""},
- //{5803, ""},
- //{5804, ""},
- //{5805, ""},
- //{5806, ""},
- //{5807, ""},
- //{5808, ""},
- //{5809, ""},
- //{5810, ""},
- //{5811, ""},
- //{5812, ""},
- //{5813, ""},
- //{5814, ""},
- //{5815, ""},
- //{5816, ""},
- //{5817, ""},
- //{5818, ""},
- //{5819, ""},
- //{5820, ""},
- //{5821, ""},
- //{7400, ""},
- //{7401, ""},
- //{7402, ""},
- //{7403, ""},
- //{7404, ""},
- //{7405, ""},
- //{7406, ""},
- //{7407, ""},
- //{7408, ""},
- //{7409, ""},
- //{7410, ""},
- //{7411, ""},
- //{7412, ""},
- //{7413, ""},
- //{7414, ""},
- //{7415, ""},
- //{7416, ""},
- //{7417, ""},
- //{7418, ""},
- //{7419, ""},
- //{7420, ""},
- //{7421, ""},
- //{7422, ""},
- {20004, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20005, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20006, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20007, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20008, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20009, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20010, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20011, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20012, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20013, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20014, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20015, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20016, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20017, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20018, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20019, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20020, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20021, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20022, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20023, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20024, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20025, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20026, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20027, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20028, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20029, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20030, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20031, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20032, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20064, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20065, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20066, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20067, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20068, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20069, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20070, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20071, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20072, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20073, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20074, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20075, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20076, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20077, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20078, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20079, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20080, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20081, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20082, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20083, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20084, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20085, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20086, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20087, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20088, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20089, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20090, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20091, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20092, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {20135, "+proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs"},
- {20136, "+proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs"},
- {20137, "+proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs"},
- {20138, "+proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs"},
- {20248, "+proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs"},
- {20249, "+proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs"},
- {20250, "+proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs"},
- {20251, "+proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs"},
- {20252, "+proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs"},
- {20253, "+proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs"},
- {20254, "+proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs"},
- {20255, "+proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs"},
- {20256, "+proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs"},
- {20257, "+proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs"},
- {20258, "+proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs"},
- {20348, "+proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs"},
- {20349, "+proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs"},
- {20350, "+proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs"},
- {20351, "+proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs"},
- {20352, "+proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs"},
- {20353, "+proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs"},
- {20354, "+proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs"},
- {20355, "+proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs"},
- {20356, "+proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs"},
- {20357, "+proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs"},
- {20358, "+proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs"},
- {20436, "+proj=utm +zone=36 +ellps=intl +units=m +no_defs"},
- {20437, "+proj=utm +zone=37 +ellps=intl +units=m +no_defs"},
- {20438, "+proj=utm +zone=38 +ellps=intl +units=m +no_defs"},
- {20439, "+proj=utm +zone=39 +ellps=intl +units=m +no_defs"},
- {20440, "+proj=utm +zone=40 +ellps=intl +units=m +no_defs"},
- {20499, "+proj=utm +zone=39 +ellps=intl +units=m +no_defs"},
- {20538, "+proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs"},
- {20539, "+proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs"},
- {20790, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_defs"},
- {20791, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs"},
- {20822, "+proj=utm +zone=22 +south +ellps=intl +units=m +no_defs"},
- {20823, "+proj=utm +zone=23 +south +ellps=intl +units=m +no_defs"},
- {20824, "+proj=utm +zone=24 +south +ellps=intl +units=m +no_defs"},
- {20934, "+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs"},
- {20935, "+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs"},
- {20936, "+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs"},
- {21035, "+proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_defs"},
- {21036, "+proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_defs"},
- {21037, "+proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_defs"},
- {21095, "+proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs"},
- {21096, "+proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs"},
- {21097, "+proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs"},
- {21100, "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs"},
- {21148, "+proj=utm +zone=48 +south +ellps=bessel +units=m +no_defs"},
- {21149, "+proj=utm +zone=49 +south +ellps=bessel +units=m +no_defs"},
- {21150, "+proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs"},
- {21291, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs"},
- {21292, "+proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs"},
- {21413, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21414, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21415, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21416, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21417, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21418, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21419, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21420, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21421, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21422, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21423, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21453, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21454, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21455, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21456, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21457, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21458, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21459, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21460, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21461, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21462, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21463, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21473, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21474, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21475, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21476, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21477, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21478, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21479, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21480, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21481, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21482, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21483, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {21500, "+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs"},
- {21780, "+proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs"},
- {21781, "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs"},
- //{21782, ""},
- {21817, "+proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs"},
- {21818, "+proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs"},
- {21891, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs"},
- {21892, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs"},
- {21893, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs"},
- {21894, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs"},
- {21896, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs"},
- {21897, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs"},
- {21898, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs"},
- {21899, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs"},
- {22032, "+proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_defs"},
- {22033, "+proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_defs"},
- {22091, "+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {22092, "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs"},
- {22171, "+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {22172, "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {22173, "+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {22174, "+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {22175, "+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {22176, "+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {22177, "+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {22181, "+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {22182, "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {22183, "+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {22184, "+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {22185, "+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {22186, "+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {22187, "+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {22191, "+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {22192, "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {22193, "+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {22194, "+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {22195, "+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {22196, "+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {22197, "+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {22234, "+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs"},
- {22235, "+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs"},
- {22236, "+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs"},
- //{22275, ""},
- //{22277, ""},
- //{22279, ""},
- //{22281, ""},
- //{22283, ""},
- //{22285, ""},
- //{22287, ""},
- //{22289, ""},
- //{22291, ""},
- //{22293, ""},
- //{22300, ""},
- {22332, "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {22391, "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {22392, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {22521, "+proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs"},
- {22522, "+proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs"},
- {22523, "+proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs"},
- {22524, "+proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs"},
- {22525, "+proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs"},
- {22700, "+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {22770, "+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {22780, "+proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {22832, "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {22991, "+proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m +no_defs"},
- {22992, "+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +units=m +no_defs"},
- {22993, "+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +units=m +no_defs"},
- {22994, "+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m +no_defs"},
- {23028, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs"},
- {23029, "+proj=utm +zone=29 +ellps=intl +units=m +no_defs"},
- {23030, "+proj=utm +zone=30 +ellps=intl +units=m +no_defs"},
- {23031, "+proj=utm +zone=31 +ellps=intl +units=m +no_defs"},
- {23032, "+proj=utm +zone=32 +ellps=intl +units=m +no_defs"},
- {23033, "+proj=utm +zone=33 +ellps=intl +units=m +no_defs"},
- {23034, "+proj=utm +zone=34 +ellps=intl +units=m +no_defs"},
- {23035, "+proj=utm +zone=35 +ellps=intl +units=m +no_defs"},
- {23036, "+proj=utm +zone=36 +ellps=intl +units=m +no_defs"},
- {23037, "+proj=utm +zone=37 +ellps=intl +units=m +no_defs"},
- {23038, "+proj=utm +zone=38 +ellps=intl +units=m +no_defs"},
- {23090, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {23095, "+proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {23239, "+proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs"},
- {23240, "+proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs"},
- {23433, "+proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {23700, "+proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m +no_defs"},
- {23830, "+proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23831, "+proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23832, "+proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23833, "+proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23834, "+proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23835, "+proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23836, "+proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23837, "+proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23838, "+proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23839, "+proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23840, "+proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23841, "+proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23842, "+proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23843, "+proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23844, "+proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23845, "+proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23846, "+proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23847, "+proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23848, "+proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23849, "+proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23850, "+proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23851, "+proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23852, "+proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23853, "+proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23866, "+proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23867, "+proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23868, "+proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23869, "+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23870, "+proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23871, "+proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23872, "+proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23877, "+proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23878, "+proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23879, "+proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23880, "+proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23881, "+proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23882, "+proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23883, "+proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23884, "+proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {23886, "+proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23887, "+proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23888, "+proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23889, "+proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23890, "+proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23891, "+proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23892, "+proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23893, "+proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23894, "+proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs"},
- {23946, "+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs"},
- {23947, "+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs"},
- {23948, "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs"},
- {24047, "+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs"},
- {24048, "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs"},
- {24100, "+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs"},
- {24200, "+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +units=m +no_defs"},
- {24305, "+proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs"},
- {24306, "+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs"},
- {24311, "+proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs"},
- {24312, "+proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs"},
- {24313, "+proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs"},
- {24342, "+proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs"},
- {24343, "+proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs"},
- {24344, "+proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs"},
- {24345, "+proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs"},
- {24346, "+proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs"},
- {24347, "+proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs"},
- {24370, "+proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005157 +to_meter=0.9143985307444408 +no_defs"},
- {24371, "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005157 +to_meter=0.9143985307444408 +no_defs"},
- {24372, "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005157 +to_meter=0.9143985307444408 +no_defs"},
- {24373, "+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005157 +to_meter=0.9143985307444408 +no_defs"},
- {24374, "+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005157 +to_meter=0.9143985307444408 +no_defs"},
- {24375, "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs"},
- {24376, "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs"},
- {24377, "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs"},
- {24378, "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs"},
- {24379, "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs"},
- {24380, "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs"},
- {24381, "+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs"},
- {24382, "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005157 +to_meter=0.9143985307444408 +no_defs"},
- {24383, "+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs"},
- {24500, "+proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs"},
- {24547, "+proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs"},
- {24548, "+proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs"},
- {24571, "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs"},
- {24600, "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs"},
- {24718, "+proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs"},
- {24719, "+proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs"},
- {24720, "+proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs"},
- {24817, "+proj=utm +zone=17 +ellps=intl +units=m +no_defs"},
- {24818, "+proj=utm +zone=18 +ellps=intl +units=m +no_defs"},
- {24819, "+proj=utm +zone=19 +ellps=intl +units=m +no_defs"},
- {24820, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs"},
- {24821, "+proj=utm +zone=21 +ellps=intl +units=m +no_defs"},
- {24877, "+proj=utm +zone=17 +south +ellps=intl +units=m +no_defs"},
- {24878, "+proj=utm +zone=18 +south +ellps=intl +units=m +no_defs"},
- {24879, "+proj=utm +zone=19 +south +ellps=intl +units=m +no_defs"},
- {24880, "+proj=utm +zone=20 +south +ellps=intl +units=m +no_defs"},
- {24881, "+proj=utm +zone=21 +south +ellps=intl +units=m +no_defs"},
- {24882, "+proj=utm +zone=22 +south +ellps=intl +units=m +no_defs"},
- {24891, "+proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m +no_defs"},
- {24892, "+proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m +no_defs"},
- {24893, "+proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs"},
- {25000, "+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs"},
- {25231, "+proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {25391, "+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {25392, "+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {25393, "+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {25394, "+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {25395, "+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs"},
- {25700, "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs"},
- {25828, "+proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs"},
- {25829, "+proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs"},
- {25830, "+proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs"},
- {25831, "+proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs"},
- {25832, "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs"},
- {25833, "+proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs"},
- {25834, "+proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs"},
- {25835, "+proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs"},
- {25836, "+proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs"},
- {25837, "+proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs"},
- {25838, "+proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs"},
- {25884, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {25932, "+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs"},
- {26191, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs"},
- {26192, "+proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs"},
- {26193, "+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs"},
- {26194, "+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs"},
- {26195, "+proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs"},
- {26237, "+proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs"},
- {26331, "+proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs"},
- {26332, "+proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs"},
- {26391, "+proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m +no_defs"},
- {26392, "+proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m +no_defs"},
- {26393, "+proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m +no_defs"},
- {26432, "+proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs"},
- {26591, "+proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs"},
- {26592, "+proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs"},
- {26632, "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {26692, "+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {26701, "+proj=utm +zone=1 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26702, "+proj=utm +zone=2 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26703, "+proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26704, "+proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26705, "+proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26706, "+proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26707, "+proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26708, "+proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26709, "+proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26710, "+proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26711, "+proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26712, "+proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26713, "+proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26714, "+proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26715, "+proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26716, "+proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26717, "+proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26718, "+proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26719, "+proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26720, "+proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26721, "+proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26722, "+proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {26729, "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26730, "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26731, "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26732, "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26733, "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26734, "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26735, "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26736, "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26737, "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26738, "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26739, "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26740, "+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26741, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26742, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26743, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26744, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26745, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26746, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26747, "+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26748, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26749, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26750, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26751, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26752, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26753, "+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26754, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26755, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26756, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26757, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26758, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26759, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26760, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26766, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26767, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26768, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26769, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26770, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26771, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26772, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26773, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26774, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26775, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26776, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26777, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26778, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26779, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26780, "+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26781, "+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26782, "+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26783, "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26784, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26785, "+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26786, "+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26787, "+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26791, "+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26792, "+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26793, "+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26794, "+proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26795, "+proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26796, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26797, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26798, "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26799, "+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {26801, "+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs"},
- {26802, "+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs"},
- {26803, "+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs"},
- {26811, "+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs"},
- {26812, "+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs"},
- {26813, "+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs"},
- {26814, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26815, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26819, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26820, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26821, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26822, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26823, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26824, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26825, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26826, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26830, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs"},
- {26831, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs"},
- {26832, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs"},
- {26833, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26834, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26835, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26836, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {26837, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {26841, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {26842, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {26843, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {26844, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {26845, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {26846, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {26847, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {26848, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {26849, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {26850, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {26851, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {26852, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {26853, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {26854, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {26855, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {26856, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {26857, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {26858, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {26859, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {26860, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {26861, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {26862, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs"},
- {26863, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {26864, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {26865, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {26866, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {26867, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {26868, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {26869, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {26870, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs"},
- {26891, "+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26892, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26893, "+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26894, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26895, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26896, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26897, "+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26898, "+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26899, "+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {26901, "+proj=utm +zone=1 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26902, "+proj=utm +zone=2 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26903, "+proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26904, "+proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26905, "+proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26906, "+proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26907, "+proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26908, "+proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26909, "+proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26910, "+proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26911, "+proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26912, "+proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26913, "+proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26914, "+proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26915, "+proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26916, "+proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26917, "+proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26918, "+proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26919, "+proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26920, "+proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26921, "+proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26922, "+proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26923, "+proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26929, "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26930, "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26931, "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26932, "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26933, "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26934, "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26935, "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26936, "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26937, "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26938, "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26939, "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26940, "+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26941, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26942, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26943, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26944, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26945, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26946, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26948, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26949, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26950, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26951, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26952, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26953, "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26954, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26955, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26956, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26957, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26958, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26959, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26960, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26961, "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26962, "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26963, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26964, "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26965, "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26966, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26967, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26968, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26969, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26970, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26971, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26972, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26973, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26974, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26975, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26976, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26977, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26978, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26979, "+proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26980, "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26981, "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26982, "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26983, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26984, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26985, "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26986, "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26987, "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26988, "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26989, "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26990, "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26991, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26992, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26993, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26994, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26995, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26996, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26997, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {26998, "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {27037, "+proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs"},
- {27038, "+proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs"},
- {27039, "+proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs"},
- {27040, "+proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs"},
- {27120, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs"},
- {27200, "+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27205, "+proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27206, "+proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27207, "+proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27208, "+proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27209, "+proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27210, "+proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27211, "+proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27212, "+proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27213, "+proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27214, "+proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27215, "+proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27216, "+proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27217, "+proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27218, "+proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27219, "+proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27220, "+proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27221, "+proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27222, "+proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27223, "+proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27224, "+proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27225, "+proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27226, "+proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27227, "+proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27228, "+proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27229, "+proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27230, "+proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27231, "+proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27232, "+proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27258, "+proj=utm +zone=58 +south +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27259, "+proj=utm +zone=59 +south +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27260, "+proj=utm +zone=60 +south +ellps=intl +datum=nzgd49 +units=m +no_defs"},
- {27291, "+proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs"},
- {27292, "+proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs"},
- {27391, "+proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs"},
- {27392, "+proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs"},
- {27393, "+proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs"},
- {27394, "+proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs"},
- {27395, "+proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs"},
- {27396, "+proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs"},
- {27397, "+proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs"},
- {27398, "+proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs"},
- {27429, "+proj=utm +zone=29 +ellps=intl +units=m +no_defs"},
- {27492, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs"},
- {27493, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs"},
- {27500, "+proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=5.4 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +units=m +no_defs"},
- {27561, "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27562, "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27563, "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27564, "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27571, "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27572, "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27573, "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27574, "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27581, "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27582, "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27583, "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27584, "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27591, "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27592, "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27593, "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27594, "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},
- {27700, "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs"},
- {28191, "+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs"},
- {28192, "+proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs"},
- {28193, "+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs"},
- {28232, "+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {28348, "+proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {28349, "+proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {28350, "+proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {28351, "+proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {28352, "+proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {28353, "+proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {28354, "+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {28355, "+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {28356, "+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {28357, "+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {28358, "+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {28402, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28403, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28404, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28405, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28406, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28407, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28408, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28409, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28410, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28411, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28412, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28413, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28414, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28415, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28416, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28417, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28418, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28419, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28420, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28421, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28422, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28423, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28424, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28425, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28426, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28427, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28428, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28429, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28430, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28431, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28432, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28462, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28463, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28464, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28465, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28466, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28467, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28468, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28469, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28470, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28471, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28472, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28473, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28474, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28475, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28476, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28477, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28478, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28479, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28480, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28481, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28482, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28483, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28484, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28485, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28486, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28487, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28488, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28489, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28490, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28491, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28492, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs"},
- {28600, "+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs"},
- {28991, "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {28992, "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs"},
- {29100, "+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m +no_defs"},
- {29101, "+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +units=m +no_defs"},
- {29118, "+proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs"},
- {29119, "+proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs"},
- {29120, "+proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs"},
- {29121, "+proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs"},
- {29122, "+proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs"},
- {29168, "+proj=utm +zone=18 +ellps=aust_SA +units=m +no_defs"},
- {29169, "+proj=utm +zone=19 +ellps=aust_SA +units=m +no_defs"},
- {29170, "+proj=utm +zone=20 +ellps=aust_SA +units=m +no_defs"},
- {29171, "+proj=utm +zone=21 +ellps=aust_SA +units=m +no_defs"},
- {29172, "+proj=utm +zone=22 +ellps=aust_SA +units=m +no_defs"},
- {29177, "+proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs"},
- {29178, "+proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs"},
- {29179, "+proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs"},
- {29180, "+proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs"},
- {29181, "+proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs"},
- {29182, "+proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs"},
- {29183, "+proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs"},
- {29184, "+proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs"},
- {29185, "+proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs"},
- {29187, "+proj=utm +zone=17 +south +ellps=aust_SA +units=m +no_defs"},
- {29188, "+proj=utm +zone=18 +south +ellps=aust_SA +units=m +no_defs"},
- {29189, "+proj=utm +zone=19 +south +ellps=aust_SA +units=m +no_defs"},
- {29190, "+proj=utm +zone=20 +south +ellps=aust_SA +units=m +no_defs"},
- {29191, "+proj=utm +zone=21 +south +ellps=aust_SA +units=m +no_defs"},
- {29192, "+proj=utm +zone=22 +south +ellps=aust_SA +units=m +no_defs"},
- {29193, "+proj=utm +zone=23 +south +ellps=aust_SA +units=m +no_defs"},
- {29194, "+proj=utm +zone=24 +south +ellps=aust_SA +units=m +no_defs"},
- {29195, "+proj=utm +zone=25 +south +ellps=aust_SA +units=m +no_defs"},
- {29220, "+proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs"},
- {29221, "+proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs"},
- {29333, "+proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_defs"},
- //{29371, ""},
- //{29373, ""},
- //{29375, ""},
- //{29377, ""},
- //{29379, ""},
- //{29381, ""},
- //{29383, ""},
- //{29385, ""},
- {29635, "+proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {29636, "+proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {29700, "+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs"},
- //{29701, ""},
- {29702, "+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs"},
- {29738, "+proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs"},
- {29739, "+proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs"},
- {29849, "+proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs"},
- {29850, "+proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs"},
- {29871, "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +ellps=evrstSS +to_meter=20.11676512155263 +no_defs"},
- {29872, "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +ellps=evrstSS +to_meter=0.3047994715386762 +no_defs"},
- {29873, "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS +units=m +no_defs"},
- {29900, "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs"},
- {29901, "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs"},
- {29902, "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs"},
- {29903, "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs"},
- {30161, "+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30162, "+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30163, "+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30164, "+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30165, "+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30166, "+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30167, "+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30168, "+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30169, "+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30170, "+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30171, "+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30172, "+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30173, "+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30174, "+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30175, "+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30176, "+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30177, "+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30178, "+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30179, "+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {30200, "+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs"},
- {30339, "+proj=utm +zone=39 +ellps=helmert +units=m +no_defs"},
- {30340, "+proj=utm +zone=40 +ellps=helmert +units=m +no_defs"},
- {30491, "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs"},
- {30492, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs"},
- {30493, "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {30494, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {30729, "+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs"},
- {30730, "+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs"},
- {30731, "+proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs"},
- {30732, "+proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs"},
- {30791, "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs"},
- {30792, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs"},
- {30800, "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {31028, "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs"},
- {31121, "+proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs"},
- {31154, "+proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs"},
- {31170, "+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs"},
- {31171, "+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs"},
- {31251, "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {31252, "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {31253, "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {31254, "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31255, "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31256, "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31257, "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31258, "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31259, "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31265, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31266, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31267, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31268, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31275, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31276, "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31277, "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31278, "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31279, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31281, "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {31282, "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {31283, "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {31284, "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31285, "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31286, "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31287, "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31288, "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {31289, "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {31290, "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {31291, "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {31292, "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {31293, "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs"},
- {31294, "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31295, "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31296, "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- {31297, "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs"},
- //{31300, ""},
- {31370, "+proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs"},
- {31461, "+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs"},
- {31462, "+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs"},
- {31463, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs"},
- {31464, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs"},
- {31465, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs"},
- {31466, "+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs"},
- {31467, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs"},
- {31468, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs"},
- {31469, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs"},
- {31528, "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs"},
- {31529, "+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs"},
- {31600, "+proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +units=m +no_defs"},
- {31700, "+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs"},
- {31838, "+proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs"},
- {31839, "+proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs"},
- {31900, "+proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {31901, "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {31965, "+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31966, "+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31967, "+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31968, "+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31969, "+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31970, "+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31971, "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31972, "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31973, "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31974, "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31975, "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31976, "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31977, "+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31978, "+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31979, "+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31980, "+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31981, "+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31982, "+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31983, "+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31984, "+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31985, "+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31986, "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31987, "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31988, "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31989, "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31990, "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31991, "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31992, "+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31993, "+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31994, "+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31995, "+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31996, "+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31997, "+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31998, "+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {31999, "+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {32000, "+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},
- {32001, "+proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32002, "+proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32003, "+proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32005, "+proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32006, "+proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32007, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32008, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32009, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32010, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32011, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32012, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32013, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32014, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32015, "+proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32016, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32017, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32018, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32019, "+proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32020, "+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32021, "+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32022, "+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32023, "+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32024, "+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32025, "+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32026, "+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32027, "+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32028, "+proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32029, "+proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32030, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32031, "+proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32033, "+proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32034, "+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32035, "+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32036, "+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32037, "+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32038, "+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32039, "+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32040, "+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32041, "+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32042, "+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32043, "+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32044, "+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32045, "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32046, "+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32047, "+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32048, "+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32049, "+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32050, "+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32051, "+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32052, "+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32053, "+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32054, "+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32055, "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32056, "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32057, "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32058, "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32061, "+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {32062, "+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {32064, "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32065, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32066, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32067, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32074, "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32075, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32076, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32077, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32081, "+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {32082, "+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {32083, "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {32084, "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {32085, "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {32086, "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {32098, "+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {32099, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {32100, "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32104, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32107, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32108, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32109, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32110, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32111, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32112, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32113, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32114, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32115, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32116, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32117, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32118, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32119, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32120, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32121, "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32122, "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32123, "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32124, "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32125, "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32126, "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32127, "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32128, "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32129, "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32130, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32133, "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32134, "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32135, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32136, "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32137, "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32138, "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32139, "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32140, "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32141, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32142, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32143, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32144, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32145, "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32146, "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32147, "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32148, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32149, "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32150, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32151, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32152, "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32153, "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32154, "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32155, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32156, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32157, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32158, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32161, "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32164, "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {32165, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {32166, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {32167, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {32180, "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32181, "+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32182, "+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32183, "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32184, "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32185, "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32186, "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32187, "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32188, "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32189, "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32190, "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32191, "+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32192, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32193, "+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32194, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32195, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32196, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32197, "+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32198, "+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32199, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {32201, "+proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs"},
- {32202, "+proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs"},
- {32203, "+proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs"},
- {32204, "+proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs"},
- {32205, "+proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs"},
- {32206, "+proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs"},
- {32207, "+proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs"},
- {32208, "+proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs"},
- {32209, "+proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs"},
- {32210, "+proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs"},
- {32211, "+proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs"},
- {32212, "+proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs"},
- {32213, "+proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs"},
- {32214, "+proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs"},
- {32215, "+proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs"},
- {32216, "+proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs"},
- {32217, "+proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs"},
- {32218, "+proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs"},
- {32219, "+proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs"},
- {32220, "+proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs"},
- {32221, "+proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs"},
- {32222, "+proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs"},
- {32223, "+proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs"},
- {32224, "+proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs"},
- {32225, "+proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs"},
- {32226, "+proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs"},
- {32227, "+proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs"},
- {32228, "+proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs"},
- {32229, "+proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs"},
- {32230, "+proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs"},
- {32231, "+proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs"},
- {32232, "+proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs"},
- {32233, "+proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs"},
- {32234, "+proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs"},
- {32235, "+proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs"},
- {32236, "+proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs"},
- {32237, "+proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs"},
- {32238, "+proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs"},
- {32239, "+proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs"},
- {32240, "+proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs"},
- {32241, "+proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs"},
- {32242, "+proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs"},
- {32243, "+proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs"},
- {32244, "+proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs"},
- {32245, "+proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs"},
- {32246, "+proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs"},
- {32247, "+proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs"},
- {32248, "+proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs"},
- {32249, "+proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs"},
- {32250, "+proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs"},
- {32251, "+proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs"},
- {32252, "+proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs"},
- {32253, "+proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs"},
- {32254, "+proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs"},
- {32255, "+proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs"},
- {32256, "+proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs"},
- {32257, "+proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs"},
- {32258, "+proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs"},
- {32259, "+proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs"},
- {32260, "+proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs"},
- {32301, "+proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs"},
- {32302, "+proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs"},
- {32303, "+proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs"},
- {32304, "+proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs"},
- {32305, "+proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs"},
- {32306, "+proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs"},
- {32307, "+proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs"},
- {32308, "+proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs"},
- {32309, "+proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs"},
- {32310, "+proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs"},
- {32311, "+proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs"},
- {32312, "+proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs"},
- {32313, "+proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs"},
- {32314, "+proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs"},
- {32315, "+proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs"},
- {32316, "+proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs"},
- {32317, "+proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs"},
- {32318, "+proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs"},
- {32319, "+proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs"},
- {32320, "+proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs"},
- {32321, "+proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs"},
- {32322, "+proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs"},
- {32323, "+proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs"},
- {32324, "+proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs"},
- {32325, "+proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs"},
- {32326, "+proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs"},
- {32327, "+proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs"},
- {32328, "+proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs"},
- {32329, "+proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs"},
- {32330, "+proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs"},
- {32331, "+proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs"},
- {32332, "+proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs"},
- {32333, "+proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs"},
- {32334, "+proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs"},
- {32335, "+proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs"},
- {32336, "+proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs"},
- {32337, "+proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs"},
- {32338, "+proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs"},
- {32339, "+proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs"},
- {32340, "+proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs"},
- {32341, "+proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs"},
- {32342, "+proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs"},
- {32343, "+proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs"},
- {32344, "+proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs"},
- {32345, "+proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs"},
- {32346, "+proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs"},
- {32347, "+proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs"},
- {32348, "+proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs"},
- {32349, "+proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs"},
- {32350, "+proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs"},
- {32351, "+proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs"},
- {32352, "+proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs"},
- {32353, "+proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs"},
- {32354, "+proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs"},
- {32355, "+proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs"},
- {32356, "+proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs"},
- {32357, "+proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs"},
- {32358, "+proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs"},
- {32359, "+proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs"},
- {32360, "+proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs"},
- {32401, "+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32402, "+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32403, "+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32404, "+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32405, "+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32406, "+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32407, "+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32408, "+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32409, "+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32410, "+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32411, "+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32412, "+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32413, "+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32414, "+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32415, "+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32416, "+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32417, "+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32418, "+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32419, "+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32420, "+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32421, "+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32422, "+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32423, "+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32424, "+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32425, "+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32426, "+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32427, "+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32428, "+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32429, "+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32430, "+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32431, "+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32432, "+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32433, "+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32434, "+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32435, "+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32436, "+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32437, "+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32438, "+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32439, "+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32440, "+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32441, "+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32442, "+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32443, "+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32444, "+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32445, "+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32446, "+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32447, "+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32448, "+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32449, "+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32450, "+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32451, "+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32452, "+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32453, "+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32454, "+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32455, "+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32456, "+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32457, "+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32458, "+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32459, "+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32460, "+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32501, "+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32502, "+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32503, "+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32504, "+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32505, "+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32506, "+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32507, "+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32508, "+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32509, "+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32510, "+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32511, "+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32512, "+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32513, "+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32514, "+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32515, "+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32516, "+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32517, "+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32518, "+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32519, "+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32520, "+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32521, "+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32522, "+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32523, "+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32524, "+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32525, "+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32526, "+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32527, "+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32528, "+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32529, "+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32530, "+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32531, "+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32532, "+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32533, "+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32534, "+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32535, "+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32536, "+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32537, "+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32538, "+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32539, "+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32540, "+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32541, "+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32542, "+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32543, "+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32544, "+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32545, "+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32546, "+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32547, "+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32548, "+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32549, "+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32550, "+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32551, "+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32552, "+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32553, "+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32554, "+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32555, "+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32556, "+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32557, "+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32558, "+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32559, "+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- {32560, "+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs"},
- //{32600, ""},
- {32601, "+proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32602, "+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32603, "+proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32604, "+proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32605, "+proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32606, "+proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32607, "+proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32608, "+proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32609, "+proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32610, "+proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32611, "+proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32612, "+proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32613, "+proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32614, "+proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32615, "+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32616, "+proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32617, "+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32618, "+proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32619, "+proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32620, "+proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32621, "+proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32622, "+proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32623, "+proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32624, "+proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32625, "+proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32626, "+proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32627, "+proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32628, "+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32629, "+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32630, "+proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32631, "+proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32632, "+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32633, "+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32634, "+proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32635, "+proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32636, "+proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32637, "+proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32638, "+proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32639, "+proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32640, "+proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32641, "+proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32642, "+proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32643, "+proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32644, "+proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32645, "+proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32646, "+proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32647, "+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32648, "+proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32649, "+proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32650, "+proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32651, "+proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32652, "+proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32653, "+proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32654, "+proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32655, "+proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32656, "+proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32657, "+proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32658, "+proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32659, "+proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32660, "+proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32661, "+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32662, "+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- //{32663, ""},
- {32664, "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +to_meter=0.3048006096012192 +no_defs"},
- {32665, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +to_meter=0.3048006096012192 +no_defs"},
- {32666, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +to_meter=0.3048006096012192 +no_defs"},
- {32667, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +to_meter=0.3048006096012192 +no_defs"},
- //{32700, ""},
- {32701, "+proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32702, "+proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32703, "+proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32704, "+proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32705, "+proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32706, "+proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32707, "+proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32708, "+proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32709, "+proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32710, "+proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32711, "+proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32712, "+proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32713, "+proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32714, "+proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32715, "+proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32716, "+proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32717, "+proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32718, "+proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32719, "+proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32720, "+proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32721, "+proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32722, "+proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32723, "+proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32724, "+proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32725, "+proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32726, "+proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32727, "+proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32728, "+proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32729, "+proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32730, "+proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32731, "+proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32732, "+proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32733, "+proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32734, "+proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32735, "+proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32736, "+proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32737, "+proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32738, "+proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32739, "+proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32740, "+proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32741, "+proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32742, "+proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32743, "+proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32744, "+proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32745, "+proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32746, "+proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32747, "+proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32748, "+proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32749, "+proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32750, "+proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32751, "+proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32752, "+proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32753, "+proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32754, "+proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32755, "+proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32756, "+proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32757, "+proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32758, "+proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32759, "+proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32760, "+proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32761, "+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {32766, "+proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {61206405, "+proj=longlat +ellps=bessel +no_defs"},
- {61216405, "+proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0.0,0.0,0.0,0.0 +no_defs"},
- {61226405, "+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs"},
- {61236405, "+proj=longlat +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,-0.345,1.376,0.30857215014565614 +no_defs"},
- {61246405, "+proj=longlat +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,-2.141,7.023,0.0 +no_defs"},
- {61266405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61266413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61276405, "+proj=longlat +ellps=clrk66 +towgs84=-82.875,-57.097,-156.768,-2.158,-1.524,0.982,-0.07404906544270759 +no_defs"},
- {61286405, "+proj=longlat +ellps=clrk66 +no_defs"},
- {61296405, "+proj=longlat +ellps=clrk66 +no_defs"},
- {61306405, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,-0.0,0.0,0.0,0.0 +no_defs"},
- {61306413, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,-0.0,0.0,0.0,0.0 +no_defs"},
- {61316405, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=182.0,915.0,344.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61326405, "+proj=longlat +ellps=clrk80 +towgs84=-244.72,-162.773,400.75,0.0,0.0,0.0,0.0 +no_defs"},
- {61336405, "+proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,0.0003,0.007,-0.002887707287459349 +no_defs"},
- {61346405, "+proj=longlat +ellps=clrk80 +towgs84=-191.808,-250.512,167.861,-0.792,-1.653,8.558,4.270300283733636 +no_defs"},
- {61356405, "+proj=longlat +ellps=clrk66 +towgs84=58.0,-283.0,-182.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61366405, "+proj=longlat +ellps=clrk66 +no_defs"},
- {61376405, "+proj=longlat +ellps=clrk66 +no_defs"},
- {61386405, "+proj=longlat +ellps=clrk66 +no_defs"},
- {61396405, "+proj=longlat +ellps=clrk66 +towgs84=11.0,72.0,-101.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61406405, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs"},
- {61406413, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs"},
- {61416405, "+proj=longlat +ellps=GRS80 +towgs84=-48.0,55.0,52.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61426405, "+proj=longlat +ellps=clrk80 +towgs84=-125.0,53.0,467.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61436405, "+proj=longlat +ellps=clrk80 +towgs84=-124.76,53.0,466.79,0.0,0.0,0.0,0.0 +no_defs"},
- {61446405, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=214.0,804.0,268.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61456405, "+proj=longlat +a=6377301.243 +b=6356100.230165384 +towgs84=275.57,676.78,229.6,0.0,0.0,0.0,0.0 +no_defs"},
- {61466405, "+proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295.0,736.0,257.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61476405, "+proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0.0,0.0,0.0,0.0 +no_defs"},
- {61486405, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61486413, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61496405, "+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0.0,0.0,0.0,0.0 +no_defs"},
- {61506405, "+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0.0,0.0,0.0,0.0 +no_defs"},
- {61516405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61516413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61526405, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs"},
- {61526413, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs"},
- {61536405, "+proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0.0,0.0,0.0,0.0 +no_defs"},
- {61546405, "+proj=longlat +ellps=intl +towgs84=-123.02,-158.95,-168.47,0.0,0.0,0.0,0.0 +no_defs"},
- {61556405, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83.0,37.0,124.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61566405, "+proj=longlat +ellps=bessel +towgs84=559.0,68.7,451.5,7.92,4.073,4.251,1.1777720436709203 +no_defs"},
- {61576405, "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs"},
- {61586405, "+proj=longlat +ellps=intl +towgs84=-0.465,372.095,171.736,0.0,0.0,0.0,0.0 +no_defs"},
- {61596405, "+proj=longlat +ellps=intl +towgs84=-114.7,-98.5,-150.7,0.0,0.0,0.0,0.0 +no_defs"},
- {61606405, "+proj=longlat +ellps=intl +no_defs"},
- {61616405, "+proj=longlat +ellps=intl +towgs84=27.5,14.0,186.4,0.0,0.0,0.0,0.0 +no_defs"},
- {61626405, "+proj=longlat +ellps=bessel +no_defs"},
- {61636405, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61636413, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61646405, "+proj=longlat +ellps=krass +towgs84=-76.0,-138.0,67.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61656405, "+proj=longlat +ellps=intl +towgs84=-173.0,253.0,27.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61666405, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61676405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61676413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61686405, "+proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199.0,32.0,322.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61696405, "+proj=longlat +ellps=clrk66 +towgs84=-115.0,118.0,426.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61706405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61706413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61716405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61716413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61736405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61736413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61746405, "+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs"},
- {61756405, "+proj=longlat +ellps=clrk80 +towgs84=-88.0,4.0,101.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61766405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61766413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61786405, "+proj=longlat +ellps=krass +towgs84=24.0,-123.0,-94.0,0.02,0.25,0.13,0.226891286871806 +no_defs"},
- {61796405, "+proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.17326243724756094 +no_defs"},
- {61806405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61806413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61816405, "+proj=longlat +ellps=intl +towgs84=-193.0,13.7,-39.3,-0.41,-2.933,2.688,0.08869386668625144 +no_defs"},
- {61826405, "+proj=longlat +ellps=intl +towgs84=-422.651,-172.995,84.02,0.0,0.0,0.0,0.0 +no_defs"},
- {61836405, "+proj=longlat +ellps=intl +towgs84=-104.0,167.0,-38.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61846405, "+proj=longlat +ellps=intl +towgs84=-203.0,141.0,53.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61886405, "+proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,1.6810581709138355 +no_defs"},
- {61896405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61896413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61906405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61906413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {61916405, "+proj=longlat +ellps=krass +no_defs"},
- {61926405, "+proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0.0,0.0,0.0,0.0 +no_defs"},
- {61936405, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0.0,0.0,0.0,0.0 +no_defs"},
- {61946405, "+proj=longlat +ellps=intl +towgs84=163.511,127.533,-159.789,0.0,0.0,0.814,-0.12375888374825782 +no_defs"},
- {61956405, "+proj=longlat +ellps=intl +towgs84=105.0,326.0,-102.5,0.0,0.0,0.814,-0.12375888374825782 +no_defs"},
- {61966405, "+proj=longlat +ellps=intl +towgs84=-45.0,417.0,-3.5,0.0,0.0,0.814,-0.12375888374825782 +no_defs"},
- {61976405, "+proj=longlat +ellps=clrk80 +no_defs"},
- {61986405, "+proj=longlat +ellps=clrk80 +no_defs"},
- {61996405, "+proj=longlat +ellps=intl +no_defs"},
- {62006405, "+proj=longlat +ellps=krass +no_defs"},
- {62016405, "+proj=longlat +ellps=clrk80 +towgs84=-165.0,-11.0,206.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62026405, "+proj=longlat +ellps=aust_SA +towgs84=-124.133,-42.003,137.4,-0.008,-0.557,-0.178,-0.3824149507821167 +no_defs"},
- {62036405, "+proj=longlat +ellps=aust_SA +towgs84=-117.763,-51.51,139.061,0.292,-0.443,-0.277,-0.03939657799319541 +no_defs"},
- {62046405, "+proj=longlat +ellps=intl +towgs84=-18.944,-379.364,-24.063,0.04,0.764,-6.431,0.7543103964456315 +no_defs"},
- {62056405, "+proj=longlat +ellps=krass +towgs84=-43.0,-163.0,45.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62066405, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {62076405, "+proj=longlat +ellps=intl +towgs84=-288.885,-91.744,126.244,-1.691,-0.41,0.211,-0.948405579124149 +no_defs"},
- {62086405, "+proj=longlat +ellps=intl +towgs84=-161.0,310.0,-145.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62096405, "+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-138.0,-105.0,-289.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62106405, "+proj=longlat +ellps=clrk80 +towgs84=-157.0,-2.0,-299.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62116405, "+proj=longlat +ellps=bessel +towgs84=-377.7,675.1,-52.2,0.0,0.0,0.0,0.0 +no_defs"},
- {62126405, "+proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0.0,0.0,0.0,0.0 +no_defs"},
- {62136405, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106.0,-87.0,188.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62146405, "+proj=longlat +ellps=krass +towgs84=15.8,-154.4,-82.3,0.0,0.0,0.0,0.0 +no_defs"},
- {62156405, "+proj=longlat +ellps=intl +no_defs"},
- {62166405, "+proj=longlat +ellps=clrk66 +towgs84=-73.0,213.0,296.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62186405, "+proj=longlat +ellps=intl +towgs84=304.5,306.5,-318.1,0.0,0.0,0.0,0.0 +no_defs"},
- {62196405, "+proj=longlat +ellps=bessel +towgs84=-384.0,664.0,-48.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62206405, "+proj=longlat +ellps=clrk80 +towgs84=-50.9,-347.6,-231.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62216405, "+proj=longlat +ellps=intl +towgs84=-154.5,150.7,100.4,0.0,0.0,0.0,0.0 +no_defs"},
- {62226405, "+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-136.0,-108.0,-292.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62236405, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-260.1,5.5,432.2,0.0,0.0,0.0,0.0 +no_defs"},
- {62246405, "+proj=longlat +ellps=intl +towgs84=-134.0,229.0,-29.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62256405, "+proj=longlat +ellps=intl +towgs84=-206.0,172.0,-6.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62276405, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83.58,-397.54,458.78,-17.595,-2.847,4.256,0.6652040001468859 +no_defs"},
- {62296405, "+proj=longlat +ellps=helmert +towgs84=-130.0,110.0,-13.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62306405, "+proj=longlat +ellps=intl +towgs84=-157.89,-17.16,-78.41,2.118,2.697,-1.434,-1.1097046576093785 +no_defs"},
- {62316405, "+proj=longlat +ellps=intl +towgs84=-82.981,-99.719,-110.709,-0.10470001565102613,0.031001600378938583,0.08040202147511816,-0.06482902860346239 +no_defs"},
- {62326405, "+proj=longlat +ellps=clrk80 +towgs84=-346.0,-1.0,224.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62336405, "+proj=longlat +ellps=intl +towgs84=-133.0,-321.0,50.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62366405, "+proj=longlat +ellps=intl +towgs84=-637.0,-549.0,-203.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62376405, "+proj=longlat +ellps=GRS67 +towgs84=57.01,-69.97,-9.29,0.0,0.0,0.0,0.0 +no_defs"},
- {62386405, "+proj=longlat +a=6378160 +b=6356774.50408554 +towgs84=-1.977,-13.06,-9.993,0.364,-0.254,-0.689,-0.2138966040782389 +no_defs"},
- {62396405, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217.0,823.0,299.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62406405, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=204.64,834.74,293.8,0.0,0.0,0.0,0.0 +no_defs"},
- {62416405, "+proj=longlat +ellps=clrk80 +no_defs"},
- {62426405, "+proj=longlat +ellps=clrk66 +towgs84=-33.722,153.789,94.959,-8.581,4.478,-4.54,1.8460700159115124 +no_defs"},
- {62436405, "+proj=longlat +a=6377299.36559538 +b=6356098.357204818 +no_defs"},
- {62446405, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97.0,787.0,86.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62456405, "+proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11.0,851.0,5.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62466405, "+proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0.0,0.0,0.0,0.0 +no_defs"},
- {62476405, "+proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0.0,0.0,0.0,0.0 +no_defs"},
- {62486405, "+proj=longlat +ellps=intl +towgs84=-307.7,265.3,-363.5,0.0,0.0,0.0,0.0 +no_defs"},
- {62496405, "+proj=longlat +ellps=intl +no_defs"},
- {62506405, "+proj=longlat +ellps=clrk80 +towgs84=-130.0,29.0,364.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62516405, "+proj=longlat +ellps=clrk80 +towgs84=-90.0,40.0,88.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62526405, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {62536405, "+proj=longlat +ellps=clrk66 +towgs84=-133.0,-77.0,-51.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62546405, "+proj=longlat +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0002681442481212253 +no_defs"},
- {62556405, "+proj=longlat +ellps=intl +towgs84=-333.0,-222.0,114.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62566405, "+proj=longlat +ellps=clrk80 +towgs84=41.0,-220.0,-134.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62576405, "+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0.0,0.0,0.0,0.0 +no_defs"},
- {62586405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62586413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62596405, "+proj=longlat +ellps=intl +towgs84=-254.1,-5.36,-100.29,0.0,0.0,0.0,0.0 +no_defs"},
- {62616405, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=31.0,146.0,47.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62626405, "+proj=longlat +ellps=bessel +towgs84=639.0,405.0,60.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62636405, "+proj=longlat +ellps=clrk80 +towgs84=-90.2,-87.32,114.17,0.0,0.0,0.0,0.0 +no_defs"},
- {62646405, "+proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0.0,0.0,0.0,0.0 +no_defs"},
- {62656405, "+proj=longlat +ellps=intl +towgs84=-50.2,-50.4,84.8,-0.69,-2.012,0.459,-5.791915759418465 +no_defs"},
- {62666405, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-80.7,-132.5,41.1,0.0,0.0,0.0,0.0 +no_defs"},
- {62676405, "+proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs"},
- {62686405, "+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs"},
- {62696405, "+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs"},
- {62706405, "+proj=longlat +ellps=clrk80 +towgs84=-245.0,-153.9,382.8,0.0,0.0,0.0,0.0 +no_defs"},
- {62716405, "+proj=longlat +ellps=intl +towgs84=-2.0,374.0,172.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62726405, "+proj=longlat +ellps=intl +datum=nzgd49 +no_defs"},
- {62736405, "+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93.0,474.5,7.889,0.05,-6.61,1.2809044467944684 +no_defs"},
- {62746405, "+proj=longlat +ellps=intl +towgs84=-239.749,88.181,30.488,0.263,-0.082,-1.211,0.4597642531247778 +no_defs"},
- {62756405, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168.0,-60.0,320.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62766405, "+proj=longlat +ellps=WGS66 +no_defs"},
- {62776405, "+proj=longlat +ellps=airy +datum=OSGB36 +no_defs"},
- {62786405, "+proj=longlat +ellps=airy +no_defs"},
- {62796405, "+proj=longlat +ellps=airy +no_defs"},
- {62806405, "+proj=longlat +ellps=bessel +no_defs"},
- {62816405, "+proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.7224,94.7824,340.8944,-8.001,-4.42,-11.821,0.20626480624709637 +no_defs"},
- {62826405, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-178.3,-316.7,-131.5,5.278,6.077,10.979,3.953271276531849 +no_defs"},
- {62836405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62836413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62846405, "+proj=longlat +ellps=krass +towgs84=-40.595,-18.55,-69.339,2.508,-1.832,2.611,-0.8867324020562674 +no_defs"},
- {62856405, "+proj=longlat +ellps=intl +towgs84=-128.033,-283.697,21.052,0.0,0.0,0.0,0.0 +no_defs"},
- {62866405, "+proj=longlat +ellps=helmert +no_defs"},
- {62886405, "+proj=longlat +ellps=intl +no_defs"},
- {62896405, "+proj=longlat +ellps=bessel +towgs84=565.04,49.91,465.84,-0.40939438743923684,-0.35970519561431136,1.868491000350572,0.8409828680306614 +no_defs"},
- {62926405, "+proj=longlat +ellps=intl +towgs84=-355.0,21.0,72.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62936405, "+proj=longlat +ellps=bess_nam +towgs84=616.0,97.0,-251.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62956405, "+proj=longlat +ellps=bessel +no_defs"},
- {62976405, "+proj=longlat +ellps=intl +towgs84=-189.0,-242.0,-91.0,0.0,0.0,0.0,0.0 +no_defs"},
- {62986405, "+proj=longlat +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0.0,0.0,4.28,1.9388891787227058 +no_defs"},
- {62996405, "+proj=longlat +a=6377340.189 +b=6356034.447938534 +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,1.6810581709138355 +no_defs"},
- {63006405, "+proj=longlat +a=6377340.189 +b=6356034.447938534 +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,1.6810581709138355 +no_defs"},
- {63016405, "+proj=longlat +ellps=bessel +towgs84=-147.0,506.0,687.0,0.0,0.0,0.0,0.0 +no_defs"},
- {63026405, "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0.0,0.0,0.0,0.0 +no_defs"},
- {63036405, "+proj=longlat +ellps=helmert +no_defs"},
- {63046405, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73.0,-247.0,227.0,0.0,0.0,0.0,0.0 +no_defs"},
- {63066405, "+proj=longlat +ellps=bessel +no_defs"},
- {63076405, "+proj=longlat +ellps=clrk80 +towgs84=-169.559,-72.34,303.102,0.0,0.0,0.0,0.0 +no_defs"},
- {63086405, "+proj=longlat +ellps=bessel +no_defs"},
- {63096405, "+proj=longlat +ellps=intl +towgs84=-155.0,171.0,37.0,0.0,0.0,0.0,0.0 +no_defs"},
- {63106405, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs"},
- {63116405, "+proj=longlat +ellps=intl +towgs84=-265.0,120.0,-358.0,0.0,0.0,0.0,0.0 +no_defs"},
- {63126405, "+proj=longlat +ellps=bessel +towgs84=426.9,142.6,460.1,4.91,4.49,-12.42,3.5271281868253483 +no_defs"},
- {63136405, "+proj=longlat +ellps=intl +towgs84=-106.8686,52.2978,-103.7239,0.3366,0.457,-1.8422,0.26292574852317374 +no_defs"},
- {63146405, "+proj=longlat +ellps=bessel +datum=potsdam +no_defs"},
- {63156405, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23.0,259.0,-9.0,0.0,0.0,0.0,0.0 +no_defs"},
- {63166405, "+proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0.0,0.0,0.0,0.0 +no_defs"},
- {63176405, "+proj=longlat +ellps=krass +towgs84=28.0,-121.0,-77.0,0.0,0.0,0.0,0.0 +no_defs"},
- {63186405, "+proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0.0,0.0,0.0,0.0 +no_defs"},
- {63196405, "+proj=longlat +ellps=GRS80 +towgs84=226.702,-193.337,-35.371,-2.229,4.391,-9.238,0.20209825716090501 +no_defs"},
- {63226405, "+proj=longlat +ellps=WGS72 +towgs84=0.0,0.0,4.5,0.0,0.0,0.554,0.045171992568114105 +no_defs"},
- {63246405, "+proj=longlat +ellps=WGS72 +towgs84=0.0,0.0,1.9,0.0,0.0,0.814,-0.07838062637389662 +no_defs"},
- {63266405, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"},
- //{63266406, ""},
- //{63266407, ""},
- //{63266408, ""},
- //{63266409, ""},
- //{63266410, ""},
- {63266411, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"},
- //{63266412, ""},
- {63266413, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"},
- //{63266414, ""},
- //{63266415, ""},
- //{63266416, ""},
- //{63266417, ""},
- //{63266418, ""},
- {63266419, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"},
- //{63266420, ""},
- {66006405, "+proj=longlat +ellps=clrk80 +no_defs"},
- {66016405, "+proj=longlat +ellps=clrk80 +towgs84=-255.0,-15.0,71.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66026405, "+proj=longlat +ellps=clrk80 +towgs84=725.0,685.0,536.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66036405, "+proj=longlat +ellps=clrk80 +towgs84=72.0,213.7,93.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66046405, "+proj=longlat +ellps=clrk80 +towgs84=174.0,359.0,365.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66056405, "+proj=longlat +ellps=clrk80 +towgs84=9.0,183.0,236.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66066405, "+proj=longlat +ellps=clrk80 +towgs84=-149.0,128.0,296.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66076405, "+proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0.0,0.0,0.0,0.0 +no_defs"},
- {66086405, "+proj=longlat +ellps=clrk66 +no_defs"},
- {66096405, "+proj=longlat +ellps=clrk66 +no_defs"},
- {66106405, "+proj=longlat +a=6378140 +b=6356755.288157528 +no_defs"},
- {66116405, "+proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.243649,-1.158827,-0.22570443917666022 +no_defs"},
- {66126405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66126413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66136405, "+proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0.0,0.0,0.0,0.0 +no_defs"},
- {66146405, "+proj=longlat +ellps=intl +towgs84=-119.4248,-303.65872,-11.00061,1.164298,0.174458,1.096259,0.7543238036580374 +no_defs"},
- {66156405, "+proj=longlat +ellps=intl +towgs84=-499.0,-249.0,314.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66166405, "+proj=longlat +ellps=intl +towgs84=-289.0,-124.0,60.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66186405, "+proj=longlat +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0.0,0.0,0.0,0.0 +no_defs"},
- {66196405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66196413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66206405, "+proj=longlat +ellps=clrk80 +towgs84=-106.0,-129.0,165.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66216405, "+proj=longlat +ellps=intl +towgs84=137.0,248.0,-430.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66226405, "+proj=longlat +ellps=intl +towgs84=-472.29,-5.63,-304.12,0.4362,-0.8374,0.2563,0.39157310817948776 +no_defs"},
- {66236405, "+proj=longlat +ellps=intl +towgs84=-186.0,230.0,110.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66246405, "+proj=longlat +ellps=GRS80 +towgs84=2.0,2.0,-2.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66246413, "+proj=longlat +ellps=GRS80 +towgs84=2.0,2.0,-2.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66256405, "+proj=longlat +ellps=intl +towgs84=126.93,547.94,130.41,-2.7867,5.1612,-0.8584,2.851136537311739 +no_defs"},
- {66266405, "+proj=longlat +ellps=intl +towgs84=94.0,-948.0,-1262.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66276405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66276413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66286405, "+proj=longlat +ellps=intl +towgs84=162.0,117.0,154.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66296405, "+proj=longlat +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,-0.8823,-0.5565,0.2835316026672587 +no_defs"},
- {66306405, "+proj=longlat +ellps=intl +towgs84=259.551,297.612,197.833,-1.4866,2.1224,0.4612,5.574285762347154 +no_defs"},
- {66316405, "+proj=longlat +ellps=intl +towgs84=145.0,-187.0,103.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66326405, "+proj=longlat +ellps=intl +towgs84=-382.0,-59.0,-262.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66336405, "+proj=longlat +ellps=intl +towgs84=335.47,222.58,-230.94,0.0,0.0,0.0,0.0 +no_defs"},
- {66346405, "+proj=longlat +ellps=intl +towgs84=-11.64,-348.6,291.98,0.0,0.0,0.0,0.0 +no_defs"},
- {66356405, "+proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,0.9240250790257423 +no_defs"},
- {66366405, "+proj=longlat +ellps=intl +towgs84=365.0,194.0,166.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66376405, "+proj=longlat +ellps=intl +towgs84=325.0,154.0,172.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66386405, "+proj=longlat +ellps=clrk66 +towgs84=30.0,430.0,368.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66396405, "+proj=longlat +ellps=intl +towgs84=253.0,-132.0,-127.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66406405, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66406413, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66416405, "+proj=longlat +ellps=intl +towgs84=287.58,177.78,-135.41,0.0,0.0,0.0,0.0 +no_defs"},
- {66426405, "+proj=longlat +ellps=intl +towgs84=-13.0,-348.0,292.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66436405, "+proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-23.039820110761912 +no_defs"},
- {66446405, "+proj=longlat +ellps=intl +towgs84=-10.18,-350.43,291.37,0.0,0.0,0.0,0.0 +no_defs"},
- {66456405, "+proj=longlat +ellps=intl +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66456413, "+proj=longlat +ellps=intl +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66466405, "+proj=longlat +ellps=intl +no_defs"},
- {66576405, "+proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28.0,199.0,5.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66586405, "+proj=longlat +ellps=intl +towgs84=-73.0,46.0,-86.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66596405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66596413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66606405, "+proj=longlat +ellps=intl +towgs84=982.6087,552.753,-540.873,6.681626625276941,-31.61149240864225,-19.848161004816845,3.466280068982454 +no_defs"},
- {66616405, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66616413, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {66636405, "+proj=longlat +ellps=intl +towgs84=-210.502,-66.902,-48.476,2.094,15.067,5.817,0.10003843102984174 +no_defs"},
- {66646405, "+proj=longlat +ellps=intl +towgs84=-208.719,129.685,52.092,-0.195,0.014,-0.327,0.040840431636925086 +no_defs"},
- {66656405, "+proj=longlat +ellps=intl +towgs84=-103.088,162.481,-28.276,0.167,-0.082,-0.168,-0.31022226859563296 +no_defs"},
- {66666405, "+proj=longlat +ellps=bessel +towgs84=631.392,-66.551,481.442,1.09,4.445,4.487,-0.9137530916746368 +no_defs"},
- {66676405, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs"},
- {68016405, "+proj=longlat +ellps=bessel +pm=bern +no_defs"},
- {68026405, "+proj=longlat +ellps=intl +pm=bogota +no_defs"},
- {68036405, "+proj=longlat +ellps=intl +pm=lisbon +no_defs"},
- {68046405, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs"},
- {68056405, "+proj=longlat +ellps=bessel +pm=ferro +no_defs"},
- {68066405, "+proj=longlat +ellps=intl +pm=rome +no_defs"},
- {68086405, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs"},
- {68096405, "+proj=longlat +ellps=intl +pm=brussels +no_defs"},
- {68136405, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs"},
- {68146405, "+proj=longlat +ellps=bessel +pm=stockholm +no_defs"},
- {68156405, "+proj=longlat +ellps=bessel +pm=athens +no_defs"},
- {68186405, "+proj=longlat +ellps=bessel +pm=ferro +no_defs"},
- {68206405, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs"},
- {69036405, "+proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs"}
- };
-
- const code_element * first = arr;
- const code_element * last = arr + sizeof(arr) / sizeof(code_element);
- const code_element * el = binary_find_code_element(first, last, code);
-
- return el != last ? el->proj4_str : "";
- }
-
-}
-#endif // DOXYGEN_NO_DETAIL
-
-
-}}} // namespace boost::geometry::projections
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/epsg_params.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/epsg_params.hpp
deleted file mode 100644
index e9572bf25de..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/epsg_params.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_SRS_PROJECTIONS_EPSG_PARAMS_HPP
-#define BOOST_GEOMETRY_SRS_PROJECTIONS_EPSG_PARAMS_HPP
-
-
-#include <string>
-
-#include <boost/geometry/srs/spheroid.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace srs
-{
-
-
-struct epsg
-{
- explicit epsg(int c)
- : code(c)
- {}
-
- int code;
-};
-
-
-template <int Code>
-struct static_epsg
-{
- static const int code = Code;
-};
-
-
-} // namespace srs
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_SRS_PROJECTIONS_EPSG_PARAMS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/epsg_traits.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/epsg_traits.hpp
deleted file mode 100644
index 6cc642cae48..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/epsg_traits.hpp
+++ /dev/null
@@ -1,4417 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_EPSG_TRAITS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_EPSG_TRAITS_HPP
-
-
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/srs/projections/factory.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/srid_traits.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-/*!
- \brief EPSG traits
- \details With help of the EPSG traits library users can statically use projections
- or coordinate systems specifying an EPSG code. The correct projections for transformations
- are used automically then, still keeping static polymorphism.
- \ingroup projection
- \tparam EPSG epsg code
-*/
-template <size_t EPSG>
-struct epsg_traits
-{
- // Specializations define:
- // - type to get projection type
- // - function par to get parameters
-};
-
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2000, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2001, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2002, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2003, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2004, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2005, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2006, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2007, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2008, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2009, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2010, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2011, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2012, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2013, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2014, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2015, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2016, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2017, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2018, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2019, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2020, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2021, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2022, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2023, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2024, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2025, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2026, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2027, utm, clrk66, "+proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2028, utm, clrk66, "+proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2029, utm, clrk66, "+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2030, utm, clrk66, "+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2031, utm, clrk66, "+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2032, utm, clrk66, "+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2033, utm, clrk66, "+proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2034, utm, clrk66, "+proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2035, utm, clrk66, "+proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2036, sterea, GRS80, "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2037, utm, GRS80, "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2038, utm, GRS80, "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2039, tmerc, GRS80, "+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2040, utm, clrk80, "+proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2041, utm, clrk80, "+proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2042, utm, clrk80, "+proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2043, utm, clrk80, "+proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2044, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2045, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2046, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2047, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2048, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2049, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2050, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2051, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2052, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2053, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2054, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2055, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2056, somerc, bessel, "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2057, omerc, intl, "+proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2058, utm, intl, "+proj=utm +zone=38 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2059, utm, intl, "+proj=utm +zone=39 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2060, utm, intl, "+proj=utm +zone=40 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2061, utm, intl, "+proj=utm +zone=41 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2062, lcc, 6378298.3, 6356657.142669561, "+proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2063, utm, 6378249.2, 6356515, "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2064, utm, 6378249.2, 6356515, "+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2065, krovak, bessel, "+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2066, cass, 6378293.645208759, 6356617.987679838, "+proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2067, utm, intl, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2068, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2069, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2070, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2071, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2072, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2073, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2074, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2075, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2076, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2077, utm, intl, "+proj=utm +zone=32 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2078, utm, intl, "+proj=utm +zone=33 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2079, utm, intl, "+proj=utm +zone=34 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2080, utm, intl, "+proj=utm +zone=35 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2081, tmerc, intl, "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2082, tmerc, intl, "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2083, tmerc, intl, "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2084, utm, intl, "+proj=utm +zone=19 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2085, lcc, clrk66, NAD27, "+proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2086, lcc, clrk66, NAD27, "+proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2087, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2088, tmerc, 6378249.2, 6356515, "+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2089, utm, WGS84, "+proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2090, utm, WGS84, "+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2091, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2092, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2093, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2094, tmerc, WGS72, "+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2095, utm, intl, "+proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2096, tmerc, bessel, "+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2097, tmerc, bessel, "+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2098, tmerc, bessel, "+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2099, cass, helmert, "+proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2100, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2101, lcc, intl, "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2102, lcc, intl, "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2103, lcc, intl, "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2104, lcc, intl, "+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2105, tmerc, GRS80, "+proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2106, tmerc, GRS80, "+proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2107, tmerc, GRS80, "+proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2108, tmerc, GRS80, "+proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2109, tmerc, GRS80, "+proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2110, tmerc, GRS80, "+proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2111, tmerc, GRS80, "+proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2112, tmerc, GRS80, "+proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2113, tmerc, GRS80, "+proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2114, tmerc, GRS80, "+proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2115, tmerc, GRS80, "+proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2116, tmerc, GRS80, "+proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2117, tmerc, GRS80, "+proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2118, tmerc, GRS80, "+proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2119, tmerc, GRS80, "+proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2120, tmerc, GRS80, "+proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2121, tmerc, GRS80, "+proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2122, tmerc, GRS80, "+proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2123, tmerc, GRS80, "+proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2124, tmerc, GRS80, "+proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2125, tmerc, GRS80, "+proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2126, tmerc, GRS80, "+proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2127, tmerc, GRS80, "+proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2128, tmerc, GRS80, "+proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2129, tmerc, GRS80, "+proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2130, tmerc, GRS80, "+proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2131, tmerc, GRS80, "+proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2132, tmerc, GRS80, "+proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2133, utm, GRS80, "+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2134, utm, GRS80, "+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2135, utm, GRS80, "+proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2136, tmerc, 6378300, 6356751.689189189, "+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2137, tmerc, 6378300, 6356751.689189189, "+proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2138, lcc, clrk66, "+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2139, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2140, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2141, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2142, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2143, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2144, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2145, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2146, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2147, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2148, utm, GRS80, "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2149, utm, GRS80, "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2150, utm, GRS80, "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2151, utm, GRS80, "+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2152, utm, GRS80, "+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2153, utm, GRS80, "+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2154, lcc, GRS80, "+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2155, lcc, clrk66, "+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2156, utm, GRS80, "+proj=utm +zone=59 +south +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2157, tmerc, GRS80, "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2158, utm, GRS80, "+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2159, tmerc, 6378300, 6356751.689189189, "+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2160, tmerc, 6378300, 6356751.689189189, "+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2161, utm, clrk80, "+proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2162, utm, clrk80, "+proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (epsg, 2163, laea, 6370997, "+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2164, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2165, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2166, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2167, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2168, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2169, tmerc, intl, "+proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2170, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2171, sterea, krass, "+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2172, sterea, krass, "+proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2173, sterea, krass, "+proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2174, sterea, krass, "+proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2175, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2176, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2177, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2178, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2179, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2180, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2188, utm, intl, "+proj=utm +zone=25 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2189, utm, intl, "+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2190, utm, intl, "+proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2191, utm, intl, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2192, lcc, intl, "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2193, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2194, lcc, clrk66, "+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2195, utm, GRS80, "+proj=utm +zone=2 +south +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2196, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2197, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2198, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2199, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2200, sterea, 6378135, 6356750.304921594, "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2201, utm, GRS80, "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2202, utm, GRS80, "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2203, utm, GRS80, "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2204, lcc, clrk66, NAD27, "+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2205, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2206, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2207, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2208, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2209, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2210, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2211, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2212, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2213, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2214, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2215, utm, 6378249.2, 6356515, "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2216, utm, intl, "+proj=utm +zone=22 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2217, utm, intl, "+proj=utm +zone=23 +ellps=intl +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2218, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2219, utm, 6378135, 6356750.304921594, "+proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2220, utm, 6378135, 6356750.304921594, "+proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2221, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2222, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2223, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2224, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2225, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2226, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2227, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2228, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2229, lcc, GRS80, NAD83, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2230, lcc, GRS80, NAD83, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2231, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2232, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2233, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2234, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2235, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2236, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2237, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2238, lcc, GRS80, NAD83, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2239, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2240, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2241, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2242, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2243, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2244, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2245, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2246, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2247, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2248, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2249, lcc, GRS80, NAD83, "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2250, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2251, lcc, GRS80, NAD83, "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2252, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2253, lcc, GRS80, NAD83, "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2254, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2255, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2256, lcc, GRS80, NAD83, "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2257, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2258, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2259, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2260, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2261, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2262, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2263, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2264, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2265, lcc, GRS80, NAD83, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2266, lcc, GRS80, NAD83, "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2267, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2268, lcc, GRS80, NAD83, "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2269, lcc, GRS80, NAD83, "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2270, lcc, GRS80, NAD83, "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2271, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2272, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2273, lcc, GRS80, NAD83, "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2274, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2275, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2276, lcc, GRS80, NAD83, "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2277, lcc, GRS80, NAD83, "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2278, lcc, GRS80, NAD83, "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2279, lcc, GRS80, NAD83, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2280, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2281, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2282, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2283, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2284, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2285, lcc, GRS80, NAD83, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2286, lcc, GRS80, NAD83, "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2287, lcc, GRS80, NAD83, "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2288, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2289, lcc, GRS80, NAD83, "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2290, sterea, 6378135, 6356750.304921594, "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2291, sterea, 6378135, 6356750.304921594, "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2292, sterea, GRS80, "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2294, tmerc, 6378135, 6356750.304921594, "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2295, tmerc, 6378135, 6356750.304921594, "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2296, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2297, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2298, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2299, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2300, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2301, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2302, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2303, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2304, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2305, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2306, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2307, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2308, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2309, tmerc, WGS84, WGS84, "+proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2310, tmerc, WGS84, WGS84, "+proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2311, tmerc, WGS84, WGS84, "+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2312, utm, clrk80, "+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2313, utm, clrk80, "+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2314, cass, 6378293.645208759, 6356617.987679838, "+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2315, utm, intl, "+proj=utm +zone=19 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2316, utm, intl, "+proj=utm +zone=20 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2317, lcc, intl, "+proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2318, lcc, intl, "+proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2319, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2320, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2321, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2322, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2323, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2324, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2325, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2326, tmerc, intl, "+proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2327, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2328, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2329, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2330, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2331, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2332, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2333, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2334, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2335, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2336, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2337, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2338, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2339, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2340, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2341, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2342, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2343, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2344, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2345, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2346, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2347, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2348, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2349, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2350, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2351, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2352, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2353, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2354, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2355, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2356, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2357, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2358, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2359, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2360, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2361, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2362, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2363, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2364, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2365, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2366, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2367, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2368, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2369, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2370, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2371, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2372, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2373, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2374, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2375, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2376, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2377, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2378, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2379, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2380, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2381, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2382, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2383, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2384, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2385, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2386, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2387, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2388, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2389, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2390, tmerc, 6378140, 6356755.288157528, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2391, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2392, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2393, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2394, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2395, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2396, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2397, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2398, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2399, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2400, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2401, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2402, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2403, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2404, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2405, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2406, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2407, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2408, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2409, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2410, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2411, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2412, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2413, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2414, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2415, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2416, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2417, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2418, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2419, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2420, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2421, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2422, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2423, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2424, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2425, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2426, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2427, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2428, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2429, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2430, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2431, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2432, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2433, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2434, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2435, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2436, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2437, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2438, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2439, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2440, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2441, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2442, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2443, tmerc, GRS80, "+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2444, tmerc, GRS80, "+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2445, tmerc, GRS80, "+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2446, tmerc, GRS80, "+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2447, tmerc, GRS80, "+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2448, tmerc, GRS80, "+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2449, tmerc, GRS80, "+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2450, tmerc, GRS80, "+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2451, tmerc, GRS80, "+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2452, tmerc, GRS80, "+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2453, tmerc, GRS80, "+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2454, tmerc, GRS80, "+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2455, tmerc, GRS80, "+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2456, tmerc, GRS80, "+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2457, tmerc, GRS80, "+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2458, tmerc, GRS80, "+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2459, tmerc, GRS80, "+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2460, tmerc, GRS80, "+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2461, tmerc, GRS80, "+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2462, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2463, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2464, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2465, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2466, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2467, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2468, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2469, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2470, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2471, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2472, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2473, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2474, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2475, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2476, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2477, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2478, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2479, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2480, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2481, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2482, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2483, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2484, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2485, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2486, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2487, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2488, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2489, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2490, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2491, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2492, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2493, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2494, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2495, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2496, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2497, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2498, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2499, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2500, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2501, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2502, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2503, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2504, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2505, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2506, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2507, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2508, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2509, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2510, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2511, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2512, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2513, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2514, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2515, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2516, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2517, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2518, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2519, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2520, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2521, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2522, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2523, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2524, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2525, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2526, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2527, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2528, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2529, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2530, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2531, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2532, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2533, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2534, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2535, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2536, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2537, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2538, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2539, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2540, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2541, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2542, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2543, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2544, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2545, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2546, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2547, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2548, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2549, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2550, utm, bessel, "+proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2551, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2552, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2553, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2554, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2555, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2556, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2557, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2558, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2559, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2560, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2561, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2562, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2563, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2564, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2565, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2566, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2567, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2568, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2569, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2570, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2571, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2572, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2573, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2574, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2575, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2576, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2577, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2578, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2579, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2580, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2581, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2582, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2583, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2584, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2585, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2586, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2587, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2588, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2589, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2590, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2591, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2592, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2593, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2594, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2595, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2596, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2597, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2598, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2599, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2600, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2601, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2602, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2603, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2604, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2605, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2606, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2607, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2608, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2609, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2610, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2611, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2612, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2613, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2614, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2615, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2616, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2617, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2618, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2619, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2620, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2621, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2622, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2623, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2624, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2625, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2626, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2627, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2628, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2629, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2630, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2631, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2632, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2633, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2634, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2635, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2636, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2637, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2638, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2639, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2640, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2641, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2642, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2643, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2644, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2645, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2646, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2647, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2648, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2649, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2650, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2651, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2652, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2653, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2654, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2655, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2656, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2657, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2658, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2659, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2660, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2661, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2662, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2663, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2664, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2665, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2666, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2667, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2668, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2669, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2670, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2671, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2672, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2673, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2674, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2675, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2676, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2677, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2678, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2679, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2680, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2681, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2682, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2683, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2684, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2685, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2686, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2687, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2688, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2689, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2690, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2691, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2692, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2693, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2694, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2695, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2696, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2697, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2698, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2699, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2700, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2701, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2702, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2703, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2704, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2705, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2706, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2707, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2708, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2709, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2710, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2711, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2712, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2713, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2714, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2715, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2716, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2717, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2718, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2719, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2720, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2721, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2722, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2723, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2724, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2725, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2726, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2727, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2728, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2729, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2730, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2731, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2732, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2733, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2734, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2735, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2736, utm, clrk66, "+proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2737, utm, clrk66, "+proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2738, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2739, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2740, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2741, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2742, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2743, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2744, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2745, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2746, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2747, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2748, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2749, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2750, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2751, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2752, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2753, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2754, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2755, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2756, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2757, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2758, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2759, tmerc, GRS80, "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2760, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2761, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2762, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2763, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2764, lcc, GRS80, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2765, lcc, GRS80, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2766, lcc, GRS80, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2767, lcc, GRS80, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2768, lcc, GRS80, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2769, lcc, GRS80, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2770, lcc, GRS80, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2771, lcc, GRS80, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2772, lcc, GRS80, "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2773, lcc, GRS80, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2774, lcc, GRS80, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2775, lcc, GRS80, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2776, tmerc, GRS80, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2777, tmerc, GRS80, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2778, tmerc, GRS80, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2779, lcc, GRS80, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2780, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2781, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2782, tmerc, GRS80, "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2783, tmerc, GRS80, "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2784, tmerc, GRS80, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2785, tmerc, GRS80, "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2786, tmerc, GRS80, "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2787, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2788, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2789, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2790, tmerc, GRS80, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2791, tmerc, GRS80, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2792, tmerc, GRS80, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2793, tmerc, GRS80, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2794, lcc, GRS80, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2795, lcc, GRS80, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2796, lcc, GRS80, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2797, lcc, GRS80, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2798, lcc, GRS80, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2799, lcc, GRS80, "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2800, lcc, GRS80, "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2801, lcc, GRS80, "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2802, tmerc, GRS80, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2803, tmerc, GRS80, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2804, lcc, GRS80, "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2805, lcc, GRS80, "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2806, lcc, GRS80, "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2807, lcc, GRS80, "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2808, lcc, GRS80, "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2809, lcc, GRS80, "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2810, lcc, GRS80, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2811, lcc, GRS80, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2812, lcc, GRS80, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2813, tmerc, GRS80, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2814, tmerc, GRS80, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2815, tmerc, GRS80, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2816, tmerc, GRS80, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2817, tmerc, GRS80, "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2818, lcc, GRS80, "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2819, lcc, GRS80, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2820, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2821, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2822, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2823, tmerc, GRS80, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2824, tmerc, GRS80, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2825, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2826, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2827, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2828, tmerc, GRS80, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2829, tmerc, GRS80, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2830, tmerc, GRS80, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2831, lcc, GRS80, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2832, lcc, GRS80, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2833, lcc, GRS80, "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2834, lcc, GRS80, "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2835, lcc, GRS80, "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2836, lcc, GRS80, "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2837, lcc, GRS80, "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2838, lcc, GRS80, "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2839, lcc, GRS80, "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2840, tmerc, GRS80, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2841, lcc, GRS80, "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2842, lcc, GRS80, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2843, lcc, GRS80, "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2844, lcc, GRS80, "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2845, lcc, GRS80, "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2846, lcc, GRS80, "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2847, lcc, GRS80, "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2848, lcc, GRS80, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2849, lcc, GRS80, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2850, lcc, GRS80, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2851, lcc, GRS80, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2852, tmerc, GRS80, "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2853, lcc, GRS80, "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2854, lcc, GRS80, "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2855, lcc, GRS80, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2856, lcc, GRS80, "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2857, lcc, GRS80, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2858, lcc, GRS80, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2859, lcc, GRS80, "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2860, lcc, GRS80, "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2861, lcc, GRS80, "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2862, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2863, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2864, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2865, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2866, lcc, GRS80, "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2867, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2868, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2869, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2870, lcc, GRS80, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2871, lcc, GRS80, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2872, lcc, GRS80, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2873, lcc, GRS80, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2874, lcc, GRS80, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2875, lcc, GRS80, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2876, lcc, GRS80, "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2877, lcc, GRS80, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2878, lcc, GRS80, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2879, lcc, GRS80, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2880, tmerc, GRS80, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2881, tmerc, GRS80, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2882, tmerc, GRS80, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2883, lcc, GRS80, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2884, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2885, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2886, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2887, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2888, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2889, tmerc, GRS80, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2890, tmerc, GRS80, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2891, lcc, GRS80, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2892, lcc, GRS80, "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2893, lcc, GRS80, "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2894, lcc, GRS80, "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2895, lcc, GRS80, "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2896, lcc, GRS80, "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2897, lcc, GRS80, "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2898, lcc, GRS80, "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2899, tmerc, GRS80, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2900, tmerc, GRS80, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2901, lcc, GRS80, "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2902, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2903, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2904, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2905, tmerc, GRS80, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2906, tmerc, GRS80, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2907, tmerc, GRS80, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2908, lcc, GRS80, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2909, lcc, GRS80, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2910, lcc, GRS80, "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2911, lcc, GRS80, "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2912, lcc, GRS80, "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2913, lcc, GRS80, "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2914, lcc, GRS80, "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2915, lcc, GRS80, "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2916, lcc, GRS80, "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2917, lcc, GRS80, "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2918, lcc, GRS80, "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2919, lcc, GRS80, "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2920, lcc, GRS80, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2921, lcc, GRS80, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2922, lcc, GRS80, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2923, lcc, GRS80, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2924, lcc, GRS80, "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2925, lcc, GRS80, "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2926, lcc, GRS80, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2927, lcc, GRS80, "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2928, lcc, GRS80, "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2929, lcc, GRS80, "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2930, lcc, GRS80, "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 2931, tmerc, 6378249.2, 6356515, "+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2932, tmerc, intl, "+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2933, utm, bessel, "+proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2934, merc, bessel, "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2935, tmerc, krass, "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2936, tmerc, krass, "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2937, tmerc, krass, "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2938, tmerc, krass, "+proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2939, tmerc, krass, "+proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2940, tmerc, krass, "+proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2941, tmerc, krass, "+proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2942, utm, intl, "+proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2943, utm, intl, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2944, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2945, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2946, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2947, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2948, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2949, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2950, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2951, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2952, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2953, sterea, GRS80, "+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2954, sterea, GRS80, "+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2955, utm, GRS80, "+proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2956, utm, GRS80, "+proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2957, utm, GRS80, "+proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2958, utm, GRS80, "+proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2959, utm, GRS80, "+proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2960, utm, GRS80, "+proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2961, utm, GRS80, "+proj=utm +zone=20 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2962, utm, GRS80, "+proj=utm +zone=21 +ellps=GRS80 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2963, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2964, aea, clrk66, NAD27, "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2965, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2966, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2967, tmerc, GRS80, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2968, tmerc, GRS80, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2969, utm, intl, "+proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2970, utm, intl, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2971, utm, intl, "+proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2972, utm, GRS80, "+proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2973, utm, intl, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2975, utm, GRS80, "+proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2976, utm, intl, "+proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2977, utm, intl, "+proj=utm +zone=5 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2978, utm, intl, "+proj=utm +zone=7 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2979, utm, intl, "+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2980, utm, intl, "+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2981, utm, intl, "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2982, utm, intl, "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2983, utm, intl, "+proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2984, lcc, intl, "+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2985, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 2986, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2987, utm, clrk66, "+proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2988, utm, intl, "+proj=utm +zone=1 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2989, utm, WGS84, "+proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2990, tmerc, intl, "+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2991, lcc, GRS80, NAD83, "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 2992, lcc, GRS80, NAD83, "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2993, lcc, GRS80, "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2994, lcc, GRS80, "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2995, utm, intl, "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2996, utm, intl, "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2997, utm, intl, "+proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2998, utm, intl, "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 2999, utm, intl, "+proj=utm +zone=38 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3000, merc, bessel, "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3001, merc, bessel, "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3002, merc, bessel, "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3003, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3004, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3005, aea, GRS80, NAD83, "+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3006, utm, GRS80, "+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3007, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3008, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3009, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3010, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3011, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3012, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3013, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3014, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3015, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3016, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3017, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3018, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3019, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3020, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3021, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3022, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3023, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3024, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3025, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3026, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3027, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3028, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3029, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3030, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3031, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3032, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3033, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3034, lcc, GRS80, "+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3035, laea, GRS80, "+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3036, utm, WGS84, "+proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3037, utm, WGS84, "+proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3038, utm, GRS80, "+proj=utm +zone=26 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3039, utm, GRS80, "+proj=utm +zone=27 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3040, utm, GRS80, "+proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3041, utm, GRS80, "+proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3042, utm, GRS80, "+proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3043, utm, GRS80, "+proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3044, utm, GRS80, "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3045, utm, GRS80, "+proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3046, utm, GRS80, "+proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3047, utm, GRS80, "+proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3048, utm, GRS80, "+proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3049, utm, GRS80, "+proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3050, utm, GRS80, "+proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3051, utm, GRS80, "+proj=utm +zone=39 +ellps=GRS80 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3052, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3053, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3054, utm, intl, "+proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3055, utm, intl, "+proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3056, utm, intl, "+proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3057, lcc, GRS80, "+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3058, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3059, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3060, utm, intl, "+proj=utm +zone=58 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3061, utm, intl, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3062, utm, intl, "+proj=utm +zone=26 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3063, utm, intl, "+proj=utm +zone=26 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3064, utm, WGS84, "+proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3065, utm, WGS84, "+proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3066, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3067, utm, GRS80, "+proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3068, cass, bessel, potsdam, "+proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +datum=potsdam +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3069, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3070, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3071, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3072, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3073, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3074, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3075, tmerc, GRS80, "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3076, tmerc, GRS80, "+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3077, tmerc, GRS80, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3078, omerc, GRS80, NAD83, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3079, omerc, GRS80, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3080, lcc, clrk66, NAD27, "+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3081, lcc, GRS80, NAD83, "+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3082, lcc, GRS80, NAD83, "+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3083, aea, GRS80, NAD83, "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3084, lcc, GRS80, "+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3085, aea, GRS80, "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3086, aea, GRS80, NAD83, "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3087, aea, GRS80, "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3088, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3089, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3090, lcc, GRS80, "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3091, lcc, GRS80, "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3092, utm, bessel, "+proj=utm +zone=51 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3093, utm, bessel, "+proj=utm +zone=52 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3094, utm, bessel, "+proj=utm +zone=53 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3095, utm, bessel, "+proj=utm +zone=54 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3096, utm, bessel, "+proj=utm +zone=55 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3097, utm, GRS80, "+proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3098, utm, GRS80, "+proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3099, utm, GRS80, "+proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3100, utm, GRS80, "+proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3101, utm, GRS80, "+proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3102, lcc, clrk66, "+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3103, utm, clrk80, "+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3104, utm, clrk80, "+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3105, utm, clrk80, "+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3106, tmerc, 6377276.345, 6356075.41314024, "+proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3107, lcc, GRS80, "+proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3108, tmerc, GRS80, "+proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3109, tmerc, GRS80, "+proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3110, lcc, aust_SA, "+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3111, lcc, GRS80, "+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3112, lcc, GRS80, "+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3113, tmerc, GRS80, "+proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3114, tmerc, GRS80, "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3115, tmerc, GRS80, "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3116, tmerc, GRS80, "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3117, tmerc, GRS80, "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3118, tmerc, GRS80, "+proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3119, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3120, sterea, krass, "+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3121, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3122, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3123, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3124, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3125, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3126, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3127, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3128, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3129, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3130, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3131, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3132, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3133, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3134, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3135, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3136, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3137, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3138, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3139, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3140, cass, 6378306.3696, 6356571.996, "+proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3141, utm, intl, "+proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3142, utm, intl, "+proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3143, tmerc, WGS72, "+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3144, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3145, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3146, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3147, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3148, utm, 6377276.345, 6356075.41314024, "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3149, utm, 6377276.345, 6356075.41314024, "+proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3150, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3151, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3152, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3153, aea, GRS80, "+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3154, utm, GRS80, "+proj=utm +zone=7 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3155, utm, GRS80, "+proj=utm +zone=8 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3156, utm, GRS80, "+proj=utm +zone=9 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3157, utm, GRS80, "+proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3158, utm, GRS80, "+proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3159, utm, GRS80, "+proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3160, utm, GRS80, "+proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3161, lcc, GRS80, NAD83, "+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3162, lcc, GRS80, "+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3163, lcc, GRS80, "+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3164, utm, WGS84, "+proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3165, lcc, intl, "+proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3166, lcc, intl, "+proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3167, omerc, 6377295.664, 6356094.667915204, "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3168, omerc, 6377295.664, 6356094.667915204, "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3169, utm, GRS80, "+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3170, utm, GRS80, "+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3171, utm, GRS80, "+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3172, utm, intl, "+proj=utm +zone=59 +south +ellps=intl +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3173, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3174, aea, GRS80, NAD83, "+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3175, aea, GRS80, NAD83, "+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3176, tmerc, 6377276.345, 6356075.41314024, "+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3177, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3178, utm, GRS80, "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3179, utm, GRS80, "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3180, utm, GRS80, "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3181, utm, GRS80, "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3182, utm, GRS80, "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3183, utm, GRS80, "+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3184, utm, GRS80, "+proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3185, utm, GRS80, "+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3186, utm, GRS80, "+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3187, utm, GRS80, "+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3188, utm, GRS80, "+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3189, utm, GRS80, "+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3190, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3191, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3192, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3193, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3194, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3195, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3196, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3197, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3198, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3199, utm, intl, "+proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3200, lcc, clrk80, "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3201, utm, intl, "+proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3202, utm, intl, "+proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3203, utm, intl, "+proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3204, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3205, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3206, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3207, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3208, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3209, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3210, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3211, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3212, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3213, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3214, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3215, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3216, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3217, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3218, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3219, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3220, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3221, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3222, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3223, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3224, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3225, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3226, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3227, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3228, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3229, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3230, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3231, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3232, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3233, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3234, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3235, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3236, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3237, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3238, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3239, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3240, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3241, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3242, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3243, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3244, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3245, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3246, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3247, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3248, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3249, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3250, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3251, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3252, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3253, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3254, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3255, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3256, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3257, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3258, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3259, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3260, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3261, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3262, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3263, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3264, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3265, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3266, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3267, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3268, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3269, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3270, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3271, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3272, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3273, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3274, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3275, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3276, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3277, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3278, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3279, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3280, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3281, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3282, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3283, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3284, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3285, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3286, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3287, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3288, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3289, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3290, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3291, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3292, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3293, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3294, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3295, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3296, utm, GRS80, "+proj=utm +zone=5 +south +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3297, utm, GRS80, "+proj=utm +zone=6 +south +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3298, utm, GRS80, "+proj=utm +zone=7 +south +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3299, utm, GRS80, "+proj=utm +zone=8 +south +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3300, lcc, GRS80, "+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3301, lcc, GRS80, "+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3302, utm, intl, "+proj=utm +zone=7 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3303, utm, intl, "+proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3304, utm, intl, "+proj=utm +zone=6 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3305, utm, intl, "+proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3306, utm, intl, "+proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3307, utm, WGS84, "+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3308, lcc, GRS80, "+proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3309, aea, clrk66, NAD27, "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3310, aea, GRS80, NAD83, "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3311, aea, GRS80, "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3312, utm, intl, "+proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3313, utm, GRS80, "+proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3314, lcc, clrk66, "+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3315, tmerc, clrk66, "+proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3316, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3317, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3318, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3319, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3320, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3321, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3322, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3323, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3324, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3325, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3326, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3327, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3328, sterea, krass, "+proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3329, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3330, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3331, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3332, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3333, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3334, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3335, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3336, utm, intl, "+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3337, lcc, clrk80, "+proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3338, aea, GRS80, NAD83, "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3339, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3340, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3341, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3342, utm, clrk80, "+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3343, utm, GRS80, "+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3344, utm, GRS80, "+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3345, utm, GRS80, "+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3346, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3347, lcc, GRS80, NAD83, "+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3348, lcc, GRS80, "+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3349, merc, WGS84, WGS84, "+proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3350, tmerc, krass, "+proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3351, tmerc, krass, "+proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3352, tmerc, krass, "+proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3353, utm, intl, "+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3354, utm, intl, "+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3355, tmerc, helmert, "+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3356, utm, clrk66, "+proj=utm +zone=17 +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3357, utm, clrk66, "+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3358, lcc, GRS80, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3359, lcc, GRS80, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3360, lcc, GRS80, "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3361, lcc, GRS80, "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3362, lcc, GRS80, "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3363, lcc, GRS80, "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3364, lcc, GRS80, "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3365, lcc, GRS80, "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3366, cass, 6378293.645208759, 6356617.987679838, "+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3367, utm, clrk80, "+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3368, utm, clrk80, "+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3369, utm, clrk80, "+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3370, utm, clrk66, NAD27, "+proj=utm +zone=59 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3371, utm, clrk66, NAD27, "+proj=utm +zone=60 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3372, utm, GRS80, NAD83, "+proj=utm +zone=59 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3373, utm, GRS80, NAD83, "+proj=utm +zone=60 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3374, utm, intl, "+proj=utm +zone=29 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3375, omerc, GRS80, "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3376, omerc, GRS80, "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3377, cass, GRS80, "+proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3378, cass, GRS80, "+proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3379, cass, GRS80, "+proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3380, cass, GRS80, "+proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3381, cass, GRS80, "+proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3382, cass, GRS80, "+proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3383, cass, GRS80, "+proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3384, cass, GRS80, "+proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3385, cass, GRS80, "+proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3386, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3387, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3388, merc, krass, "+proj=merc +lon_0=51 +k=1 +x_0=0 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3389, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3390, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3391, utm, clrk80, "+proj=utm +zone=37 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3392, utm, clrk80, "+proj=utm +zone=38 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3393, utm, clrk80, "+proj=utm +zone=39 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3394, lcc, clrk80, "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3395, merc, WGS84, WGS84, "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3396, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3397, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3398, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3399, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3400, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3401, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3402, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3403, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3404, lcc, GRS80, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3405, utm, WGS84, "+proj=utm +zone=48 +ellps=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3406, utm, WGS84, "+proj=utm +zone=49 +ellps=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3407, cass, 6378293.645208759, 6356617.987679838, "+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (epsg, 3408, laea, 6371228, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (epsg, 3409, laea, 6371228, "+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (epsg, 3410, cea, 6371228, "+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3411, stere, 6378273, 6356889.449, "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3412, stere, 6378273, 6356889.449, "+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3413, stere, WGS84, WGS84, "+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3414, tmerc, WGS84, "+proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3415, lcc, WGS72, "+proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3416, lcc, GRS80, "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3417, lcc, GRS80, NAD83, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3418, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3419, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3420, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3421, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3422, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3423, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3424, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3425, lcc, GRS80, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3426, lcc, GRS80, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3427, lcc, GRS80, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3428, lcc, GRS80, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3429, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3430, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3431, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3432, tmerc, GRS80, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3433, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3434, lcc, GRS80, NAD83, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3435, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3436, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3437, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3438, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3439, utm, clrk80, "+proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3440, utm, clrk80, "+proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3441, lcc, GRS80, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3442, lcc, GRS80, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3443, tmerc, GRS80, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3444, tmerc, GRS80, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3445, tmerc, GRS80, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3446, tmerc, GRS80, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3447, lcc, GRS80, "+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3448, lcc, WGS84, "+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3449, utm, WGS84, "+proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3450, utm, WGS84, "+proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3451, lcc, GRS80, NAD83, "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3452, lcc, GRS80, NAD83, "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3453, lcc, GRS80, NAD83, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3454, lcc, GRS80, NAD83, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3455, lcc, GRS80, NAD83, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3456, lcc, GRS80, "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3457, lcc, GRS80, "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3458, lcc, GRS80, "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3459, lcc, GRS80, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3460, tmerc, WGS72, "+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3461, utm, 6378249.2, 6356515, "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 3462, utm, 6378249.2, 6356515, "+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3463, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3464, tmerc, GRS80, "+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3465, tmerc, GRS80, "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3466, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3467, aea, GRS80, "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3468, omerc, GRS80, "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3469, tmerc, GRS80, "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3470, tmerc, GRS80, "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3471, tmerc, GRS80, "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3472, tmerc, GRS80, "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3473, tmerc, GRS80, "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3474, tmerc, GRS80, "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3475, tmerc, GRS80, "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3476, tmerc, GRS80, "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3477, lcc, GRS80, "+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3478, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3479, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3480, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3481, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3482, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3483, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3484, lcc, GRS80, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3485, lcc, GRS80, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3486, lcc, GRS80, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3487, lcc, GRS80, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3488, aea, GRS80, "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3489, lcc, GRS80, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3490, lcc, GRS80, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3491, lcc, GRS80, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3492, lcc, GRS80, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3493, lcc, GRS80, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3494, lcc, GRS80, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3495, lcc, GRS80, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3496, lcc, GRS80, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3497, lcc, GRS80, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3498, lcc, GRS80, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3499, lcc, GRS80, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3500, lcc, GRS80, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3501, lcc, GRS80, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3502, lcc, GRS80, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3503, lcc, GRS80, "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3504, lcc, GRS80, "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3505, lcc, GRS80, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3506, lcc, GRS80, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3507, lcc, GRS80, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3508, lcc, GRS80, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3509, tmerc, GRS80, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3510, tmerc, GRS80, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3511, tmerc, GRS80, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3512, tmerc, GRS80, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3513, aea, GRS80, "+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3514, lcc, GRS80, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3515, lcc, GRS80, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3516, tmerc, GRS80, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3517, tmerc, GRS80, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3518, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3519, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3520, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3521, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3522, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3523, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3524, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3525, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3526, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3527, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3528, tmerc, GRS80, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3529, tmerc, GRS80, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3530, tmerc, GRS80, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3531, tmerc, GRS80, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3532, tmerc, GRS80, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3533, tmerc, GRS80, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3534, tmerc, GRS80, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3535, tmerc, GRS80, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3536, lcc, GRS80, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3537, lcc, GRS80, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3538, lcc, GRS80, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3539, lcc, GRS80, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3540, lcc, GRS80, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3541, lcc, GRS80, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3542, lcc, GRS80, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3543, lcc, GRS80, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3544, lcc, GRS80, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3545, lcc, GRS80, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3546, lcc, GRS80, "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3547, lcc, GRS80, "+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3548, lcc, GRS80, "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3549, lcc, GRS80, "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3550, lcc, GRS80, "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3551, lcc, GRS80, "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3552, lcc, GRS80, "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3553, lcc, GRS80, "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3554, tmerc, GRS80, "+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3555, tmerc, GRS80, "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3556, tmerc, GRS80, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3557, tmerc, GRS80, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3558, tmerc, GRS80, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3559, lcc, GRS80, "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3560, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3561, tmerc, clrk66, "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3562, tmerc, clrk66, "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3563, tmerc, clrk66, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3564, tmerc, clrk66, "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3565, tmerc, clrk66, "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3566, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3567, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3568, lcc, GRS80, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3569, lcc, GRS80, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3570, lcc, GRS80, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3571, laea, WGS84, WGS84, "+proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3572, laea, WGS84, WGS84, "+proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3573, laea, WGS84, WGS84, "+proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3574, laea, WGS84, WGS84, "+proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3575, laea, WGS84, WGS84, "+proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3576, laea, WGS84, WGS84, "+proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3577, aea, GRS80, "+proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3578, aea, GRS80, NAD83, "+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3579, aea, GRS80, "+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3580, lcc, GRS80, NAD83, "+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3581, lcc, GRS80, "+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3582, lcc, GRS80, "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3583, lcc, GRS80, "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3584, lcc, GRS80, "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3585, lcc, GRS80, "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3586, lcc, GRS80, "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3587, lcc, GRS80, "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3588, lcc, GRS80, "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3589, lcc, GRS80, "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3590, lcc, GRS80, "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3591, omerc, GRS80, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3592, lcc, GRS80, "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3593, lcc, GRS80, "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3594, lcc, GRS80, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3595, lcc, GRS80, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3596, lcc, GRS80, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3597, tmerc, GRS80, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3598, tmerc, GRS80, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3599, tmerc, GRS80, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3600, tmerc, GRS80, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3601, tmerc, GRS80, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3602, tmerc, GRS80, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3603, tmerc, GRS80, "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3604, lcc, GRS80, "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3605, lcc, GRS80, "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3606, lcc, GRS80, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3607, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3608, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3609, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3610, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3611, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3612, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3613, tmerc, GRS80, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3614, tmerc, GRS80, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3615, tmerc, GRS80, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3616, tmerc, GRS80, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3617, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3618, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3619, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3620, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3621, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3622, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3623, tmerc, GRS80, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3624, tmerc, GRS80, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3625, tmerc, GRS80, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3626, tmerc, GRS80, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3627, lcc, GRS80, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3628, lcc, GRS80, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3629, tmerc, GRS80, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3630, tmerc, GRS80, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3631, lcc, GRS80, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3632, lcc, GRS80, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3633, lcc, GRS80, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3634, lcc, GRS80, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3635, lcc, GRS80, "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3636, lcc, GRS80, "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3637, lcc, GRS80, "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3638, lcc, GRS80, "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3639, lcc, GRS80, "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3640, lcc, GRS80, "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3641, lcc, GRS80, "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3642, lcc, GRS80, "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3643, lcc, GRS80, "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3644, lcc, GRS80, "+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3645, lcc, GRS80, "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3646, lcc, GRS80, "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3647, lcc, GRS80, "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3648, lcc, GRS80, "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3649, lcc, GRS80, "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3650, lcc, GRS80, "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3651, lcc, GRS80, "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3652, lcc, GRS80, "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3653, tmerc, GRS80, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3654, tmerc, GRS80, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3655, lcc, GRS80, "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3656, lcc, GRS80, "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3657, lcc, GRS80, "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3658, lcc, GRS80, "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3659, lcc, GRS80, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3660, lcc, GRS80, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3661, lcc, GRS80, "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3662, lcc, GRS80, "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3663, lcc, GRS80, "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3664, lcc, GRS80, "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3665, aea, GRS80, "+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3666, lcc, GRS80, "+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3667, lcc, GRS80, "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3668, lcc, GRS80, "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3669, lcc, GRS80, "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3670, lcc, GRS80, "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3671, lcc, GRS80, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3672, lcc, GRS80, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3673, lcc, GRS80, "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3674, lcc, GRS80, "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3675, lcc, GRS80, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3676, lcc, GRS80, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3677, lcc, GRS80, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3678, lcc, GRS80, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3679, lcc, GRS80, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3680, lcc, GRS80, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3681, lcc, GRS80, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3682, lcc, GRS80, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3683, lcc, GRS80, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3684, tmerc, GRS80, "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3685, lcc, GRS80, "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3686, lcc, GRS80, "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3687, lcc, GRS80, "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3688, lcc, GRS80, "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3689, lcc, GRS80, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3690, lcc, GRS80, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3691, lcc, GRS80, "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3692, lcc, GRS80, "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3693, lcc, GRS80, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3694, lcc, GRS80, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3695, lcc, GRS80, "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3696, lcc, GRS80, "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3697, lcc, GRS80, "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3698, lcc, GRS80, "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3699, lcc, GRS80, "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3700, lcc, GRS80, "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3701, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3702, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3703, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3704, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3705, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3706, utm, GRS80, "+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3707, utm, GRS80, "+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3708, utm, GRS80, "+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3709, utm, GRS80, "+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3710, utm, GRS80, "+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3711, utm, GRS80, "+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3712, utm, GRS80, "+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3713, utm, GRS80, "+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3714, utm, GRS80, "+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3715, utm, GRS80, "+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3716, utm, GRS80, "+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3717, utm, GRS80, "+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3718, utm, GRS80, "+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3719, utm, GRS80, "+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3720, utm, GRS80, "+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3721, utm, GRS80, "+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3722, utm, GRS80, "+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3723, utm, GRS80, "+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3724, utm, GRS80, "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3725, utm, GRS80, "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3726, utm, GRS80, "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3727, tmerc, intl, "+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3728, lcc, GRS80, "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3729, lcc, GRS80, "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3730, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3731, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3732, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3733, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3734, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3735, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3736, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3737, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3738, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3739, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3740, utm, GRS80, "+proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3741, utm, GRS80, "+proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3742, utm, GRS80, "+proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3743, utm, GRS80, "+proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3744, utm, GRS80, "+proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3745, utm, GRS80, "+proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3746, utm, GRS80, "+proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3747, utm, GRS80, "+proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3748, utm, GRS80, "+proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3749, utm, GRS80, "+proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3750, utm, GRS80, "+proj=utm +zone=4 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3751, utm, GRS80, "+proj=utm +zone=5 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3752, merc, WGS84, WGS84, "+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3753, lcc, GRS80, "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3754, lcc, GRS80, "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3755, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3756, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3757, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3758, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3759, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3760, tmerc, GRS80, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3761, utm, GRS80, "+proj=utm +zone=22 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3762, lcc, WGS84, WGS84, "+proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3763, tmerc, GRS80, "+proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3764, tmerc, GRS80, "+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3765, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3766, lcc, GRS80, "+proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3767, utm, GRS80, "+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3768, utm, GRS80, "+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3769, utm, clrk66, "+proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3770, tmerc, WGS84, "+proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3771, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3772, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3773, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3774, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3775, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3776, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3777, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3778, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3779, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3780, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3781, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3782, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3783, tmerc, WGS84, "+proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3784, utm, intl, "+proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (epsg, 3785, merc, 6378137, "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (epsg, 3786, eqc, 6371007, "+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3787, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3788, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3789, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3790, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3791, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3793, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3794, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3795, lcc, clrk66, NAD27, "+proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3796, lcc, clrk66, NAD27, "+proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3797, lcc, clrk66, NAD27, "+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3798, lcc, GRS80, NAD83, "+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3799, lcc, GRS80, "+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3800, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 3801, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3802, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3812, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3814, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3815, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3816, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3819, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,2.9383,-0.853,-0.7029504596901044 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3821, longlat, aust_SA, "+proj=longlat +ellps=aust_SA +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3822, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3823, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3824, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3825, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3826, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3827, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3828, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3829, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3832, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3833, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3834, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3835, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3836, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3837, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3838, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3839, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3840, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3841, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3842, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3843, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3844, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3845, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3846, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3847, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3848, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3849, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3850, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3920, utm, clrk66, "+proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3942, lcc, GRS80, "+proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3943, lcc, GRS80, "+proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3944, lcc, GRS80, "+proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3945, lcc, GRS80, "+proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3946, lcc, GRS80, "+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3947, lcc, GRS80, "+proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3948, lcc, GRS80, "+proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3949, lcc, GRS80, "+proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3950, lcc, GRS80, "+proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3991, lcc, clrk66, "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 3992, lcc, clrk66, "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3993, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3994, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3995, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3996, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 3997, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4001, longlat, airy, "+proj=longlat +ellps=airy +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4002, longlat, 6377340.189, 6356034.447938534, "+proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4003, longlat, aust_SA, "+proj=longlat +ellps=aust_SA +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4004, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4005, longlat, 6377492.018, 6356173.508712696, "+proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4006, longlat, bess_nam, "+proj=longlat +ellps=bess_nam +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4007, longlat, 6378293.645208759, 6356617.987679838, "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4008, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4009, longlat, 6378450.047548896, 6356826.621488444, "+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4010, longlat, 6378300.789, 6356566.435, "+proj=longlat +a=6378300.789 +b=6356566.435 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4011, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4012, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4013, longlat, 6378249.145, 6356514.966398753, "+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4014, longlat, 6378249.2, 6356514.996941779, "+proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4015, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4016, longlat, evrstSS, "+proj=longlat +ellps=evrstSS +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4018, longlat, 6377304.063, 6356103.038993155, "+proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4019, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4020, longlat, helmert, "+proj=longlat +ellps=helmert +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4021, longlat, 6378160, 6356774.50408554, "+proj=longlat +a=6378160 +b=6356774.50408554 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4022, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4024, longlat, krass, "+proj=longlat +ellps=krass +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4025, longlat, WGS66, "+proj=longlat +ellps=WGS66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4027, longlat, 6376523, 6355862.933255573, "+proj=longlat +a=6376523 +b=6355862.933255573 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4028, longlat, 6378298.3, 6356657.142669561, "+proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4029, longlat, 6378300, 6356751.689189189, "+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4030, longlat, WGS84, "+proj=longlat +ellps=WGS84 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4031, longlat, WGS84, "+proj=longlat +ellps=WGS84 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4032, longlat, 6378136.2, 6356751.516927429, "+proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4033, longlat, 6378136.3, 6356751.616592146, "+proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4034, longlat, 6378249.144808011, 6356514.966204134, "+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (epsg, 4035, longlat, 6371000, "+proj=longlat +a=6371000 +b=6371000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4036, longlat, GRS67, "+proj=longlat +ellps=GRS67 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4041, longlat, 6378135, 6356750.304921594, "+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4042, longlat, 6377299.36559538, 6356098.359005157, "+proj=longlat +a=6377299.36559538 +b=6356098.359005157 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4043, longlat, WGS72, "+proj=longlat +ellps=WGS72 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4044, longlat, 6377301.243, 6356100.230165384, "+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4045, longlat, 6377299.151, 6356098.145120132, "+proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (epsg, 4047, longlat, 6371007, "+proj=longlat +a=6371007 +b=6371007 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (epsg, 4052, longlat, 6370997, "+proj=longlat +a=6370997 +b=6370997 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (epsg, 4053, longlat, 6371228, "+proj=longlat +a=6371228 +b=6371228 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4054, longlat, 6378273, 6356889.449, "+proj=longlat +a=6378273 +b=6356889.449 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (epsg, 4055, longlat, 6378137, "+proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4120, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4121, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4122, longlat, 6378135, 6356750.304921594, "+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4123, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4124, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4125, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4126, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4127, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4128, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4129, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4130, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4131, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4132, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4133, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4134, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4135, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4136, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4137, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4138, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4139, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4140, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4141, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4142, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4143, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4144, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4145, longlat, 6377301.243, 6356100.230165384, "+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4146, longlat, 6377299.151, 6356098.145120132, "+proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4147, longlat, krass, "+proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4148, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4149, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4150, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4151, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4152, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4153, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4154, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4155, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4156, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4157, longlat, 6378293.645208759, 6356617.987679838, "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4158, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4159, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4160, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4161, longlat, intl, "+proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4162, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4163, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4164, longlat, krass, "+proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4165, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4166, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4167, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4168, longlat, 6378300, 6356751.689189189, "+proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4169, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4170, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4171, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4172, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4173, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4174, longlat, 6378300, 6356751.689189189, "+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4175, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4176, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4178, longlat, krass, "+proj=longlat +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4179, longlat, krass, "+proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4180, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4181, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4182, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4183, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4184, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4185, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4188, longlat, airy, "+proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4189, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4190, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4191, longlat, krass, "+proj=longlat +ellps=krass +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4192, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4193, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4194, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4195, longlat, intl, "+proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4196, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4197, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4198, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4199, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4200, longlat, krass, "+proj=longlat +ellps=krass +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4201, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4202, longlat, aust_SA, "+proj=longlat +ellps=aust_SA +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4203, longlat, aust_SA, "+proj=longlat +ellps=aust_SA +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4204, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4205, longlat, krass, "+proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4206, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4207, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4208, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4209, longlat, 6378249.145, 6356514.966398753, "+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4210, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4211, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4212, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4213, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4214, longlat, krass, "+proj=longlat +ellps=krass +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4215, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4216, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4218, longlat, intl, "+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4219, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4220, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4221, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4222, longlat, 6378249.145, 6356514.966398753, "+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4223, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4224, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4225, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4226, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4227, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4228, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4229, longlat, helmert, "+proj=longlat +ellps=helmert +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4230, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4231, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4232, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4233, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4234, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4235, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4236, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4237, longlat, GRS67, "+proj=longlat +ellps=GRS67 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4238, longlat, 6378160, 6356774.50408554, "+proj=longlat +a=6378160 +b=6356774.50408554 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4239, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4240, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4241, longlat, 6378249.144808011, 6356514.966204134, "+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4242, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4243, longlat, 6377299.36559538, 6356098.359005157, "+proj=longlat +a=6377299.36559538 +b=6356098.359005157 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4244, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4245, longlat, 6377304.063, 6356103.038993155, "+proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4246, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4247, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4248, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4249, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4250, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4251, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4252, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4253, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4254, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4255, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4256, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4257, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4258, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4259, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4260, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4261, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4262, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4263, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4264, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4265, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4266, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 4267, longlat, clrk66, NAD27, "+proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4268, longlat, 6378450.047548896, 6356826.621488444, "+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 4269, longlat, GRS80, NAD83, "+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4270, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4271, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 4272, longlat, intl, nzgd49, "+proj=longlat +ellps=intl +datum=nzgd49 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4273, longlat, 6377492.018, 6356173.508712696, "+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4274, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4275, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4276, longlat, WGS66, "+proj=longlat +ellps=WGS66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 4277, longlat, airy, OSGB36, "+proj=longlat +ellps=airy +datum=OSGB36 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4278, longlat, airy, "+proj=longlat +ellps=airy +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4279, longlat, airy, "+proj=longlat +ellps=airy +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4280, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4281, longlat, 6378300.789, 6356566.435, "+proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4282, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4283, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4284, longlat, krass, "+proj=longlat +ellps=krass +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4285, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4286, longlat, helmert, "+proj=longlat +ellps=helmert +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4287, longlat, intl, "+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4288, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4289, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4291, longlat, GRS67, "+proj=longlat +ellps=GRS67 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4292, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4293, longlat, bess_nam, "+proj=longlat +ellps=bess_nam +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4294, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4295, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4296, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4297, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4298, longlat, evrstSS, "+proj=longlat +ellps=evrstSS +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4299, longlat, 6377340.189, 6356034.447938534, "+proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4300, longlat, 6377340.189, 6356034.447938534, "+proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4301, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4302, longlat, 6378293.645208759, 6356617.987679838, "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4303, longlat, helmert, "+proj=longlat +ellps=helmert +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4304, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4306, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4307, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4308, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4309, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4310, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4311, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4312, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4313, longlat, intl, "+proj=longlat +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 4314, longlat, bessel, potsdam, "+proj=longlat +ellps=bessel +datum=potsdam +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4315, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4316, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4317, longlat, krass, "+proj=longlat +ellps=krass +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4318, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4319, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4322, longlat, WGS72, "+proj=longlat +ellps=WGS72 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4324, longlat, WGS72, "+proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 4326, longlat, WGS84, WGS84, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 4327, longlat, WGS84, WGS84, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4328, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 4329, longlat, WGS84, WGS84, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4330, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4331, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4332, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4333, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4334, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4335, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4336, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4337, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4338, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4339, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4340, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4341, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4342, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4343, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4344, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4345, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4346, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4347, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4348, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4349, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4350, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4351, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4352, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4353, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4354, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4355, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4356, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4357, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,-0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4358, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4359, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4360, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4361, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4362, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4363, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4364, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4365, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4366, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4367, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4368, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4369, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4370, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4371, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=2.0,2.0,-2.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4372, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4373, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4374, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4375, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4376, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4377, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4378, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4379, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4380, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4381, longlat, intl, "+proj=longlat +ellps=intl +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4382, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4383, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4384, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4385, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4386, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4387, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4388, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4389, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4600, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4601, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4602, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4603, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4604, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4605, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4606, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4607, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4608, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4609, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4610, longlat, 6378140, 6356755.288157528, "+proj=longlat +a=6378140 +b=6356755.288157528 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4611, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4612, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4613, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4614, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4615, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4616, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4617, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4618, longlat, aust_SA, "+proj=longlat +ellps=aust_SA +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4619, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4620, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4621, longlat, intl, "+proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4622, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4623, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4624, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4625, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4626, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4627, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4628, longlat, intl, "+proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4629, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4630, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4631, longlat, intl, "+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4632, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4633, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4634, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4635, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4636, longlat, intl, "+proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4637, longlat, intl, "+proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4638, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4639, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4640, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4641, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4642, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4643, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4644, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4645, longlat, intl, "+proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4646, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4657, longlat, 6377019.27, 6355762.5391, "+proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4658, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4659, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4660, longlat, intl, "+proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4661, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4662, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4663, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4664, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4665, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4666, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4667, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4668, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4669, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4670, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4671, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4672, longlat, intl, "+proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4673, longlat, intl, "+proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4674, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4675, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4676, longlat, krass, "+proj=longlat +ellps=krass +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4677, longlat, krass, "+proj=longlat +ellps=krass +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4678, longlat, krass, "+proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4679, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4680, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4681, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4682, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4683, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4684, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4685, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4686, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4687, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4688, longlat, intl, "+proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4689, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4690, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4691, longlat, intl, "+proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4692, longlat, intl, "+proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4693, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4694, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4695, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4696, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4697, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4698, longlat, intl, "+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4699, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4700, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4701, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4702, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4703, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4704, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4705, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4706, longlat, helmert, "+proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4707, longlat, intl, "+proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4708, longlat, aust_SA, "+proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4709, longlat, intl, "+proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4710, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4711, longlat, intl, "+proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4712, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4713, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4714, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4715, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4716, longlat, intl, "+proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4717, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4718, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4719, longlat, intl, "+proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4720, longlat, WGS72, "+proj=longlat +ellps=WGS72 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4721, longlat, intl, "+proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4722, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4723, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4724, longlat, intl, "+proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4725, longlat, intl, "+proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4726, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4727, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4728, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4729, longlat, intl, "+proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4730, longlat, intl, "+proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4731, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4732, longlat, 6378270, 6356794.343434343, "+proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4733, longlat, intl, "+proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4734, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4735, longlat, intl, "+proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4736, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4737, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4738, longlat, 6378293.645208759, 6356617.987679838, "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4739, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4740, longlat, 6378136, 6356751.361745712, "+proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0,0,1.5,-0,-0,0.076,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4741, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4742, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4743, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4744, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4745, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4746, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4747, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4748, longlat, 6378306.3696, 6356571.996, "+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4749, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4750, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4751, longlat, 6377295.664, 6356094.667915204, "+proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4752, longlat, 6378306.3696, 6356571.996, "+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4753, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4754, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4755, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4756, longlat, WGS84, "+proj=longlat +ellps=WGS84 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4757, longlat, WGS84, "+proj=longlat +ellps=WGS84 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4758, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4759, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4760, longlat, WGS66, "+proj=longlat +ellps=WGS66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4761, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4762, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4763, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4764, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4765, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4801, longlat, bessel, "+proj=longlat +ellps=bessel +pm=bern +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4802, longlat, intl, "+proj=longlat +ellps=intl +pm=bogota +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4803, longlat, intl, "+proj=longlat +ellps=intl +pm=lisbon +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4804, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4805, longlat, bessel, "+proj=longlat +ellps=bessel +pm=ferro +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4806, longlat, intl, "+proj=longlat +ellps=intl +pm=rome +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4807, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4808, longlat, bessel, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4809, longlat, intl, "+proj=longlat +ellps=intl +pm=brussels +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4810, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4811, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4813, longlat, bessel, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4814, longlat, bessel, "+proj=longlat +ellps=bessel +pm=stockholm +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4815, longlat, bessel, "+proj=longlat +ellps=bessel +pm=athens +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4816, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4817, longlat, 6377492.018, 6356173.508712696, "+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4818, longlat, bessel, "+proj=longlat +ellps=bessel +pm=ferro +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4819, longlat, clrk80, "+proj=longlat +ellps=clrk80 +pm=paris +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4820, longlat, bessel, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4821, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4882, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4883, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4884, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4885, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4886, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4887, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4888, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4889, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4890, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4891, longlat, WGS66, "+proj=longlat +ellps=WGS66 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4892, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4893, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4894, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4895, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4896, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4897, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4898, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4899, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4900, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-208.4058,-109.8777,-2.5764,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4901, longlat, 6376523, 6355862.933255573, "+proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4902, longlat, 6376523, 6355862.933255573, "+proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4903, longlat, 6378298.3, 6356657.142669561, "+proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4904, longlat, bessel, "+proj=longlat +ellps=bessel +pm=lisbon +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4906, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4907, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4908, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4909, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4913, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4914, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4915, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4916, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4917, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4918, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4919, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4920, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4921, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4922, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 4923, longlat, 6378136, 6356751.361745712, "+proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0.0,0.0,1.5,-0.0,0.0,-0.076,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4924, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4925, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4926, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4927, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4928, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4929, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4930, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4931, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4932, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4933, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4934, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4935, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4936, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4937, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4938, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4939, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4940, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4941, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4942, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4943, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4944, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4945, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4946, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4947, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4948, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4949, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4950, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4951, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4952, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4953, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,-0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4954, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4955, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4956, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4957, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4958, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4959, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4960, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4961, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4962, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4963, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4964, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4965, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4966, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4967, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=2.0,2.0,-2.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4968, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4969, longlat, intl, "+proj=longlat +ellps=intl +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4970, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4971, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4972, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4973, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4974, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4975, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4976, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4977, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4978, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 4979, longlat, WGS84, WGS84, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4980, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4981, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4982, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4983, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4984, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4985, longlat, WGS72, "+proj=longlat +ellps=WGS72 +towgs84=0.0,0.0,4.5,0.0,0.0,0.554,0.045171992568114105 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4986, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4987, longlat, WGS72, "+proj=longlat +ellps=WGS72 +towgs84=0.0,0.0,1.9,0.0,0.0,0.814,-0.07838062637389662 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4988, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4989, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4990, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4991, longlat, krass, "+proj=longlat +ellps=krass +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4992, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4993, longlat, krass, "+proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4994, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4995, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,-4.903,-1.578,-0.21864069462192215 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4996, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4997, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 4998, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 4999, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,-0.0003,0.007,-0.001918262698097996 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5600, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5601, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5602, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5603, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5604, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5605, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5606, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5607, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5608, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5609, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5610, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5611, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5612, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5613, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5614, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5615, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5616, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5617, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5618, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5619, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5620, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5701, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5702, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5703, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5704, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5705, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5706, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5709, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5710, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5711, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5712, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5713, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5714, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5715, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5716, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5717, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5718, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5719, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5720, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5721, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5722, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5723, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5724, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5725, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5726, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5727, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5728, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5729, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5730, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5731, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5732, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5733, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5734, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5735, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5736, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5737, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5738, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5739, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5740, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5741, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5742, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5743, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5744, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5745, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5746, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5747, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5748, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5749, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5750, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5751, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5752, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5753, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5754, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5755, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5756, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5757, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5758, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5759, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5760, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5761, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5762, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5763, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5764, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5765, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5766, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5767, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5768, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5769, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5770, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5771, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5772, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5773, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5774, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5775, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5776, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5777, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5778, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5779, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5780, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5781, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5782, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5783, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5784, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5785, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5786, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5787, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5788, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5789, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5790, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5791, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5792, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5793, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5794, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5795, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5796, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5797, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5798, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5799, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5800, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5801, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5802, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5803, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5804, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5805, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5806, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5807, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5808, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5809, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5810, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5811, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5812, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5813, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5814, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5815, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5816, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5817, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5818, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5819, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5820, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 5821, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7400, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7401, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7402, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7403, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7404, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7405, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7406, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7407, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7408, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7409, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7410, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7411, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7412, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7413, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7414, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7415, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7416, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7417, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7418, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7419, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7420, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7421, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 7422, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20004, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20005, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20006, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20007, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20008, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20009, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20010, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20011, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20012, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20013, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20014, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20015, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20016, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20017, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20018, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20019, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20020, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20021, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20022, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20023, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20024, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20025, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20026, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20027, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20028, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20029, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20030, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20031, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20032, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20064, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20065, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20066, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20067, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20068, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20069, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20070, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20071, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20072, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20073, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20074, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20075, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20076, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20077, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20078, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20079, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20080, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20081, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20082, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20083, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20084, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20085, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20086, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20087, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20088, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20089, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20090, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20091, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20092, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20135, utm, clrk80, "+proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20136, utm, clrk80, "+proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20137, utm, clrk80, "+proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20138, utm, clrk80, "+proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20248, utm, aust_SA, "+proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20249, utm, aust_SA, "+proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20250, utm, aust_SA, "+proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20251, utm, aust_SA, "+proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20252, utm, aust_SA, "+proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20253, utm, aust_SA, "+proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20254, utm, aust_SA, "+proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20255, utm, aust_SA, "+proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20256, utm, aust_SA, "+proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20257, utm, aust_SA, "+proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20258, utm, aust_SA, "+proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20348, utm, aust_SA, "+proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20349, utm, aust_SA, "+proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20350, utm, aust_SA, "+proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20351, utm, aust_SA, "+proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20352, utm, aust_SA, "+proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20353, utm, aust_SA, "+proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20354, utm, aust_SA, "+proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20355, utm, aust_SA, "+proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20356, utm, aust_SA, "+proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20357, utm, aust_SA, "+proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20358, utm, aust_SA, "+proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20436, utm, intl, "+proj=utm +zone=36 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20437, utm, intl, "+proj=utm +zone=37 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20438, utm, intl, "+proj=utm +zone=38 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20439, utm, intl, "+proj=utm +zone=39 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20440, utm, intl, "+proj=utm +zone=40 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20499, utm, intl, "+proj=utm +zone=39 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20538, utm, krass, "+proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20539, utm, krass, "+proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20790, tmerc, intl, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20791, tmerc, intl, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20822, utm, intl, "+proj=utm +zone=22 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20823, utm, intl, "+proj=utm +zone=23 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 20824, utm, intl, "+proj=utm +zone=24 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 20934, utm, 6378249.145, 6356514.966398753, "+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 20935, utm, 6378249.145, 6356514.966398753, "+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 20936, utm, 6378249.145, 6356514.966398753, "+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21035, utm, clrk80, "+proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21036, utm, clrk80, "+proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21037, utm, clrk80, "+proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21095, utm, clrk80, "+proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21096, utm, clrk80, "+proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21097, utm, clrk80, "+proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21100, merc, bessel, "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21148, utm, bessel, "+proj=utm +zone=48 +south +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21149, utm, bessel, "+proj=utm +zone=49 +south +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21150, utm, bessel, "+proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21291, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21292, tmerc, clrk80, "+proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21413, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21414, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21415, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21416, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21417, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21418, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21419, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21420, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21421, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21422, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21423, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21453, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21454, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21455, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21456, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21457, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21458, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21459, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21460, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21461, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21462, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21463, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21473, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21474, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21475, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21476, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21477, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21478, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21479, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21480, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21481, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21482, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21483, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21500, lcc, intl, "+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21780, somerc, bessel, "+proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21781, somerc, bessel, "+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 21782, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21817, utm, intl, "+proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21818, utm, intl, "+proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21891, tmerc, intl, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21892, tmerc, intl, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21893, tmerc, intl, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21894, tmerc, intl, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21896, tmerc, intl, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21897, tmerc, intl, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21898, tmerc, intl, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 21899, tmerc, intl, "+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22032, utm, clrk80, "+proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22033, utm, clrk80, "+proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22091, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22092, tmerc, clrk80, "+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22171, tmerc, GRS80, "+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22172, tmerc, GRS80, "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22173, tmerc, GRS80, "+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22174, tmerc, GRS80, "+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22175, tmerc, GRS80, "+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22176, tmerc, GRS80, "+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22177, tmerc, GRS80, "+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22181, tmerc, WGS84, "+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22182, tmerc, WGS84, "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22183, tmerc, WGS84, "+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22184, tmerc, WGS84, "+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22185, tmerc, WGS84, "+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22186, tmerc, WGS84, "+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22187, tmerc, WGS84, "+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22191, tmerc, intl, "+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22192, tmerc, intl, "+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22193, tmerc, intl, "+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22194, tmerc, intl, "+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22195, tmerc, intl, "+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22196, tmerc, intl, "+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22197, tmerc, intl, "+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 22234, utm, 6378249.145, 6356514.966398753, "+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 22235, utm, 6378249.145, 6356514.966398753, "+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 22236, utm, 6378249.145, 6356514.966398753, "+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 22275, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 22277, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 22279, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 22281, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 22283, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 22285, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 22287, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 22289, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 22291, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 22293, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 22300, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 22332, utm, 6378249.2, 6356515, "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 22391, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 22392, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22521, utm, intl, "+proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22522, utm, intl, "+proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22523, utm, intl, "+proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22524, utm, intl, "+proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22525, utm, intl, "+proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 22700, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 22770, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 22780, sterea, 6378249.2, 6356515, "+proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 22832, utm, 6378249.2, 6356515, "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22991, tmerc, helmert, "+proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22992, tmerc, helmert, "+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22993, tmerc, helmert, "+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 22994, tmerc, helmert, "+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23028, utm, intl, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23029, utm, intl, "+proj=utm +zone=29 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23030, utm, intl, "+proj=utm +zone=30 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23031, utm, intl, "+proj=utm +zone=31 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23032, utm, intl, "+proj=utm +zone=32 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23033, utm, intl, "+proj=utm +zone=33 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23034, utm, intl, "+proj=utm +zone=34 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23035, utm, intl, "+proj=utm +zone=35 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23036, utm, intl, "+proj=utm +zone=36 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23037, utm, intl, "+proj=utm +zone=37 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23038, utm, intl, "+proj=utm +zone=38 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23090, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23095, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23239, utm, clrk80, "+proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23240, utm, clrk80, "+proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23433, utm, 6378249.2, 6356515, "+proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23700, somerc, GRS67, "+proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23830, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23831, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23832, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23833, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23834, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23835, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23836, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23837, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23838, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23839, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23840, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23841, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23842, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23843, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23844, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23845, tmerc, WGS84, "+proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23846, utm, 6378160, 6356774.50408554, "+proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23847, utm, 6378160, 6356774.50408554, "+proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23848, utm, 6378160, 6356774.50408554, "+proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23849, utm, 6378160, 6356774.50408554, "+proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23850, utm, 6378160, 6356774.50408554, "+proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23851, utm, 6378160, 6356774.50408554, "+proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23852, utm, 6378160, 6356774.50408554, "+proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23853, utm, 6378160, 6356774.50408554, "+proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23866, utm, WGS84, "+proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23867, utm, WGS84, "+proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23868, utm, WGS84, "+proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23869, utm, WGS84, "+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23870, utm, WGS84, "+proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23871, utm, WGS84, "+proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23872, utm, WGS84, "+proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23877, utm, WGS84, "+proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23878, utm, WGS84, "+proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23879, utm, WGS84, "+proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23880, utm, WGS84, "+proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23881, utm, WGS84, "+proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23882, utm, WGS84, "+proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23883, utm, WGS84, "+proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 23884, utm, WGS84, "+proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23886, utm, 6378160, 6356774.50408554, "+proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23887, utm, 6378160, 6356774.50408554, "+proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23888, utm, 6378160, 6356774.50408554, "+proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23889, utm, 6378160, 6356774.50408554, "+proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23890, utm, 6378160, 6356774.50408554, "+proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23891, utm, 6378160, 6356774.50408554, "+proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23892, utm, 6378160, 6356774.50408554, "+proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23893, utm, 6378160, 6356774.50408554, "+proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23894, utm, 6378160, 6356774.50408554, "+proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23946, utm, 6377276.345, 6356075.41314024, "+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23947, utm, 6377276.345, 6356075.41314024, "+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 23948, utm, 6377276.345, 6356075.41314024, "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24047, utm, 6377276.345, 6356075.41314024, "+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24048, utm, 6377276.345, 6356075.41314024, "+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24100, lcc, 6378249.144808011, 6356514.966204134, "+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24200, lcc, clrk66, "+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24305, utm, 6377276.345, 6356075.41314024, "+proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24306, utm, 6377276.345, 6356075.41314024, "+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24311, utm, 6377301.243, 6356100.230165384, "+proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24312, utm, 6377301.243, 6356100.230165384, "+proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24313, utm, 6377301.243, 6356100.230165384, "+proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24342, utm, 6377299.151, 6356098.145120132, "+proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24343, utm, 6377299.151, 6356098.145120132, "+proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24344, utm, 6377299.151, 6356098.145120132, "+proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24345, utm, 6377299.151, 6356098.145120132, "+proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24346, utm, 6377299.151, 6356098.145120132, "+proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24347, utm, 6377299.151, 6356098.145120132, "+proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24370, lcc, 6377299.36559538, 6356098.359005157, "+proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005157 +to_meter=0.9143985307444408 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24371, lcc, 6377299.36559538, 6356098.359005157, "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005157 +to_meter=0.9143985307444408 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24372, lcc, 6377299.36559538, 6356098.359005157, "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005157 +to_meter=0.9143985307444408 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24373, lcc, 6377299.36559538, 6356098.359005157, "+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005157 +to_meter=0.9143985307444408 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24374, lcc, 6377299.36559538, 6356098.359005157, "+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005157 +to_meter=0.9143985307444408 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24375, lcc, 6377276.345, 6356075.41314024, "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24376, lcc, 6377301.243, 6356100.230165384, "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24377, lcc, 6377301.243, 6356100.230165384, "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24378, lcc, 6377299.151, 6356098.145120132, "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24379, lcc, 6377299.151, 6356098.145120132, "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24380, lcc, 6377299.151, 6356098.145120132, "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24381, lcc, 6377299.151, 6356098.145120132, "+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24382, lcc, 6377299.36559538, 6356098.359005157, "+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005157 +to_meter=0.9143985307444408 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24383, lcc, 6377299.151, 6356098.145120132, "+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24500, cass, 6377304.063, 6356103.038993155, "+proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24547, utm, 6377304.063, 6356103.038993155, "+proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24548, utm, 6377304.063, 6356103.038993155, "+proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 24571, omerc, 6377304.063, 6356103.038993155, "+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24600, lcc, clrk80, "+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24718, utm, intl, "+proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24719, utm, intl, "+proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24720, utm, intl, "+proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24817, utm, intl, "+proj=utm +zone=17 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24818, utm, intl, "+proj=utm +zone=18 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24819, utm, intl, "+proj=utm +zone=19 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24820, utm, intl, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24821, utm, intl, "+proj=utm +zone=21 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24877, utm, intl, "+proj=utm +zone=17 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24878, utm, intl, "+proj=utm +zone=18 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24879, utm, intl, "+proj=utm +zone=19 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24880, utm, intl, "+proj=utm +zone=20 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24881, utm, intl, "+proj=utm +zone=21 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24882, utm, intl, "+proj=utm +zone=22 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24891, tmerc, intl, "+proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24892, tmerc, intl, "+proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 24893, tmerc, intl, "+proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25000, tmerc, clrk80, "+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 25231, utm, 6378249.2, 6356515, "+proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25391, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25392, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25393, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25394, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25395, tmerc, clrk66, "+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25700, merc, bessel, "+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25828, utm, GRS80, "+proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25829, utm, GRS80, "+proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25830, utm, GRS80, "+proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25831, utm, GRS80, "+proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25832, utm, GRS80, "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25833, utm, GRS80, "+proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25834, utm, GRS80, "+proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25835, utm, GRS80, "+proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25836, utm, GRS80, "+proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25837, utm, GRS80, "+proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25838, utm, GRS80, "+proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25884, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 25932, utm, intl, "+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26191, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26192, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26193, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26194, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26195, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26237, utm, bessel, "+proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26331, utm, clrk80, "+proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26332, utm, clrk80, "+proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26391, tmerc, clrk80, "+proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26392, tmerc, clrk80, "+proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26393, tmerc, clrk80, "+proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26432, utm, intl, "+proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26591, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26592, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26632, utm, 6378249.2, 6356515, "+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26692, utm, 6378249.2, 6356515, "+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26701, utm, clrk66, NAD27, "+proj=utm +zone=1 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26702, utm, clrk66, NAD27, "+proj=utm +zone=2 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26703, utm, clrk66, NAD27, "+proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26704, utm, clrk66, NAD27, "+proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26705, utm, clrk66, NAD27, "+proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26706, utm, clrk66, NAD27, "+proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26707, utm, clrk66, NAD27, "+proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26708, utm, clrk66, NAD27, "+proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26709, utm, clrk66, NAD27, "+proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26710, utm, clrk66, NAD27, "+proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26711, utm, clrk66, NAD27, "+proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26712, utm, clrk66, NAD27, "+proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26713, utm, clrk66, NAD27, "+proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26714, utm, clrk66, NAD27, "+proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26715, utm, clrk66, NAD27, "+proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26716, utm, clrk66, NAD27, "+proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26717, utm, clrk66, NAD27, "+proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26718, utm, clrk66, NAD27, "+proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26719, utm, clrk66, NAD27, "+proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26720, utm, clrk66, NAD27, "+proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26721, utm, clrk66, NAD27, "+proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26722, utm, clrk66, NAD27, "+proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26729, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26730, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26731, omerc, clrk66, NAD27, "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26732, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26733, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26734, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26735, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26736, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26737, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26738, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26739, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26740, lcc, clrk66, NAD27, "+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26741, lcc, clrk66, NAD27, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26742, lcc, clrk66, NAD27, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26743, lcc, clrk66, NAD27, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26744, lcc, clrk66, NAD27, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26745, lcc, clrk66, NAD27, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26746, lcc, clrk66, NAD27, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26747, lcc, clrk66, NAD27, "+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26748, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26749, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26750, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26751, lcc, clrk66, NAD27, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26752, lcc, clrk66, NAD27, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26753, lcc, clrk66, NAD27, "+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26754, lcc, clrk66, NAD27, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26755, lcc, clrk66, NAD27, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26756, lcc, clrk66, NAD27, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26757, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26758, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26759, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26760, lcc, clrk66, NAD27, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26766, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26767, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26768, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26769, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26770, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26771, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26772, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26773, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26774, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26775, lcc, clrk66, NAD27, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26776, lcc, clrk66, NAD27, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26777, lcc, clrk66, NAD27, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26778, lcc, clrk66, NAD27, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26779, lcc, clrk66, NAD27, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26780, lcc, clrk66, NAD27, "+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26781, lcc, clrk66, NAD27, "+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26782, lcc, clrk66, NAD27, "+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26783, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26784, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26785, lcc, clrk66, NAD27, "+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26786, lcc, clrk66, NAD27, "+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26787, lcc, clrk66, NAD27, "+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26791, lcc, clrk66, NAD27, "+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26792, lcc, clrk66, NAD27, "+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26793, lcc, clrk66, NAD27, "+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26794, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26795, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26796, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26797, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26798, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26799, lcc, clrk66, NAD27, "+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26801, tmerc, 6378450.047548896, 6356826.621488444, "+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26802, tmerc, 6378450.047548896, 6356826.621488444, "+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26803, tmerc, 6378450.047548896, 6356826.621488444, "+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26811, lcc, 6378450.047548896, 6356826.621488444, "+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26812, lcc, 6378450.047548896, 6356826.621488444, "+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 26813, lcc, 6378450.047548896, 6356826.621488444, "+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26814, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26815, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26819, lcc, GRS80, NAD83, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26820, lcc, GRS80, NAD83, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26821, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26822, lcc, GRS80, NAD83, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26823, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26824, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26825, tmerc, GRS80, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26826, tmerc, GRS80, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26830, lcc, GRS80, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26831, lcc, GRS80, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26832, lcc, GRS80, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26833, lcc, GRS80, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26834, lcc, GRS80, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26835, lcc, GRS80, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26836, tmerc, GRS80, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26837, tmerc, GRS80, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26841, lcc, GRS80, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26842, lcc, GRS80, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26843, lcc, GRS80, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26844, lcc, GRS80, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26845, lcc, GRS80, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26846, lcc, GRS80, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26847, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26848, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26849, lcc, GRS80, NAD83, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26850, lcc, GRS80, NAD83, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26851, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26852, lcc, GRS80, NAD83, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26853, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26854, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26855, tmerc, GRS80, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26856, tmerc, GRS80, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26857, lcc, GRS80, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26858, lcc, GRS80, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26859, lcc, GRS80, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26860, lcc, GRS80, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26861, lcc, GRS80, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26862, lcc, GRS80, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26863, tmerc, GRS80, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26864, tmerc, GRS80, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26865, lcc, GRS80, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26866, lcc, GRS80, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26867, lcc, GRS80, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26868, lcc, GRS80, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26869, lcc, GRS80, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26870, lcc, GRS80, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26891, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26892, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26893, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26894, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26895, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26896, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26897, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26898, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 26899, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26901, utm, GRS80, NAD83, "+proj=utm +zone=1 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26902, utm, GRS80, NAD83, "+proj=utm +zone=2 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26903, utm, GRS80, NAD83, "+proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26904, utm, GRS80, NAD83, "+proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26905, utm, GRS80, NAD83, "+proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26906, utm, GRS80, NAD83, "+proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26907, utm, GRS80, NAD83, "+proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26908, utm, GRS80, NAD83, "+proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26909, utm, GRS80, NAD83, "+proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26910, utm, GRS80, NAD83, "+proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26911, utm, GRS80, NAD83, "+proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26912, utm, GRS80, NAD83, "+proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26913, utm, GRS80, NAD83, "+proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26914, utm, GRS80, NAD83, "+proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26915, utm, GRS80, NAD83, "+proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26916, utm, GRS80, NAD83, "+proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26917, utm, GRS80, NAD83, "+proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26918, utm, GRS80, NAD83, "+proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26919, utm, GRS80, NAD83, "+proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26920, utm, GRS80, NAD83, "+proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26921, utm, GRS80, NAD83, "+proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26922, utm, GRS80, NAD83, "+proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26923, utm, GRS80, NAD83, "+proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26929, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26930, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26931, omerc, GRS80, NAD83, "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26932, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26933, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26934, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26935, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26936, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26937, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26938, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26939, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26940, lcc, GRS80, NAD83, "+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26941, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26942, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26943, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26944, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26945, lcc, GRS80, NAD83, "+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26946, lcc, GRS80, NAD83, "+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26948, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26949, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26950, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26951, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26952, lcc, GRS80, NAD83, "+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26953, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26954, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26955, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26956, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26957, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26958, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26959, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26960, lcc, GRS80, NAD83, "+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26961, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26962, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26963, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26964, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26965, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26966, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26967, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26968, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26969, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26970, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26971, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26972, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26973, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26974, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26975, lcc, GRS80, NAD83, "+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26976, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26977, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26978, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26979, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26980, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26981, lcc, GRS80, NAD83, "+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26982, lcc, GRS80, NAD83, "+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26983, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26984, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26985, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26986, lcc, GRS80, NAD83, "+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26987, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26988, lcc, GRS80, NAD83, "+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26989, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26990, lcc, GRS80, NAD83, "+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26991, lcc, GRS80, NAD83, "+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26992, lcc, GRS80, NAD83, "+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26993, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26994, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26995, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26996, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26997, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 26998, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 27037, utm, clrk80, "+proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 27038, utm, clrk80, "+proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 27039, utm, clrk80, "+proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 27040, utm, clrk80, "+proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 27120, utm, intl, "+proj=utm +zone=20 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27200, nzmg, intl, nzgd49, "+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27205, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27206, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27207, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27208, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27209, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27210, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27211, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27212, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27213, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27214, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27215, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27216, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27217, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27218, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27219, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27220, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27221, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27222, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27223, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27224, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27225, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27226, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27227, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27228, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27229, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27230, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27231, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27232, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27258, utm, intl, nzgd49, "+proj=utm +zone=58 +south +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27259, utm, intl, nzgd49, "+proj=utm +zone=59 +south +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27260, utm, intl, nzgd49, "+proj=utm +zone=60 +south +ellps=intl +datum=nzgd49 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27291, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27292, tmerc, intl, nzgd49, "+proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27391, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27392, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27393, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27394, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27395, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27396, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27397, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27398, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 27429, utm, intl, "+proj=utm +zone=29 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 27492, tmerc, intl, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 27493, tmerc, intl, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27500, lcc, 6376523, 6355862.933255573, "+proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=5.4 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27561, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27562, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27563, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27564, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27571, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27572, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27573, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27574, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27581, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27582, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27583, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27584, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27591, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27592, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27593, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 27594, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 27700, tmerc, airy, OSGB36, "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 28191, cass, 6378300.789, 6356566.435, "+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 28192, tmerc, 6378300.789, 6356566.435, "+proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 28193, cass, 6378300.789, 6356566.435, "+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 28232, utm, 6378249.2, 6356515, "+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28348, utm, GRS80, "+proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28349, utm, GRS80, "+proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28350, utm, GRS80, "+proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28351, utm, GRS80, "+proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28352, utm, GRS80, "+proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28353, utm, GRS80, "+proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28354, utm, GRS80, "+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28355, utm, GRS80, "+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28356, utm, GRS80, "+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28357, utm, GRS80, "+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28358, utm, GRS80, "+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28402, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28403, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28404, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28405, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28406, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28407, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28408, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28409, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28410, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28411, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28412, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28413, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28414, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28415, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28416, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28417, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28418, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28419, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28420, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28421, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28422, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28423, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28424, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28425, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28426, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28427, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28428, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28429, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28430, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28431, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28432, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28462, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28463, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28464, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28465, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28466, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28467, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28468, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28469, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28470, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28471, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28472, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28473, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28474, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28475, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28476, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28477, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28478, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28479, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28480, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28481, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28482, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28483, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28484, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28485, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28486, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28487, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28488, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28489, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28490, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28491, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28492, tmerc, krass, "+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28600, tmerc, intl, "+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28991, sterea, bessel, "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 28992, sterea, bessel, "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29100, poly, GRS67, "+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29101, poly, aust_SA, "+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29118, utm, GRS67, "+proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29119, utm, GRS67, "+proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29120, utm, GRS67, "+proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29121, utm, GRS67, "+proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29122, utm, GRS67, "+proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29168, utm, aust_SA, "+proj=utm +zone=18 +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29169, utm, aust_SA, "+proj=utm +zone=19 +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29170, utm, aust_SA, "+proj=utm +zone=20 +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29171, utm, aust_SA, "+proj=utm +zone=21 +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29172, utm, aust_SA, "+proj=utm +zone=22 +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29177, utm, GRS67, "+proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29178, utm, GRS67, "+proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29179, utm, GRS67, "+proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29180, utm, GRS67, "+proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29181, utm, GRS67, "+proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29182, utm, GRS67, "+proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29183, utm, GRS67, "+proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29184, utm, GRS67, "+proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29185, utm, GRS67, "+proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29187, utm, aust_SA, "+proj=utm +zone=17 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29188, utm, aust_SA, "+proj=utm +zone=18 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29189, utm, aust_SA, "+proj=utm +zone=19 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29190, utm, aust_SA, "+proj=utm +zone=20 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29191, utm, aust_SA, "+proj=utm +zone=21 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29192, utm, aust_SA, "+proj=utm +zone=22 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29193, utm, aust_SA, "+proj=utm +zone=23 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29194, utm, aust_SA, "+proj=utm +zone=24 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29195, utm, aust_SA, "+proj=utm +zone=25 +south +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29220, utm, intl, "+proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29221, utm, intl, "+proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29333, utm, bess_nam, "+proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 29371, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 29373, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 29375, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 29377, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 29379, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 29381, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 29383, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 29385, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 29635, utm, 6378249.2, 6356515, "+proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 29636, utm, 6378249.2, 6356515, "+proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29700, omerc, intl, "+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 29701, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29702, omerc, intl, "+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29738, utm, intl, "+proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29739, utm, intl, "+proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29849, utm, evrstSS, "+proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29850, utm, evrstSS, "+proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29871, omerc, evrstSS, "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +ellps=evrstSS +to_meter=20.11676512155263 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29872, omerc, evrstSS, "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +ellps=evrstSS +to_meter=0.3047994715386762 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29873, omerc, evrstSS, "+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 29900, tmerc, 6377340.189, 6356034.447938534, "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 29901, tmerc, airy, "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 29902, tmerc, 6377340.189, 6356034.447938534, "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 29903, tmerc, 6377340.189, 6356034.447938534, "+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30161, tmerc, bessel, "+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30162, tmerc, bessel, "+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30163, tmerc, bessel, "+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30164, tmerc, bessel, "+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30165, tmerc, bessel, "+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30166, tmerc, bessel, "+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30167, tmerc, bessel, "+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30168, tmerc, bessel, "+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30169, tmerc, bessel, "+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30170, tmerc, bessel, "+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30171, tmerc, bessel, "+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30172, tmerc, bessel, "+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30173, tmerc, bessel, "+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30174, tmerc, bessel, "+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30175, tmerc, bessel, "+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30176, tmerc, bessel, "+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30177, tmerc, bessel, "+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30178, tmerc, bessel, "+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30179, tmerc, bessel, "+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 30200, cass, 6378293.645208759, 6356617.987679838, "+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30339, utm, helmert, "+proj=utm +zone=39 +ellps=helmert +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30340, utm, helmert, "+proj=utm +zone=40 +ellps=helmert +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 30491, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 30492, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 30493, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 30494, lcc, 6378249.2, 6356515, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30729, utm, clrk80, "+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30730, utm, clrk80, "+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30731, utm, clrk80, "+proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30732, utm, clrk80, "+proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30791, lcc, clrk80, "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30792, lcc, clrk80, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 30800, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 31028, utm, 6378249.2, 6356515, "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31121, utm, intl, "+proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31154, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31170, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31171, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31251, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31252, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31253, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31254, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31255, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31256, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31257, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31258, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31259, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31265, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31266, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31267, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31268, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31275, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31276, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31277, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31278, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31279, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31281, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31282, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31283, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31284, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31285, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31286, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31287, lcc, bessel, "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31288, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31289, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31290, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31291, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31292, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31293, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31294, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31295, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31296, tmerc, bessel, "+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31297, lcc, bessel, "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 31300, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31370, lcc, intl, "+proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 31461, tmerc, bessel, potsdam, "+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 31462, tmerc, bessel, potsdam, "+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 31463, tmerc, bessel, potsdam, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 31464, tmerc, bessel, potsdam, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 31465, tmerc, bessel, potsdam, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 31466, tmerc, bessel, potsdam, "+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 31467, tmerc, bessel, potsdam, "+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 31468, tmerc, bessel, potsdam, "+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 31469, tmerc, bessel, potsdam, "+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 31528, utm, 6378249.2, 6356515, "+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 31529, utm, 6378249.2, 6356515, "+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31600, sterea, intl, "+proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31700, sterea, krass, "+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31838, utm, WGS84, "+proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31839, utm, WGS84, "+proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31900, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31901, tmerc, GRS80, "+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31965, utm, GRS80, "+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31966, utm, GRS80, "+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31967, utm, GRS80, "+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31968, utm, GRS80, "+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31969, utm, GRS80, "+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31970, utm, GRS80, "+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31971, utm, GRS80, "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31972, utm, GRS80, "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31973, utm, GRS80, "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31974, utm, GRS80, "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31975, utm, GRS80, "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31976, utm, GRS80, "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31977, utm, GRS80, "+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31978, utm, GRS80, "+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31979, utm, GRS80, "+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31980, utm, GRS80, "+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31981, utm, GRS80, "+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31982, utm, GRS80, "+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31983, utm, GRS80, "+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31984, utm, GRS80, "+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31985, utm, GRS80, "+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31986, utm, GRS80, "+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31987, utm, GRS80, "+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31988, utm, GRS80, "+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31989, utm, GRS80, "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31990, utm, GRS80, "+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31991, utm, GRS80, "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31992, utm, GRS80, "+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31993, utm, GRS80, "+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31994, utm, GRS80, "+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31995, utm, GRS80, "+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31996, utm, GRS80, "+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31997, utm, GRS80, "+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31998, utm, GRS80, "+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 31999, utm, GRS80, "+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32000, utm, GRS80, "+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32001, lcc, clrk66, NAD27, "+proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32002, lcc, clrk66, NAD27, "+proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32003, lcc, clrk66, NAD27, "+proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32005, lcc, clrk66, NAD27, "+proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32006, lcc, clrk66, NAD27, "+proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32007, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32008, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32009, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32010, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32011, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32012, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32013, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32014, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32015, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32016, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32017, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32018, lcc, clrk66, NAD27, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32019, lcc, clrk66, NAD27, "+proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32020, lcc, clrk66, NAD27, "+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32021, lcc, clrk66, NAD27, "+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32022, lcc, clrk66, NAD27, "+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32023, lcc, clrk66, NAD27, "+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32024, lcc, clrk66, NAD27, "+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32025, lcc, clrk66, NAD27, "+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32026, lcc, clrk66, NAD27, "+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32027, lcc, clrk66, NAD27, "+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32028, lcc, clrk66, NAD27, "+proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32029, lcc, clrk66, NAD27, "+proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32030, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32031, lcc, clrk66, NAD27, "+proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32033, lcc, clrk66, NAD27, "+proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32034, lcc, clrk66, NAD27, "+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32035, lcc, clrk66, NAD27, "+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32036, lcc, clrk66, NAD27, "+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32037, lcc, clrk66, NAD27, "+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32038, lcc, clrk66, NAD27, "+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32039, lcc, clrk66, NAD27, "+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32040, lcc, clrk66, NAD27, "+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32041, lcc, clrk66, NAD27, "+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32042, lcc, clrk66, NAD27, "+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32043, lcc, clrk66, NAD27, "+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32044, lcc, clrk66, NAD27, "+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32045, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32046, lcc, clrk66, NAD27, "+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32047, lcc, clrk66, NAD27, "+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32048, lcc, clrk66, NAD27, "+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32049, lcc, clrk66, NAD27, "+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32050, lcc, clrk66, NAD27, "+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32051, lcc, clrk66, NAD27, "+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32052, lcc, clrk66, NAD27, "+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32053, lcc, clrk66, NAD27, "+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32054, lcc, clrk66, NAD27, "+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32055, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32056, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32057, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32058, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32061, lcc, clrk66, NAD27, "+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32062, lcc, clrk66, NAD27, "+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32064, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32065, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32066, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32067, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32074, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32075, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32076, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32077, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32081, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32082, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32083, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32084, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32085, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32086, tmerc, clrk66, NAD27, "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32098, lcc, clrk66, NAD27, "+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32099, lcc, clrk66, NAD27, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32100, lcc, GRS80, NAD83, "+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32104, lcc, GRS80, NAD83, "+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32107, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32108, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32109, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32110, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32111, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32112, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32113, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32114, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32115, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32116, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32117, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32118, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32119, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32120, lcc, GRS80, NAD83, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32121, lcc, GRS80, NAD83, "+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32122, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32123, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32124, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32125, lcc, GRS80, NAD83, "+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32126, lcc, GRS80, NAD83, "+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32127, lcc, GRS80, NAD83, "+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32128, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32129, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32130, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32133, lcc, GRS80, NAD83, "+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32134, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32135, lcc, GRS80, NAD83, "+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32136, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32137, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32138, lcc, GRS80, NAD83, "+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32139, lcc, GRS80, NAD83, "+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32140, lcc, GRS80, NAD83, "+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32141, lcc, GRS80, NAD83, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32142, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32143, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32144, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32145, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32146, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32147, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32148, lcc, GRS80, NAD83, "+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32149, lcc, GRS80, NAD83, "+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32150, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32151, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32152, lcc, GRS80, NAD83, "+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32153, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32154, lcc, GRS80, NAD83, "+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32155, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32156, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32157, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32158, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32161, lcc, GRS80, NAD83, "+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32164, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32165, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32166, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32167, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32180, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32181, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32182, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32183, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32184, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32185, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32186, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32187, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32188, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32189, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32190, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32191, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32192, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32193, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32194, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32195, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32196, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32197, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32198, lcc, GRS80, NAD83, "+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32199, lcc, GRS80, NAD83, "+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32201, utm, WGS72, "+proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32202, utm, WGS72, "+proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32203, utm, WGS72, "+proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32204, utm, WGS72, "+proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32205, utm, WGS72, "+proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32206, utm, WGS72, "+proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32207, utm, WGS72, "+proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32208, utm, WGS72, "+proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32209, utm, WGS72, "+proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32210, utm, WGS72, "+proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32211, utm, WGS72, "+proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32212, utm, WGS72, "+proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32213, utm, WGS72, "+proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32214, utm, WGS72, "+proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32215, utm, WGS72, "+proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32216, utm, WGS72, "+proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32217, utm, WGS72, "+proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32218, utm, WGS72, "+proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32219, utm, WGS72, "+proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32220, utm, WGS72, "+proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32221, utm, WGS72, "+proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32222, utm, WGS72, "+proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32223, utm, WGS72, "+proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32224, utm, WGS72, "+proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32225, utm, WGS72, "+proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32226, utm, WGS72, "+proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32227, utm, WGS72, "+proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32228, utm, WGS72, "+proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32229, utm, WGS72, "+proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32230, utm, WGS72, "+proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32231, utm, WGS72, "+proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32232, utm, WGS72, "+proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32233, utm, WGS72, "+proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32234, utm, WGS72, "+proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32235, utm, WGS72, "+proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32236, utm, WGS72, "+proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32237, utm, WGS72, "+proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32238, utm, WGS72, "+proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32239, utm, WGS72, "+proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32240, utm, WGS72, "+proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32241, utm, WGS72, "+proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32242, utm, WGS72, "+proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32243, utm, WGS72, "+proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32244, utm, WGS72, "+proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32245, utm, WGS72, "+proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32246, utm, WGS72, "+proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32247, utm, WGS72, "+proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32248, utm, WGS72, "+proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32249, utm, WGS72, "+proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32250, utm, WGS72, "+proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32251, utm, WGS72, "+proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32252, utm, WGS72, "+proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32253, utm, WGS72, "+proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32254, utm, WGS72, "+proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32255, utm, WGS72, "+proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32256, utm, WGS72, "+proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32257, utm, WGS72, "+proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32258, utm, WGS72, "+proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32259, utm, WGS72, "+proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32260, utm, WGS72, "+proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32301, utm, WGS72, "+proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32302, utm, WGS72, "+proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32303, utm, WGS72, "+proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32304, utm, WGS72, "+proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32305, utm, WGS72, "+proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32306, utm, WGS72, "+proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32307, utm, WGS72, "+proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32308, utm, WGS72, "+proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32309, utm, WGS72, "+proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32310, utm, WGS72, "+proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32311, utm, WGS72, "+proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32312, utm, WGS72, "+proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32313, utm, WGS72, "+proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32314, utm, WGS72, "+proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32315, utm, WGS72, "+proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32316, utm, WGS72, "+proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32317, utm, WGS72, "+proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32318, utm, WGS72, "+proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32319, utm, WGS72, "+proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32320, utm, WGS72, "+proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32321, utm, WGS72, "+proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32322, utm, WGS72, "+proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32323, utm, WGS72, "+proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32324, utm, WGS72, "+proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32325, utm, WGS72, "+proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32326, utm, WGS72, "+proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32327, utm, WGS72, "+proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32328, utm, WGS72, "+proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32329, utm, WGS72, "+proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32330, utm, WGS72, "+proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32331, utm, WGS72, "+proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32332, utm, WGS72, "+proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32333, utm, WGS72, "+proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32334, utm, WGS72, "+proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32335, utm, WGS72, "+proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32336, utm, WGS72, "+proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32337, utm, WGS72, "+proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32338, utm, WGS72, "+proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32339, utm, WGS72, "+proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32340, utm, WGS72, "+proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32341, utm, WGS72, "+proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32342, utm, WGS72, "+proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32343, utm, WGS72, "+proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32344, utm, WGS72, "+proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32345, utm, WGS72, "+proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32346, utm, WGS72, "+proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32347, utm, WGS72, "+proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32348, utm, WGS72, "+proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32349, utm, WGS72, "+proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32350, utm, WGS72, "+proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32351, utm, WGS72, "+proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32352, utm, WGS72, "+proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32353, utm, WGS72, "+proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32354, utm, WGS72, "+proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32355, utm, WGS72, "+proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32356, utm, WGS72, "+proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32357, utm, WGS72, "+proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32358, utm, WGS72, "+proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32359, utm, WGS72, "+proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32360, utm, WGS72, "+proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32401, utm, WGS72, "+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32402, utm, WGS72, "+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32403, utm, WGS72, "+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32404, utm, WGS72, "+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32405, utm, WGS72, "+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32406, utm, WGS72, "+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32407, utm, WGS72, "+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32408, utm, WGS72, "+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32409, utm, WGS72, "+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32410, utm, WGS72, "+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32411, utm, WGS72, "+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32412, utm, WGS72, "+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32413, utm, WGS72, "+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32414, utm, WGS72, "+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32415, utm, WGS72, "+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32416, utm, WGS72, "+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32417, utm, WGS72, "+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32418, utm, WGS72, "+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32419, utm, WGS72, "+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32420, utm, WGS72, "+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32421, utm, WGS72, "+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32422, utm, WGS72, "+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32423, utm, WGS72, "+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32424, utm, WGS72, "+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32425, utm, WGS72, "+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32426, utm, WGS72, "+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32427, utm, WGS72, "+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32428, utm, WGS72, "+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32429, utm, WGS72, "+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32430, utm, WGS72, "+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32431, utm, WGS72, "+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32432, utm, WGS72, "+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32433, utm, WGS72, "+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32434, utm, WGS72, "+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32435, utm, WGS72, "+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32436, utm, WGS72, "+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32437, utm, WGS72, "+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32438, utm, WGS72, "+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32439, utm, WGS72, "+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32440, utm, WGS72, "+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32441, utm, WGS72, "+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32442, utm, WGS72, "+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32443, utm, WGS72, "+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32444, utm, WGS72, "+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32445, utm, WGS72, "+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32446, utm, WGS72, "+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32447, utm, WGS72, "+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32448, utm, WGS72, "+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32449, utm, WGS72, "+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32450, utm, WGS72, "+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32451, utm, WGS72, "+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32452, utm, WGS72, "+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32453, utm, WGS72, "+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32454, utm, WGS72, "+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32455, utm, WGS72, "+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32456, utm, WGS72, "+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32457, utm, WGS72, "+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32458, utm, WGS72, "+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32459, utm, WGS72, "+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32460, utm, WGS72, "+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32501, utm, WGS72, "+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32502, utm, WGS72, "+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32503, utm, WGS72, "+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32504, utm, WGS72, "+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32505, utm, WGS72, "+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32506, utm, WGS72, "+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32507, utm, WGS72, "+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32508, utm, WGS72, "+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32509, utm, WGS72, "+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32510, utm, WGS72, "+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32511, utm, WGS72, "+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32512, utm, WGS72, "+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32513, utm, WGS72, "+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32514, utm, WGS72, "+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32515, utm, WGS72, "+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32516, utm, WGS72, "+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32517, utm, WGS72, "+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32518, utm, WGS72, "+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32519, utm, WGS72, "+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32520, utm, WGS72, "+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32521, utm, WGS72, "+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32522, utm, WGS72, "+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32523, utm, WGS72, "+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32524, utm, WGS72, "+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32525, utm, WGS72, "+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32526, utm, WGS72, "+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32527, utm, WGS72, "+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32528, utm, WGS72, "+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32529, utm, WGS72, "+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32530, utm, WGS72, "+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32531, utm, WGS72, "+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32532, utm, WGS72, "+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32533, utm, WGS72, "+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32534, utm, WGS72, "+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32535, utm, WGS72, "+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32536, utm, WGS72, "+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32537, utm, WGS72, "+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32538, utm, WGS72, "+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32539, utm, WGS72, "+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32540, utm, WGS72, "+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32541, utm, WGS72, "+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32542, utm, WGS72, "+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32543, utm, WGS72, "+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32544, utm, WGS72, "+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32545, utm, WGS72, "+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32546, utm, WGS72, "+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32547, utm, WGS72, "+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32548, utm, WGS72, "+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32549, utm, WGS72, "+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32550, utm, WGS72, "+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32551, utm, WGS72, "+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32552, utm, WGS72, "+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32553, utm, WGS72, "+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32554, utm, WGS72, "+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32555, utm, WGS72, "+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32556, utm, WGS72, "+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32557, utm, WGS72, "+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32558, utm, WGS72, "+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32559, utm, WGS72, "+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 32560, utm, WGS72, "+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 32600, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32601, utm, WGS84, WGS84, "+proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32602, utm, WGS84, WGS84, "+proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32603, utm, WGS84, WGS84, "+proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32604, utm, WGS84, WGS84, "+proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32605, utm, WGS84, WGS84, "+proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32606, utm, WGS84, WGS84, "+proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32607, utm, WGS84, WGS84, "+proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32608, utm, WGS84, WGS84, "+proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32609, utm, WGS84, WGS84, "+proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32610, utm, WGS84, WGS84, "+proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32611, utm, WGS84, WGS84, "+proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32612, utm, WGS84, WGS84, "+proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32613, utm, WGS84, WGS84, "+proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32614, utm, WGS84, WGS84, "+proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32615, utm, WGS84, WGS84, "+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32616, utm, WGS84, WGS84, "+proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32617, utm, WGS84, WGS84, "+proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32618, utm, WGS84, WGS84, "+proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32619, utm, WGS84, WGS84, "+proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32620, utm, WGS84, WGS84, "+proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32621, utm, WGS84, WGS84, "+proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32622, utm, WGS84, WGS84, "+proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32623, utm, WGS84, WGS84, "+proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32624, utm, WGS84, WGS84, "+proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32625, utm, WGS84, WGS84, "+proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32626, utm, WGS84, WGS84, "+proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32627, utm, WGS84, WGS84, "+proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32628, utm, WGS84, WGS84, "+proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32629, utm, WGS84, WGS84, "+proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32630, utm, WGS84, WGS84, "+proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32631, utm, WGS84, WGS84, "+proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32632, utm, WGS84, WGS84, "+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32633, utm, WGS84, WGS84, "+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32634, utm, WGS84, WGS84, "+proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32635, utm, WGS84, WGS84, "+proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32636, utm, WGS84, WGS84, "+proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32637, utm, WGS84, WGS84, "+proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32638, utm, WGS84, WGS84, "+proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32639, utm, WGS84, WGS84, "+proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32640, utm, WGS84, WGS84, "+proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32641, utm, WGS84, WGS84, "+proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32642, utm, WGS84, WGS84, "+proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32643, utm, WGS84, WGS84, "+proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32644, utm, WGS84, WGS84, "+proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32645, utm, WGS84, WGS84, "+proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32646, utm, WGS84, WGS84, "+proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32647, utm, WGS84, WGS84, "+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32648, utm, WGS84, WGS84, "+proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32649, utm, WGS84, WGS84, "+proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32650, utm, WGS84, WGS84, "+proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32651, utm, WGS84, WGS84, "+proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32652, utm, WGS84, WGS84, "+proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32653, utm, WGS84, WGS84, "+proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32654, utm, WGS84, WGS84, "+proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32655, utm, WGS84, WGS84, "+proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32656, utm, WGS84, WGS84, "+proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32657, utm, WGS84, WGS84, "+proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32658, utm, WGS84, WGS84, "+proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32659, utm, WGS84, WGS84, "+proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32660, utm, WGS84, WGS84, "+proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32661, stere, WGS84, WGS84, "+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32662, eqc, WGS84, WGS84, "+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 32663, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32664, tmerc, WGS84, WGS84, "+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32665, tmerc, WGS84, WGS84, "+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32666, tmerc, WGS84, WGS84, "+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32667, tmerc, WGS84, WGS84, "+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +to_meter=0.3048006096012192 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 32700, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32701, utm, WGS84, WGS84, "+proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32702, utm, WGS84, WGS84, "+proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32703, utm, WGS84, WGS84, "+proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32704, utm, WGS84, WGS84, "+proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32705, utm, WGS84, WGS84, "+proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32706, utm, WGS84, WGS84, "+proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32707, utm, WGS84, WGS84, "+proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32708, utm, WGS84, WGS84, "+proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32709, utm, WGS84, WGS84, "+proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32710, utm, WGS84, WGS84, "+proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32711, utm, WGS84, WGS84, "+proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32712, utm, WGS84, WGS84, "+proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32713, utm, WGS84, WGS84, "+proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32714, utm, WGS84, WGS84, "+proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32715, utm, WGS84, WGS84, "+proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32716, utm, WGS84, WGS84, "+proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32717, utm, WGS84, WGS84, "+proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32718, utm, WGS84, WGS84, "+proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32719, utm, WGS84, WGS84, "+proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32720, utm, WGS84, WGS84, "+proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32721, utm, WGS84, WGS84, "+proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32722, utm, WGS84, WGS84, "+proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32723, utm, WGS84, WGS84, "+proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32724, utm, WGS84, WGS84, "+proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32725, utm, WGS84, WGS84, "+proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32726, utm, WGS84, WGS84, "+proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32727, utm, WGS84, WGS84, "+proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32728, utm, WGS84, WGS84, "+proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32729, utm, WGS84, WGS84, "+proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32730, utm, WGS84, WGS84, "+proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32731, utm, WGS84, WGS84, "+proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32732, utm, WGS84, WGS84, "+proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32733, utm, WGS84, WGS84, "+proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32734, utm, WGS84, WGS84, "+proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32735, utm, WGS84, WGS84, "+proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32736, utm, WGS84, WGS84, "+proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32737, utm, WGS84, WGS84, "+proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32738, utm, WGS84, WGS84, "+proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32739, utm, WGS84, WGS84, "+proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32740, utm, WGS84, WGS84, "+proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32741, utm, WGS84, WGS84, "+proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32742, utm, WGS84, WGS84, "+proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32743, utm, WGS84, WGS84, "+proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32744, utm, WGS84, WGS84, "+proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32745, utm, WGS84, WGS84, "+proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32746, utm, WGS84, WGS84, "+proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32747, utm, WGS84, WGS84, "+proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32748, utm, WGS84, WGS84, "+proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32749, utm, WGS84, WGS84, "+proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32750, utm, WGS84, WGS84, "+proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32751, utm, WGS84, WGS84, "+proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32752, utm, WGS84, WGS84, "+proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32753, utm, WGS84, WGS84, "+proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32754, utm, WGS84, WGS84, "+proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32755, utm, WGS84, WGS84, "+proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32756, utm, WGS84, WGS84, "+proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32757, utm, WGS84, WGS84, "+proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32758, utm, WGS84, WGS84, "+proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32759, utm, WGS84, WGS84, "+proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32760, utm, WGS84, WGS84, "+proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32761, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 32766, tmerc, WGS84, WGS84, "+proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61206405, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61216405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 61226405, longlat, 6378135, 6356750.304921594, "+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61236405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,-0.345,1.376,0.30857215014565614 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61246405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,-2.141,7.023,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61266405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61266413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61276405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=-82.875,-57.097,-156.768,-2.158,-1.524,0.982,-0.07404906544270759 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61286405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61296405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61306405, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,-0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61306413, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,-0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 61316405, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=182.0,915.0,344.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61326405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-244.72,-162.773,400.75,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61336405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,0.0003,0.007,-0.002887707287459349 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61346405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-191.808,-250.512,167.861,-0.792,-1.653,8.558,4.270300283733636 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61356405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=58.0,-283.0,-182.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61366405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61376405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61386405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61396405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=11.0,72.0,-101.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61406405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61406413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61416405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=-48.0,55.0,52.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61426405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-125.0,53.0,467.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61436405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-124.76,53.0,466.79,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 61446405, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=214.0,804.0,268.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 61456405, longlat, 6377301.243, 6356100.230165384, "+proj=longlat +a=6377301.243 +b=6356100.230165384 +towgs84=275.57,676.78,229.6,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 61466405, longlat, 6377299.151, 6356098.145120132, "+proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295.0,736.0,257.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61476405, longlat, krass, "+proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61486405, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61486413, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61496405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61506405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61516405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61516413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61526405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61526413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=-0.991,1.9072,0.5129,0.0257899075194932,-0.009650098960270402,-0.011659943232342112,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61536405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61546405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-123.02,-158.95,-168.47,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 61556405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83.0,37.0,124.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61566405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=559.0,68.7,451.5,7.92,4.073,4.251,1.1777720436709203 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 61576405, longlat, 6378293.645208759, 6356617.987679838, "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61586405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-0.465,372.095,171.736,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61596405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-114.7,-98.5,-150.7,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61606405, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61616405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=27.5,14.0,186.4,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61626405, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61636405, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61636413, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61646405, longlat, krass, "+proj=longlat +ellps=krass +towgs84=-76.0,-138.0,67.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61656405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-173.0,253.0,27.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61666405, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61676405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61676413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 61686405, longlat, 6378300, 6356751.689189189, "+proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199.0,32.0,322.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61696405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=-115.0,118.0,426.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61706405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61706413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61716405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61716413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61736405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61736413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 61746405, longlat, 6378300, 6356751.689189189, "+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61756405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-88.0,4.0,101.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61766405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61766413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61786405, longlat, krass, "+proj=longlat +ellps=krass +towgs84=24.0,-123.0,-94.0,0.02,0.25,0.13,0.226891286871806 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61796405, longlat, krass, "+proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.17326243724756094 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61806405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61806413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61816405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-193.0,13.7,-39.3,-0.41,-2.933,2.688,0.08869386668625144 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61826405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-422.651,-172.995,84.02,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61836405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-104.0,167.0,-38.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61846405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-203.0,141.0,53.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61886405, longlat, airy, "+proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,1.6810581709138355 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61896405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61896413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61906405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61906413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61916405, longlat, krass, "+proj=longlat +ellps=krass +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61926405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 61936405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61946405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=163.511,127.533,-159.789,0.0,0.0,0.814,-0.12375888374825782 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61956405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=105.0,326.0,-102.5,0.0,0.0,0.814,-0.12375888374825782 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61966405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-45.0,417.0,-3.5,0.0,0.0,0.814,-0.12375888374825782 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61976405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61986405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 61996405, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62006405, longlat, krass, "+proj=longlat +ellps=krass +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62016405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-165.0,-11.0,206.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62026405, longlat, aust_SA, "+proj=longlat +ellps=aust_SA +towgs84=-124.133,-42.003,137.4,-0.008,-0.557,-0.178,-0.3824149507821167 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62036405, longlat, aust_SA, "+proj=longlat +ellps=aust_SA +towgs84=-117.763,-51.51,139.061,0.292,-0.443,-0.277,-0.03939657799319541 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62046405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-18.944,-379.364,-24.063,0.04,0.764,-6.431,0.7543103964456315 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62056405, longlat, krass, "+proj=longlat +ellps=krass +towgs84=-43.0,-163.0,45.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62066405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62076405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-288.885,-91.744,126.244,-1.691,-0.41,0.211,-0.948405579124149 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62086405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-161.0,310.0,-145.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62096405, longlat, 6378249.145, 6356514.966398753, "+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-138.0,-105.0,-289.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62106405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-157.0,-2.0,-299.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62116405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=-377.7,675.1,-52.2,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62126405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62136405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106.0,-87.0,188.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62146405, longlat, krass, "+proj=longlat +ellps=krass +towgs84=15.8,-154.4,-82.3,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62156405, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62166405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=-73.0,213.0,296.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62186405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=304.5,306.5,-318.1,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62196405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=-384.0,664.0,-48.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62206405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-50.9,-347.6,-231.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62216405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-154.5,150.7,100.4,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62226405, longlat, 6378249.145, 6356514.966398753, "+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-136.0,-108.0,-292.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62236405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-260.1,5.5,432.2,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62246405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-134.0,229.0,-29.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62256405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-206.0,172.0,-6.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62276405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83.58,-397.54,458.78,-17.595,-2.847,4.256,0.6652040001468859 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62296405, longlat, helmert, "+proj=longlat +ellps=helmert +towgs84=-130.0,110.0,-13.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62306405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-157.89,-17.16,-78.41,2.118,2.697,-1.434,-1.1097046576093785 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62316405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-82.981,-99.719,-110.709,-0.10470001565102613,0.031001600378938583,0.08040202147511816,-0.06482902860346239 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62326405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-346.0,-1.0,224.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62336405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-133.0,-321.0,50.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62366405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-637.0,-549.0,-203.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62376405, longlat, GRS67, "+proj=longlat +ellps=GRS67 +towgs84=57.01,-69.97,-9.29,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62386405, longlat, 6378160, 6356774.50408554, "+proj=longlat +a=6378160 +b=6356774.50408554 +towgs84=-1.977,-13.06,-9.993,0.364,-0.254,-0.689,-0.2138966040782389 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62396405, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217.0,823.0,299.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62406405, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=204.64,834.74,293.8,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62416405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62426405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=-33.722,153.789,94.959,-8.581,4.478,-4.54,1.8460700159115124 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62436405, longlat, 6377299.36559538, 6356098.357204818, "+proj=longlat +a=6377299.36559538 +b=6356098.357204818 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62446405, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97.0,787.0,86.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62456405, longlat, 6377304.063, 6356103.038993155, "+proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11.0,851.0,5.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62466405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62476405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62486405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-307.7,265.3,-363.5,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62496405, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62506405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-130.0,29.0,364.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62516405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-90.0,40.0,88.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62526405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62536405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=-133.0,-77.0,-51.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62546405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0002681442481212253 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62556405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-333.0,-222.0,114.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62566405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=41.0,-220.0,-134.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62576405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62586405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62586413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62596405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-254.1,-5.36,-100.29,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62616405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=31.0,146.0,47.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62626405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=639.0,405.0,60.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62636405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-90.2,-87.32,114.17,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62646405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62656405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-50.2,-50.4,84.8,-0.69,-2.012,0.459,-5.791915759418465 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62666405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-80.7,-132.5,41.1,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 62676405, longlat, clrk66, NAD27, "+proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62686405, longlat, 6378450.047548896, 6356826.621488444, "+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 62696405, longlat, GRS80, NAD83, "+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62706405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-245.0,-153.9,382.8,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62716405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-2.0,374.0,172.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 62726405, longlat, intl, nzgd49, "+proj=longlat +ellps=intl +datum=nzgd49 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62736405, longlat, 6377492.018, 6356173.508712696, "+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93.0,474.5,7.889,0.05,-6.61,1.2809044467944684 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62746405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-239.749,88.181,30.488,0.263,-0.082,-1.211,0.4597642531247778 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62756405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168.0,-60.0,320.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62766405, longlat, WGS66, "+proj=longlat +ellps=WGS66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 62776405, longlat, airy, OSGB36, "+proj=longlat +ellps=airy +datum=OSGB36 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62786405, longlat, airy, "+proj=longlat +ellps=airy +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62796405, longlat, airy, "+proj=longlat +ellps=airy +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62806405, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62816405, longlat, 6378300.789, 6356566.435, "+proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.7224,94.7824,340.8944,-8.001,-4.42,-11.821,0.20626480624709637 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62826405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-178.3,-316.7,-131.5,5.278,6.077,10.979,3.953271276531849 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62836405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62836413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62846405, longlat, krass, "+proj=longlat +ellps=krass +towgs84=-40.595,-18.55,-69.339,2.508,-1.832,2.611,-0.8867324020562674 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62856405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-128.033,-283.697,21.052,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62866405, longlat, helmert, "+proj=longlat +ellps=helmert +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62886405, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62896405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=565.04,49.91,465.84,-0.40939438743923684,-0.35970519561431136,1.868491000350572,0.8409828680306614 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62926405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-355.0,21.0,72.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62936405, longlat, bess_nam, "+proj=longlat +ellps=bess_nam +towgs84=616.0,97.0,-251.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62956405, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62976405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-189.0,-242.0,-91.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 62986405, longlat, evrstSS, "+proj=longlat +ellps=evrstSS +towgs84=-533.4,669.2,-52.5,0.0,0.0,4.28,1.9388891787227058 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 62996405, longlat, 6377340.189, 6356034.447938534, "+proj=longlat +a=6377340.189 +b=6356034.447938534 +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,1.6810581709138355 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 63006405, longlat, 6377340.189, 6356034.447938534, "+proj=longlat +a=6377340.189 +b=6356034.447938534 +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,1.6810581709138355 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63016405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=-147.0,506.0,687.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 63026405, longlat, 6378293.645208759, 6356617.987679838, "+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63036405, longlat, helmert, "+proj=longlat +ellps=helmert +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 63046405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73.0,-247.0,227.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63066405, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63076405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-169.559,-72.34,303.102,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63086405, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63096405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-155.0,171.0,37.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 63106405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63116405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-265.0,120.0,-358.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63126405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=426.9,142.6,460.1,4.91,4.49,-12.42,3.5271281868253483 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63136405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-106.8686,52.2978,-103.7239,0.3366,0.457,-1.8422,0.26292574852317374 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 63146405, longlat, bessel, potsdam, "+proj=longlat +ellps=bessel +datum=potsdam +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 63156405, longlat, 6378249.2, 6356515, "+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23.0,259.0,-9.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63166405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63176405, longlat, krass, "+proj=longlat +ellps=krass +towgs84=28.0,-121.0,-77.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63186405, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63196405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=226.702,-193.337,-35.371,-2.229,4.391,-9.238,0.20209825716090501 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63226405, longlat, WGS72, "+proj=longlat +ellps=WGS72 +towgs84=0.0,0.0,4.5,0.0,0.0,0.554,0.045171992568114105 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 63246405, longlat, WGS72, "+proj=longlat +ellps=WGS72 +towgs84=0.0,0.0,1.9,0.0,0.0,0.814,-0.07838062637389662 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 63266405, longlat, WGS84, WGS84, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 63266406, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 63266407, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 63266408, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 63266409, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 63266410, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 63266411, longlat, WGS84, WGS84, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 63266412, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 63266413, longlat, WGS84, WGS84, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 63266414, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 63266415, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 63266416, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 63266417, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 63266418, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(epsg, 63266419, longlat, WGS84, WGS84, "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (epsg, 63266420, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66006405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66016405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-255.0,-15.0,71.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66026405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=725.0,685.0,536.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66036405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=72.0,213.7,93.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66046405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=174.0,359.0,365.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66056405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=9.0,183.0,236.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66066405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-149.0,128.0,296.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66076405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66086405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66096405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 66106405, longlat, 6378140, 6356755.288157528, "+proj=longlat +a=6378140 +b=6356755.288157528 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66116405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.243649,-1.158827,-0.22570443917666022 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66126405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66126413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66136405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66146405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-119.4248,-303.65872,-11.00061,1.164298,0.174458,1.096259,0.7543238036580374 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66156405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-499.0,-249.0,314.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66166405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-289.0,-124.0,60.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66186405, longlat, aust_SA, "+proj=longlat +ellps=aust_SA +towgs84=-66.87,4.37,-38.52,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66196405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66196413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66206405, longlat, clrk80, "+proj=longlat +ellps=clrk80 +towgs84=-106.0,-129.0,165.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66216405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=137.0,248.0,-430.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66226405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-472.29,-5.63,-304.12,0.4362,-0.8374,0.2563,0.39157310817948776 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66236405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-186.0,230.0,110.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66246405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=2.0,2.0,-2.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66246413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=2.0,2.0,-2.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66256405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=126.93,547.94,130.41,-2.7867,5.1612,-0.8584,2.851136537311739 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66266405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=94.0,-948.0,-1262.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66276405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66276413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66286405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=162.0,117.0,154.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66296405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,-0.8823,-0.5565,0.2835316026672587 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66306405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=259.551,297.612,197.833,-1.4866,2.1224,0.4612,5.574285762347154 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66316405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=145.0,-187.0,103.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66326405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-382.0,-59.0,-262.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66336405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=335.47,222.58,-230.94,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66346405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-11.64,-348.6,291.98,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66356405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,0.9240250790257423 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66366405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=365.0,194.0,166.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66376405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=325.0,154.0,172.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66386405, longlat, clrk66, "+proj=longlat +ellps=clrk66 +towgs84=30.0,430.0,368.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66396405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=253.0,-132.0,-127.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66406405, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66406413, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66416405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=287.58,177.78,-135.41,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66426405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-13.0,-348.0,292.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66436405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-23.039820110761912 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66446405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-10.18,-350.43,291.37,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66456405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66456413, longlat, intl, "+proj=longlat +ellps=intl +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66466405, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 66576405, longlat, 6377019.27, 6355762.5391, "+proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28.0,199.0,5.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66586405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-73.0,46.0,-86.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66596405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66596413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66606405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=982.6087,552.753,-540.873,6.681626625276941,-31.61149240864225,-19.848161004816845,3.466280068982454 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66616405, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66616413, longlat, GRS80, "+proj=longlat +ellps=GRS80 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66636405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-210.502,-66.902,-48.476,2.094,15.067,5.817,0.10003843102984174 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66646405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-208.719,129.685,52.092,-0.195,0.014,-0.327,0.040840431636925086 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66656405, longlat, intl, "+proj=longlat +ellps=intl +towgs84=-103.088,162.481,-28.276,0.167,-0.082,-0.168,-0.31022226859563296 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66666405, longlat, bessel, "+proj=longlat +ellps=bessel +towgs84=631.392,-66.551,481.442,1.09,4.445,4.487,-0.9137530916746368 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 66676405, longlat, WGS84, "+proj=longlat +ellps=WGS84 +towgs84=0.0,0.0,0.0,0.0,0.0,0.0,0.0 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68016405, longlat, bessel, "+proj=longlat +ellps=bessel +pm=bern +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68026405, longlat, intl, "+proj=longlat +ellps=intl +pm=bogota +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68036405, longlat, intl, "+proj=longlat +ellps=intl +pm=lisbon +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68046405, longlat, bessel, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68056405, longlat, bessel, "+proj=longlat +ellps=bessel +pm=ferro +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68066405, longlat, intl, "+proj=longlat +ellps=intl +pm=rome +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68086405, longlat, bessel, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68096405, longlat, intl, "+proj=longlat +ellps=intl +pm=brussels +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68136405, longlat, bessel, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68146405, longlat, bessel, "+proj=longlat +ellps=bessel +pm=stockholm +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68156405, longlat, bessel, "+proj=longlat +ellps=bessel +pm=athens +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68186405, longlat, bessel, "+proj=longlat +ellps=bessel +pm=ferro +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (epsg, 68206405, longlat, bessel, "+proj=longlat +ellps=bessel +pm=jakarta +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(epsg, 69036405, longlat, 6378298.3, 6356657.142669561, "+proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs")
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}}} // namespace boost::geometry::projections
-
-
-#endif
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/esri.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/esri.hpp
deleted file mode 100644
index 577da84a1d1..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/esri.hpp
+++ /dev/null
@@ -1,491 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_ESRI_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ESRI_HPP
-
-
-#include <boost/geometry/srs/projections/code.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
- inline std::string esri_to_string(int code)
- {
- static const code_element arr[] = {
- {37001, "+proj=longlat +ellps=WGS66 +no_defs"},
- {37002, "+proj=longlat +a=6378166 +b=6356784.283607107 +no_defs"},
- {37003, "+proj=longlat +a=6378150 +b=6356768.337244385 +no_defs"},
- {37004, "+proj=longlat +ellps=fschr60m +no_defs"},
- {37005, "+proj=longlat +a=6378270 +b=6356794.343434343 +no_defs"},
- {37006, "+proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs"},
- {37007, "+proj=longlat +a=6376896 +b=6355834.846687363 +no_defs"},
- {37008, "+proj=longlat +a=6370997 +b=6370997 +no_defs"},
- {37201, "+proj=longlat +ellps=intl +no_defs"},
- {37202, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs"},
- {37203, "+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs"},
- {37204, "+proj=longlat +ellps=intl +no_defs"},
- {37205, "+proj=longlat +ellps=intl +no_defs"},
- {37206, "+proj=longlat +ellps=clrk80 +no_defs"},
- {37207, "+proj=longlat +ellps=fschr60m +no_defs"},
- {37208, "+proj=longlat +ellps=clrk80 +no_defs"},
- {37211, "+proj=longlat +ellps=clrk80 +no_defs"},
- {37212, "+proj=longlat +ellps=intl +no_defs"},
- {37213, "+proj=longlat +ellps=intl +no_defs"},
- {37214, "+proj=longlat +ellps=intl +no_defs"},
- {37215, "+proj=longlat +ellps=intl +no_defs"},
- {37216, "+proj=longlat +ellps=intl +no_defs"},
- {37217, "+proj=longlat +ellps=intl +no_defs"},
- {37218, "+proj=longlat +ellps=intl +no_defs"},
- {37219, "+proj=longlat +ellps=intl +no_defs"},
- {37220, "+proj=longlat +ellps=clrk66 +no_defs"},
- {37221, "+proj=longlat +ellps=intl +no_defs"},
- {37222, "+proj=longlat +ellps=intl +no_defs"},
- {37223, "+proj=longlat +a=6378249.2 +b=6356514.999904194 +no_defs"},
- {37224, "+proj=longlat +ellps=intl +no_defs"},
- {37226, "+proj=longlat +ellps=intl +no_defs"},
- {37227, "+proj=longlat +ellps=intl +no_defs"},
- {37228, "+proj=longlat +ellps=clrk80 +no_defs"},
- {37229, "+proj=longlat +a=6378270 +b=6356794.343434343 +no_defs"},
- {37230, "+proj=longlat +ellps=intl +no_defs"},
- {37231, "+proj=longlat +ellps=aust_SA +no_defs"},
- {37232, "+proj=longlat +ellps=intl +no_defs"},
- {37233, "+proj=longlat +ellps=intl +no_defs"},
- {37234, "+proj=longlat +ellps=intl +no_defs"},
- {37235, "+proj=longlat +ellps=intl +no_defs"},
- {37237, "+proj=longlat +ellps=intl +no_defs"},
- {37238, "+proj=longlat +ellps=intl +no_defs"},
- {37239, "+proj=longlat +ellps=clrk66 +no_defs"},
- {37240, "+proj=longlat +ellps=clrk80 +no_defs"},
- {37241, "+proj=longlat +ellps=intl +no_defs"},
- {37242, "+proj=longlat +ellps=intl +no_defs"},
- {37243, "+proj=longlat +ellps=clrk66 +no_defs"},
- {37245, "+proj=longlat +ellps=intl +no_defs"},
- {37246, "+proj=longlat +ellps=intl +no_defs"},
- {37247, "+proj=longlat +ellps=intl +no_defs"},
- {37249, "+proj=longlat +ellps=intl +no_defs"},
- {37250, "+proj=longlat +ellps=intl +no_defs"},
- {37251, "+proj=longlat +ellps=intl +no_defs"},
- {37252, "+proj=longlat +ellps=clrk66 +no_defs"},
- {37253, "+proj=longlat +ellps=intl +no_defs"},
- {37254, "+proj=longlat +ellps=clrk80 +no_defs"},
- {37255, "+proj=longlat +ellps=bessel +no_defs"},
- {37257, "+proj=longlat +ellps=krass +no_defs"},
- {37259, "+proj=longlat +ellps=intl +no_defs"},
- {37260, "+proj=longlat +ellps=clrk66 +no_defs"},
- //{53001, ""},
- {53002, "+proj=eqc +lat_ts=60 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- {53003, "+proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m +no_defs"},
- {53004, "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- {53008, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- {53009, "+proj=moll +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- {53010, "+proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- //{53011, ""},
- {53012, "+proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- //{53013, ""},
- //{53014, ""},
- //{53015, ""},
- {53016, "+proj=gall +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- //{53017, ""},
- //{53018, ""},
- //{53019, ""},
- {53021, "+proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- //{53022, ""},
- //{53023, ""},
- {53024, "+proj=bonne +lon_0=0 +lat_1=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- {53025, "+proj=omerc +lat_0=40 +lon_1=0 +lat_1=0 +lon_2=0 +lat_2=0 +k=1 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- {53026, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- {53027, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- {53028, "+proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- {53029, "+proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m +no_defs"},
- {53030, "+proj=robin +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- {53031, "+proj=tpeqd +lat_1=0 +lon_1=0 +lat_2=60 +lon_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- {53032, "+proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs"},
- //{54001, ""},
- {54002, "+proj=eqc +lat_ts=60 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54003, "+proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54004, "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54008, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54009, "+proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54010, "+proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- //{54011, ""},
- {54012, "+proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- //{54013, ""},
- //{54014, ""},
- //{54015, ""},
- {54016, "+proj=gall +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- //{54017, ""},
- //{54018, ""},
- //{54019, ""},
- {54021, "+proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- //{54022, ""},
- //{54023, ""},
- {54024, "+proj=bonne +lon_0=0 +lat_1=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54025, "+proj=omerc +lat_0=40 +lon_1=0 +lat_1=0 +lon_2=0 +lat_2=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54026, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54027, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54028, "+proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54029, "+proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54030, "+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54031, "+proj=tpeqd +lat_1=0 +lon_1=0 +lat_2=60 +lon_2=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {54032, "+proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {65061, "+proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000.00000000001 +y_0=50000.00000000001 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {65161, "+proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000 +y_0=50000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {102001, "+proj=aea +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {102002, "+proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {102003, "+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {102004, "+proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {102005, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {102006, "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {102007, "+proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {102008, "+proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {102009, "+proj=lcc +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {102010, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=60 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {102011, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102012, "+proj=lcc +lat_1=30 +lat_2=62 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102013, "+proj=aea +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs"},
- {102014, "+proj=lcc +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs"},
- {102015, "+proj=lcc +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m +no_defs"},
- {102016, "+proj=aeqd +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102017, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102018, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102019, "+proj=aeqd +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102020, "+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102021, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102022, "+proj=aea +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102023, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=-23 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102024, "+proj=lcc +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102025, "+proj=aea +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102026, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=15 +lat_2=65 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102027, "+proj=lcc +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102028, "+proj=aea +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102029, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=7 +lat_2=-32 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102030, "+proj=lcc +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"},
- {102031, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=43 +lat_2=62 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs"},
- {102032, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=-5 +lat_2=-42 +x_0=0 +y_0=0 +ellps=aust_SA +units=m +no_defs"},
- {102033, "+proj=aea +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m +no_defs"},
- {102065, "+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {102066, "+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=-17.66666666666667 +units=m +no_defs"},
- {102067, "+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {102091, "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {102092, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +units=m +no_defs"},
- {102101, "+proj=tmerc +lat_0=58 +lon_0=6.05625 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs"},
- {102102, "+proj=tmerc +lat_0=58 +lon_0=8.389583333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs"},
- {102103, "+proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs"},
- {102104, "+proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs"},
- {102105, "+proj=tmerc +lat_0=58 +lon_0=16.88958333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs"},
- {102106, "+proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs"},
- {102107, "+proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs"},
- {102108, "+proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs"},
- {102110, "+proj=lcc +lat_1=44 +lat_2=49 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m +no_defs"},
- {102114, "+proj=utm +zone=4 +ellps=clrk66 +units=m +no_defs"},
- {102115, "+proj=utm +zone=5 +ellps=clrk66 +units=m +no_defs"},
- {102120, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs"},
- {102121, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102122, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=clrk66 +datum=NAD27 +units=m +no_defs"},
- {102123, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"},
- {102132, "+proj=utm +zone=32 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs"},
- {102133, "+proj=utm +zone=33 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs"},
- {102134, "+proj=utm +zone=34 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs"},
- {102135, "+proj=utm +zone=35 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs"},
- {102140, "+proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +units=m +no_defs"},
- {102141, "+proj=utm +zone=49 +ellps=intl +units=m +no_defs"},
- {102142, "+proj=utm +zone=50 +ellps=intl +units=m +no_defs"},
- {102151, "+proj=utm +zone=51 +ellps=bessel +units=m +no_defs"},
- {102152, "+proj=utm +zone=52 +ellps=bessel +units=m +no_defs"},
- {102153, "+proj=utm +zone=53 +ellps=bessel +units=m +no_defs"},
- {102154, "+proj=utm +zone=54 +ellps=bessel +units=m +no_defs"},
- {102155, "+proj=utm +zone=55 +ellps=bessel +units=m +no_defs"},
- {102156, "+proj=utm +zone=56 +ellps=bessel +units=m +no_defs"},
- {102160, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=200180.598 +y_0=299913.01 +ellps=intl +units=m +no_defs"},
- {102161, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs"},
- {102162, "+proj=utm +zone=26 +ellps=intl +units=m +no_defs"},
- {102163, "+proj=bonne +lon_0=-8.131906111111112 +lat_1=39.66666666666666 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs"},
- {102164, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs"},
- {102165, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs"},
- {102166, "+proj=utm +zone=25 +ellps=intl +units=m +no_defs"},
- {102167, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs"},
- {102168, "+proj=utm +zone=26 +ellps=intl +units=m +no_defs"},
- {102169, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs"},
- {102191, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs"},
- {102192, "+proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs"},
- {102193, "+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs"},
- {102229, "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102230, "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.9999333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102241, "+proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {102242, "+proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {102243, "+proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {102244, "+proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {102245, "+proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {102246, "+proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {102248, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102249, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102250, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.9999333333333333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102251, "+proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102252, "+proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs"},
- {102253, "+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs"},
- {102254, "+proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs"},
- {102255, "+proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs"},
- {102256, "+proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m +no_defs"},
- {102257, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102258, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.9999411764705882 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102259, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.9999411764705882 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102260, "+proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102261, "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.9999666666666667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102262, "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.9999666666666667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102263, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102264, "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102265, "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102266, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102267, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102268, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473684210526 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102269, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473684210526 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102270, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.9999333333333333 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102271, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102272, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.9999411764705882 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102273, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9999666666666667 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m +no_defs"},
- {102274, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9999666666666667 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m +no_defs"},
- {102277, "+proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102278, "+proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs"},
- {102279, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102280, "+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs"},
- {102281, "+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102282, "+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102283, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102284, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.9999666666666667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102285, "+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102286, "+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m +no_defs"},
- {102287, "+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102288, "+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102289, "+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102290, "+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102291, "+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs"},
- {102292, "+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs"},
- {102293, "+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs"},
- {102294, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102295, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102296, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.9999333333333333 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102297, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.9999333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102298, "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.9999411764705882 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102300, "+proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102304, "+proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102307, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m +no_defs"},
- {102308, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs"},
- {102309, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs"},
- {102310, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.9999666666666667 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102311, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102312, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.9999090909090909 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102313, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102314, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.9999166666666667 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102315, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102316, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102317, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102318, "+proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102320, "+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102321, "+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102322, "+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102323, "+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102324, "+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102325, "+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102326, "+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102327, "+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102330, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102334, "+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102335, "+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102336, "+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102337, "+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs"},
- {102338, "+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs"},
- {102339, "+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs"},
- {102340, "+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs"},
- {102341, "+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs"},
- {102342, "+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs"},
- {102343, "+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs"},
- {102344, "+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs"},
- {102345, "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.9999642857142857 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102346, "+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs"},
- {102347, "+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs"},
- {102348, "+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102349, "+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102350, "+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102351, "+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102352, "+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102353, "+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102354, "+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102355, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102356, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m +no_defs"},
- {102357, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs"},
- {102358, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs"},
- {102361, "+proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m +no_defs"},
- {102491, "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs"},
- {102492, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs"},
- {102581, "+proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=2.337229166666667 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs"},
- {102582, "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs"},
- {102583, "+proj=lcc +lat_1=44.1 +lat_0=44.1 +lon_0=2.337229166666667 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs"},
- {102584, "+proj=lcc +lat_1=42.165 +lat_0=42.165 +lon_0=2.337229166666667 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs"},
- {102591, "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs"},
- {102592, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs"},
- {102629, "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102630, "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.9999333333333333 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102631, "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=-36.86989764583333 +k=0.9999 +x_0=4999999.999999999 +y_0=-4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102632, "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102633, "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102634, "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102635, "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102636, "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102637, "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102638, "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102639, "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102640, "+proj=lcc +lat_1=51.83333333333334 +lat_2=53.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102641, "+proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102642, "+proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102643, "+proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102644, "+proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102645, "+proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102646, "+proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102648, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102649, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102650, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.9999333333333333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102651, "+proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102652, "+proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102653, "+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102654, "+proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102655, "+proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102656, "+proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102657, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102658, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.9999411764705882 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102659, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.9999411764705882 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102660, "+proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102661, "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.9999666666666667 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102662, "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.9999666666666667 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102663, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102664, "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102665, "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102666, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102667, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102668, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473684210526 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102669, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473684210526 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102670, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.9999333333333333 +x_0=799999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102671, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102672, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.9999411764705882 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102673, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9999666666666667 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102674, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9999666666666667 +x_0=900000.0000000001 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102675, "+proj=lcc +lat_1=42.06666666666667 +lat_2=43.26666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102676, "+proj=lcc +lat_1=40.61666666666667 +lat_2=41.78333333333333 +lat_0=40 +lon_0=-93.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102677, "+proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102678, "+proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102679, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102680, "+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0000000002 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102681, "+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102682, "+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102683, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102684, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.9999666666666667 +x_0=900000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102685, "+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102686, "+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000.0000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102687, "+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102688, "+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102689, "+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000.000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102690, "+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102691, "+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102692, "+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102693, "+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102694, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102695, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102696, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.9999333333333333 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102697, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.9999333333333333 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102698, "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.9999411764705882 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102700, "+proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102704, "+proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102707, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=7999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102708, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.0000000002 +y_0=6000000.000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102709, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=799999.9999999999 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102710, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.9999666666666667 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102711, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102712, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.9999090909090909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102713, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102714, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.9999166666666667 +x_0=829999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102715, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102716, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102717, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102718, "+proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102719, "+proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2199999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102720, "+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102721, "+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102722, "+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102723, "+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102724, "+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102725, "+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102726, "+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102727, "+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102728, "+proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102729, "+proj=lcc +lat_1=39.93333333333333 +lat_2=40.96666666666667 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102730, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102733, "+proj=lcc +lat_1=32.5 +lat_2=34.83333333333334 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102734, "+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102735, "+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102736, "+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102737, "+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102738, "+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000.0000000001 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102739, "+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102740, "+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000.0000000001 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102741, "+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102742, "+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102743, "+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102744, "+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102745, "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.9999642857142857 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102746, "+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102747, "+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102748, "+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102749, "+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102750, "+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102751, "+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102752, "+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102753, "+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102754, "+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102755, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102756, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102757, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102758, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102761, "+proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {102766, "+proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=49999.99999999999 +y_0=49999.99999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs"},
- {103300, "+proj=lcc +lat_1=49.8333339 +lat_2=51.16666733333333 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m +no_defs"},
- {104000, "+proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs"},
- {104101, "+proj=longlat +ellps=bessel +no_defs"},
- {104102, "+proj=longlat +ellps=bessel +no_defs"},
- {104103, "+proj=longlat +ellps=clrk80 +no_defs"},
- {104104, "+proj=longlat +ellps=intl +no_defs"},
- {104105, "+proj=longlat +ellps=bessel +no_defs"},
- {104106, "+proj=longlat +ellps=intl +no_defs"},
- {104107, "+proj=longlat +ellps=GRS80 +no_defs"},
- {104108, "+proj=longlat +ellps=GRS80 +no_defs"},
- {104261, "+proj=longlat +a=6378249.2 +b=6356514.999904194 +no_defs"},
- {104304, "+proj=longlat +a=6378249.2 +b=6356514.999904194 +no_defs"},
- {104305, "+proj=longlat +ellps=clrk80 +no_defs"}
- };
-
- const code_element * first = arr;
- const code_element * last = arr + sizeof(arr) / sizeof(code_element);
- const code_element * el = binary_find_code_element(first, last, code);
-
- return el != last ? el->proj4_str : "";
- }
-
-}
-#endif // DOXYGEN_NO_DETAIL
-
-
-}}} // namespace boost::geometry::projections
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/esri_params.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/esri_params.hpp
deleted file mode 100644
index 01673092f8a..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/esri_params.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_SRS_PROJECTIONS_ESRI_PARAMS_HPP
-#define BOOST_GEOMETRY_SRS_PROJECTIONS_ESRI_PARAMS_HPP
-
-
-#include <string>
-
-#include <boost/geometry/srs/spheroid.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace srs
-{
-
-
-struct esri
-{
- explicit esri(int c)
- : code(c)
- {}
-
- int code;
-};
-
-
-template <int Code>
-struct static_esri
-{
- static const int code = Code;
-};
-
-
-} // namespace srs
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_SRS_PROJECTIONS_ESRI_PARAMS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/esri_traits.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/esri_traits.hpp
deleted file mode 100644
index 961bd3695f4..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/esri_traits.hpp
+++ /dev/null
@@ -1,499 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_ESRI_TRAITS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ESRI_TRAITS_HPP
-
-
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/srs/projections/factory.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/srid_traits.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-/*!
- \brief ESRI traits
- \details With help of the ESRI traits library users can statically use projections
- or coordinate systems specifying an ESRI code. The correct projections for transformations
- are used automically then, still keeping static polymorphism.
- \ingroup projection
- \tparam ESRI esri code
-*/
-template <size_t ESRI>
-struct esri_traits
-{
- // Specializations define:
- // - type to get projection type
- // - function par to get parameters
-};
-
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37001, longlat, WGS66, "+proj=longlat +ellps=WGS66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 37002, longlat, 6378166, 6356784.283607107, "+proj=longlat +a=6378166 +b=6356784.283607107 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 37003, longlat, 6378150, 6356768.337244385, "+proj=longlat +a=6378150 +b=6356768.337244385 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37004, longlat, fschr60m, "+proj=longlat +ellps=fschr60m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 37005, longlat, 6378270, 6356794.343434343, "+proj=longlat +a=6378270 +b=6356794.343434343 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 37006, longlat, 6377295.664, 6356094.667915204, "+proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 37007, longlat, 6376896, 6355834.846687363, "+proj=longlat +a=6376896 +b=6355834.846687363 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 37008, longlat, 6370997, "+proj=longlat +a=6370997 +b=6370997 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37201, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 37202, longlat, 6377276.345, 6356075.41314024, "+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 37203, longlat, 6377301.243, 6356100.230165384, "+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37204, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37205, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37206, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37207, longlat, fschr60m, "+proj=longlat +ellps=fschr60m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37208, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37211, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37212, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37213, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37214, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37215, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37216, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37217, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37218, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37219, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37220, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37221, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37222, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 37223, longlat, 6378249.2, 6356514.999904194, "+proj=longlat +a=6378249.2 +b=6356514.999904194 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37224, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37226, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37227, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37228, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 37229, longlat, 6378270, 6356794.343434343, "+proj=longlat +a=6378270 +b=6356794.343434343 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37230, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37231, longlat, aust_SA, "+proj=longlat +ellps=aust_SA +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37232, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37233, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37234, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37235, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37237, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37238, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37239, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37240, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37241, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37242, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37243, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37245, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37246, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37247, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37249, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37250, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37251, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37252, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37253, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37254, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37255, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37257, longlat, krass, "+proj=longlat +ellps=krass +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37259, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 37260, longlat, clrk66, "+proj=longlat +ellps=clrk66 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 53001, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53002, eqc, 6371000, "+proj=eqc +lat_ts=60 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53003, mill, 6371000, "+proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53004, merc, 6371000, "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53008, sinu, 6371000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53009, moll, 6371000, "+proj=moll +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53010, eck6, 6371000, "+proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 53011, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53012, eck4, 6371000, "+proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 53013, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 53014, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 53015, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53016, gall, 6371000, "+proj=gall +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 53017, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 53018, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 53019, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53021, poly, 6371000, "+proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 53022, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 53023, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53024, bonne, 6371000, "+proj=bonne +lon_0=0 +lat_1=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53025, omerc, 6371000, "+proj=omerc +lat_0=40 +lon_1=0 +lat_1=0 +lon_2=0 +lat_2=0 +k=1 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53026, stere, 6371000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53027, eqdc, 6371000, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53028, cass, 6371000, "+proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53029, vandg, 6371000, "+proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53030, robin, 6371000, "+proj=robin +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53031, tpeqd, 6371000, "+proj=tpeqd +lat_1=0 +lon_1=0 +lat_2=60 +lon_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 53032, aeqd, 6371000, "+proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 54001, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54002, eqc, WGS84, WGS84, "+proj=eqc +lat_ts=60 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 54003, mill, 6371007.1810824294, "+proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54004, merc, WGS84, WGS84, "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54008, sinu, WGS84, WGS84, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54009, moll, WGS84, WGS84, "+proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54010, eck6, WGS84, WGS84, "+proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 54011, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54012, eck4, WGS84, WGS84, "+proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 54013, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 54014, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 54015, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54016, gall, WGS84, WGS84, "+proj=gall +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 54017, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 54018, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 54019, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54021, poly, WGS84, WGS84, "+proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 54022, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (esri, 54023, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54024, bonne, WGS84, WGS84, "+proj=bonne +lon_0=0 +lat_1=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54025, omerc, WGS84, WGS84, "+proj=omerc +lat_0=40 +lon_1=0 +lat_1=0 +lon_2=0 +lat_2=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54026, stere, WGS84, WGS84, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54027, eqdc, WGS84, WGS84, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54028, cass, WGS84, WGS84, "+proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (esri, 54029, vandg, 6371007.1810824294, "+proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54030, robin, WGS84, WGS84, "+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54031, tpeqd, WGS84, WGS84, "+proj=tpeqd +lat_1=0 +lon_1=0 +lat_2=60 +lon_2=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 54032, aeqd, WGS84, WGS84, "+proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 65061, poly, clrk66, NAD27, "+proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000.00000000001 +y_0=50000.00000000001 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 65161, poly, GRS80, NAD83, "+proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000 +y_0=50000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102001, aea, GRS80, NAD83, "+proj=aea +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102002, lcc, GRS80, NAD83, "+proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102003, aea, GRS80, NAD83, "+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102004, lcc, GRS80, NAD83, "+proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102005, eqdc, GRS80, NAD83, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102006, aea, GRS80, NAD83, "+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102007, aea, GRS80, NAD83, "+proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102008, aea, GRS80, NAD83, "+proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102009, lcc, GRS80, NAD83, "+proj=lcc +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102010, eqdc, GRS80, NAD83, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=60 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102011, sinu, WGS84, WGS84, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102012, lcc, WGS84, WGS84, "+proj=lcc +lat_1=30 +lat_2=62 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102013, aea, intl, "+proj=aea +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102014, lcc, intl, "+proj=lcc +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102015, lcc, aust_SA, "+proj=lcc +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102016, aeqd, WGS84, WGS84, "+proj=aeqd +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102017, laea, WGS84, WGS84, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102018, stere, WGS84, WGS84, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102019, aeqd, WGS84, WGS84, "+proj=aeqd +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102020, laea, WGS84, WGS84, "+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102021, stere, WGS84, WGS84, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102022, aea, WGS84, WGS84, "+proj=aea +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102023, eqdc, WGS84, WGS84, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=-23 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102024, lcc, WGS84, WGS84, "+proj=lcc +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102025, aea, WGS84, WGS84, "+proj=aea +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102026, eqdc, WGS84, WGS84, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=15 +lat_2=65 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102027, lcc, WGS84, WGS84, "+proj=lcc +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102028, aea, WGS84, WGS84, "+proj=aea +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102029, eqdc, WGS84, WGS84, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=7 +lat_2=-32 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102030, lcc, WGS84, WGS84, "+proj=lcc +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102031, eqdc, intl, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=43 +lat_2=62 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102032, eqdc, aust_SA, "+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=-5 +lat_2=-42 +x_0=0 +y_0=0 +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102033, aea, aust_SA, "+proj=aea +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102065, krovak, bessel, "+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102066, krovak, bessel, "+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=-17.66666666666667 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102067, krovak, bessel, "+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102091, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102092, tmerc, intl, "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102101, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=6.05625 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102102, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=8.389583333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102103, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102104, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102105, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=16.88958333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102106, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102107, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102108, tmerc, 6377492.018, 6356173.508712696, "+proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102110, lcc, GRS80, "+proj=lcc +lat_1=44 +lat_2=49 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102114, utm, clrk66, "+proj=utm +zone=4 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102115, utm, clrk66, "+proj=utm +zone=5 +ellps=clrk66 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102120, omerc, clrk66, NAD27, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102121, omerc, GRS80, NAD83, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102122, omerc, clrk66, NAD27, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=clrk66 +datum=NAD27 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102123, omerc, GRS80, NAD83, "+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102132, utm, 6377492.018, 6356173.508712696, "+proj=utm +zone=32 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102133, utm, 6377492.018, 6356173.508712696, "+proj=utm +zone=33 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102134, utm, 6377492.018, 6356173.508712696, "+proj=utm +zone=34 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102135, utm, 6377492.018, 6356173.508712696, "+proj=utm +zone=35 +a=6377492.018 +b=6356173.508712696 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102140, tmerc, intl, "+proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102141, utm, intl, "+proj=utm +zone=49 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102142, utm, intl, "+proj=utm +zone=50 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102151, utm, bessel, "+proj=utm +zone=51 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102152, utm, bessel, "+proj=utm +zone=52 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102153, utm, bessel, "+proj=utm +zone=53 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102154, utm, bessel, "+proj=utm +zone=54 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102155, utm, bessel, "+proj=utm +zone=55 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102156, utm, bessel, "+proj=utm +zone=56 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102160, tmerc, intl, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=200180.598 +y_0=299913.01 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102161, tmerc, intl, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102162, utm, intl, "+proj=utm +zone=26 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102163, bonne, bessel, "+proj=bonne +lon_0=-8.131906111111112 +lat_1=39.66666666666666 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102164, tmerc, intl, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102165, tmerc, intl, "+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102166, utm, intl, "+proj=utm +zone=25 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102167, utm, intl, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102168, utm, intl, "+proj=utm +zone=26 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102169, utm, intl, "+proj=utm +zone=28 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102191, lcc, 6378249.2, 6356514.999904194, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102192, lcc, 6378249.2, 6356514.999904194, "+proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102193, lcc, 6378249.2, 6356514.999904194, "+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102229, tmerc, GRS80, "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102230, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.9999333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102241, lcc, GRS80, "+proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102242, lcc, GRS80, "+proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102243, lcc, GRS80, "+proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102244, lcc, GRS80, "+proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102245, lcc, GRS80, "+proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102246, lcc, GRS80, "+proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102248, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102249, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102250, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.9999333333333333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102251, lcc, GRS80, "+proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102252, lcc, GRS80, "+proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102253, lcc, GRS80, "+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102254, lcc, GRS80, "+proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102255, lcc, GRS80, "+proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102256, lcc, GRS80, "+proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102257, tmerc, GRS80, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102258, tmerc, GRS80, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.9999411764705882 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102259, tmerc, GRS80, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.9999411764705882 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102260, lcc, GRS80, "+proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102261, tmerc, GRS80, "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.9999666666666667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102262, tmerc, GRS80, "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.9999666666666667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102263, tmerc, GRS80, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102264, tmerc, GRS80, "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102265, tmerc, GRS80, "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102266, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102267, tmerc, GRS80, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102268, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473684210526 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102269, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473684210526 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102270, tmerc, GRS80, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.9999333333333333 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102271, tmerc, GRS80, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102272, tmerc, GRS80, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.9999411764705882 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102273, tmerc, GRS80, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9999666666666667 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102274, tmerc, GRS80, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9999666666666667 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102277, lcc, GRS80, "+proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102278, lcc, GRS80, "+proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102279, lcc, GRS80, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102280, lcc, GRS80, "+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102281, lcc, GRS80, "+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102282, lcc, GRS80, "+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102283, tmerc, GRS80, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102284, tmerc, GRS80, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.9999666666666667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102285, lcc, GRS80, "+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102286, lcc, GRS80, "+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102287, lcc, GRS80, "+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102288, lcc, GRS80, "+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102289, lcc, GRS80, "+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102290, lcc, GRS80, "+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102291, lcc, GRS80, "+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102292, lcc, GRS80, "+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102293, lcc, GRS80, "+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102294, tmerc, GRS80, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102295, tmerc, GRS80, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102296, tmerc, GRS80, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.9999333333333333 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102297, tmerc, GRS80, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.9999333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102298, tmerc, GRS80, "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.9999411764705882 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102300, lcc, GRS80, "+proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102304, lcc, GRS80, "+proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102307, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102308, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102309, tmerc, GRS80, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102310, tmerc, GRS80, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.9999666666666667 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102311, tmerc, GRS80, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102312, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.9999090909090909 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102313, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102314, tmerc, GRS80, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.9999166666666667 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102315, tmerc, GRS80, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102316, tmerc, GRS80, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102317, tmerc, GRS80, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102318, lcc, GRS80, "+proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102320, lcc, GRS80, "+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102321, lcc, GRS80, "+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102322, lcc, GRS80, "+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102323, lcc, GRS80, "+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102324, lcc, GRS80, "+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102325, lcc, GRS80, "+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102326, lcc, GRS80, "+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102327, lcc, GRS80, "+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102330, tmerc, GRS80, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102334, lcc, GRS80, "+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102335, lcc, GRS80, "+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102336, lcc, GRS80, "+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102337, lcc, GRS80, "+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102338, lcc, GRS80, "+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102339, lcc, GRS80, "+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102340, lcc, GRS80, "+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102341, lcc, GRS80, "+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102342, lcc, GRS80, "+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102343, lcc, GRS80, "+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102344, lcc, GRS80, "+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102345, tmerc, GRS80, "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.9999642857142857 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102346, lcc, GRS80, "+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102347, lcc, GRS80, "+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102348, lcc, GRS80, "+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102349, lcc, GRS80, "+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102350, lcc, GRS80, "+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102351, lcc, GRS80, "+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102352, lcc, GRS80, "+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102353, lcc, GRS80, "+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102354, lcc, GRS80, "+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102355, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102356, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102357, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102358, tmerc, GRS80, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102361, lcc, GRS80, "+proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102491, lcc, 6378249.2, 6356514.999904194, "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102492, lcc, 6378249.2, 6356514.999904194, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102581, lcc, 6378249.2, 6356514.999904194, "+proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=2.337229166666667 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102582, lcc, 6378249.2, 6356514.999904194, "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102583, lcc, 6378249.2, 6356514.999904194, "+proj=lcc +lat_1=44.1 +lat_0=44.1 +lon_0=2.337229166666667 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 102584, lcc, 6378249.2, 6356514.999904194, "+proj=lcc +lat_1=42.165 +lat_0=42.165 +lon_0=2.337229166666667 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356514.999904194 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102591, lcc, clrk80, "+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 102592, lcc, clrk80, "+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102629, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102630, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.9999333333333333 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102631, omerc, GRS80, NAD83, "+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=-36.86989764583333 +k=0.9999 +x_0=4999999.999999999 +y_0=-4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102632, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102633, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102634, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102635, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102636, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102637, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102638, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102639, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102640, lcc, GRS80, NAD83, "+proj=lcc +lat_1=51.83333333333334 +lat_2=53.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102641, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102642, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102643, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102644, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102645, lcc, GRS80, NAD83, "+proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102646, lcc, GRS80, NAD83, "+proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102648, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102649, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102650, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.9999333333333333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102651, lcc, GRS80, NAD83, "+proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102652, lcc, GRS80, NAD83, "+proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102653, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102654, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102655, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102656, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102657, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102658, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.9999411764705882 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102659, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.9999411764705882 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102660, lcc, GRS80, NAD83, "+proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102661, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.9999666666666667 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102662, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.9999666666666667 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102663, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102664, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102665, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102666, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102667, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102668, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473684210526 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102669, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473684210526 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102670, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.9999333333333333 +x_0=799999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102671, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102672, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.9999411764705882 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102673, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.9999666666666667 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102674, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.9999666666666667 +x_0=900000.0000000001 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102675, lcc, GRS80, NAD83, "+proj=lcc +lat_1=42.06666666666667 +lat_2=43.26666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102676, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.61666666666667 +lat_2=41.78333333333333 +lat_0=40 +lon_0=-93.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102677, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102678, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102679, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102680, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0000000002 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102681, lcc, GRS80, NAD83, "+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102682, lcc, GRS80, NAD83, "+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102683, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102684, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.9999666666666667 +x_0=900000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102685, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102686, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000.0000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102687, lcc, GRS80, NAD83, "+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102688, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102689, lcc, GRS80, NAD83, "+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000.000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102690, lcc, GRS80, NAD83, "+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102691, lcc, GRS80, NAD83, "+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102692, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102693, lcc, GRS80, NAD83, "+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102694, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102695, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102696, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.9999333333333333 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102697, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.9999333333333333 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102698, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.9999411764705882 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102700, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102704, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102707, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=7999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102708, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.0000000002 +y_0=6000000.000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102709, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=799999.9999999999 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102710, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.9999666666666667 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102711, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102712, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.9999090909090909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102713, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102714, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.9999166666666667 +x_0=829999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102715, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102716, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102717, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102718, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102719, lcc, GRS80, NAD83, "+proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2199999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102720, lcc, GRS80, NAD83, "+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102721, lcc, GRS80, NAD83, "+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102722, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102723, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102724, lcc, GRS80, NAD83, "+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102725, lcc, GRS80, NAD83, "+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102726, lcc, GRS80, NAD83, "+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102727, lcc, GRS80, NAD83, "+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102728, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102729, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.93333333333333 +lat_2=40.96666666666667 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102730, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102733, lcc, GRS80, NAD83, "+proj=lcc +lat_1=32.5 +lat_2=34.83333333333334 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102734, lcc, GRS80, NAD83, "+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102735, lcc, GRS80, NAD83, "+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102736, lcc, GRS80, NAD83, "+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102737, lcc, GRS80, NAD83, "+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102738, lcc, GRS80, NAD83, "+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000.0000000001 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102739, lcc, GRS80, NAD83, "+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102740, lcc, GRS80, NAD83, "+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000.0000000001 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102741, lcc, GRS80, NAD83, "+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102742, lcc, GRS80, NAD83, "+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102743, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102744, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102745, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.9999642857142857 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102746, lcc, GRS80, NAD83, "+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102747, lcc, GRS80, NAD83, "+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102748, lcc, GRS80, NAD83, "+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102749, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102750, lcc, GRS80, NAD83, "+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102751, lcc, GRS80, NAD83, "+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102752, lcc, GRS80, NAD83, "+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102753, lcc, GRS80, NAD83, "+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102754, lcc, GRS80, NAD83, "+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102755, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102756, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102757, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102758, tmerc, GRS80, NAD83, "+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102761, lcc, GRS80, NAD83, "+proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 102766, poly, GRS80, NAD83, "+proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=49999.99999999999 +y_0=49999.99999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 103300, lcc, intl, "+proj=lcc +lat_1=49.8333339 +lat_2=51.16666733333333 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(esri, 104000, longlat, clrk66, NAD27, "+proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 104101, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 104102, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 104103, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 104104, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 104105, longlat, bessel, "+proj=longlat +ellps=bessel +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 104106, longlat, intl, "+proj=longlat +ellps=intl +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 104107, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 104108, longlat, GRS80, "+proj=longlat +ellps=GRS80 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 104261, longlat, 6378249.2, 6356514.999904194, "+proj=longlat +a=6378249.2 +b=6356514.999904194 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(esri, 104304, longlat, 6378249.2, 6356514.999904194, "+proj=longlat +a=6378249.2 +b=6356514.999904194 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E (esri, 104305, longlat, clrk80, "+proj=longlat +ellps=clrk80 +no_defs")
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}}} // namespace boost::geometry::projections
-
-
-#endif
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/exception.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/exception.hpp
deleted file mode 100644
index 222207024e9..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/exception.hpp
+++ /dev/null
@@ -1,97 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_EXCEPTION_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_EXCEPTION_HPP
-
-
-#include <boost/geometry/core/exception.hpp>
-#include <boost/geometry/srs/projections/impl/pj_strerrno.hpp>
-
-#include <boost/throw_exception.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-// TODO: make more for forward/inverse/init/setup
-class projection_exception : public geometry::exception
-{
-public:
- explicit projection_exception(int code = 0)
- : m_code(code)
- , m_msg(projections::detail::pj_strerrno(code))
- {}
-
- explicit projection_exception(std::string const& msg)
- : m_code(0)
- , m_msg(msg)
- {}
-
- projection_exception(int code, std::string const& msg)
- : m_code(code)
- , m_msg(msg)
- {}
-
- virtual char const* what() const throw()
- {
- //return "Boost.Geometry Projection exception";
- return m_msg.what();
- }
-
- int code() const { return m_code; }
-private :
- int m_code;
- std::runtime_error m_msg;
-};
-
-
-struct projection_not_named_exception
- : projection_exception
-{
- projection_not_named_exception()
- : projection_exception(-4)
- {}
-};
-
-struct projection_unknown_id_exception
- : projection_exception
-{
- projection_unknown_id_exception(std::string const& proj_name)
- : projection_exception(-5, msg(proj_name))
- {}
-
-private:
- static std::string msg(std::string const& proj_name)
- {
- return projections::detail::pj_strerrno(-5) + " (" + proj_name + ")";
- }
-};
-
-struct projection_not_invertible_exception
- : projection_exception
-{
- projection_not_invertible_exception(std::string const& proj_name)
- : projection_exception(-17, msg(proj_name))
- {}
-
-private:
- static std::string msg(std::string const& proj_name)
- {
- return std::string("projection (") + proj_name + ") is not invertible";
- }
-};
-
-
-}} // namespace boost::geometry
-#endif // BOOST_GEOMETRY_PROJECTIONS_EXCEPTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/factory.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/factory.hpp
deleted file mode 100644
index b94d8395aca..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/factory.hpp
+++ /dev/null
@@ -1,282 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_FACTORY_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_FACTORY_HPP
-
-#include <map>
-#include <string>
-
-#include <boost/shared_ptr.hpp>
-
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/proj/aea.hpp>
-#include <boost/geometry/srs/projections/proj/aeqd.hpp>
-#include <boost/geometry/srs/projections/proj/airy.hpp>
-#include <boost/geometry/srs/projections/proj/aitoff.hpp>
-#include <boost/geometry/srs/projections/proj/august.hpp>
-#include <boost/geometry/srs/projections/proj/bacon.hpp>
-#include <boost/geometry/srs/projections/proj/bipc.hpp>
-#include <boost/geometry/srs/projections/proj/boggs.hpp>
-#include <boost/geometry/srs/projections/proj/bonne.hpp>
-#include <boost/geometry/srs/projections/proj/cass.hpp>
-#include <boost/geometry/srs/projections/proj/cc.hpp>
-#include <boost/geometry/srs/projections/proj/cea.hpp>
-#include <boost/geometry/srs/projections/proj/chamb.hpp>
-#include <boost/geometry/srs/projections/proj/collg.hpp>
-#include <boost/geometry/srs/projections/proj/crast.hpp>
-#include <boost/geometry/srs/projections/proj/denoy.hpp>
-#include <boost/geometry/srs/projections/proj/eck1.hpp>
-#include <boost/geometry/srs/projections/proj/eck2.hpp>
-#include <boost/geometry/srs/projections/proj/eck3.hpp>
-#include <boost/geometry/srs/projections/proj/eck4.hpp>
-#include <boost/geometry/srs/projections/proj/eck5.hpp>
-#include <boost/geometry/srs/projections/proj/eqc.hpp>
-#include <boost/geometry/srs/projections/proj/eqdc.hpp>
-#include <boost/geometry/srs/projections/proj/etmerc.hpp>
-#include <boost/geometry/srs/projections/proj/fahey.hpp>
-#include <boost/geometry/srs/projections/proj/fouc_s.hpp>
-#include <boost/geometry/srs/projections/proj/gall.hpp>
-#include <boost/geometry/srs/projections/proj/geocent.hpp>
-#include <boost/geometry/srs/projections/proj/geos.hpp>
-#include <boost/geometry/srs/projections/proj/gins8.hpp>
-#include <boost/geometry/srs/projections/proj/gn_sinu.hpp>
-#include <boost/geometry/srs/projections/proj/gnom.hpp>
-#include <boost/geometry/srs/projections/proj/goode.hpp>
-#include <boost/geometry/srs/projections/proj/gstmerc.hpp>
-#include <boost/geometry/srs/projections/proj/hammer.hpp>
-#include <boost/geometry/srs/projections/proj/hatano.hpp>
-#include <boost/geometry/srs/projections/proj/healpix.hpp>
-#include <boost/geometry/srs/projections/proj/krovak.hpp>
-#include <boost/geometry/srs/projections/proj/igh.hpp>
-#include <boost/geometry/srs/projections/proj/imw_p.hpp>
-#include <boost/geometry/srs/projections/proj/isea.hpp>
-#include <boost/geometry/srs/projections/proj/laea.hpp>
-#include <boost/geometry/srs/projections/proj/labrd.hpp>
-#include <boost/geometry/srs/projections/proj/lagrng.hpp>
-#include <boost/geometry/srs/projections/proj/larr.hpp>
-#include <boost/geometry/srs/projections/proj/lask.hpp>
-#include <boost/geometry/srs/projections/proj/latlong.hpp>
-#include <boost/geometry/srs/projections/proj/lcc.hpp>
-#include <boost/geometry/srs/projections/proj/lcca.hpp>
-#include <boost/geometry/srs/projections/proj/loxim.hpp>
-#include <boost/geometry/srs/projections/proj/lsat.hpp>
-#include <boost/geometry/srs/projections/proj/mbtfpp.hpp>
-#include <boost/geometry/srs/projections/proj/mbtfpq.hpp>
-#include <boost/geometry/srs/projections/proj/mbt_fps.hpp>
-#include <boost/geometry/srs/projections/proj/merc.hpp>
-#include <boost/geometry/srs/projections/proj/mill.hpp>
-#include <boost/geometry/srs/projections/proj/mod_ster.hpp>
-#include <boost/geometry/srs/projections/proj/moll.hpp>
-#include <boost/geometry/srs/projections/proj/natearth.hpp>
-#include <boost/geometry/srs/projections/proj/nell.hpp>
-#include <boost/geometry/srs/projections/proj/nell_h.hpp>
-#include <boost/geometry/srs/projections/proj/nocol.hpp>
-#include <boost/geometry/srs/projections/proj/nsper.hpp>
-#include <boost/geometry/srs/projections/proj/nzmg.hpp>
-#include <boost/geometry/srs/projections/proj/ob_tran.hpp>
-#include <boost/geometry/srs/projections/proj/ocea.hpp>
-#include <boost/geometry/srs/projections/proj/oea.hpp>
-#include <boost/geometry/srs/projections/proj/omerc.hpp>
-#include <boost/geometry/srs/projections/proj/ortho.hpp>
-#include <boost/geometry/srs/projections/proj/qsc.hpp>
-#include <boost/geometry/srs/projections/proj/poly.hpp>
-#include <boost/geometry/srs/projections/proj/putp2.hpp>
-#include <boost/geometry/srs/projections/proj/putp3.hpp>
-#include <boost/geometry/srs/projections/proj/putp4p.hpp>
-#include <boost/geometry/srs/projections/proj/putp5.hpp>
-#include <boost/geometry/srs/projections/proj/putp6.hpp>
-#include <boost/geometry/srs/projections/proj/robin.hpp>
-#include <boost/geometry/srs/projections/proj/rouss.hpp>
-#include <boost/geometry/srs/projections/proj/rpoly.hpp>
-#include <boost/geometry/srs/projections/proj/sconics.hpp>
-#include <boost/geometry/srs/projections/proj/somerc.hpp>
-#include <boost/geometry/srs/projections/proj/stere.hpp>
-#include <boost/geometry/srs/projections/proj/sterea.hpp>
-#include <boost/geometry/srs/projections/proj/sts.hpp>
-#include <boost/geometry/srs/projections/proj/tcc.hpp>
-#include <boost/geometry/srs/projections/proj/tcea.hpp>
-#include <boost/geometry/srs/projections/proj/tmerc.hpp>
-#include <boost/geometry/srs/projections/proj/tpeqd.hpp>
-#include <boost/geometry/srs/projections/proj/urm5.hpp>
-#include <boost/geometry/srs/projections/proj/urmfps.hpp>
-#include <boost/geometry/srs/projections/proj/vandg.hpp>
-#include <boost/geometry/srs/projections/proj/vandg2.hpp>
-#include <boost/geometry/srs/projections/proj/vandg4.hpp>
-#include <boost/geometry/srs/projections/proj/wag2.hpp>
-#include <boost/geometry/srs/projections/proj/wag3.hpp>
-#include <boost/geometry/srs/projections/proj/wag7.hpp>
-#include <boost/geometry/srs/projections/proj/wink1.hpp>
-#include <boost/geometry/srs/projections/proj/wink2.hpp>
-
-namespace boost { namespace geometry { namespace projections
-{
-
-namespace detail
-{
-
-template <typename CT, typename Parameters>
-class factory : public detail::base_factory<CT, Parameters>
-{
-private:
-
- typedef std::map
- <
- std::string,
- boost::shared_ptr
- <
- detail::factory_entry
- <
- CT,
- Parameters
- >
- >
- > prj_registry;
- prj_registry m_registry;
-
-public:
-
- factory()
- {
- detail::aea_init(*this);
- detail::aeqd_init(*this);
- detail::airy_init(*this);
- detail::aitoff_init(*this);
- detail::august_init(*this);
- detail::bacon_init(*this);
- detail::bipc_init(*this);
- detail::boggs_init(*this);
- detail::bonne_init(*this);
- detail::cass_init(*this);
- detail::cc_init(*this);
- detail::cea_init(*this);
- detail::chamb_init(*this);
- detail::collg_init(*this);
- detail::crast_init(*this);
- detail::denoy_init(*this);
- detail::eck1_init(*this);
- detail::eck2_init(*this);
- detail::eck3_init(*this);
- detail::eck4_init(*this);
- detail::eck5_init(*this);
- detail::eqc_init(*this);
- detail::eqdc_init(*this);
- detail::etmerc_init(*this);
- detail::fahey_init(*this);
- detail::fouc_s_init(*this);
- detail::gall_init(*this);
- detail::geocent_init(*this);
- detail::geos_init(*this);
- detail::gins8_init(*this);
- detail::gn_sinu_init(*this);
- detail::gnom_init(*this);
- detail::goode_init(*this);
- detail::gstmerc_init(*this);
- detail::hammer_init(*this);
- detail::hatano_init(*this);
- detail::healpix_init(*this);
- detail::krovak_init(*this);
- detail::igh_init(*this);
- detail::imw_p_init(*this);
- detail::isea_init(*this);
- detail::labrd_init(*this);
- detail::laea_init(*this);
- detail::lagrng_init(*this);
- detail::larr_init(*this);
- detail::lask_init(*this);
- detail::latlong_init(*this);
- detail::lcc_init(*this);
- detail::lcca_init(*this);
- detail::loxim_init(*this);
- detail::lsat_init(*this);
- detail::mbtfpp_init(*this);
- detail::mbtfpq_init(*this);
- detail::mbt_fps_init(*this);
- detail::merc_init(*this);
- detail::mill_init(*this);
- detail::mod_ster_init(*this);
- detail::moll_init(*this);
- detail::natearth_init(*this);
- detail::nell_init(*this);
- detail::nell_h_init(*this);
- detail::nocol_init(*this);
- detail::nsper_init(*this);
- detail::nzmg_init(*this);
- detail::ob_tran_init(*this);
- detail::ocea_init(*this);
- detail::oea_init(*this);
- detail::omerc_init(*this);
- detail::ortho_init(*this);
- detail::qsc_init(*this);
- detail::poly_init(*this);
- detail::putp2_init(*this);
- detail::putp3_init(*this);
- detail::putp4p_init(*this);
- detail::putp5_init(*this);
- detail::putp6_init(*this);
- detail::robin_init(*this);
- detail::rouss_init(*this);
- detail::rpoly_init(*this);
- detail::sconics_init(*this);
- detail::somerc_init(*this);
- detail::stere_init(*this);
- detail::sterea_init(*this);
- detail::sts_init(*this);
- detail::tcc_init(*this);
- detail::tcea_init(*this);
- detail::tmerc_init(*this);
- detail::tpeqd_init(*this);
- detail::urm5_init(*this);
- detail::urmfps_init(*this);
- detail::vandg_init(*this);
- detail::vandg2_init(*this);
- detail::vandg4_init(*this);
- detail::wag2_init(*this);
- detail::wag3_init(*this);
- detail::wag7_init(*this);
- detail::wink1_init(*this);
- detail::wink2_init(*this);
- }
-
- virtual ~factory() {}
-
- virtual void add_to_factory(std::string const& name,
- detail::factory_entry<CT, Parameters>* sub)
- {
- m_registry[name].reset(sub);
- }
-
- inline detail::base_v<CT, Parameters>* create_new(Parameters const& parameters) const
- {
- typename prj_registry::const_iterator it = m_registry.find(parameters.name);
- if (it != m_registry.end())
- {
- return it->second->create_new(parameters);
- }
-
- return 0;
- }
-};
-
-template <typename CT>
-inline detail::base_v<CT, projections::parameters<CT> >*
- create_new(projections::parameters<CT> const& parameters)
-{
- static factory<CT, projections::parameters<CT> > fac;
- return fac.create_new(parameters);
-}
-
-} // namespace detail
-
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_FACTORY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/iau2000.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/iau2000.hpp
deleted file mode 100644
index 086ac2d7080..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/iau2000.hpp
+++ /dev/null
@@ -1,2424 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_IAU2000_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IAU2000_HPP
-
-
-#include <boost/geometry/srs/projections/code.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
- inline std::string iau2000_to_string(int code)
- {
- static const code_element arr[] = {
- {19900, "+proj=longlat +a=2439700 +b=2439700 +no_defs"},
- {19901, "+proj=longlat +a=2439700 +b=2439700 +no_defs"},
- //{19910, ""},
- //{19911, ""},
- //{19912, ""},
- //{19913, ""},
- {19914, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19915, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19916, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19917, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19918, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19919, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19920, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19921, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19960, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19961, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19962, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19963, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19964, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19965, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19966, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19967, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- //{19968, ""},
- //{19969, ""},
- //{19970, ""},
- //{19971, ""},
- {19972, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- {19973, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs"},
- //{19974, ""},
- //{19975, ""},
- //{19976, ""},
- //{19977, ""},
- //{19978, ""},
- //{19979, ""},
- {29900, "+proj=longlat +a=6051800 +b=6051800 +no_defs"},
- {29901, "+proj=longlat +a=6051800 +b=6051800 +no_defs"},
- //{29910, ""},
- //{29911, ""},
- //{29912, ""},
- //{29913, ""},
- {29914, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29915, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29916, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29917, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29918, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29919, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29920, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29921, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29960, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29961, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29962, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29963, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29964, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29965, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29966, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29967, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- //{29968, ""},
- //{29969, ""},
- //{29970, ""},
- //{29971, ""},
- {29972, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- {29973, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs"},
- //{29974, ""},
- //{29975, ""},
- //{29976, ""},
- //{29977, ""},
- //{29978, ""},
- //{29979, ""},
- {30100, "+proj=longlat +a=1737400 +b=1737400 +no_defs"},
- {30101, "+proj=longlat +a=1737400 +b=1737400 +no_defs"},
- //{30110, ""},
- //{30111, ""},
- //{30112, ""},
- //{30113, ""},
- {30114, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30115, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30116, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30117, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30118, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30119, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30120, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30121, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30160, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30161, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30162, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30163, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30164, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30165, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30166, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30167, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- //{30168, ""},
- //{30169, ""},
- //{30170, ""},
- //{30171, ""},
- {30172, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- {30173, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs"},
- //{30174, ""},
- //{30175, ""},
- //{30176, ""},
- //{30177, ""},
- //{30178, ""},
- //{30179, ""},
- {39900, "+proj=longlat +a=6378140 +b=6356750 +no_defs"},
- {39901, "+proj=longlat +a=6378140 +b=6356750 +no_defs"},
- //{39910, ""},
- //{39911, ""},
- //{39912, ""},
- //{39913, ""},
- {39914, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39915, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39916, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39917, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39918, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39919, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39920, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39921, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39960, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39961, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39962, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39963, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39964, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39965, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39966, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39967, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- //{39968, ""},
- //{39969, ""},
- //{39970, ""},
- //{39971, ""},
- {39972, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- {39973, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs"},
- //{39974, ""},
- //{39975, ""},
- //{39976, ""},
- //{39977, ""},
- //{39978, ""},
- //{39979, ""},
- {40100, "+proj=longlat +a=13400 +b=9200 +no_defs"},
- {40101, "+proj=longlat +a=13400 +b=9200 +no_defs"},
- //{40110, ""},
- //{40111, ""},
- //{40112, ""},
- //{40113, ""},
- {40114, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40115, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40116, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40117, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40118, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40119, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40120, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40121, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40160, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40161, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40162, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40163, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40164, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40165, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40166, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40167, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- //{40168, ""},
- //{40169, ""},
- //{40170, ""},
- //{40171, ""},
- {40172, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- {40173, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs"},
- //{40174, ""},
- //{40175, ""},
- //{40176, ""},
- //{40177, ""},
- //{40178, ""},
- //{40179, ""},
- {40200, "+proj=longlat +a=7500 +b=5200 +no_defs"},
- {40201, "+proj=longlat +a=7500 +b=5200 +no_defs"},
- //{40210, ""},
- //{40211, ""},
- //{40212, ""},
- //{40213, ""},
- {40214, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40215, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40216, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40217, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40218, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40219, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40220, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40221, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40260, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40261, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40262, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40263, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40264, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40265, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40266, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40267, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- //{40268, ""},
- //{40269, ""},
- //{40270, ""},
- //{40271, ""},
- {40272, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- {40273, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs"},
- //{40274, ""},
- //{40275, ""},
- //{40276, ""},
- //{40277, ""},
- //{40278, ""},
- //{40279, ""},
- {49900, "+proj=longlat +a=3396190 +b=3376200 +no_defs"},
- {49901, "+proj=longlat +a=3396190 +b=3376200 +no_defs"},
- //{49910, ""},
- //{49911, ""},
- //{49912, ""},
- //{49913, ""},
- {49914, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49915, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49916, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49917, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49918, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49919, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49920, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49921, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49960, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49961, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49962, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49963, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49964, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49965, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49966, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49967, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- //{49968, ""},
- //{49969, ""},
- //{49970, ""},
- //{49971, ""},
- {49972, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- {49973, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs"},
- //{49974, ""},
- //{49975, ""},
- //{49976, ""},
- //{49977, ""},
- //{49978, ""},
- //{49979, ""},
- {50100, "+proj=longlat +a=1829400 +b=1815700 +no_defs"},
- {50101, "+proj=longlat +a=1829400 +b=1815700 +no_defs"},
- //{50110, ""},
- //{50111, ""},
- //{50112, ""},
- //{50113, ""},
- {50114, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50115, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50116, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50117, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50118, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50119, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50120, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50121, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50160, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50161, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50162, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50163, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50164, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50165, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50166, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50167, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- //{50168, ""},
- //{50169, ""},
- //{50170, ""},
- //{50171, ""},
- {50172, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- {50173, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs"},
- //{50174, ""},
- //{50175, ""},
- //{50176, ""},
- //{50177, ""},
- //{50178, ""},
- //{50179, ""},
- {50200, "+proj=longlat +a=1564130 +b=1560930 +no_defs"},
- {50201, "+proj=longlat +a=1564130 +b=1560930 +no_defs"},
- //{50210, ""},
- //{50211, ""},
- //{50212, ""},
- //{50213, ""},
- {50214, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50215, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50216, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50217, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50218, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50219, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50220, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50221, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50260, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50261, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50262, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50263, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50264, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50265, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50266, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50267, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- //{50268, ""},
- //{50269, ""},
- //{50270, ""},
- //{50271, ""},
- {50272, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- {50273, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs"},
- //{50274, ""},
- //{50275, ""},
- //{50276, ""},
- //{50277, ""},
- //{50278, ""},
- //{50279, ""},
- {50300, "+proj=longlat +a=2632400 +b=2632350 +no_defs"},
- {50301, "+proj=longlat +a=2632400 +b=2632350 +no_defs"},
- //{50310, ""},
- //{50311, ""},
- //{50312, ""},
- //{50313, ""},
- {50314, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50315, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50316, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50317, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50318, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50319, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50320, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50321, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50360, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50361, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50362, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50363, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50364, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50365, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50366, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50367, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- //{50368, ""},
- //{50369, ""},
- //{50370, ""},
- //{50371, ""},
- {50372, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- {50373, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs"},
- //{50374, ""},
- //{50375, ""},
- //{50376, ""},
- //{50377, ""},
- //{50378, ""},
- //{50379, ""},
- {50400, "+proj=longlat +a=2409400 +b=2409300 +no_defs"},
- {50401, "+proj=longlat +a=2409400 +b=2409300 +no_defs"},
- //{50410, ""},
- //{50411, ""},
- //{50412, ""},
- //{50413, ""},
- {50414, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50415, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50416, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50417, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50418, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50419, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50420, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50421, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50460, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50461, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50462, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50463, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50464, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50465, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50466, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50467, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- //{50468, ""},
- //{50469, ""},
- //{50470, ""},
- //{50471, ""},
- {50472, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- {50473, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs"},
- //{50474, ""},
- //{50475, ""},
- //{50476, ""},
- //{50477, ""},
- //{50478, ""},
- //{50479, ""},
- {50500, "+proj=longlat +a=125000 +b=64000 +no_defs"},
- {50501, "+proj=longlat +a=125000 +b=64000 +no_defs"},
- //{50510, ""},
- //{50511, ""},
- //{50512, ""},
- //{50513, ""},
- {50514, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50515, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50516, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50517, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50518, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50519, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50520, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50521, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50560, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50561, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50562, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50563, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50564, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50565, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50566, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50567, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- //{50568, ""},
- //{50569, ""},
- //{50570, ""},
- //{50571, ""},
- {50572, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- {50573, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs"},
- //{50574, ""},
- //{50575, ""},
- //{50576, ""},
- //{50577, ""},
- //{50578, ""},
- //{50579, ""},
- {50600, "+proj=longlat +a=85000 +b=85000 +no_defs"},
- {50601, "+proj=longlat +a=85000 +b=85000 +no_defs"},
- //{50610, ""},
- //{50611, ""},
- //{50612, ""},
- //{50613, ""},
- {50614, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50615, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50616, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50617, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50618, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50619, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50620, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50621, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50660, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50661, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50662, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50663, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50664, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50665, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50666, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50667, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- //{50668, ""},
- //{50669, ""},
- //{50670, ""},
- //{50671, ""},
- {50672, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- {50673, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs"},
- //{50674, ""},
- //{50675, ""},
- //{50676, ""},
- //{50677, ""},
- //{50678, ""},
- //{50679, ""},
- {50700, "+proj=longlat +a=40000 +b=40000 +no_defs"},
- {50701, "+proj=longlat +a=40000 +b=40000 +no_defs"},
- //{50710, ""},
- //{50711, ""},
- //{50712, ""},
- //{50713, ""},
- {50714, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50715, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50716, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50717, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50718, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50719, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50720, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50721, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50760, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50761, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50762, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50763, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50764, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50765, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50766, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50767, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- //{50768, ""},
- //{50769, ""},
- //{50770, ""},
- //{50771, ""},
- {50772, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {50773, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- //{50774, ""},
- //{50775, ""},
- //{50776, ""},
- //{50777, ""},
- //{50778, ""},
- //{50779, ""},
- {50800, "+proj=longlat +a=18000 +b=18000 +no_defs"},
- {50801, "+proj=longlat +a=18000 +b=18000 +no_defs"},
- //{50810, ""},
- //{50811, ""},
- //{50812, ""},
- //{50813, ""},
- {50814, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50815, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50816, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50817, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50818, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50819, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50820, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50821, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50860, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50861, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50862, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50863, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50864, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50865, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50866, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50867, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- //{50868, ""},
- //{50869, ""},
- //{50870, ""},
- //{50871, ""},
- {50872, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- {50873, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs"},
- //{50874, ""},
- //{50875, ""},
- //{50876, ""},
- //{50877, ""},
- //{50878, ""},
- //{50879, ""},
- {50900, "+proj=longlat +a=14000 +b=14000 +no_defs"},
- {50901, "+proj=longlat +a=14000 +b=14000 +no_defs"},
- //{50910, ""},
- //{50911, ""},
- //{50912, ""},
- //{50913, ""},
- {50914, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50915, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50916, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50917, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50918, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50919, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50920, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50921, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50960, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50961, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50962, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50963, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50964, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50965, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50966, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50967, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- //{50968, ""},
- //{50969, ""},
- //{50970, ""},
- //{50971, ""},
- {50972, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- {50973, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs"},
- //{50974, ""},
- //{50975, ""},
- //{50976, ""},
- //{50977, ""},
- //{50978, ""},
- //{50979, ""},
- {51000, "+proj=longlat +a=12000 +b=12000 +no_defs"},
- {51001, "+proj=longlat +a=12000 +b=12000 +no_defs"},
- //{51010, ""},
- //{51011, ""},
- //{51012, ""},
- //{51013, ""},
- {51014, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51015, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51016, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51017, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51018, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51019, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51020, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51021, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51060, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51061, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51062, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51063, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51064, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51065, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51066, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51067, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- //{51068, ""},
- //{51069, ""},
- //{51070, ""},
- //{51071, ""},
- {51072, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- {51073, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs"},
- //{51074, ""},
- //{51075, ""},
- //{51076, ""},
- //{51077, ""},
- //{51078, ""},
- //{51079, ""},
- {51100, "+proj=longlat +a=15000 +b=15000 +no_defs"},
- {51101, "+proj=longlat +a=15000 +b=15000 +no_defs"},
- //{51110, ""},
- //{51111, ""},
- //{51112, ""},
- //{51113, ""},
- {51114, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51115, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51116, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51117, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51118, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51119, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51120, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51121, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51160, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51161, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51162, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51163, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51164, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51165, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51166, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51167, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- //{51168, ""},
- //{51169, ""},
- //{51170, ""},
- //{51171, ""},
- {51172, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {51173, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- //{51174, ""},
- //{51175, ""},
- //{51176, ""},
- //{51177, ""},
- //{51178, ""},
- //{51179, ""},
- {51200, "+proj=longlat +a=10000 +b=10000 +no_defs"},
- {51201, "+proj=longlat +a=10000 +b=10000 +no_defs"},
- //{51210, ""},
- //{51211, ""},
- //{51212, ""},
- //{51213, ""},
- {51214, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51215, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51216, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51217, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51218, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51219, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51220, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51221, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51260, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51261, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51262, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51263, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51264, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51265, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51266, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51267, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- //{51268, ""},
- //{51269, ""},
- //{51270, ""},
- //{51271, ""},
- {51272, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {51273, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- //{51274, ""},
- //{51275, ""},
- //{51276, ""},
- //{51277, ""},
- //{51278, ""},
- //{51279, ""},
- {51300, "+proj=longlat +a=5000 +b=5000 +no_defs"},
- {51301, "+proj=longlat +a=5000 +b=5000 +no_defs"},
- //{51310, ""},
- //{51311, ""},
- //{51312, ""},
- //{51313, ""},
- {51314, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51315, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51316, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51317, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51318, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51319, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51320, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51321, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51360, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51361, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51362, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51363, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51364, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51365, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51366, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51367, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- //{51368, ""},
- //{51369, ""},
- //{51370, ""},
- //{51371, ""},
- {51372, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- {51373, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs"},
- //{51374, ""},
- //{51375, ""},
- //{51376, ""},
- //{51377, ""},
- //{51378, ""},
- //{51379, ""},
- {51400, "+proj=longlat +a=58000 +b=42000 +no_defs"},
- {51401, "+proj=longlat +a=58000 +b=42000 +no_defs"},
- //{51410, ""},
- //{51411, ""},
- //{51412, ""},
- //{51413, ""},
- {51414, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51415, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51416, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51417, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51418, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51419, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51420, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51421, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51460, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51461, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51462, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51463, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51464, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51465, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51466, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51467, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- //{51468, ""},
- //{51469, ""},
- //{51470, ""},
- //{51471, ""},
- {51472, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- {51473, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs"},
- //{51474, ""},
- //{51475, ""},
- //{51476, ""},
- //{51477, ""},
- //{51478, ""},
- //{51479, ""},
- {51500, "+proj=longlat +a=10000 +b=7000 +no_defs"},
- {51501, "+proj=longlat +a=10000 +b=7000 +no_defs"},
- //{51510, ""},
- //{51511, ""},
- //{51512, ""},
- //{51513, ""},
- {51514, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51515, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51516, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51517, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51518, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51519, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51520, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51521, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51560, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51561, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51562, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51563, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51564, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51565, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51566, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51567, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- //{51568, ""},
- //{51569, ""},
- //{51570, ""},
- //{51571, ""},
- {51572, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- {51573, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs"},
- //{51574, ""},
- //{51575, ""},
- //{51576, ""},
- //{51577, ""},
- //{51578, ""},
- //{51579, ""},
- {51600, "+proj=longlat +a=21500 +b=21500 +no_defs"},
- {51601, "+proj=longlat +a=21500 +b=21500 +no_defs"},
- //{51610, ""},
- //{51611, ""},
- //{51612, ""},
- //{51613, ""},
- {51614, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51615, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51616, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51617, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51618, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51619, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51620, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51621, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51660, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51661, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51662, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51663, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51664, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51665, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51666, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51667, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- //{51668, ""},
- //{51669, ""},
- //{51670, ""},
- //{51671, ""},
- {51672, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- {51673, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs"},
- //{51674, ""},
- //{51675, ""},
- //{51676, ""},
- //{51677, ""},
- //{51678, ""},
- //{51679, ""},
- {59900, "+proj=longlat +a=71492000 +b=66854000 +no_defs"},
- {59901, "+proj=longlat +a=71492000 +b=66854000 +no_defs"},
- //{59910, ""},
- //{59911, ""},
- //{59912, ""},
- //{59913, ""},
- {59914, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59915, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59916, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59917, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59918, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59919, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59920, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59921, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59960, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59961, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59962, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59963, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59964, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59965, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59966, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59967, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- //{59968, ""},
- //{59969, ""},
- //{59970, ""},
- //{59971, ""},
- {59972, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- {59973, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs"},
- //{59974, ""},
- //{59975, ""},
- //{59976, ""},
- //{59977, ""},
- //{59978, ""},
- //{59979, ""},
- {60100, "+proj=longlat +a=209100 +b=191400 +no_defs"},
- {60101, "+proj=longlat +a=209100 +b=191400 +no_defs"},
- //{60110, ""},
- //{60111, ""},
- //{60112, ""},
- //{60113, ""},
- {60114, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60115, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60116, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60117, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60118, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60119, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60120, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60121, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60160, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60161, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60162, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60163, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60164, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60165, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60166, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60167, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- //{60168, ""},
- //{60169, ""},
- //{60170, ""},
- //{60171, ""},
- {60172, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- {60173, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs"},
- //{60174, ""},
- //{60175, ""},
- //{60176, ""},
- //{60177, ""},
- //{60178, ""},
- //{60179, ""},
- {60200, "+proj=longlat +a=256300 +b=244600 +no_defs"},
- {60201, "+proj=longlat +a=256300 +b=244600 +no_defs"},
- //{60210, ""},
- //{60211, ""},
- //{60212, ""},
- //{60213, ""},
- {60214, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60215, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60216, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60217, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60218, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60219, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60220, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60221, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60260, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60261, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60262, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60263, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60264, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60265, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60266, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60267, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- //{60268, ""},
- //{60269, ""},
- //{60270, ""},
- //{60271, ""},
- {60272, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- {60273, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs"},
- //{60274, ""},
- //{60275, ""},
- //{60276, ""},
- //{60277, ""},
- //{60278, ""},
- //{60279, ""},
- {60300, "+proj=longlat +a=535600 +b=525800 +no_defs"},
- {60301, "+proj=longlat +a=535600 +b=525800 +no_defs"},
- //{60310, ""},
- //{60311, ""},
- //{60312, ""},
- //{60313, ""},
- {60314, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60315, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60316, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60317, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60318, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60319, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60320, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60321, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60360, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60361, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60362, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60363, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60364, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60365, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60366, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60367, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- //{60368, ""},
- //{60369, ""},
- //{60370, ""},
- //{60371, ""},
- {60372, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- {60373, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs"},
- //{60374, ""},
- //{60375, ""},
- //{60376, ""},
- //{60377, ""},
- //{60378, ""},
- //{60379, ""},
- {60400, "+proj=longlat +a=560000 +b=560000 +no_defs"},
- {60401, "+proj=longlat +a=560000 +b=560000 +no_defs"},
- //{60410, ""},
- //{60411, ""},
- //{60412, ""},
- //{60413, ""},
- {60414, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60415, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60416, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60417, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60418, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60419, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60420, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60421, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60460, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60461, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60462, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60463, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60464, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60465, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60466, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60467, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- //{60468, ""},
- //{60469, ""},
- //{60470, ""},
- //{60471, ""},
- {60472, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- {60473, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs"},
- //{60474, ""},
- //{60475, ""},
- //{60476, ""},
- //{60477, ""},
- //{60478, ""},
- //{60479, ""},
- {60500, "+proj=longlat +a=764000 +b=764000 +no_defs"},
- {60501, "+proj=longlat +a=764000 +b=764000 +no_defs"},
- //{60510, ""},
- //{60511, ""},
- //{60512, ""},
- //{60513, ""},
- {60514, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60515, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60516, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60517, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60518, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60519, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60520, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60521, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60560, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60561, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60562, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60563, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60564, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60565, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60566, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60567, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- //{60568, ""},
- //{60569, ""},
- //{60570, ""},
- //{60571, ""},
- {60572, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- {60573, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs"},
- //{60574, ""},
- //{60575, ""},
- //{60576, ""},
- //{60577, ""},
- //{60578, ""},
- //{60579, ""},
- {60600, "+proj=longlat +a=2575000 +b=2575000 +no_defs"},
- {60601, "+proj=longlat +a=2575000 +b=2575000 +no_defs"},
- //{60610, ""},
- //{60611, ""},
- //{60612, ""},
- //{60613, ""},
- {60614, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60615, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60616, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60617, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60618, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60619, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60620, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60621, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60660, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60661, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60662, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60663, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60664, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60665, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60666, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60667, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- //{60668, ""},
- //{60669, ""},
- //{60670, ""},
- //{60671, ""},
- {60672, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- {60673, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs"},
- //{60674, ""},
- //{60675, ""},
- //{60676, ""},
- //{60677, ""},
- //{60678, ""},
- //{60679, ""},
- {60700, "+proj=longlat +a=164000 +b=107000 +no_defs"},
- {60701, "+proj=longlat +a=164000 +b=107000 +no_defs"},
- //{60710, ""},
- //{60711, ""},
- //{60712, ""},
- //{60713, ""},
- {60714, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60715, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60716, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60717, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60718, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60719, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60720, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60721, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60760, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60761, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60762, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60763, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60764, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60765, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60766, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60767, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- //{60768, ""},
- //{60769, ""},
- //{60770, ""},
- //{60771, ""},
- {60772, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- {60773, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs"},
- //{60774, ""},
- //{60775, ""},
- //{60776, ""},
- //{60777, ""},
- //{60778, ""},
- //{60779, ""},
- {60800, "+proj=longlat +a=718000 +b=718000 +no_defs"},
- {60801, "+proj=longlat +a=718000 +b=718000 +no_defs"},
- //{60810, ""},
- //{60811, ""},
- //{60812, ""},
- //{60813, ""},
- {60814, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60815, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60816, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60817, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60818, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60819, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60820, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60821, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60860, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60861, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60862, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60863, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60864, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60865, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60866, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60867, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- //{60868, ""},
- //{60869, ""},
- //{60870, ""},
- //{60871, ""},
- {60872, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- {60873, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs"},
- //{60874, ""},
- //{60875, ""},
- //{60876, ""},
- //{60877, ""},
- //{60878, ""},
- //{60879, ""},
- {60900, "+proj=longlat +a=115000 +b=105000 +no_defs"},
- {60901, "+proj=longlat +a=115000 +b=105000 +no_defs"},
- //{60910, ""},
- //{60911, ""},
- //{60912, ""},
- //{60913, ""},
- {60914, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60915, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60916, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60917, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60918, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60919, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60920, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60921, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60960, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60961, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60962, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60963, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60964, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60965, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60966, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60967, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- //{60968, ""},
- //{60969, ""},
- //{60970, ""},
- //{60971, ""},
- {60972, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- {60973, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs"},
- //{60974, ""},
- //{60975, ""},
- //{60976, ""},
- //{60977, ""},
- //{60978, ""},
- //{60979, ""},
- {61000, "+proj=longlat +a=97000 +b=77000 +no_defs"},
- {61001, "+proj=longlat +a=97000 +b=77000 +no_defs"},
- //{61010, ""},
- //{61011, ""},
- //{61012, ""},
- //{61013, ""},
- {61014, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61015, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61016, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61017, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61018, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61019, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61020, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61021, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61060, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61061, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61062, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61063, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61064, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61065, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61066, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61067, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- //{61068, ""},
- //{61069, ""},
- //{61070, ""},
- //{61071, ""},
- {61072, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- {61073, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs"},
- //{61074, ""},
- //{61075, ""},
- //{61076, ""},
- //{61077, ""},
- //{61078, ""},
- //{61079, ""},
- {61100, "+proj=longlat +a=69000 +b=55000 +no_defs"},
- {61101, "+proj=longlat +a=69000 +b=55000 +no_defs"},
- //{61110, ""},
- //{61111, ""},
- //{61112, ""},
- //{61113, ""},
- {61114, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61115, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61116, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61117, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61118, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61119, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61120, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61121, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61160, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61161, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61162, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61163, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61164, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61165, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61166, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61167, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- //{61168, ""},
- //{61169, ""},
- //{61170, ""},
- //{61171, ""},
- {61172, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- {61173, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs"},
- //{61174, ""},
- //{61175, ""},
- //{61176, ""},
- //{61177, ""},
- //{61178, ""},
- //{61179, ""},
- {61200, "+proj=longlat +a=16000 +b=16000 +no_defs"},
- {61201, "+proj=longlat +a=16000 +b=16000 +no_defs"},
- //{61210, ""},
- //{61211, ""},
- //{61212, ""},
- //{61213, ""},
- {61214, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61215, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61216, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61217, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61218, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61219, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61220, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61221, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61260, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61261, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61262, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61263, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61264, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61265, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61266, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61267, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- //{61268, ""},
- //{61269, ""},
- //{61270, ""},
- //{61271, ""},
- {61272, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- {61273, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs"},
- //{61274, ""},
- //{61275, ""},
- //{61276, ""},
- //{61277, ""},
- //{61278, ""},
- //{61279, ""},
- {61300, "+proj=longlat +a=15000 +b=7500 +no_defs"},
- {61301, "+proj=longlat +a=15000 +b=7500 +no_defs"},
- //{61310, ""},
- //{61311, ""},
- //{61312, ""},
- //{61313, ""},
- {61314, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61315, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61316, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61317, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61318, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61319, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61320, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61321, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61360, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61361, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61362, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61363, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61364, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61365, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61366, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61367, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- //{61368, ""},
- //{61369, ""},
- //{61370, ""},
- //{61371, ""},
- {61372, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- {61373, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs"},
- //{61374, ""},
- //{61375, ""},
- //{61376, ""},
- //{61377, ""},
- //{61378, ""},
- //{61379, ""},
- {61400, "+proj=longlat +a=15000 +b=8000 +no_defs"},
- {61401, "+proj=longlat +a=15000 +b=8000 +no_defs"},
- //{61410, ""},
- //{61411, ""},
- //{61412, ""},
- //{61413, ""},
- {61414, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61415, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61416, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61417, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61418, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61419, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61420, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61421, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61460, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61461, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61462, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61463, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61464, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61465, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61466, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61467, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- //{61468, ""},
- //{61469, ""},
- //{61470, ""},
- //{61471, ""},
- {61472, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- {61473, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs"},
- //{61474, ""},
- //{61475, ""},
- //{61476, ""},
- //{61477, ""},
- //{61478, ""},
- //{61479, ""},
- {61500, "+proj=longlat +a=18500 +b=13500 +no_defs"},
- {61501, "+proj=longlat +a=18500 +b=13500 +no_defs"},
- //{61510, ""},
- //{61511, ""},
- //{61512, ""},
- //{61513, ""},
- {61514, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61515, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61516, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61517, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61518, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61519, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61520, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61521, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61560, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61561, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61562, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61563, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61564, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61565, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61566, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61567, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- //{61568, ""},
- //{61569, ""},
- //{61570, ""},
- //{61571, ""},
- {61572, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- {61573, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs"},
- //{61574, ""},
- //{61575, ""},
- //{61576, ""},
- //{61577, ""},
- //{61578, ""},
- //{61579, ""},
- {61600, "+proj=longlat +a=74000 +b=34000 +no_defs"},
- {61601, "+proj=longlat +a=74000 +b=34000 +no_defs"},
- //{61610, ""},
- //{61611, ""},
- //{61612, ""},
- //{61613, ""},
- {61614, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61615, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61616, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61617, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61618, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61619, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61620, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61621, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61660, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61661, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61662, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61663, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61664, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61665, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61666, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61667, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- //{61668, ""},
- //{61669, ""},
- //{61670, ""},
- //{61671, ""},
- {61672, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- {61673, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs"},
- //{61674, ""},
- //{61675, ""},
- //{61676, ""},
- //{61677, ""},
- //{61678, ""},
- //{61679, ""},
- {61700, "+proj=longlat +a=55000 +b=31000 +no_defs"},
- {61701, "+proj=longlat +a=55000 +b=31000 +no_defs"},
- //{61710, ""},
- //{61711, ""},
- //{61712, ""},
- //{61713, ""},
- {61714, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61715, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61716, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61717, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61718, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61719, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61720, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61721, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61760, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61761, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61762, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61763, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61764, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61765, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61766, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61767, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- //{61768, ""},
- //{61769, ""},
- //{61770, ""},
- //{61771, ""},
- {61772, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- {61773, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs"},
- //{61774, ""},
- //{61775, ""},
- //{61776, ""},
- //{61777, ""},
- //{61778, ""},
- //{61779, ""},
- {61800, "+proj=longlat +a=10000 +b=10000 +no_defs"},
- {61801, "+proj=longlat +a=10000 +b=10000 +no_defs"},
- //{61810, ""},
- //{61811, ""},
- //{61812, ""},
- //{61813, ""},
- {61814, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61815, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61816, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61817, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61818, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61819, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61820, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61821, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61860, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61861, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61862, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61863, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61864, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61865, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61866, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61867, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- //{61868, ""},
- //{61869, ""},
- //{61870, ""},
- //{61871, ""},
- {61872, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- {61873, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs"},
- //{61874, ""},
- //{61875, ""},
- //{61876, ""},
- //{61877, ""},
- //{61878, ""},
- //{61879, ""},
- {69900, "+proj=longlat +a=60268000 +b=54364000 +no_defs"},
- {69901, "+proj=longlat +a=60268000 +b=54364000 +no_defs"},
- //{69910, ""},
- //{69911, ""},
- //{69912, ""},
- //{69913, ""},
- {69914, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69915, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69916, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69917, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69918, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69919, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69920, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69921, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69960, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69961, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69962, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69963, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69964, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69965, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69966, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69967, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- //{69968, ""},
- //{69969, ""},
- //{69970, ""},
- //{69971, ""},
- {69972, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- {69973, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs"},
- //{69974, ""},
- //{69975, ""},
- //{69976, ""},
- //{69977, ""},
- //{69978, ""},
- //{69979, ""},
- {70100, "+proj=longlat +a=581100 +b=577700 +no_defs"},
- {70101, "+proj=longlat +a=581100 +b=577700 +no_defs"},
- //{70110, ""},
- //{70111, ""},
- //{70112, ""},
- //{70113, ""},
- {70114, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70115, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70116, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70117, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70118, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70119, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70120, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70121, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70160, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70161, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70162, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70163, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70164, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70165, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70166, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70167, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- //{70168, ""},
- //{70169, ""},
- //{70170, ""},
- //{70171, ""},
- {70172, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- {70173, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs"},
- //{70174, ""},
- //{70175, ""},
- //{70176, ""},
- //{70177, ""},
- //{70178, ""},
- //{70179, ""},
- {70200, "+proj=longlat +a=584700 +b=584700 +no_defs"},
- {70201, "+proj=longlat +a=584700 +b=584700 +no_defs"},
- //{70210, ""},
- //{70211, ""},
- //{70212, ""},
- //{70213, ""},
- {70214, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70215, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70216, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70217, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70218, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70219, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70220, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70221, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70260, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70261, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70262, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70263, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70264, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70265, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70266, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70267, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- //{70268, ""},
- //{70269, ""},
- //{70270, ""},
- //{70271, ""},
- {70272, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- {70273, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs"},
- //{70274, ""},
- //{70275, ""},
- //{70276, ""},
- //{70277, ""},
- //{70278, ""},
- //{70279, ""},
- {70300, "+proj=longlat +a=788900 +b=788900 +no_defs"},
- {70301, "+proj=longlat +a=788900 +b=788900 +no_defs"},
- //{70310, ""},
- //{70311, ""},
- //{70312, ""},
- //{70313, ""},
- {70314, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70315, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70316, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70317, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70318, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70319, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70320, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70321, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70360, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70361, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70362, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70363, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70364, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70365, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70366, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70367, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- //{70368, ""},
- //{70369, ""},
- //{70370, ""},
- //{70371, ""},
- {70372, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- {70373, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs"},
- //{70374, ""},
- //{70375, ""},
- //{70376, ""},
- //{70377, ""},
- //{70378, ""},
- //{70379, ""},
- {70400, "+proj=longlat +a=761400 +b=761400 +no_defs"},
- {70401, "+proj=longlat +a=761400 +b=761400 +no_defs"},
- //{70410, ""},
- //{70411, ""},
- //{70412, ""},
- //{70413, ""},
- {70414, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70415, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70416, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70417, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70418, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70419, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70420, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70421, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70460, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70461, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70462, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70463, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70464, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70465, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70466, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70467, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- //{70468, ""},
- //{70469, ""},
- //{70470, ""},
- //{70471, ""},
- {70472, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- {70473, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs"},
- //{70474, ""},
- //{70475, ""},
- //{70476, ""},
- //{70477, ""},
- //{70478, ""},
- //{70479, ""},
- {70500, "+proj=longlat +a=240400 +b=232900 +no_defs"},
- {70501, "+proj=longlat +a=240400 +b=232900 +no_defs"},
- //{70510, ""},
- //{70511, ""},
- //{70512, ""},
- //{70513, ""},
- {70514, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70515, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70516, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70517, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70518, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70519, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70520, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70521, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70560, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70561, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70562, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70563, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70564, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70565, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70566, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70567, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- //{70568, ""},
- //{70569, ""},
- //{70570, ""},
- //{70571, ""},
- {70572, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- {70573, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs"},
- //{70574, ""},
- //{70575, ""},
- //{70576, ""},
- //{70577, ""},
- //{70578, ""},
- //{70579, ""},
- {70600, "+proj=longlat +a=13000 +b=13000 +no_defs"},
- {70601, "+proj=longlat +a=13000 +b=13000 +no_defs"},
- //{70610, ""},
- //{70611, ""},
- //{70612, ""},
- //{70613, ""},
- {70614, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70615, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70616, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70617, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70618, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70619, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70620, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70621, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70660, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70661, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70662, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70663, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70664, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70665, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70666, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70667, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- //{70668, ""},
- //{70669, ""},
- //{70670, ""},
- //{70671, ""},
- {70672, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- {70673, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs"},
- //{70674, ""},
- //{70675, ""},
- //{70676, ""},
- //{70677, ""},
- //{70678, ""},
- //{70679, ""},
- {70700, "+proj=longlat +a=15000 +b=15000 +no_defs"},
- {70701, "+proj=longlat +a=15000 +b=15000 +no_defs"},
- //{70710, ""},
- //{70711, ""},
- //{70712, ""},
- //{70713, ""},
- {70714, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70715, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70716, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70717, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70718, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70719, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70720, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70721, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70760, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70761, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70762, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70763, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70764, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70765, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70766, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70767, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- //{70768, ""},
- //{70769, ""},
- //{70770, ""},
- //{70771, ""},
- {70772, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- {70773, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs"},
- //{70774, ""},
- //{70775, ""},
- //{70776, ""},
- //{70777, ""},
- //{70778, ""},
- //{70779, ""},
- {70800, "+proj=longlat +a=21000 +b=21000 +no_defs"},
- {70801, "+proj=longlat +a=21000 +b=21000 +no_defs"},
- //{70810, ""},
- //{70811, ""},
- //{70812, ""},
- //{70813, ""},
- {70814, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70815, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70816, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70817, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70818, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70819, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70820, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70821, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70860, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70861, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70862, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70863, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70864, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70865, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70866, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70867, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- //{70868, ""},
- //{70869, ""},
- //{70870, ""},
- //{70871, ""},
- {70872, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- {70873, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs"},
- //{70874, ""},
- //{70875, ""},
- //{70876, ""},
- //{70877, ""},
- //{70878, ""},
- //{70879, ""},
- {70900, "+proj=longlat +a=31000 +b=31000 +no_defs"},
- {70901, "+proj=longlat +a=31000 +b=31000 +no_defs"},
- //{70910, ""},
- //{70911, ""},
- //{70912, ""},
- //{70913, ""},
- {70914, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70915, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70916, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70917, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70918, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70919, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70920, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70921, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70960, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70961, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70962, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70963, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70964, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70965, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70966, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70967, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- //{70968, ""},
- //{70969, ""},
- //{70970, ""},
- //{70971, ""},
- {70972, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- {70973, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs"},
- //{70974, ""},
- //{70975, ""},
- //{70976, ""},
- //{70977, ""},
- //{70978, ""},
- //{70979, ""},
- {71000, "+proj=longlat +a=27000 +b=27000 +no_defs"},
- {71001, "+proj=longlat +a=27000 +b=27000 +no_defs"},
- //{71010, ""},
- //{71011, ""},
- //{71012, ""},
- //{71013, ""},
- {71014, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71015, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71016, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71017, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71018, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71019, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71020, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71021, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71060, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71061, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71062, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71063, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71064, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71065, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71066, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71067, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- //{71068, ""},
- //{71069, ""},
- //{71070, ""},
- //{71071, ""},
- {71072, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71073, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- //{71074, ""},
- //{71075, ""},
- //{71076, ""},
- //{71077, ""},
- //{71078, ""},
- //{71079, ""},
- {71100, "+proj=longlat +a=42000 +b=42000 +no_defs"},
- {71101, "+proj=longlat +a=42000 +b=42000 +no_defs"},
- //{71110, ""},
- //{71111, ""},
- //{71112, ""},
- //{71113, ""},
- {71114, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71115, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71116, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71117, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71118, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71119, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71120, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71121, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71160, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71161, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71162, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71163, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71164, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71165, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71166, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71167, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- //{71168, ""},
- //{71169, ""},
- //{71170, ""},
- //{71171, ""},
- {71172, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- {71173, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs"},
- //{71174, ""},
- //{71175, ""},
- //{71176, ""},
- //{71177, ""},
- //{71178, ""},
- //{71179, ""},
- {71200, "+proj=longlat +a=54000 +b=54000 +no_defs"},
- {71201, "+proj=longlat +a=54000 +b=54000 +no_defs"},
- //{71210, ""},
- //{71211, ""},
- //{71212, ""},
- //{71213, ""},
- {71214, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71215, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71216, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71217, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71218, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71219, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71220, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71221, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71260, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71261, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71262, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71263, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71264, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71265, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71266, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71267, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- //{71268, ""},
- //{71269, ""},
- //{71270, ""},
- //{71271, ""},
- {71272, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- {71273, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs"},
- //{71274, ""},
- //{71275, ""},
- //{71276, ""},
- //{71277, ""},
- //{71278, ""},
- //{71279, ""},
- {71300, "+proj=longlat +a=27000 +b=27000 +no_defs"},
- {71301, "+proj=longlat +a=27000 +b=27000 +no_defs"},
- //{71310, ""},
- //{71311, ""},
- //{71312, ""},
- //{71313, ""},
- {71314, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71315, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71316, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71317, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71318, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71319, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71320, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71321, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71360, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71361, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71362, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71363, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71364, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71365, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71366, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71367, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- //{71368, ""},
- //{71369, ""},
- //{71370, ""},
- //{71371, ""},
- {71372, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- {71373, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs"},
- //{71374, ""},
- //{71375, ""},
- //{71376, ""},
- //{71377, ""},
- //{71378, ""},
- //{71379, ""},
- {71400, "+proj=longlat +a=33000 +b=33000 +no_defs"},
- {71401, "+proj=longlat +a=33000 +b=33000 +no_defs"},
- //{71410, ""},
- //{71411, ""},
- //{71412, ""},
- //{71413, ""},
- {71414, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71415, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71416, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71417, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71418, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71419, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71420, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71421, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71460, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71461, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71462, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71463, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71464, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71465, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71466, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71467, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- //{71468, ""},
- //{71469, ""},
- //{71470, ""},
- //{71471, ""},
- {71472, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- {71473, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs"},
- //{71474, ""},
- //{71475, ""},
- //{71476, ""},
- //{71477, ""},
- //{71478, ""},
- //{71479, ""},
- {71500, "+proj=longlat +a=77000 +b=77000 +no_defs"},
- {71501, "+proj=longlat +a=77000 +b=77000 +no_defs"},
- //{71510, ""},
- //{71511, ""},
- //{71512, ""},
- //{71513, ""},
- {71514, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71515, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71516, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71517, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71518, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71519, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71520, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71521, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71560, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71561, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71562, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71563, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71564, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71565, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71566, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71567, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- //{71568, ""},
- //{71569, ""},
- //{71570, ""},
- //{71571, ""},
- {71572, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- {71573, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs"},
- //{71574, ""},
- //{71575, ""},
- //{71576, ""},
- //{71577, ""},
- //{71578, ""},
- //{71579, ""},
- {79900, "+proj=longlat +a=25559000 +b=24973000 +no_defs"},
- {79901, "+proj=longlat +a=25559000 +b=24973000 +no_defs"},
- //{79910, ""},
- //{79911, ""},
- //{79912, ""},
- //{79913, ""},
- {79914, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79915, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79916, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79917, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79918, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79919, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79920, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79921, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79960, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79961, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79962, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79963, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79964, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79965, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79966, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79967, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- //{79968, ""},
- //{79969, ""},
- //{79970, ""},
- //{79971, ""},
- {79972, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- {79973, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs"},
- //{79974, ""},
- //{79975, ""},
- //{79976, ""},
- //{79977, ""},
- //{79978, ""},
- //{79979, ""},
- {80100, "+proj=longlat +a=1352600 +b=1352600 +no_defs"},
- {80101, "+proj=longlat +a=1352600 +b=1352600 +no_defs"},
- //{80110, ""},
- //{80111, ""},
- //{80112, ""},
- //{80113, ""},
- {80114, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80115, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80116, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80117, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80118, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80119, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80120, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80121, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80160, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80161, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80162, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80163, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80164, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80165, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80166, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80167, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- //{80168, ""},
- //{80169, ""},
- //{80170, ""},
- //{80171, ""},
- {80172, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- {80173, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs"},
- //{80174, ""},
- //{80175, ""},
- //{80176, ""},
- //{80177, ""},
- //{80178, ""},
- //{80179, ""},
- {80200, "+proj=longlat +a=170000 +b=170000 +no_defs"},
- {80201, "+proj=longlat +a=170000 +b=170000 +no_defs"},
- //{80210, ""},
- //{80211, ""},
- //{80212, ""},
- //{80213, ""},
- {80214, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80215, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80216, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80217, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80218, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80219, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80220, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80221, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80260, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80261, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80262, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80263, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80264, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80265, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80266, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80267, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- //{80268, ""},
- //{80269, ""},
- //{80270, ""},
- //{80271, ""},
- {80272, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- {80273, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs"},
- //{80274, ""},
- //{80275, ""},
- //{80276, ""},
- //{80277, ""},
- //{80278, ""},
- //{80279, ""},
- {80300, "+proj=longlat +a=29000 +b=29000 +no_defs"},
- {80301, "+proj=longlat +a=29000 +b=29000 +no_defs"},
- //{80310, ""},
- //{80311, ""},
- //{80312, ""},
- //{80313, ""},
- {80314, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80315, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80316, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80317, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80318, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80319, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80320, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80321, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80360, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80361, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80362, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80363, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80364, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80365, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80366, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80367, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- //{80368, ""},
- //{80369, ""},
- //{80370, ""},
- //{80371, ""},
- {80372, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- {80373, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs"},
- //{80374, ""},
- //{80375, ""},
- //{80376, ""},
- //{80377, ""},
- //{80378, ""},
- //{80379, ""},
- {80400, "+proj=longlat +a=40000 +b=40000 +no_defs"},
- {80401, "+proj=longlat +a=40000 +b=40000 +no_defs"},
- //{80410, ""},
- //{80411, ""},
- //{80412, ""},
- //{80413, ""},
- {80414, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80415, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80416, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80417, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80418, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80419, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80420, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80421, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80460, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80461, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80462, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80463, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80464, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80465, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80466, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80467, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- //{80468, ""},
- //{80469, ""},
- //{80470, ""},
- //{80471, ""},
- {80472, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- {80473, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs"},
- //{80474, ""},
- //{80475, ""},
- //{80476, ""},
- //{80477, ""},
- //{80478, ""},
- //{80479, ""},
- {80500, "+proj=longlat +a=74000 +b=74000 +no_defs"},
- {80501, "+proj=longlat +a=74000 +b=74000 +no_defs"},
- //{80510, ""},
- //{80511, ""},
- //{80512, ""},
- //{80513, ""},
- {80514, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80515, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80516, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80517, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80518, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80519, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80520, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80521, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80560, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80561, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80562, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80563, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80564, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80565, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80566, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80567, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- //{80568, ""},
- //{80569, ""},
- //{80570, ""},
- //{80571, ""},
- {80572, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- {80573, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs"},
- //{80574, ""},
- //{80575, ""},
- //{80576, ""},
- //{80577, ""},
- //{80578, ""},
- //{80579, ""},
- {80600, "+proj=longlat +a=79000 +b=79000 +no_defs"},
- {80601, "+proj=longlat +a=79000 +b=79000 +no_defs"},
- //{80610, ""},
- //{80611, ""},
- //{80612, ""},
- //{80613, ""},
- {80614, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80615, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80616, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80617, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80618, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80619, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80620, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80621, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80660, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80661, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80662, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80663, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80664, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80665, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80666, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80667, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- //{80668, ""},
- //{80669, ""},
- //{80670, ""},
- //{80671, ""},
- {80672, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- {80673, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs"},
- //{80674, ""},
- //{80675, ""},
- //{80676, ""},
- //{80677, ""},
- //{80678, ""},
- //{80679, ""},
- {80700, "+proj=longlat +a=96000 +b=96000 +no_defs"},
- {80701, "+proj=longlat +a=96000 +b=96000 +no_defs"},
- //{80710, ""},
- //{80711, ""},
- //{80712, ""},
- //{80713, ""},
- {80714, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80715, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80716, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80717, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80718, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80719, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80720, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80721, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80760, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80761, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80762, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80763, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80764, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80765, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80766, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80767, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- //{80768, ""},
- //{80769, ""},
- //{80770, ""},
- //{80771, ""},
- {80772, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- {80773, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs"},
- //{80774, ""},
- //{80775, ""},
- //{80776, ""},
- //{80777, ""},
- //{80778, ""},
- //{80779, ""},
- {80800, "+proj=longlat +a=218000 +b=201000 +no_defs"},
- {80801, "+proj=longlat +a=218000 +b=201000 +no_defs"},
- //{80810, ""},
- //{80811, ""},
- //{80812, ""},
- //{80813, ""},
- {80814, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80815, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80816, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80817, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80818, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80819, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80820, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80821, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80860, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80861, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80862, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80863, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80864, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80865, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80866, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80867, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- //{80868, ""},
- //{80869, ""},
- //{80870, ""},
- //{80871, ""},
- {80872, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- {80873, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs"},
- //{80874, ""},
- //{80875, ""},
- //{80876, ""},
- //{80877, ""},
- //{80878, ""},
- //{80879, ""},
- {89900, "+proj=longlat +a=24764000 +b=24341000 +no_defs"},
- {89901, "+proj=longlat +a=24764000 +b=24341000 +no_defs"},
- //{89910, ""},
- //{89911, ""},
- //{89912, ""},
- //{89913, ""},
- {89914, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89915, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89916, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89917, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89918, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89919, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89920, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89921, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89960, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89961, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89962, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89963, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89964, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89965, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89966, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89967, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- //{89968, ""},
- //{89969, ""},
- //{89970, ""},
- //{89971, ""},
- {89972, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- {89973, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs"},
- //{89974, ""},
- //{89975, ""},
- //{89976, ""},
- //{89977, ""},
- //{89978, ""},
- //{89979, ""},
- {90100, "+proj=longlat +a=593000 +b=593000 +no_defs"},
- {90101, "+proj=longlat +a=593000 +b=593000 +no_defs"},
- //{90110, ""},
- //{90111, ""},
- //{90112, ""},
- //{90113, ""},
- {90114, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90115, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90116, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90117, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90118, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90119, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90120, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90121, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90160, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90161, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90162, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90163, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90164, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90165, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90166, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90167, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- //{90168, ""},
- //{90169, ""},
- //{90170, ""},
- //{90171, ""},
- {90172, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- {90173, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs"},
- //{90174, ""},
- //{90175, ""},
- //{90176, ""},
- //{90177, ""},
- //{90178, ""},
- //{90179, ""},
- {99900, "+proj=longlat +a=1195000 +b=1195000 +no_defs"},
- {99901, "+proj=longlat +a=1195000 +b=1195000 +no_defs"},
- //{99910, ""},
- //{99911, ""},
- //{99912, ""},
- //{99913, ""},
- {99914, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99915, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99916, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99917, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99918, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99919, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99920, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99921, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99960, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99961, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99962, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99963, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99964, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99965, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99966, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99967, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- //{99968, ""},
- //{99969, ""},
- //{99970, ""},
- //{99971, ""},
- {99972, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"},
- {99973, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs"}
-//{99974, ""},
-//{99975, ""},
-//{99976, ""},
-//{99977, ""},
-//{99978, ""},
-//{99979, ""}
- };
-
- const code_element * first = arr;
- const code_element * last = arr + sizeof(arr) / sizeof(code_element);
- const code_element * el = binary_find_code_element(first, last, code);
-
- return el != last ? el->proj4_str : "";
- }
-
-}
-#endif // DOXYGEN_NO_DETAIL
-
-
-}}} // namespace boost::geometry::projections
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/iau2000_params.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/iau2000_params.hpp
deleted file mode 100644
index 1cc8539a059..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/iau2000_params.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_SRS_PROJECTIONS_IAU2000_PARAMS_HPP
-#define BOOST_GEOMETRY_SRS_PROJECTIONS_IAU2000_PARAMS_HPP
-
-
-#include <string>
-
-#include <boost/geometry/srs/spheroid.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace srs
-{
-
-
-struct iau2000
-{
- explicit iau2000(int c)
- : code(c)
- {}
-
- int code;
-};
-
-
-template <int Code>
-struct static_iau2000
-{
- static const int code = Code;
-};
-
-
-} // namespace srs
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_SRS_PROJECTIONS_IAU2000_PARAMS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/iau2000_traits.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/iau2000_traits.hpp
deleted file mode 100644
index 2c329db631f..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/iau2000_traits.hpp
+++ /dev/null
@@ -1,2432 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_IAU2000_TRAITS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IAU2000_TRAITS_HPP
-
-
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/srs/projections/factory.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/srid_traits.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-/*!
- \brief IAU2000 traits
- \details With help of the IAU2000 traits library users can statically use projections
- or coordinate systems specifying an IAU2000 code. The correct projections for transformations
- are used automically then, still keeping static polymorphism.
- \ingroup projection
- \tparam IAU2000 iau2000 code
-*/
-template <size_t IAU2000>
-struct iau2000_traits
-{
- // Specializations define:
- // - type to get projection type
- // - function par to get parameters
-};
-
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19900, longlat, 2439700, "+proj=longlat +a=2439700 +b=2439700 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19901, longlat, 2439700, "+proj=longlat +a=2439700 +b=2439700 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19913, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19914, sinu, 2439700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19915, sinu, 2439700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19916, sinu, 2439700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19917, sinu, 2439700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19918, stere, 2439700, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19919, stere, 2439700, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19920, stere, 2439700, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19921, stere, 2439700, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19960, sinu, 2439700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19961, sinu, 2439700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19962, stere, 2439700, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19963, stere, 2439700, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19964, tmerc, 2439700, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19965, tmerc, 2439700, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19966, ortho, 2439700, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19967, ortho, 2439700, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19968, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19969, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19970, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19971, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19972, laea, 2439700, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 19973, laea, 2439700, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2439700 +b=2439700 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19974, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19975, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19976, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19977, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19978, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 19979, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29900, longlat, 6051800, "+proj=longlat +a=6051800 +b=6051800 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29901, longlat, 6051800, "+proj=longlat +a=6051800 +b=6051800 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29913, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29914, sinu, 6051800, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29915, sinu, 6051800, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29916, sinu, 6051800, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29917, sinu, 6051800, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29918, stere, 6051800, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29919, stere, 6051800, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29920, stere, 6051800, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29921, stere, 6051800, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29960, sinu, 6051800, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29961, sinu, 6051800, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29962, stere, 6051800, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29963, stere, 6051800, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29964, tmerc, 6051800, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29965, tmerc, 6051800, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29966, ortho, 6051800, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29967, ortho, 6051800, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29968, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29969, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29970, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29971, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29972, laea, 6051800, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 29973, laea, 6051800, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6051800 +b=6051800 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29974, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29975, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29976, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29977, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29978, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 29979, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30100, longlat, 1737400, "+proj=longlat +a=1737400 +b=1737400 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30101, longlat, 1737400, "+proj=longlat +a=1737400 +b=1737400 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30110, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30111, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30112, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30113, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30114, sinu, 1737400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30115, sinu, 1737400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30116, sinu, 1737400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30117, sinu, 1737400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30118, stere, 1737400, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30119, stere, 1737400, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30120, stere, 1737400, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30121, stere, 1737400, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30160, sinu, 1737400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30161, sinu, 1737400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30162, stere, 1737400, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30163, stere, 1737400, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30164, tmerc, 1737400, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30165, tmerc, 1737400, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30166, ortho, 1737400, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30167, ortho, 1737400, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30168, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30169, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30170, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30171, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30172, laea, 1737400, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 30173, laea, 1737400, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1737400 +b=1737400 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30174, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30175, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30176, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30177, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30178, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 30179, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39900, longlat, 6378140, 6356750, "+proj=longlat +a=6378140 +b=6356750 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39901, longlat, 6378140, 6356750, "+proj=longlat +a=6378140 +b=6356750 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39913, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39914, sinu, 6378140, 6356750, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39915, sinu, 6378140, 6356750, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39916, sinu, 6378140, 6356750, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39917, sinu, 6378140, 6356750, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39918, stere, 6378140, 6356750, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39919, stere, 6378140, 6356750, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39920, stere, 6378140, 6356750, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39921, stere, 6378140, 6356750, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39960, sinu, 6378140, 6356750, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39961, sinu, 6378140, 6356750, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39962, stere, 6378140, 6356750, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39963, stere, 6378140, 6356750, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39964, tmerc, 6378140, 6356750, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39965, tmerc, 6378140, 6356750, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39966, ortho, 6378140, 6356750, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39967, ortho, 6378140, 6356750, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39968, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39969, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39970, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39971, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39972, laea, 6378140, 6356750, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 39973, laea, 6378140, 6356750, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6378140 +b=6356750 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39974, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39975, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39976, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39977, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39978, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 39979, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40100, longlat, 13400, 9200, "+proj=longlat +a=13400 +b=9200 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40101, longlat, 13400, 9200, "+proj=longlat +a=13400 +b=9200 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40110, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40111, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40112, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40113, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40114, sinu, 13400, 9200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40115, sinu, 13400, 9200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40116, sinu, 13400, 9200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40117, sinu, 13400, 9200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40118, stere, 13400, 9200, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40119, stere, 13400, 9200, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40120, stere, 13400, 9200, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40121, stere, 13400, 9200, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40160, sinu, 13400, 9200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40161, sinu, 13400, 9200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40162, stere, 13400, 9200, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40163, stere, 13400, 9200, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40164, tmerc, 13400, 9200, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40165, tmerc, 13400, 9200, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40166, ortho, 13400, 9200, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40167, ortho, 13400, 9200, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40168, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40169, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40170, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40171, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40172, laea, 13400, 9200, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40173, laea, 13400, 9200, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13400 +b=9200 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40174, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40175, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40176, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40177, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40178, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40179, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40200, longlat, 7500, 5200, "+proj=longlat +a=7500 +b=5200 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40201, longlat, 7500, 5200, "+proj=longlat +a=7500 +b=5200 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40210, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40211, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40212, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40213, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40214, sinu, 7500, 5200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40215, sinu, 7500, 5200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40216, sinu, 7500, 5200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40217, sinu, 7500, 5200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40218, stere, 7500, 5200, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40219, stere, 7500, 5200, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40220, stere, 7500, 5200, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40221, stere, 7500, 5200, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40260, sinu, 7500, 5200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40261, sinu, 7500, 5200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40262, stere, 7500, 5200, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40263, stere, 7500, 5200, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40264, tmerc, 7500, 5200, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40265, tmerc, 7500, 5200, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40266, ortho, 7500, 5200, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40267, ortho, 7500, 5200, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40268, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40269, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40270, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40271, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40272, laea, 7500, 5200, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 40273, laea, 7500, 5200, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=7500 +b=5200 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40274, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40275, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40276, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40277, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40278, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 40279, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49900, longlat, 3396190, 3376200, "+proj=longlat +a=3396190 +b=3376200 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49901, longlat, 3396190, 3376200, "+proj=longlat +a=3396190 +b=3376200 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49913, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49914, sinu, 3396190, 3376200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49915, sinu, 3396190, 3376200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49916, sinu, 3396190, 3376200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49917, sinu, 3396190, 3376200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49918, stere, 3396190, 3376200, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49919, stere, 3396190, 3376200, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49920, stere, 3396190, 3376200, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49921, stere, 3396190, 3376200, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49960, sinu, 3396190, 3376200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49961, sinu, 3396190, 3376200, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49962, stere, 3396190, 3376200, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49963, stere, 3396190, 3376200, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49964, tmerc, 3396190, 3376200, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49965, tmerc, 3396190, 3376200, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49966, ortho, 3396190, 3376200, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49967, ortho, 3396190, 3376200, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49968, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49969, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49970, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49971, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49972, laea, 3396190, 3376200, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 49973, laea, 3396190, 3376200, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=3396190 +b=3376200 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49974, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49975, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49976, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49977, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49978, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 49979, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50100, longlat, 1829400, 1815700, "+proj=longlat +a=1829400 +b=1815700 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50101, longlat, 1829400, 1815700, "+proj=longlat +a=1829400 +b=1815700 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50110, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50111, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50112, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50113, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50114, sinu, 1829400, 1815700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50115, sinu, 1829400, 1815700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50116, sinu, 1829400, 1815700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50117, sinu, 1829400, 1815700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50118, stere, 1829400, 1815700, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50119, stere, 1829400, 1815700, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50120, stere, 1829400, 1815700, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50121, stere, 1829400, 1815700, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50160, sinu, 1829400, 1815700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50161, sinu, 1829400, 1815700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50162, stere, 1829400, 1815700, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50163, stere, 1829400, 1815700, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50164, tmerc, 1829400, 1815700, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50165, tmerc, 1829400, 1815700, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50166, ortho, 1829400, 1815700, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50167, ortho, 1829400, 1815700, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50168, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50169, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50170, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50171, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50172, laea, 1829400, 1815700, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50173, laea, 1829400, 1815700, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1829400 +b=1815700 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50174, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50175, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50176, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50177, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50178, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50179, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50200, longlat, 1564130, 1560930, "+proj=longlat +a=1564130 +b=1560930 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50201, longlat, 1564130, 1560930, "+proj=longlat +a=1564130 +b=1560930 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50210, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50211, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50212, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50213, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50214, sinu, 1564130, 1560930, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50215, sinu, 1564130, 1560930, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50216, sinu, 1564130, 1560930, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50217, sinu, 1564130, 1560930, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50218, stere, 1564130, 1560930, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50219, stere, 1564130, 1560930, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50220, stere, 1564130, 1560930, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50221, stere, 1564130, 1560930, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50260, sinu, 1564130, 1560930, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50261, sinu, 1564130, 1560930, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50262, stere, 1564130, 1560930, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50263, stere, 1564130, 1560930, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50264, tmerc, 1564130, 1560930, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50265, tmerc, 1564130, 1560930, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50266, ortho, 1564130, 1560930, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50267, ortho, 1564130, 1560930, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50268, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50269, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50270, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50271, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50272, laea, 1564130, 1560930, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50273, laea, 1564130, 1560930, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1564130 +b=1560930 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50274, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50275, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50276, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50277, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50278, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50279, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50300, longlat, 2632400, 2632350, "+proj=longlat +a=2632400 +b=2632350 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50301, longlat, 2632400, 2632350, "+proj=longlat +a=2632400 +b=2632350 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50310, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50311, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50312, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50313, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50314, sinu, 2632400, 2632350, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50315, sinu, 2632400, 2632350, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50316, sinu, 2632400, 2632350, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50317, sinu, 2632400, 2632350, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50318, stere, 2632400, 2632350, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50319, stere, 2632400, 2632350, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50320, stere, 2632400, 2632350, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50321, stere, 2632400, 2632350, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50360, sinu, 2632400, 2632350, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50361, sinu, 2632400, 2632350, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50362, stere, 2632400, 2632350, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50363, stere, 2632400, 2632350, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50364, tmerc, 2632400, 2632350, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50365, tmerc, 2632400, 2632350, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50366, ortho, 2632400, 2632350, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50367, ortho, 2632400, 2632350, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50368, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50369, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50370, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50371, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50372, laea, 2632400, 2632350, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50373, laea, 2632400, 2632350, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2632400 +b=2632350 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50374, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50375, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50376, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50377, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50378, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50379, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50400, longlat, 2409400, 2409300, "+proj=longlat +a=2409400 +b=2409300 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50401, longlat, 2409400, 2409300, "+proj=longlat +a=2409400 +b=2409300 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50410, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50411, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50412, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50413, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50414, sinu, 2409400, 2409300, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50415, sinu, 2409400, 2409300, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50416, sinu, 2409400, 2409300, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50417, sinu, 2409400, 2409300, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50418, stere, 2409400, 2409300, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50419, stere, 2409400, 2409300, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50420, stere, 2409400, 2409300, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50421, stere, 2409400, 2409300, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50460, sinu, 2409400, 2409300, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50461, sinu, 2409400, 2409300, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50462, stere, 2409400, 2409300, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50463, stere, 2409400, 2409300, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50464, tmerc, 2409400, 2409300, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50465, tmerc, 2409400, 2409300, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50466, ortho, 2409400, 2409300, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50467, ortho, 2409400, 2409300, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50468, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50469, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50470, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50471, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50472, laea, 2409400, 2409300, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50473, laea, 2409400, 2409300, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2409400 +b=2409300 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50474, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50475, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50476, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50477, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50478, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50479, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50500, longlat, 125000, 64000, "+proj=longlat +a=125000 +b=64000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50501, longlat, 125000, 64000, "+proj=longlat +a=125000 +b=64000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50510, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50511, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50512, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50513, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50514, sinu, 125000, 64000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50515, sinu, 125000, 64000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50516, sinu, 125000, 64000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50517, sinu, 125000, 64000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50518, stere, 125000, 64000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50519, stere, 125000, 64000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50520, stere, 125000, 64000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50521, stere, 125000, 64000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50560, sinu, 125000, 64000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50561, sinu, 125000, 64000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50562, stere, 125000, 64000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50563, stere, 125000, 64000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50564, tmerc, 125000, 64000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50565, tmerc, 125000, 64000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50566, ortho, 125000, 64000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50567, ortho, 125000, 64000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50568, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50569, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50570, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50571, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50572, laea, 125000, 64000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 50573, laea, 125000, 64000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=125000 +b=64000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50574, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50575, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50576, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50577, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50578, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50579, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50600, longlat, 85000, "+proj=longlat +a=85000 +b=85000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50601, longlat, 85000, "+proj=longlat +a=85000 +b=85000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50610, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50611, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50612, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50613, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50614, sinu, 85000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50615, sinu, 85000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50616, sinu, 85000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50617, sinu, 85000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50618, stere, 85000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50619, stere, 85000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50620, stere, 85000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50621, stere, 85000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50660, sinu, 85000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50661, sinu, 85000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50662, stere, 85000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50663, stere, 85000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50664, tmerc, 85000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50665, tmerc, 85000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50666, ortho, 85000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50667, ortho, 85000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50668, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50669, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50670, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50671, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50672, laea, 85000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50673, laea, 85000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=85000 +b=85000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50674, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50675, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50676, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50677, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50678, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50679, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50700, longlat, 40000, "+proj=longlat +a=40000 +b=40000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50701, longlat, 40000, "+proj=longlat +a=40000 +b=40000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50710, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50711, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50712, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50713, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50714, sinu, 40000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50715, sinu, 40000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50716, sinu, 40000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50717, sinu, 40000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50718, stere, 40000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50719, stere, 40000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50720, stere, 40000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50721, stere, 40000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50760, sinu, 40000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50761, sinu, 40000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50762, stere, 40000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50763, stere, 40000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50764, tmerc, 40000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50765, tmerc, 40000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50766, ortho, 40000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50767, ortho, 40000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50768, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50769, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50770, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50771, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50772, laea, 40000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50773, laea, 40000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50774, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50775, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50776, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50777, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50778, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50779, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50800, longlat, 18000, "+proj=longlat +a=18000 +b=18000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50801, longlat, 18000, "+proj=longlat +a=18000 +b=18000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50810, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50811, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50812, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50813, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50814, sinu, 18000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50815, sinu, 18000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50816, sinu, 18000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50817, sinu, 18000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50818, stere, 18000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50819, stere, 18000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50820, stere, 18000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50821, stere, 18000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50860, sinu, 18000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50861, sinu, 18000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50862, stere, 18000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50863, stere, 18000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50864, tmerc, 18000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50865, tmerc, 18000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50866, ortho, 18000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50867, ortho, 18000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50868, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50869, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50870, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50871, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50872, laea, 18000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50873, laea, 18000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18000 +b=18000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50874, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50875, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50876, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50877, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50878, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50879, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50900, longlat, 14000, "+proj=longlat +a=14000 +b=14000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50901, longlat, 14000, "+proj=longlat +a=14000 +b=14000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50913, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50914, sinu, 14000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50915, sinu, 14000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50916, sinu, 14000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50917, sinu, 14000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50918, stere, 14000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50919, stere, 14000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50920, stere, 14000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50921, stere, 14000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50960, sinu, 14000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50961, sinu, 14000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50962, stere, 14000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50963, stere, 14000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50964, tmerc, 14000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50965, tmerc, 14000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50966, ortho, 14000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50967, ortho, 14000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50968, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50969, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50970, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50971, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50972, laea, 14000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 50973, laea, 14000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=14000 +b=14000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50974, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50975, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50976, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50977, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50978, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 50979, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51000, longlat, 12000, "+proj=longlat +a=12000 +b=12000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51001, longlat, 12000, "+proj=longlat +a=12000 +b=12000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51010, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51011, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51012, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51013, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51014, sinu, 12000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51015, sinu, 12000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51016, sinu, 12000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51017, sinu, 12000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51018, stere, 12000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51019, stere, 12000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51020, stere, 12000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51021, stere, 12000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51060, sinu, 12000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51061, sinu, 12000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51062, stere, 12000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51063, stere, 12000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51064, tmerc, 12000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51065, tmerc, 12000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51066, ortho, 12000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51067, ortho, 12000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51068, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51069, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51070, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51071, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51072, laea, 12000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51073, laea, 12000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=12000 +b=12000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51074, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51075, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51076, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51077, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51078, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51079, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51100, longlat, 15000, "+proj=longlat +a=15000 +b=15000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51101, longlat, 15000, "+proj=longlat +a=15000 +b=15000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51110, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51111, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51112, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51113, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51114, sinu, 15000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51115, sinu, 15000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51116, sinu, 15000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51117, sinu, 15000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51118, stere, 15000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51119, stere, 15000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51120, stere, 15000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51121, stere, 15000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51160, sinu, 15000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51161, sinu, 15000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51162, stere, 15000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51163, stere, 15000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51164, tmerc, 15000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51165, tmerc, 15000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51166, ortho, 15000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51167, ortho, 15000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51168, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51169, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51170, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51171, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51172, laea, 15000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51173, laea, 15000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51174, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51175, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51176, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51177, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51178, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51179, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51200, longlat, 10000, "+proj=longlat +a=10000 +b=10000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51201, longlat, 10000, "+proj=longlat +a=10000 +b=10000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51210, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51211, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51212, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51213, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51214, sinu, 10000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51215, sinu, 10000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51216, sinu, 10000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51217, sinu, 10000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51218, stere, 10000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51219, stere, 10000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51220, stere, 10000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51221, stere, 10000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51260, sinu, 10000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51261, sinu, 10000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51262, stere, 10000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51263, stere, 10000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51264, tmerc, 10000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51265, tmerc, 10000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51266, ortho, 10000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51267, ortho, 10000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51268, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51269, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51270, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51271, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51272, laea, 10000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51273, laea, 10000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51274, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51275, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51276, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51277, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51278, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51279, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51300, longlat, 5000, "+proj=longlat +a=5000 +b=5000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51301, longlat, 5000, "+proj=longlat +a=5000 +b=5000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51310, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51311, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51312, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51313, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51314, sinu, 5000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51315, sinu, 5000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51316, sinu, 5000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51317, sinu, 5000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51318, stere, 5000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51319, stere, 5000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51320, stere, 5000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51321, stere, 5000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51360, sinu, 5000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51361, sinu, 5000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51362, stere, 5000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51363, stere, 5000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51364, tmerc, 5000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51365, tmerc, 5000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51366, ortho, 5000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51367, ortho, 5000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51368, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51369, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51370, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51371, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51372, laea, 5000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51373, laea, 5000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=5000 +b=5000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51374, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51375, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51376, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51377, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51378, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51379, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51400, longlat, 58000, 42000, "+proj=longlat +a=58000 +b=42000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51401, longlat, 58000, 42000, "+proj=longlat +a=58000 +b=42000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51410, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51411, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51412, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51413, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51414, sinu, 58000, 42000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51415, sinu, 58000, 42000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51416, sinu, 58000, 42000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51417, sinu, 58000, 42000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51418, stere, 58000, 42000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51419, stere, 58000, 42000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51420, stere, 58000, 42000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51421, stere, 58000, 42000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51460, sinu, 58000, 42000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51461, sinu, 58000, 42000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51462, stere, 58000, 42000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51463, stere, 58000, 42000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51464, tmerc, 58000, 42000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51465, tmerc, 58000, 42000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51466, ortho, 58000, 42000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51467, ortho, 58000, 42000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51468, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51469, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51470, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51471, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51472, laea, 58000, 42000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51473, laea, 58000, 42000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=58000 +b=42000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51474, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51475, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51476, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51477, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51478, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51479, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51500, longlat, 10000, 7000, "+proj=longlat +a=10000 +b=7000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51501, longlat, 10000, 7000, "+proj=longlat +a=10000 +b=7000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51510, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51511, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51512, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51513, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51514, sinu, 10000, 7000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51515, sinu, 10000, 7000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51516, sinu, 10000, 7000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51517, sinu, 10000, 7000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51518, stere, 10000, 7000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51519, stere, 10000, 7000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51520, stere, 10000, 7000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51521, stere, 10000, 7000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51560, sinu, 10000, 7000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51561, sinu, 10000, 7000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51562, stere, 10000, 7000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51563, stere, 10000, 7000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51564, tmerc, 10000, 7000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51565, tmerc, 10000, 7000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51566, ortho, 10000, 7000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51567, ortho, 10000, 7000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51568, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51569, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51570, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51571, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51572, laea, 10000, 7000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 51573, laea, 10000, 7000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=7000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51574, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51575, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51576, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51577, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51578, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51579, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51600, longlat, 21500, "+proj=longlat +a=21500 +b=21500 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51601, longlat, 21500, "+proj=longlat +a=21500 +b=21500 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51610, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51611, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51612, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51613, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51614, sinu, 21500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51615, sinu, 21500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51616, sinu, 21500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51617, sinu, 21500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51618, stere, 21500, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51619, stere, 21500, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51620, stere, 21500, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51621, stere, 21500, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51660, sinu, 21500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51661, sinu, 21500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51662, stere, 21500, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51663, stere, 21500, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51664, tmerc, 21500, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51665, tmerc, 21500, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51666, ortho, 21500, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51667, ortho, 21500, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51668, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51669, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51670, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51671, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51672, laea, 21500, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 51673, laea, 21500, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21500 +b=21500 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51674, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51675, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51676, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51677, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51678, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 51679, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59900, longlat, 71492000, 66854000, "+proj=longlat +a=71492000 +b=66854000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59901, longlat, 71492000, 66854000, "+proj=longlat +a=71492000 +b=66854000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59913, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59914, sinu, 71492000, 66854000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59915, sinu, 71492000, 66854000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59916, sinu, 71492000, 66854000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59917, sinu, 71492000, 66854000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59918, stere, 71492000, 66854000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59919, stere, 71492000, 66854000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59920, stere, 71492000, 66854000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59921, stere, 71492000, 66854000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59960, sinu, 71492000, 66854000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59961, sinu, 71492000, 66854000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59962, stere, 71492000, 66854000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59963, stere, 71492000, 66854000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59964, tmerc, 71492000, 66854000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59965, tmerc, 71492000, 66854000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59966, ortho, 71492000, 66854000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59967, ortho, 71492000, 66854000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59968, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59969, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59970, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59971, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59972, laea, 71492000, 66854000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 59973, laea, 71492000, 66854000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=71492000 +b=66854000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59974, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59975, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59976, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59977, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59978, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 59979, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60100, longlat, 209100, 191400, "+proj=longlat +a=209100 +b=191400 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60101, longlat, 209100, 191400, "+proj=longlat +a=209100 +b=191400 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60110, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60111, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60112, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60113, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60114, sinu, 209100, 191400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60115, sinu, 209100, 191400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60116, sinu, 209100, 191400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60117, sinu, 209100, 191400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60118, stere, 209100, 191400, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60119, stere, 209100, 191400, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60120, stere, 209100, 191400, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60121, stere, 209100, 191400, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60160, sinu, 209100, 191400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60161, sinu, 209100, 191400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60162, stere, 209100, 191400, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60163, stere, 209100, 191400, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60164, tmerc, 209100, 191400, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60165, tmerc, 209100, 191400, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60166, ortho, 209100, 191400, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60167, ortho, 209100, 191400, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60168, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60169, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60170, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60171, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60172, laea, 209100, 191400, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60173, laea, 209100, 191400, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=209100 +b=191400 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60174, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60175, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60176, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60177, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60178, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60179, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60200, longlat, 256300, 244600, "+proj=longlat +a=256300 +b=244600 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60201, longlat, 256300, 244600, "+proj=longlat +a=256300 +b=244600 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60210, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60211, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60212, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60213, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60214, sinu, 256300, 244600, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60215, sinu, 256300, 244600, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60216, sinu, 256300, 244600, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60217, sinu, 256300, 244600, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60218, stere, 256300, 244600, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60219, stere, 256300, 244600, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60220, stere, 256300, 244600, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60221, stere, 256300, 244600, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60260, sinu, 256300, 244600, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60261, sinu, 256300, 244600, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60262, stere, 256300, 244600, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60263, stere, 256300, 244600, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60264, tmerc, 256300, 244600, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60265, tmerc, 256300, 244600, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60266, ortho, 256300, 244600, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60267, ortho, 256300, 244600, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60268, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60269, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60270, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60271, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60272, laea, 256300, 244600, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60273, laea, 256300, 244600, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=256300 +b=244600 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60274, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60275, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60276, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60277, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60278, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60279, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60300, longlat, 535600, 525800, "+proj=longlat +a=535600 +b=525800 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60301, longlat, 535600, 525800, "+proj=longlat +a=535600 +b=525800 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60310, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60311, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60312, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60313, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60314, sinu, 535600, 525800, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60315, sinu, 535600, 525800, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60316, sinu, 535600, 525800, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60317, sinu, 535600, 525800, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60318, stere, 535600, 525800, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60319, stere, 535600, 525800, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60320, stere, 535600, 525800, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60321, stere, 535600, 525800, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60360, sinu, 535600, 525800, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60361, sinu, 535600, 525800, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60362, stere, 535600, 525800, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60363, stere, 535600, 525800, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60364, tmerc, 535600, 525800, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60365, tmerc, 535600, 525800, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60366, ortho, 535600, 525800, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60367, ortho, 535600, 525800, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60368, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60369, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60370, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60371, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60372, laea, 535600, 525800, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60373, laea, 535600, 525800, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=535600 +b=525800 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60374, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60375, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60376, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60377, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60378, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60379, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60400, longlat, 560000, "+proj=longlat +a=560000 +b=560000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60401, longlat, 560000, "+proj=longlat +a=560000 +b=560000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60410, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60411, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60412, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60413, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60414, sinu, 560000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60415, sinu, 560000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60416, sinu, 560000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60417, sinu, 560000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60418, stere, 560000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60419, stere, 560000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60420, stere, 560000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60421, stere, 560000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60460, sinu, 560000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60461, sinu, 560000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60462, stere, 560000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60463, stere, 560000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60464, tmerc, 560000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60465, tmerc, 560000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60466, ortho, 560000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60467, ortho, 560000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60468, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60469, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60470, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60471, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60472, laea, 560000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60473, laea, 560000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=560000 +b=560000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60474, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60475, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60476, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60477, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60478, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60479, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60500, longlat, 764000, "+proj=longlat +a=764000 +b=764000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60501, longlat, 764000, "+proj=longlat +a=764000 +b=764000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60510, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60511, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60512, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60513, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60514, sinu, 764000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60515, sinu, 764000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60516, sinu, 764000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60517, sinu, 764000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60518, stere, 764000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60519, stere, 764000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60520, stere, 764000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60521, stere, 764000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60560, sinu, 764000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60561, sinu, 764000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60562, stere, 764000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60563, stere, 764000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60564, tmerc, 764000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60565, tmerc, 764000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60566, ortho, 764000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60567, ortho, 764000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60568, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60569, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60570, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60571, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60572, laea, 764000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60573, laea, 764000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=764000 +b=764000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60574, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60575, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60576, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60577, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60578, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60579, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60600, longlat, 2575000, "+proj=longlat +a=2575000 +b=2575000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60601, longlat, 2575000, "+proj=longlat +a=2575000 +b=2575000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60610, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60611, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60612, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60613, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60614, sinu, 2575000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60615, sinu, 2575000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60616, sinu, 2575000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60617, sinu, 2575000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60618, stere, 2575000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60619, stere, 2575000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60620, stere, 2575000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60621, stere, 2575000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60660, sinu, 2575000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60661, sinu, 2575000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60662, stere, 2575000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60663, stere, 2575000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60664, tmerc, 2575000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60665, tmerc, 2575000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60666, ortho, 2575000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60667, ortho, 2575000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60668, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60669, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60670, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60671, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60672, laea, 2575000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60673, laea, 2575000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=2575000 +b=2575000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60674, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60675, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60676, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60677, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60678, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60679, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60700, longlat, 164000, 107000, "+proj=longlat +a=164000 +b=107000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60701, longlat, 164000, 107000, "+proj=longlat +a=164000 +b=107000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60710, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60711, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60712, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60713, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60714, sinu, 164000, 107000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60715, sinu, 164000, 107000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60716, sinu, 164000, 107000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60717, sinu, 164000, 107000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60718, stere, 164000, 107000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60719, stere, 164000, 107000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60720, stere, 164000, 107000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60721, stere, 164000, 107000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60760, sinu, 164000, 107000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60761, sinu, 164000, 107000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60762, stere, 164000, 107000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60763, stere, 164000, 107000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60764, tmerc, 164000, 107000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60765, tmerc, 164000, 107000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60766, ortho, 164000, 107000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60767, ortho, 164000, 107000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60768, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60769, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60770, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60771, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60772, laea, 164000, 107000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60773, laea, 164000, 107000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=164000 +b=107000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60774, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60775, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60776, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60777, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60778, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60779, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60800, longlat, 718000, "+proj=longlat +a=718000 +b=718000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60801, longlat, 718000, "+proj=longlat +a=718000 +b=718000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60810, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60811, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60812, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60813, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60814, sinu, 718000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60815, sinu, 718000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60816, sinu, 718000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60817, sinu, 718000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60818, stere, 718000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60819, stere, 718000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60820, stere, 718000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60821, stere, 718000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60860, sinu, 718000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60861, sinu, 718000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60862, stere, 718000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60863, stere, 718000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60864, tmerc, 718000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60865, tmerc, 718000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60866, ortho, 718000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60867, ortho, 718000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60868, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60869, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60870, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60871, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60872, laea, 718000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 60873, laea, 718000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=718000 +b=718000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60874, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60875, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60876, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60877, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60878, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60879, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60900, longlat, 115000, 105000, "+proj=longlat +a=115000 +b=105000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60901, longlat, 115000, 105000, "+proj=longlat +a=115000 +b=105000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60913, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60914, sinu, 115000, 105000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60915, sinu, 115000, 105000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60916, sinu, 115000, 105000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60917, sinu, 115000, 105000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60918, stere, 115000, 105000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60919, stere, 115000, 105000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60920, stere, 115000, 105000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60921, stere, 115000, 105000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60960, sinu, 115000, 105000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60961, sinu, 115000, 105000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60962, stere, 115000, 105000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60963, stere, 115000, 105000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60964, tmerc, 115000, 105000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60965, tmerc, 115000, 105000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60966, ortho, 115000, 105000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60967, ortho, 115000, 105000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60968, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60969, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60970, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60971, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60972, laea, 115000, 105000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 60973, laea, 115000, 105000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=115000 +b=105000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60974, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60975, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60976, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60977, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60978, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 60979, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61000, longlat, 97000, 77000, "+proj=longlat +a=97000 +b=77000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61001, longlat, 97000, 77000, "+proj=longlat +a=97000 +b=77000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61010, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61011, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61012, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61013, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61014, sinu, 97000, 77000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61015, sinu, 97000, 77000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61016, sinu, 97000, 77000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61017, sinu, 97000, 77000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61018, stere, 97000, 77000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61019, stere, 97000, 77000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61020, stere, 97000, 77000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61021, stere, 97000, 77000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61060, sinu, 97000, 77000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61061, sinu, 97000, 77000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61062, stere, 97000, 77000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61063, stere, 97000, 77000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61064, tmerc, 97000, 77000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61065, tmerc, 97000, 77000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61066, ortho, 97000, 77000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61067, ortho, 97000, 77000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61068, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61069, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61070, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61071, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61072, laea, 97000, 77000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61073, laea, 97000, 77000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=97000 +b=77000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61074, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61075, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61076, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61077, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61078, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61079, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61100, longlat, 69000, 55000, "+proj=longlat +a=69000 +b=55000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61101, longlat, 69000, 55000, "+proj=longlat +a=69000 +b=55000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61110, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61111, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61112, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61113, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61114, sinu, 69000, 55000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61115, sinu, 69000, 55000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61116, sinu, 69000, 55000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61117, sinu, 69000, 55000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61118, stere, 69000, 55000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61119, stere, 69000, 55000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61120, stere, 69000, 55000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61121, stere, 69000, 55000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61160, sinu, 69000, 55000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61161, sinu, 69000, 55000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61162, stere, 69000, 55000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61163, stere, 69000, 55000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61164, tmerc, 69000, 55000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61165, tmerc, 69000, 55000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61166, ortho, 69000, 55000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61167, ortho, 69000, 55000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61168, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61169, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61170, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61171, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61172, laea, 69000, 55000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61173, laea, 69000, 55000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=69000 +b=55000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61174, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61175, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61176, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61177, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61178, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61179, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61200, longlat, 16000, "+proj=longlat +a=16000 +b=16000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61201, longlat, 16000, "+proj=longlat +a=16000 +b=16000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61210, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61211, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61212, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61213, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61214, sinu, 16000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61215, sinu, 16000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61216, sinu, 16000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61217, sinu, 16000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61218, stere, 16000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61219, stere, 16000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61220, stere, 16000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61221, stere, 16000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61260, sinu, 16000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61261, sinu, 16000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61262, stere, 16000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61263, stere, 16000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61264, tmerc, 16000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61265, tmerc, 16000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61266, ortho, 16000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61267, ortho, 16000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61268, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61269, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61270, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61271, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61272, laea, 16000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61273, laea, 16000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=16000 +b=16000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61274, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61275, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61276, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61277, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61278, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61279, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61300, longlat, 15000, 7500, "+proj=longlat +a=15000 +b=7500 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61301, longlat, 15000, 7500, "+proj=longlat +a=15000 +b=7500 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61310, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61311, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61312, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61313, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61314, sinu, 15000, 7500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61315, sinu, 15000, 7500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61316, sinu, 15000, 7500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61317, sinu, 15000, 7500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61318, stere, 15000, 7500, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61319, stere, 15000, 7500, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61320, stere, 15000, 7500, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61321, stere, 15000, 7500, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61360, sinu, 15000, 7500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61361, sinu, 15000, 7500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61362, stere, 15000, 7500, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61363, stere, 15000, 7500, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61364, tmerc, 15000, 7500, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61365, tmerc, 15000, 7500, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61366, ortho, 15000, 7500, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61367, ortho, 15000, 7500, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61368, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61369, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61370, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61371, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61372, laea, 15000, 7500, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61373, laea, 15000, 7500, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=7500 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61374, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61375, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61376, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61377, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61378, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61379, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61400, longlat, 15000, 8000, "+proj=longlat +a=15000 +b=8000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61401, longlat, 15000, 8000, "+proj=longlat +a=15000 +b=8000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61410, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61411, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61412, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61413, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61414, sinu, 15000, 8000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61415, sinu, 15000, 8000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61416, sinu, 15000, 8000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61417, sinu, 15000, 8000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61418, stere, 15000, 8000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61419, stere, 15000, 8000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61420, stere, 15000, 8000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61421, stere, 15000, 8000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61460, sinu, 15000, 8000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61461, sinu, 15000, 8000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61462, stere, 15000, 8000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61463, stere, 15000, 8000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61464, tmerc, 15000, 8000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61465, tmerc, 15000, 8000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61466, ortho, 15000, 8000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61467, ortho, 15000, 8000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61468, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61469, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61470, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61471, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61472, laea, 15000, 8000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61473, laea, 15000, 8000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=8000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61474, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61475, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61476, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61477, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61478, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61479, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61500, longlat, 18500, 13500, "+proj=longlat +a=18500 +b=13500 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61501, longlat, 18500, 13500, "+proj=longlat +a=18500 +b=13500 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61510, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61511, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61512, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61513, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61514, sinu, 18500, 13500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61515, sinu, 18500, 13500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61516, sinu, 18500, 13500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61517, sinu, 18500, 13500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61518, stere, 18500, 13500, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61519, stere, 18500, 13500, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61520, stere, 18500, 13500, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61521, stere, 18500, 13500, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61560, sinu, 18500, 13500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61561, sinu, 18500, 13500, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61562, stere, 18500, 13500, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61563, stere, 18500, 13500, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61564, tmerc, 18500, 13500, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61565, tmerc, 18500, 13500, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61566, ortho, 18500, 13500, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61567, ortho, 18500, 13500, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61568, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61569, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61570, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61571, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61572, laea, 18500, 13500, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61573, laea, 18500, 13500, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=18500 +b=13500 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61574, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61575, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61576, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61577, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61578, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61579, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61600, longlat, 74000, 34000, "+proj=longlat +a=74000 +b=34000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61601, longlat, 74000, 34000, "+proj=longlat +a=74000 +b=34000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61610, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61611, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61612, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61613, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61614, sinu, 74000, 34000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61615, sinu, 74000, 34000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61616, sinu, 74000, 34000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61617, sinu, 74000, 34000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61618, stere, 74000, 34000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61619, stere, 74000, 34000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61620, stere, 74000, 34000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61621, stere, 74000, 34000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61660, sinu, 74000, 34000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61661, sinu, 74000, 34000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61662, stere, 74000, 34000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61663, stere, 74000, 34000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61664, tmerc, 74000, 34000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61665, tmerc, 74000, 34000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61666, ortho, 74000, 34000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61667, ortho, 74000, 34000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61668, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61669, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61670, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61671, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61672, laea, 74000, 34000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61673, laea, 74000, 34000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=34000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61674, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61675, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61676, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61677, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61678, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61679, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61700, longlat, 55000, 31000, "+proj=longlat +a=55000 +b=31000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61701, longlat, 55000, 31000, "+proj=longlat +a=55000 +b=31000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61710, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61711, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61712, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61713, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61714, sinu, 55000, 31000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61715, sinu, 55000, 31000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61716, sinu, 55000, 31000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61717, sinu, 55000, 31000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61718, stere, 55000, 31000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61719, stere, 55000, 31000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61720, stere, 55000, 31000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61721, stere, 55000, 31000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61760, sinu, 55000, 31000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61761, sinu, 55000, 31000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61762, stere, 55000, 31000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61763, stere, 55000, 31000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61764, tmerc, 55000, 31000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61765, tmerc, 55000, 31000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61766, ortho, 55000, 31000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61767, ortho, 55000, 31000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61768, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61769, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61770, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61771, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61772, laea, 55000, 31000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 61773, laea, 55000, 31000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=55000 +b=31000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61774, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61775, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61776, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61777, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61778, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61779, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61800, longlat, 10000, "+proj=longlat +a=10000 +b=10000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61801, longlat, 10000, "+proj=longlat +a=10000 +b=10000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61810, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61811, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61812, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61813, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61814, sinu, 10000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61815, sinu, 10000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61816, sinu, 10000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61817, sinu, 10000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61818, stere, 10000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61819, stere, 10000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61820, stere, 10000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61821, stere, 10000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61860, sinu, 10000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61861, sinu, 10000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61862, stere, 10000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61863, stere, 10000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61864, tmerc, 10000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61865, tmerc, 10000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61866, ortho, 10000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61867, ortho, 10000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61868, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61869, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61870, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61871, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61872, laea, 10000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 61873, laea, 10000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=10000 +b=10000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61874, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61875, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61876, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61877, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61878, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 61879, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69900, longlat, 60268000, 54364000, "+proj=longlat +a=60268000 +b=54364000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69901, longlat, 60268000, 54364000, "+proj=longlat +a=60268000 +b=54364000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69913, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69914, sinu, 60268000, 54364000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69915, sinu, 60268000, 54364000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69916, sinu, 60268000, 54364000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69917, sinu, 60268000, 54364000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69918, stere, 60268000, 54364000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69919, stere, 60268000, 54364000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69920, stere, 60268000, 54364000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69921, stere, 60268000, 54364000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69960, sinu, 60268000, 54364000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69961, sinu, 60268000, 54364000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69962, stere, 60268000, 54364000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69963, stere, 60268000, 54364000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69964, tmerc, 60268000, 54364000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69965, tmerc, 60268000, 54364000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69966, ortho, 60268000, 54364000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69967, ortho, 60268000, 54364000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69968, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69969, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69970, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69971, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69972, laea, 60268000, 54364000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 69973, laea, 60268000, 54364000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=60268000 +b=54364000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69974, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69975, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69976, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69977, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69978, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 69979, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70100, longlat, 581100, 577700, "+proj=longlat +a=581100 +b=577700 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70101, longlat, 581100, 577700, "+proj=longlat +a=581100 +b=577700 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70110, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70111, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70112, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70113, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70114, sinu, 581100, 577700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70115, sinu, 581100, 577700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70116, sinu, 581100, 577700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70117, sinu, 581100, 577700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70118, stere, 581100, 577700, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70119, stere, 581100, 577700, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70120, stere, 581100, 577700, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70121, stere, 581100, 577700, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70160, sinu, 581100, 577700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70161, sinu, 581100, 577700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70162, stere, 581100, 577700, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70163, stere, 581100, 577700, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70164, tmerc, 581100, 577700, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70165, tmerc, 581100, 577700, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70166, ortho, 581100, 577700, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70167, ortho, 581100, 577700, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70168, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70169, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70170, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70171, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70172, laea, 581100, 577700, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70173, laea, 581100, 577700, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=581100 +b=577700 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70174, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70175, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70176, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70177, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70178, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70179, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70200, longlat, 584700, "+proj=longlat +a=584700 +b=584700 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70201, longlat, 584700, "+proj=longlat +a=584700 +b=584700 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70210, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70211, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70212, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70213, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70214, sinu, 584700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70215, sinu, 584700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70216, sinu, 584700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70217, sinu, 584700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70218, stere, 584700, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70219, stere, 584700, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70220, stere, 584700, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70221, stere, 584700, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70260, sinu, 584700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70261, sinu, 584700, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70262, stere, 584700, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70263, stere, 584700, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70264, tmerc, 584700, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70265, tmerc, 584700, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70266, ortho, 584700, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70267, ortho, 584700, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70268, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70269, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70270, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70271, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70272, laea, 584700, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70273, laea, 584700, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=584700 +b=584700 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70274, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70275, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70276, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70277, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70278, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70279, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70300, longlat, 788900, "+proj=longlat +a=788900 +b=788900 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70301, longlat, 788900, "+proj=longlat +a=788900 +b=788900 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70310, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70311, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70312, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70313, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70314, sinu, 788900, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70315, sinu, 788900, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70316, sinu, 788900, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70317, sinu, 788900, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70318, stere, 788900, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70319, stere, 788900, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70320, stere, 788900, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70321, stere, 788900, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70360, sinu, 788900, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70361, sinu, 788900, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70362, stere, 788900, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70363, stere, 788900, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70364, tmerc, 788900, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70365, tmerc, 788900, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70366, ortho, 788900, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70367, ortho, 788900, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70368, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70369, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70370, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70371, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70372, laea, 788900, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70373, laea, 788900, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=788900 +b=788900 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70374, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70375, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70376, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70377, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70378, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70379, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70400, longlat, 761400, "+proj=longlat +a=761400 +b=761400 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70401, longlat, 761400, "+proj=longlat +a=761400 +b=761400 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70410, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70411, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70412, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70413, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70414, sinu, 761400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70415, sinu, 761400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70416, sinu, 761400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70417, sinu, 761400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70418, stere, 761400, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70419, stere, 761400, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70420, stere, 761400, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70421, stere, 761400, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70460, sinu, 761400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70461, sinu, 761400, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70462, stere, 761400, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70463, stere, 761400, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70464, tmerc, 761400, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70465, tmerc, 761400, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70466, ortho, 761400, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70467, ortho, 761400, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70468, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70469, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70470, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70471, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70472, laea, 761400, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70473, laea, 761400, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=761400 +b=761400 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70474, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70475, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70476, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70477, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70478, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70479, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70500, longlat, 240400, 232900, "+proj=longlat +a=240400 +b=232900 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70501, longlat, 240400, 232900, "+proj=longlat +a=240400 +b=232900 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70510, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70511, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70512, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70513, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70514, sinu, 240400, 232900, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70515, sinu, 240400, 232900, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70516, sinu, 240400, 232900, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70517, sinu, 240400, 232900, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70518, stere, 240400, 232900, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70519, stere, 240400, 232900, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70520, stere, 240400, 232900, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70521, stere, 240400, 232900, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70560, sinu, 240400, 232900, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70561, sinu, 240400, 232900, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70562, stere, 240400, 232900, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70563, stere, 240400, 232900, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70564, tmerc, 240400, 232900, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70565, tmerc, 240400, 232900, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70566, ortho, 240400, 232900, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70567, ortho, 240400, 232900, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70568, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70569, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70570, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70571, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70572, laea, 240400, 232900, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 70573, laea, 240400, 232900, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=240400 +b=232900 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70574, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70575, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70576, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70577, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70578, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70579, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70600, longlat, 13000, "+proj=longlat +a=13000 +b=13000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70601, longlat, 13000, "+proj=longlat +a=13000 +b=13000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70610, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70611, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70612, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70613, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70614, sinu, 13000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70615, sinu, 13000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70616, sinu, 13000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70617, sinu, 13000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70618, stere, 13000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70619, stere, 13000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70620, stere, 13000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70621, stere, 13000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70660, sinu, 13000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70661, sinu, 13000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70662, stere, 13000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70663, stere, 13000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70664, tmerc, 13000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70665, tmerc, 13000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70666, ortho, 13000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70667, ortho, 13000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70668, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70669, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70670, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70671, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70672, laea, 13000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70673, laea, 13000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=13000 +b=13000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70674, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70675, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70676, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70677, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70678, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70679, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70700, longlat, 15000, "+proj=longlat +a=15000 +b=15000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70701, longlat, 15000, "+proj=longlat +a=15000 +b=15000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70710, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70711, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70712, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70713, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70714, sinu, 15000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70715, sinu, 15000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70716, sinu, 15000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70717, sinu, 15000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70718, stere, 15000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70719, stere, 15000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70720, stere, 15000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70721, stere, 15000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70760, sinu, 15000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70761, sinu, 15000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70762, stere, 15000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70763, stere, 15000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70764, tmerc, 15000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70765, tmerc, 15000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70766, ortho, 15000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70767, ortho, 15000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70768, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70769, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70770, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70771, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70772, laea, 15000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70773, laea, 15000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=15000 +b=15000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70774, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70775, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70776, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70777, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70778, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70779, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70800, longlat, 21000, "+proj=longlat +a=21000 +b=21000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70801, longlat, 21000, "+proj=longlat +a=21000 +b=21000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70810, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70811, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70812, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70813, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70814, sinu, 21000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70815, sinu, 21000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70816, sinu, 21000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70817, sinu, 21000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70818, stere, 21000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70819, stere, 21000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70820, stere, 21000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70821, stere, 21000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70860, sinu, 21000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70861, sinu, 21000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70862, stere, 21000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70863, stere, 21000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70864, tmerc, 21000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70865, tmerc, 21000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70866, ortho, 21000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70867, ortho, 21000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70868, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70869, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70870, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70871, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70872, laea, 21000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70873, laea, 21000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=21000 +b=21000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70874, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70875, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70876, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70877, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70878, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70879, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70900, longlat, 31000, "+proj=longlat +a=31000 +b=31000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70901, longlat, 31000, "+proj=longlat +a=31000 +b=31000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70913, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70914, sinu, 31000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70915, sinu, 31000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70916, sinu, 31000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70917, sinu, 31000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70918, stere, 31000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70919, stere, 31000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70920, stere, 31000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70921, stere, 31000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70960, sinu, 31000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70961, sinu, 31000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70962, stere, 31000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70963, stere, 31000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70964, tmerc, 31000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70965, tmerc, 31000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70966, ortho, 31000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70967, ortho, 31000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70968, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70969, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70970, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70971, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70972, laea, 31000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 70973, laea, 31000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=31000 +b=31000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70974, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70975, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70976, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70977, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70978, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 70979, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71000, longlat, 27000, "+proj=longlat +a=27000 +b=27000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71001, longlat, 27000, "+proj=longlat +a=27000 +b=27000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71010, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71011, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71012, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71013, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71014, sinu, 27000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71015, sinu, 27000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71016, sinu, 27000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71017, sinu, 27000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71018, stere, 27000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71019, stere, 27000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71020, stere, 27000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71021, stere, 27000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71060, sinu, 27000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71061, sinu, 27000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71062, stere, 27000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71063, stere, 27000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71064, tmerc, 27000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71065, tmerc, 27000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71066, ortho, 27000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71067, ortho, 27000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71068, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71069, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71070, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71071, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71072, laea, 27000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71073, laea, 27000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71074, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71075, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71076, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71077, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71078, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71079, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71100, longlat, 42000, "+proj=longlat +a=42000 +b=42000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71101, longlat, 42000, "+proj=longlat +a=42000 +b=42000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71110, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71111, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71112, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71113, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71114, sinu, 42000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71115, sinu, 42000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71116, sinu, 42000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71117, sinu, 42000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71118, stere, 42000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71119, stere, 42000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71120, stere, 42000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71121, stere, 42000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71160, sinu, 42000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71161, sinu, 42000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71162, stere, 42000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71163, stere, 42000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71164, tmerc, 42000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71165, tmerc, 42000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71166, ortho, 42000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71167, ortho, 42000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71168, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71169, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71170, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71171, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71172, laea, 42000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71173, laea, 42000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=42000 +b=42000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71174, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71175, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71176, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71177, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71178, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71179, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71200, longlat, 54000, "+proj=longlat +a=54000 +b=54000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71201, longlat, 54000, "+proj=longlat +a=54000 +b=54000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71210, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71211, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71212, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71213, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71214, sinu, 54000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71215, sinu, 54000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71216, sinu, 54000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71217, sinu, 54000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71218, stere, 54000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71219, stere, 54000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71220, stere, 54000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71221, stere, 54000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71260, sinu, 54000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71261, sinu, 54000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71262, stere, 54000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71263, stere, 54000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71264, tmerc, 54000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71265, tmerc, 54000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71266, ortho, 54000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71267, ortho, 54000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71268, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71269, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71270, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71271, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71272, laea, 54000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71273, laea, 54000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=54000 +b=54000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71274, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71275, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71276, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71277, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71278, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71279, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71300, longlat, 27000, "+proj=longlat +a=27000 +b=27000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71301, longlat, 27000, "+proj=longlat +a=27000 +b=27000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71310, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71311, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71312, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71313, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71314, sinu, 27000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71315, sinu, 27000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71316, sinu, 27000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71317, sinu, 27000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71318, stere, 27000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71319, stere, 27000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71320, stere, 27000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71321, stere, 27000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71360, sinu, 27000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71361, sinu, 27000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71362, stere, 27000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71363, stere, 27000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71364, tmerc, 27000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71365, tmerc, 27000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71366, ortho, 27000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71367, ortho, 27000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71368, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71369, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71370, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71371, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71372, laea, 27000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71373, laea, 27000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=27000 +b=27000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71374, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71375, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71376, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71377, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71378, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71379, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71400, longlat, 33000, "+proj=longlat +a=33000 +b=33000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71401, longlat, 33000, "+proj=longlat +a=33000 +b=33000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71410, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71411, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71412, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71413, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71414, sinu, 33000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71415, sinu, 33000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71416, sinu, 33000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71417, sinu, 33000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71418, stere, 33000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71419, stere, 33000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71420, stere, 33000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71421, stere, 33000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71460, sinu, 33000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71461, sinu, 33000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71462, stere, 33000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71463, stere, 33000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71464, tmerc, 33000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71465, tmerc, 33000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71466, ortho, 33000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71467, ortho, 33000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71468, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71469, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71470, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71471, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71472, laea, 33000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71473, laea, 33000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=33000 +b=33000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71474, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71475, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71476, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71477, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71478, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71479, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71500, longlat, 77000, "+proj=longlat +a=77000 +b=77000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71501, longlat, 77000, "+proj=longlat +a=77000 +b=77000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71510, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71511, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71512, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71513, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71514, sinu, 77000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71515, sinu, 77000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71516, sinu, 77000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71517, sinu, 77000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71518, stere, 77000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71519, stere, 77000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71520, stere, 77000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71521, stere, 77000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71560, sinu, 77000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71561, sinu, 77000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71562, stere, 77000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71563, stere, 77000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71564, tmerc, 77000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71565, tmerc, 77000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71566, ortho, 77000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71567, ortho, 77000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71568, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71569, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71570, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71571, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71572, laea, 77000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 71573, laea, 77000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=77000 +b=77000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71574, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71575, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71576, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71577, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71578, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 71579, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79900, longlat, 25559000, 24973000, "+proj=longlat +a=25559000 +b=24973000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79901, longlat, 25559000, 24973000, "+proj=longlat +a=25559000 +b=24973000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79913, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79914, sinu, 25559000, 24973000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79915, sinu, 25559000, 24973000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79916, sinu, 25559000, 24973000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79917, sinu, 25559000, 24973000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79918, stere, 25559000, 24973000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79919, stere, 25559000, 24973000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79920, stere, 25559000, 24973000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79921, stere, 25559000, 24973000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79960, sinu, 25559000, 24973000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79961, sinu, 25559000, 24973000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79962, stere, 25559000, 24973000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79963, stere, 25559000, 24973000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79964, tmerc, 25559000, 24973000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79965, tmerc, 25559000, 24973000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79966, ortho, 25559000, 24973000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79967, ortho, 25559000, 24973000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79968, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79969, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79970, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79971, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79972, laea, 25559000, 24973000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 79973, laea, 25559000, 24973000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=25559000 +b=24973000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79974, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79975, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79976, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79977, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79978, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 79979, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80100, longlat, 1352600, "+proj=longlat +a=1352600 +b=1352600 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80101, longlat, 1352600, "+proj=longlat +a=1352600 +b=1352600 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80110, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80111, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80112, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80113, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80114, sinu, 1352600, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80115, sinu, 1352600, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80116, sinu, 1352600, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80117, sinu, 1352600, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80118, stere, 1352600, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80119, stere, 1352600, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80120, stere, 1352600, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80121, stere, 1352600, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80160, sinu, 1352600, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80161, sinu, 1352600, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80162, stere, 1352600, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80163, stere, 1352600, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80164, tmerc, 1352600, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80165, tmerc, 1352600, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80166, ortho, 1352600, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80167, ortho, 1352600, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80168, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80169, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80170, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80171, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80172, laea, 1352600, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80173, laea, 1352600, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1352600 +b=1352600 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80174, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80175, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80176, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80177, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80178, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80179, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80200, longlat, 170000, "+proj=longlat +a=170000 +b=170000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80201, longlat, 170000, "+proj=longlat +a=170000 +b=170000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80210, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80211, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80212, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80213, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80214, sinu, 170000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80215, sinu, 170000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80216, sinu, 170000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80217, sinu, 170000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80218, stere, 170000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80219, stere, 170000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80220, stere, 170000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80221, stere, 170000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80260, sinu, 170000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80261, sinu, 170000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80262, stere, 170000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80263, stere, 170000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80264, tmerc, 170000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80265, tmerc, 170000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80266, ortho, 170000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80267, ortho, 170000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80268, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80269, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80270, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80271, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80272, laea, 170000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80273, laea, 170000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=170000 +b=170000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80274, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80275, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80276, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80277, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80278, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80279, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80300, longlat, 29000, "+proj=longlat +a=29000 +b=29000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80301, longlat, 29000, "+proj=longlat +a=29000 +b=29000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80310, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80311, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80312, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80313, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80314, sinu, 29000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80315, sinu, 29000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80316, sinu, 29000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80317, sinu, 29000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80318, stere, 29000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80319, stere, 29000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80320, stere, 29000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80321, stere, 29000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80360, sinu, 29000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80361, sinu, 29000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80362, stere, 29000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80363, stere, 29000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80364, tmerc, 29000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80365, tmerc, 29000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80366, ortho, 29000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80367, ortho, 29000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80368, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80369, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80370, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80371, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80372, laea, 29000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80373, laea, 29000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=29000 +b=29000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80374, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80375, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80376, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80377, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80378, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80379, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80400, longlat, 40000, "+proj=longlat +a=40000 +b=40000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80401, longlat, 40000, "+proj=longlat +a=40000 +b=40000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80410, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80411, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80412, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80413, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80414, sinu, 40000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80415, sinu, 40000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80416, sinu, 40000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80417, sinu, 40000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80418, stere, 40000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80419, stere, 40000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80420, stere, 40000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80421, stere, 40000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80460, sinu, 40000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80461, sinu, 40000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80462, stere, 40000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80463, stere, 40000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80464, tmerc, 40000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80465, tmerc, 40000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80466, ortho, 40000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80467, ortho, 40000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80468, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80469, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80470, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80471, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80472, laea, 40000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80473, laea, 40000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=40000 +b=40000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80474, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80475, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80476, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80477, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80478, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80479, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80500, longlat, 74000, "+proj=longlat +a=74000 +b=74000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80501, longlat, 74000, "+proj=longlat +a=74000 +b=74000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80510, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80511, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80512, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80513, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80514, sinu, 74000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80515, sinu, 74000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80516, sinu, 74000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80517, sinu, 74000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80518, stere, 74000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80519, stere, 74000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80520, stere, 74000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80521, stere, 74000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80560, sinu, 74000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80561, sinu, 74000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80562, stere, 74000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80563, stere, 74000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80564, tmerc, 74000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80565, tmerc, 74000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80566, ortho, 74000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80567, ortho, 74000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80568, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80569, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80570, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80571, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80572, laea, 74000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80573, laea, 74000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=74000 +b=74000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80574, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80575, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80576, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80577, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80578, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80579, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80600, longlat, 79000, "+proj=longlat +a=79000 +b=79000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80601, longlat, 79000, "+proj=longlat +a=79000 +b=79000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80610, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80611, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80612, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80613, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80614, sinu, 79000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80615, sinu, 79000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80616, sinu, 79000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80617, sinu, 79000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80618, stere, 79000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80619, stere, 79000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80620, stere, 79000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80621, stere, 79000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80660, sinu, 79000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80661, sinu, 79000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80662, stere, 79000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80663, stere, 79000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80664, tmerc, 79000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80665, tmerc, 79000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80666, ortho, 79000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80667, ortho, 79000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80668, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80669, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80670, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80671, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80672, laea, 79000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80673, laea, 79000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=79000 +b=79000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80674, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80675, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80676, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80677, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80678, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80679, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80700, longlat, 96000, "+proj=longlat +a=96000 +b=96000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80701, longlat, 96000, "+proj=longlat +a=96000 +b=96000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80710, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80711, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80712, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80713, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80714, sinu, 96000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80715, sinu, 96000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80716, sinu, 96000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80717, sinu, 96000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80718, stere, 96000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80719, stere, 96000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80720, stere, 96000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80721, stere, 96000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80760, sinu, 96000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80761, sinu, 96000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80762, stere, 96000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80763, stere, 96000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80764, tmerc, 96000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80765, tmerc, 96000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80766, ortho, 96000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80767, ortho, 96000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80768, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80769, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80770, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80771, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80772, laea, 96000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 80773, laea, 96000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=96000 +b=96000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80774, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80775, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80776, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80777, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80778, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80779, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80800, longlat, 218000, 201000, "+proj=longlat +a=218000 +b=201000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80801, longlat, 218000, 201000, "+proj=longlat +a=218000 +b=201000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80810, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80811, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80812, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80813, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80814, sinu, 218000, 201000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80815, sinu, 218000, 201000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80816, sinu, 218000, 201000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80817, sinu, 218000, 201000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80818, stere, 218000, 201000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80819, stere, 218000, 201000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80820, stere, 218000, 201000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80821, stere, 218000, 201000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80860, sinu, 218000, 201000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80861, sinu, 218000, 201000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80862, stere, 218000, 201000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80863, stere, 218000, 201000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80864, tmerc, 218000, 201000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80865, tmerc, 218000, 201000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80866, ortho, 218000, 201000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80867, ortho, 218000, 201000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80868, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80869, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80870, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80871, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80872, laea, 218000, 201000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 80873, laea, 218000, 201000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=218000 +b=201000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80874, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80875, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80876, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80877, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80878, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 80879, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89900, longlat, 24764000, 24341000, "+proj=longlat +a=24764000 +b=24341000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89901, longlat, 24764000, 24341000, "+proj=longlat +a=24764000 +b=24341000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89913, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89914, sinu, 24764000, 24341000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89915, sinu, 24764000, 24341000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89916, sinu, 24764000, 24341000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89917, sinu, 24764000, 24341000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89918, stere, 24764000, 24341000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89919, stere, 24764000, 24341000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89920, stere, 24764000, 24341000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89921, stere, 24764000, 24341000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89960, sinu, 24764000, 24341000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89961, sinu, 24764000, 24341000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89962, stere, 24764000, 24341000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89963, stere, 24764000, 24341000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89964, tmerc, 24764000, 24341000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89965, tmerc, 24764000, 24341000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89966, ortho, 24764000, 24341000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89967, ortho, 24764000, 24341000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89968, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89969, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89970, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89971, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89972, laea, 24764000, 24341000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(iau2000, 89973, laea, 24764000, 24341000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=24764000 +b=24341000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89974, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89975, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89976, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89977, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89978, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 89979, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90100, longlat, 593000, "+proj=longlat +a=593000 +b=593000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90101, longlat, 593000, "+proj=longlat +a=593000 +b=593000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90110, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90111, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90112, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90113, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90114, sinu, 593000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90115, sinu, 593000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90116, sinu, 593000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90117, sinu, 593000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90118, stere, 593000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90119, stere, 593000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90120, stere, 593000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90121, stere, 593000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90160, sinu, 593000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90161, sinu, 593000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90162, stere, 593000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90163, stere, 593000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90164, tmerc, 593000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90165, tmerc, 593000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90166, ortho, 593000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90167, ortho, 593000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90168, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90169, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90170, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90171, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90172, laea, 593000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 90173, laea, 593000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=593000 +b=593000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90174, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90175, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90176, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90177, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90178, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 90179, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99900, longlat, 1195000, "+proj=longlat +a=1195000 +b=1195000 +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99901, longlat, 1195000, "+proj=longlat +a=1195000 +b=1195000 +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99910, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99911, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99912, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99913, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99914, sinu, 1195000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99915, sinu, 1195000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99916, sinu, 1195000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99917, sinu, 1195000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99918, stere, 1195000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99919, stere, 1195000, "+proj=stere +lat_0=90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99920, stere, 1195000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99921, stere, 1195000, "+proj=stere +lat_0=-90 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99960, sinu, 1195000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99961, sinu, 1195000, "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99962, stere, 1195000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99963, stere, 1195000, "+proj=stere +lat_0=0 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99964, tmerc, 1195000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99965, tmerc, 1195000, "+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99966, ortho, 1195000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99967, ortho, 1195000, "+proj=ortho +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99968, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99969, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99970, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99971, "")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99972, laea, 1195000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S (iau2000, 99973, laea, 1195000, "+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=1195000 +b=1195000 +units=m +no_defs")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99974, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99975, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99976, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99977, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99978, "")
-//BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS (iau2000, 99979, "")
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}}} // namespace boost::geometry::projections
-
-
-#endif
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/aasincos.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/aasincos.hpp
deleted file mode 100644
index 4678029bc05..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/aasincos.hpp
+++ /dev/null
@@ -1,114 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_AASINCOS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_AASINCOS_HPP
-
-
-#include <cmath>
-
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-namespace detail
-{
-
-namespace aasincos
-{
- template <typename T>
- inline T ONE_TOL() { return 1.00000000000001; }
- //template <typename T>
- //inline T TOL() { return 0.000000001; }
- template <typename T>
- inline T ATOL() { return 1e-50; }
-}
-
-template <typename T>
-inline T aasin(T const& v)
-{
- T av = 0;
-
- if ((av = geometry::math::abs(v)) >= 1.0)
- {
- if (av > aasincos::ONE_TOL<T>())
- {
- BOOST_THROW_EXCEPTION( projection_exception(-19) );
- }
- return (v < 0.0 ? -geometry::math::half_pi<T>() : geometry::math::half_pi<T>());
- }
-
- return asin(v);
-}
-
-template <typename T>
-inline T aacos(T const& v)
-{
- T av = 0;
-
- if ((av = geometry::math::abs(v)) >= 1.0)
- {
- if (av > aasincos::ONE_TOL<T>())
- {
- BOOST_THROW_EXCEPTION( projection_exception(-19) );
- }
- return (v < 0.0 ? geometry::math::pi<T>() : 0.0);
- }
-
- return acos(v);
-}
-
-template <typename T>
-inline T asqrt(T const& v)
-{
- return ((v <= 0) ? 0 : sqrt(v));
-}
-
-template <typename T>
-inline T aatan2(T const& n, T const& d)
-{
- return ((geometry::math::abs(n) < aasincos::ATOL<T>()
- && geometry::math::abs(d) < aasincos::ATOL<T>()) ? 0.0 : atan2(n, d));
-}
-
-
-} // namespace detail
-
-
-}}} // namespace boost::geometry::projections
-
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_AASINCOS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/adjlon.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/adjlon.hpp
deleted file mode 100644
index 7f0c9ac4ca0..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/adjlon.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_ADJLON_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_ADJLON_HPP
-
-#include <boost/math/constants/constants.hpp>
-#include <boost/geometry/util/math.hpp>
-
-namespace boost { namespace geometry { namespace projections
-{
-
-namespace detail
-{
-
-/* reduce argument to range +/- PI */
-template <typename T>
-inline T adjlon (T lon)
-{
- if (geometry::math::abs(lon) <= boost::math::constants::pi<T>())
- {
- return lon;
- }
-
- /* adjust to 0..2pi rad */
- lon += boost::math::constants::pi<T>();
- /* remove integral # of 'revolutions'*/
- lon -= boost::math::constants::two_pi<T>() *
- std::floor(lon / boost::math::constants::two_pi<T>());
- /* adjust back to -pi..pi rad */
- lon -= boost::math::constants::pi<T>();
-
- return lon;
-}
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_ADJLON_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/base_dynamic.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/base_dynamic.hpp
deleted file mode 100644
index 3979c34300b..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/base_dynamic.hpp
+++ /dev/null
@@ -1,151 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_IMPL_BASE_DYNAMIC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_BASE_DYNAMIC_HPP
-
-#include <string>
-
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-
-namespace boost { namespace geometry { namespace projections
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-/*!
- \brief projection virtual base class
- \details class containing virtual methods
- \ingroup projection
- \tparam CT calculation type
- \tparam P parameters type
-*/
-template <typename CT, typename P>
-class base_v
-{
-public :
- /// Forward projection, from Latitude-Longitude to Cartesian
- template <typename LL, typename XY>
- inline bool forward(LL const& lp, XY& xy) const
- {
- try
- {
- pj_fwd(*this, this->params(), lp, xy);
- return true;
- }
- catch (...)
- {
- return false;
- }
- }
-
- /// Inverse projection, from Cartesian to Latitude-Longitude
- template <typename LL, typename XY>
- inline bool inverse(XY const& xy, LL& lp) const
- {
- try
- {
- pj_inv(*this, this->params(), xy, lp);
- return true;
- }
- catch (projection_not_invertible_exception &)
- {
- BOOST_RETHROW
- }
- catch (...)
- {
- return false;
- }
- }
-
- /// Forward projection using lon / lat and x / y separately
- virtual void fwd(CT& lp_lon, CT& lp_lat, CT& xy_x, CT& xy_y) const = 0;
-
- /// Inverse projection using x / y and lon / lat
- virtual void inv(CT& xy_x, CT& xy_y, CT& lp_lon, CT& lp_lat) const = 0;
-
- /// Returns name of projection
- virtual std::string name() const = 0;
-
- /// Returns parameters of projection
- virtual P const& params() const = 0;
-
- /// Returns mutable parameters of projection
- virtual P& mutable_params() = 0;
-
- virtual ~base_v() {}
-};
-
-// Base-virtual-forward
-template <typename Prj, typename CT, typename P>
-class base_v_f : public base_v<CT, P>
-{
-public:
- base_v_f(P const& params)
- : m_proj(params)
- {}
-
- template <typename ProjP>
- base_v_f(P const& params, ProjP const& proj_params)
- : m_proj(params, proj_params)
- {}
-
- virtual void fwd(CT& lp_lon, CT& lp_lat, CT& xy_x, CT& xy_y) const
- {
- m_proj.fwd(lp_lon, lp_lat, xy_x, xy_y);
- }
-
- virtual void inv(CT& , CT& , CT& , CT& ) const
- {
- BOOST_THROW_EXCEPTION(projection_not_invertible_exception(params().name));
- }
-
- virtual std::string name() const { return m_proj.name(); }
-
- virtual P const& params() const { return m_proj.params(); }
-
- virtual P& mutable_params() { return m_proj.mutable_params(); }
-
-protected:
- Prj m_proj;
-};
-
-// Base-virtual-forward/inverse
-template <typename Prj, typename CT, typename P>
-class base_v_fi : public base_v_f<Prj, CT, P>
-{
- typedef base_v_f<Prj, CT, P> base_t;
-
-public:
- base_v_fi(P const& params)
- : base_t(params)
- {}
-
- template <typename ProjP>
- base_v_fi(P const& params, ProjP const& proj_params)
- : base_t(params, proj_params)
- {}
-
- virtual void inv(CT& xy_x, CT& xy_y, CT& lp_lon, CT& lp_lat) const
- {
- this->m_proj.inv(xy_x, xy_y, lp_lon, lp_lat);
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_BASE_DYNAMIC_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/base_static.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/base_static.hpp
deleted file mode 100644
index aa205bcee50..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/base_static.hpp
+++ /dev/null
@@ -1,139 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_IMPL_BASE_STATIC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_BASE_STATIC_HPP
-
-#if defined(_MSC_VER)
-// For CRTP, *this is acceptable in constructor -> turn warning off
-#pragma warning( disable : 4355 )
-#endif // defined(_MSC_VER)
-
-
-#include <string>
-
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/srs/projections/impl/pj_fwd.hpp>
-#include <boost/geometry/srs/projections/impl/pj_inv.hpp>
-
-#include <boost/mpl/assert.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Prj, typename CSTag, typename BGP, typename CT, typename P>
-struct static_projection_type
-{
- BOOST_MPL_ASSERT_MSG((false),
- NOT_IMPLEMENTED_FOR_THIS_PROJECTION_OR_CSTAG,
- (Prj, CSTag));
-};
-
-#define BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(PROJ, P_SPHERE, P_SPHEROID) \
-template <typename BGP, typename CT, typename P> \
-struct static_projection_type<PROJ, srs_sphere_tag, BGP, CT, P> \
-{ \
- typedef P_SPHERE<CT, P> type; \
-}; \
-template <typename BGP, typename CT, typename P> \
-struct static_projection_type<PROJ, srs_spheroid_tag, BGP, CT, P> \
-{ \
- typedef P_SPHEROID<CT, P> type; \
-}; \
-
-// Base-template-forward
-template <typename Prj, typename CT, typename P>
-struct base_t_f
-{
-public:
-
- inline base_t_f(Prj const& prj, P const& params)
- : m_par(params), m_prj(prj)
- {}
-
- inline P const& params() const { return m_par; }
-
- inline P& mutable_params() { return m_par; }
-
- template <typename LL, typename XY>
- inline bool forward(LL const& lp, XY& xy) const
- {
- try
- {
- pj_fwd(m_prj, m_par, lp, xy);
- return true;
- }
- catch(...)
- {
- return false;
- }
- }
-
- template <typename XY, typename LL>
- inline bool inverse(XY const& , LL& ) const
- {
- BOOST_MPL_ASSERT_MSG((false),
- PROJECTION_IS_NOT_INVERTABLE,
- (Prj));
- return false;
- }
-
- inline std::string name() const
- {
- return this->m_par.name;
- }
-
-protected:
-
- P m_par;
- const Prj& m_prj;
-};
-
-// Base-template-forward/inverse
-template <typename Prj, typename CT, typename P>
-struct base_t_fi : public base_t_f<Prj, CT, P>
-{
-public :
- inline base_t_fi(Prj const& prj, P const& params)
- : base_t_f<Prj, CT, P>(prj, params)
- {}
-
- template <typename XY, typename LL>
- inline bool inverse(XY const& xy, LL& lp) const
- {
- try
- {
- pj_inv(this->m_prj, this->m_par, xy, lp);
- return true;
- }
- catch(...)
- {
- return false;
- }
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-}}} // namespace boost::geometry::projections
-
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_BASE_STATIC_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/dms_parser.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/dms_parser.hpp
deleted file mode 100644
index bbecc9b1a27..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/dms_parser.hpp
+++ /dev/null
@@ -1,278 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_SRS_PROJECTIONS_IMPL_DMS_PARSER_HPP
-#define BOOST_GEOMETRY_SRS_PROJECTIONS_IMPL_DMS_PARSER_HPP
-
-// This file is totally revised from PROJ4 dmstor.c
-
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <string>
-
-#include <boost/static_assert.hpp>
-
-#if !defined(BOOST_GEOMETRY_NO_LEXICAL_CAST)
-#include <boost/lexical_cast.hpp>
-#endif // !defined(BOOST_GEOMETRY_NO_LEXICAL_CAST)
-
-#include <boost/algorithm/string.hpp>
-
-#include <boost/config.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-namespace boost { namespace geometry { namespace projections
-{
-
-namespace detail
-{
-
-template <typename T>
-struct dms_result
-{
- enum axis_selector {axis_lat = 1, axis_lon = 0};
-
- private :
- T m_angle;
- axis_selector m_axis;
-
- public :
-
- explicit dms_result(T const& v, axis_selector ax)
- : m_angle(v)
- , m_axis(ax)
- {}
-
- inline axis_selector axis() const { return m_axis; }
-
- inline T angle() const { return m_angle; }
-
- template <typename CH, typename TR>
- inline friend std::basic_ostream<CH, TR>& operator<<(std::basic_ostream<CH, TR>& os,
- const dms_result& d)
- {
- os << d.m_angle;
- return os;
- }
-
-};
-
-
-template <typename T
- , bool as_radian = true
- , char N = 'N', char E = 'E', char S = 'S', char W = 'W' // translatable
- , char MIN = '\'', char SEC = '"' // other char's possible
- , char D = 'D', char R = 'R' // degree sign might be small o
- >
-struct dms_parser
-{
-
-
- // Question from Barend: can we compile-time select that it is case-sensitive/case-insensitive?
- // We have to change the switch then -> specializations
-
- // For now: make it (compile-time) case sensitive
- static const int diff = 'a' - 'A';
-#ifndef __GNUC__
- BOOST_STATIC_ASSERT((diff > 0)); // make sure we've the right assumption. GCC does not accept this here.
-#endif
- static const char n_alter = N <= 'Z' ? N + diff : N - diff;
- static const char e_alter = E <= 'Z' ? E + diff : E - diff;
- static const char s_alter = S <= 'Z' ? S + diff : S - diff;
- static const char w_alter = W <= 'Z' ? W + diff : W - diff;
-
- static const char r_alter = R <= 'Z' ? R + diff : R - diff;
-
- // degree is normally D (proj4) but might be superscript o
- // Note d_alter is not correct then, so map it to NULL now, guarded by the while
- static const char d_alter =
- ((D >= 'A' && D <= 'Z') || (D >= 'a' && D <= 'z')) ? (D <= 'Z' ? D + diff : D - diff) : '\0';
-
-
- struct dms_value
- {
- T dms[3];
- bool has_dms[3];
-
- dms_value()
-#ifndef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
- : dms{0, 0, 0}
- , has_dms{false, false, false}
-#endif
- {
-#ifdef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
- std::fill(dms, dms + 3, T(0));
- std::fill(has_dms, has_dms + 3, false);
-#endif
- }
- };
-
-
- template <size_t I>
- static inline void assign_dms(dms_value& dms, std::string& value, bool& has_value)
- {
-#if !defined(BOOST_GEOMETRY_NO_LEXICAL_CAST)
- dms.dms[I] = boost::lexical_cast<T>(value.c_str());
-#else // !defined(BOOST_GEOMETRY_NO_LEXICAL_CAST)
- dms.dms[I] = std::atof(value.c_str());
-#endif // !defined(BOOST_GEOMETRY_NO_LEXICAL_CAST)
- dms.has_dms[I] = true;
- has_value = false;
- value.clear();
- }
-
- static inline void process(dms_value& dms, std::string& value, bool& has_value)
- {
- if (has_value)
- {
- // Assign last one, sequentially
- if (! dms.has_dms[0]) assign_dms<0>(dms, value, has_value);
- else if (! dms.has_dms[1]) assign_dms<1>(dms, value, has_value);
- else if (! dms.has_dms[2]) assign_dms<2>(dms, value, has_value);
- }
- }
-
- dms_result<T> apply(std::string const& is) const
- {
- return apply(is.c_str());
- }
-
- dms_result<T> apply(const char* is) const
- {
- dms_value dms;
- bool has_value = false;
- std::string value;
-
- T factor = 1.0; // + denotes N/E values, -1 denotes S/W values
- typename dms_result<T>::axis_selector axis = dms_result<T>::axis_lon; // true denotes N/S values
- bool in_radian = false; // true denotes values as "0.1R"
-
- while(*is)
- {
- switch(*is)
- {
- case '-' :
- if (! has_value && ! dms.has_dms[0])
- {
- factor = -factor;
- }
- break;
- case N :
- case n_alter :
- axis = dms_result<T>::axis_lat;
- break;
- case S :
- case s_alter :
- axis = dms_result<T>::axis_lat;
- factor = -factor;
- break;
- case E :
- case e_alter :
- axis = dms_result<T>::axis_lon;
- break;
- case W :
- case w_alter :
- axis = dms_result<T>::axis_lon;
- factor = -factor;
- break;
- case D :
- case d_alter :
- if (! dms.has_dms[0] && has_value)
- {
- assign_dms<0>(dms, value, has_value);
- }
- break;
- case R :
- case r_alter :
- if (! dms.has_dms[0] && has_value)
- {
- // specified value is in radian!
- in_radian = true;
- assign_dms<0>(dms, value, has_value);
- }
- break;
- case MIN:
- if (! dms.has_dms[1] && has_value)
- {
- assign_dms<1>(dms, value, has_value);
- }
- break;
- case SEC :
- if (! dms.has_dms[2] && has_value)
- {
- assign_dms<2>(dms, value, has_value);
- }
- break;
- case ' ' :
- case '\t' :
- case '\n' :
- process(dms, value, has_value);
- break;
- default :
- value += *is;
- has_value = true;
- break;
- }
- is++;
- }
-
- // Assign last one, if any
- process(dms, value, has_value);
-
- T const d2r = math::d2r<T>();
- T const r2d = math::r2d<T>();
-
- return dms_result<T>(factor *
- (in_radian && as_radian
- ? dms.dms[0]
- : in_radian && ! as_radian
- ? dms.dms[0] * r2d
- : ! in_radian && as_radian
- ? dms.dms[0] * d2r + dms.dms[1] * d2r / 60.0 + dms.dms[2] * d2r / 3600.0
- : dms.dms[0] + dms.dms[1] / 60.0 + dms.dms[2] / 3600.0)
- , axis);
- }
-};
-
-
-} // namespace detail
-
-
-}}} // namespace boost::geometry::projections
-
-
-#endif // BOOST_GEOMETRY_SRS_PROJECTIONS_IMPL_DMS_PARSER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/factory_entry.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/factory_entry.hpp
deleted file mode 100644
index 7c587af5b63..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/factory_entry.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_IMPL_FACTORY_ENTRY_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_FACTORY_ENTRY_HPP
-
-#include <string>
-
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-
-namespace boost { namespace geometry { namespace projections
-{
-
-namespace detail
-{
-
-// forward declaration needed by some projections
-template <typename CT, typename Parameters>
-class factory;
-
-template <typename CT, typename P>
-class factory_entry
-{
-public:
-
- virtual ~factory_entry() {}
- virtual base_v<CT, P>* create_new(P const& par) const = 0;
-};
-
-template <typename CT, typename P>
-class base_factory
-{
-public:
-
- virtual ~base_factory() {}
- virtual void add_to_factory(std::string const& name, factory_entry<CT, P>* sub) = 0;
-};
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_FACTORY_ENTRY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/function_overloads.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/function_overloads.hpp
deleted file mode 100644
index 43d33c6beab..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/function_overloads.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_IMPL_FUNCTION_OVERLOADS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_FUNCTION_OVERLOADS_HPP
-
-#include <cmath>
-
-namespace boost { namespace geometry { namespace projections
-{
-
-// Functions to resolve ambiguity when compiling with coordinates of different types
-/*
-template <typename T>
-inline T atan2(T const& a, T const& b)
-{
- using std::atan2;
- return atan2(a, b);
-}
-template <typename T>
-inline T pow(T const& a, T const& b)
-{
- using std::pow;
- return pow(a, b);
-}
-*/
-
-template <typename T>
-inline int int_floor(T const& f)
-{
- using std::floor;
- return int(floor(f));
-}
-
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_FUNCTION_OVERLOADS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/geocent.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/geocent.hpp
deleted file mode 100644
index 8ae2f393cee..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/geocent.hpp
+++ /dev/null
@@ -1,487 +0,0 @@
-// Boost.Geometry
-// This file is manually converted from PROJ4
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// This file was converted to Geometry Library by Adam Wulkiewicz
-
-// Original copyright notice:
-
-/***************************************************************************/
-/* RSC IDENTIFIER: GEOCENTRIC
- *
- * ABSTRACT
- *
- * This component provides conversions between Geodetic coordinates (latitude,
- * longitude in radians and height in meters) and Geocentric coordinates
- * (X, Y, Z) in meters.
- *
- * ERROR HANDLING
- *
- * This component checks parameters for valid values. If an invalid value
- * is found, the error code is combined with the current error code using
- * the bitwise or. This combining allows multiple error codes to be
- * returned. The possible error codes are:
- *
- * GEOCENT_NO_ERROR : No errors occurred in function
- * GEOCENT_LAT_ERROR : Latitude out of valid range
- * (-90 to 90 degrees)
- * GEOCENT_LON_ERROR : Longitude out of valid range
- * (-180 to 360 degrees)
- * GEOCENT_A_ERROR : Semi-major axis lessthan or equal to zero
- * GEOCENT_B_ERROR : Semi-minor axis lessthan or equal to zero
- * GEOCENT_A_LESS_B_ERROR : Semi-major axis less than semi-minor axis
- *
- *
- * REUSE NOTES
- *
- * GEOCENTRIC is intended for reuse by any application that performs
- * coordinate conversions between geodetic coordinates and geocentric
- * coordinates.
- *
- *
- * REFERENCES
- *
- * An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion,
- * Ralph Toms, February 1996 UCRL-JC-123138.
- *
- * Further information on GEOCENTRIC can be found in the Reuse Manual.
- *
- * GEOCENTRIC originated from : U.S. Army Topographic Engineering Center
- * Geospatial Information Division
- * 7701 Telegraph Road
- * Alexandria, VA 22310-3864
- *
- * LICENSES
- *
- * None apply to this component.
- *
- * RESTRICTIONS
- *
- * GEOCENTRIC has no restrictions.
- *
- * ENVIRONMENT
- *
- * GEOCENTRIC was tested and certified in the following environments:
- *
- * 1. Solaris 2.5 with GCC version 2.8.1
- * 2. Windows 95 with MS Visual C++ version 6
- *
- * MODIFICATIONS
- *
- * Date Description
- * ---- -----------
- * 25-02-97 Original Code
- *
- */
-
-
-#ifndef BOOST_GEOMETRY_SRS_PROJECTIONS_IMPL_GEOCENT_HPP
-#define BOOST_GEOMETRY_SRS_PROJECTIONS_IMPL_GEOCENT_HPP
-
-
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-namespace detail
-{
-
-/***************************************************************************/
-/*
- * DEFINES
- */
-static const long GEOCENT_NO_ERROR = 0x0000;
-static const long GEOCENT_LAT_ERROR = 0x0001;
-static const long GEOCENT_LON_ERROR = 0x0002;
-static const long GEOCENT_A_ERROR = 0x0004;
-static const long GEOCENT_B_ERROR = 0x0008;
-static const long GEOCENT_A_LESS_B_ERROR = 0x0010;
-
-template <typename T>
-struct GeocentricInfo
-{
- T Geocent_a; /* Semi-major axis of ellipsoid in meters */
- T Geocent_b; /* Semi-minor axis of ellipsoid */
- T Geocent_a2; /* Square of semi-major axis */
- T Geocent_b2; /* Square of semi-minor axis */
- T Geocent_e2; /* Eccentricity squared */
- T Geocent_ep2; /* 2nd eccentricity squared */
-};
-
-template <typename T>
-inline T COS_67P5()
-{
- /*return 0.38268343236508977*/;
- return cos(T(67.5) * math::d2r<T>()); /* cosine of 67.5 degrees */
-}
-template <typename T>
-inline T AD_C()
-{
- return 1.0026000; /* Toms region 1 constant */
-}
-
-
-/***************************************************************************/
-/*
- * FUNCTIONS
- */
-
-template <typename T>
-inline long pj_Set_Geocentric_Parameters (GeocentricInfo<T> & gi, T const& a, T const& b)
-
-{ /* BEGIN Set_Geocentric_Parameters */
-/*
- * The function Set_Geocentric_Parameters receives the ellipsoid parameters
- * as inputs and sets the corresponding state variables.
- *
- * a : Semi-major axis, in meters. (input)
- * b : Semi-minor axis, in meters. (input)
- */
- long Error_Code = GEOCENT_NO_ERROR;
-
- if (a <= 0.0)
- Error_Code |= GEOCENT_A_ERROR;
- if (b <= 0.0)
- Error_Code |= GEOCENT_B_ERROR;
- if (a < b)
- Error_Code |= GEOCENT_A_LESS_B_ERROR;
- if (!Error_Code)
- {
- gi.Geocent_a = a;
- gi.Geocent_b = b;
- gi.Geocent_a2 = a * a;
- gi.Geocent_b2 = b * b;
- gi.Geocent_e2 = (gi.Geocent_a2 - gi.Geocent_b2) / gi.Geocent_a2;
- gi.Geocent_ep2 = (gi.Geocent_a2 - gi.Geocent_b2) / gi.Geocent_b2;
- }
- return (Error_Code);
-} /* END OF Set_Geocentric_Parameters */
-
-
-template <typename T>
-inline void pj_Get_Geocentric_Parameters (GeocentricInfo<T> const& gi,
- T & a,
- T & b)
-{ /* BEGIN Get_Geocentric_Parameters */
-/*
- * The function Get_Geocentric_Parameters returns the ellipsoid parameters
- * to be used in geocentric coordinate conversions.
- *
- * a : Semi-major axis, in meters. (output)
- * b : Semi-minor axis, in meters. (output)
- */
-
- a = gi.Geocent_a;
- b = gi.Geocent_b;
-} /* END OF Get_Geocentric_Parameters */
-
-
-template <typename T>
-inline long pj_Convert_Geodetic_To_Geocentric (GeocentricInfo<T> const& gi,
- T Longitude, T Latitude, T Height,
- T & X, T & Y, T & Z)
-{ /* BEGIN Convert_Geodetic_To_Geocentric */
-/*
- * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates
- * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),
- * according to the current ellipsoid parameters.
- *
- * Latitude : Geodetic latitude in radians (input)
- * Longitude : Geodetic longitude in radians (input)
- * Height : Geodetic height, in meters (input)
- * X : Calculated Geocentric X coordinate, in meters (output)
- * Y : Calculated Geocentric Y coordinate, in meters (output)
- * Z : Calculated Geocentric Z coordinate, in meters (output)
- *
- */
- long Error_Code = GEOCENT_NO_ERROR;
- T Rn; /* Earth radius at location */
- T Sin_Lat; /* sin(Latitude) */
- T Sin2_Lat; /* Square of sin(Latitude) */
- T Cos_Lat; /* cos(Latitude) */
-
- static const T PI = math::pi<T>();
- static const T PI_OVER_2 = math::half_pi<T>();
-
- /*
- ** Don't blow up if Latitude is just a little out of the value
- ** range as it may just be a rounding issue. Also removed longitude
- ** test, it should be wrapped by cos() and sin(). NFW for PROJ.4, Sep/2001.
- */
- if( Latitude < -PI_OVER_2 && Latitude > -1.001 * PI_OVER_2 )
- Latitude = -PI_OVER_2;
- else if( Latitude > PI_OVER_2 && Latitude < 1.001 * PI_OVER_2 )
- Latitude = PI_OVER_2;
- else if ((Latitude < -PI_OVER_2) || (Latitude > PI_OVER_2))
- { /* Latitude out of range */
- Error_Code |= GEOCENT_LAT_ERROR;
- }
-
- if (!Error_Code)
- { /* no errors */
- if (Longitude > PI)
- Longitude -= (2*PI);
- Sin_Lat = sin(Latitude);
- Cos_Lat = cos(Latitude);
- Sin2_Lat = Sin_Lat * Sin_Lat;
- Rn = gi.Geocent_a / (sqrt(1.0e0 - gi.Geocent_e2 * Sin2_Lat));
- X = (Rn + Height) * Cos_Lat * cos(Longitude);
- Y = (Rn + Height) * Cos_Lat * sin(Longitude);
- Z = ((Rn * (1 - gi.Geocent_e2)) + Height) * Sin_Lat;
- }
- return (Error_Code);
-} /* END OF Convert_Geodetic_To_Geocentric */
-
-/*
- * The function Convert_Geocentric_To_Geodetic converts geocentric
- * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude,
- * and height), according to the current ellipsoid parameters.
- *
- * X : Geocentric X coordinate, in meters. (input)
- * Y : Geocentric Y coordinate, in meters. (input)
- * Z : Geocentric Z coordinate, in meters. (input)
- * Latitude : Calculated latitude value in radians. (output)
- * Longitude : Calculated longitude value in radians. (output)
- * Height : Calculated height value, in meters. (output)
- */
-
-#define BOOST_GEOMETRY_PROJECTIONS_USE_ITERATIVE_METHOD
-
-template <typename T>
-inline void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo<T> const& gi,
- T X, T Y, T Z,
- T & Longitude, T & Latitude, T & Height)
-{ /* BEGIN Convert_Geocentric_To_Geodetic */
-
- static const T PI_OVER_2 = math::half_pi<T>();
-
-#if !defined(BOOST_GEOMETRY_PROJECTIONS_USE_ITERATIVE_METHOD)
-
- static const T COS_67P5 = detail::COS_67P5<T>();
- static const T AD_C = detail::AD_C<T>();
-
-/*
- * The method used here is derived from 'An Improved Algorithm for
- * Geocentric to Geodetic Coordinate Conversion', by Ralph Toms, Feb 1996
- */
-
-/* Note: Variable names follow the notation used in Toms, Feb 1996 */
-
- T W; /* distance from Z axis */
- T W2; /* square of distance from Z axis */
- T T0; /* initial estimate of vertical component */
- T T1; /* corrected estimate of vertical component */
- T S0; /* initial estimate of horizontal component */
- T S1; /* corrected estimate of horizontal component */
- T Sin_B0; /* sin(B0), B0 is estimate of Bowring aux variable */
- T Sin3_B0; /* cube of sin(B0) */
- T Cos_B0; /* cos(B0) */
- T Sin_p1; /* sin(phi1), phi1 is estimated latitude */
- T Cos_p1; /* cos(phi1) */
- T Rn; /* Earth radius at location */
- T Sum; /* numerator of cos(phi1) */
- bool At_Pole; /* indicates location is in polar region */
-
- At_Pole = false;
- if (X != 0.0)
- {
- Longitude = atan2(Y,X);
- }
- else
- {
- if (Y > 0)
- {
- Longitude = PI_OVER_2;
- }
- else if (Y < 0)
- {
- Longitude = -PI_OVER_2;
- }
- else
- {
- At_Pole = true;
- Longitude = 0.0;
- if (Z > 0.0)
- { /* north pole */
- Latitude = PI_OVER_2;
- }
- else if (Z < 0.0)
- { /* south pole */
- Latitude = -PI_OVER_2;
- }
- else
- { /* center of earth */
- Latitude = PI_OVER_2;
- Height = -Geocent_b;
- return;
- }
- }
- }
- W2 = X*X + Y*Y;
- W = sqrt(W2);
- T0 = Z * AD_C;
- S0 = sqrt(T0 * T0 + W2);
- Sin_B0 = T0 / S0;
- Cos_B0 = W / S0;
- Sin3_B0 = Sin_B0 * Sin_B0 * Sin_B0;
- T1 = Z + gi.Geocent_b * gi.Geocent_ep2 * Sin3_B0;
- Sum = W - gi.Geocent_a * gi.Geocent_e2 * Cos_B0 * Cos_B0 * Cos_B0;
- S1 = sqrt(T1*T1 + Sum * Sum);
- Sin_p1 = T1 / S1;
- Cos_p1 = Sum / S1;
- Rn = gi.Geocent_a / sqrt(1.0 - gi.Geocent_e2 * Sin_p1 * Sin_p1);
- if (Cos_p1 >= COS_67P5)
- {
- Height = W / Cos_p1 - Rn;
- }
- else if (Cos_p1 <= -COS_67P5)
- {
- Height = W / -Cos_p1 - Rn;
- }
- else
- {
- Height = Z / Sin_p1 + Rn * (gi.Geocent_e2 - 1.0);
- }
- if (At_Pole == false)
- {
- Latitude = atan(Sin_p1 / Cos_p1);
- }
-#else /* defined(BOOST_GEOMETRY_PROJECTIONS_USE_ITERATIVE_METHOD) */
-/*
-* Reference...
-* ============
-* Wenzel, H.-G.(1985): Hochauflösende Kugelfunktionsmodelle für
-* das Gravitationspotential der Erde. Wiss. Arb. Univ. Hannover
-* Nr. 137, p. 130-131.
-
-* Programmed by GGA- Leibniz-Institute of Applied Geophysics
-* Stilleweg 2
-* D-30655 Hannover
-* Federal Republic of Germany
-* Internet: www.gga-hannover.de
-*
-* Hannover, March 1999, April 2004.
-* see also: comments in statements
-* remarks:
-* Mathematically exact and because of symmetry of rotation-ellipsoid,
-* each point (X,Y,Z) has at least two solutions (Latitude1,Longitude1,Height1) and
-* (Latitude2,Longitude2,Height2). Is point=(0.,0.,Z) (P=0.), so you get even
-* four solutions, every two symmetrical to the semi-minor axis.
-* Here Height1 and Height2 have at least a difference in order of
-* radius of curvature (e.g. (0,0,b)=> (90.,0.,0.) or (-90.,0.,-2b);
-* (a+100.)*(sqrt(2.)/2.,sqrt(2.)/2.,0.) => (0.,45.,100.) or
-* (0.,225.,-(2a+100.))).
-* The algorithm always computes (Latitude,Longitude) with smallest |Height|.
-* For normal computations, that means |Height|<10000.m, algorithm normally
-* converges after to 2-3 steps!!!
-* But if |Height| has the amount of length of ellipsoid's axis
-* (e.g. -6300000.m), algorithm needs about 15 steps.
-*/
-
-/* local definitions and variables */
-/* end-criterium of loop, accuracy of sin(Latitude) */
-static const T genau = 1.E-12;
-static const T genau2 = (genau*genau);
-static const int maxiter = 30;
-
- T P; /* distance between semi-minor axis and location */
- T RR; /* distance between center and location */
- T CT; /* sin of geocentric latitude */
- T ST; /* cos of geocentric latitude */
- T RX;
- T RK;
- T RN; /* Earth radius at location */
- T CPHI0; /* cos of start or old geodetic latitude in iterations */
- T SPHI0; /* sin of start or old geodetic latitude in iterations */
- T CPHI; /* cos of searched geodetic latitude */
- T SPHI; /* sin of searched geodetic latitude */
- T SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */
- int iter; /* # of continuous iteration, max. 30 is always enough (s.a.) */
-
- P = sqrt(X*X+Y*Y);
- RR = sqrt(X*X+Y*Y+Z*Z);
-
-/* special cases for latitude and longitude */
- if (P/gi.Geocent_a < genau) {
-
-/* special case, if P=0. (X=0., Y=0.) */
- Longitude = 0.;
-
-/* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis
- * of ellipsoid (=center of mass), Latitude becomes PI/2 */
- if (RR/gi.Geocent_a < genau) {
- Latitude = PI_OVER_2;
- Height = -gi.Geocent_b;
- return ;
-
- }
- }
- else {
-/* ellipsoidal (geodetic) longitude
- * interval: -PI < Longitude <= +PI */
- Longitude=atan2(Y,X);
- }
-
-/* --------------------------------------------------------------
- * Following iterative algorithm was developed by
- * "Institut für Erdmessung", University of Hannover, July 1988.
- * Internet: www.ife.uni-hannover.de
- * Iterative computation of CPHI,SPHI and Height.
- * Iteration of CPHI and SPHI to 10**-12 radian resp.
- * 2*10**-7 arcsec.
- * --------------------------------------------------------------
- */
- CT = Z/RR;
- ST = P/RR;
- RX = 1.0/sqrt(1.0-gi.Geocent_e2*(2.0-gi.Geocent_e2)*ST*ST);
- CPHI0 = ST*(1.0-gi.Geocent_e2)*RX;
- SPHI0 = CT*RX;
- iter = 0;
-
-/* loop to find sin(Latitude) resp. Latitude
- * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */
- do
- {
- iter++;
- RN = gi.Geocent_a/sqrt(1.0-gi.Geocent_e2*SPHI0*SPHI0);
-
-/* ellipsoidal (geodetic) height */
- Height = P*CPHI0+Z*SPHI0-RN*(1.0-gi.Geocent_e2*SPHI0*SPHI0);
-
- RK = gi.Geocent_e2*RN/(RN+Height);
- RX = 1.0/sqrt(1.0-RK*(2.0-RK)*ST*ST);
- CPHI = ST*(1.0-RK)*RX;
- SPHI = CT*RX;
- SDPHI = SPHI*CPHI0-CPHI*SPHI0;
- CPHI0 = CPHI;
- SPHI0 = SPHI;
- }
- while (SDPHI*SDPHI > genau2 && iter < maxiter);
-
-/* ellipsoidal (geodetic) latitude */
- Latitude=atan(SPHI/fabs(CPHI));
-
- return;
-#endif /* defined(BOOST_GEOMETRY_PROJECTIONS_USE_ITERATIVE_METHOD) */
-} /* END OF Convert_Geocentric_To_Geodetic */
-
-
-} // namespace detail
-
-
-}}} // namespace boost::geometry::projections
-
-
-#endif // BOOST_GEOMETRY_SRS_PROJECTIONS_IMPL_GEOCENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_auth.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_auth.hpp
deleted file mode 100644
index 899d0b25b17..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_auth.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_AUTH_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_AUTH_HPP
-
-#include <cassert>
-#include <cmath>
-
-#include <boost/geometry/core/assert.hpp>
-
-namespace boost { namespace geometry { namespace projections {
-
-namespace detail {
-
-static const int APA_SIZE = 3;
-
-/* determine latitude from authalic latitude */
-template <typename T>
-inline bool pj_authset(T const& es, T* APA)
-{
- BOOST_GEOMETRY_ASSERT(0 != APA);
-
- static const T P00 = .33333333333333333333;
- static const T P01 = .17222222222222222222;
- static const T P02 = .10257936507936507936;
- static const T P10 = .06388888888888888888;
- static const T P11 = .06640211640211640211;
- static const T P20 = .01641501294219154443;
-
- T t = 0;
-
- // if (APA = (double *)pj_malloc(APA_SIZE * sizeof(double)))
- {
- APA[0] = es * P00;
- t = es * es;
- APA[0] += t * P01;
- APA[1] = t * P10;
- t *= es;
- APA[0] += t * P02;
- APA[1] += t * P11;
- APA[2] = t * P20;
- }
- return true;
-}
-
-template <typename T>
-inline T pj_authlat(T const& beta, const T* APA)
-{
- BOOST_GEOMETRY_ASSERT(0 != APA);
-
- T const t = beta + beta;
-
- return(beta + APA[0] * sin(t) + APA[1] * sin(t + t) + APA[2] * sin(t + t + t));
-}
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_AUTH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_datum_set.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_datum_set.hpp
deleted file mode 100644
index 5301dc7cfeb..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_datum_set.hpp
+++ /dev/null
@@ -1,213 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_DATUM_SET_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_DATUM_SET_HPP
-
-
-#include <string>
-#include <vector>
-
-#include <boost/algorithm/string.hpp>
-
-#include <boost/geometry/srs/projections/exception.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/pj_datums.hpp>
-#include <boost/geometry/srs/projections/impl/pj_param.hpp>
-#include <boost/geometry/srs/projections/par4.hpp>
-#include <boost/geometry/srs/projections/proj4.hpp>
-
-
-namespace boost { namespace geometry { namespace projections {
-
-namespace detail {
-
-
-/* SEC_TO_RAD = Pi/180/3600 */
-template <typename T>
-inline T SEC_TO_RAD() { return 4.84813681109535993589914102357e-6; }
-
-template <typename BGParams, typename T>
-inline void pj_datum_add_defn(BGParams const& , std::vector<pvalue<T> >& pvalues)
-{
- /* -------------------------------------------------------------------- */
- /* Is there a datum definition in the parameter list? If so, */
- /* add the defining values to the parameter list. Note that */
- /* this will append the ellipse definition as well as the */
- /* towgs84= and related parameters. It should also be pointed */
- /* out that the addition is permanent rather than temporary */
- /* like most other keyword expansion so that the ellipse */
- /* definition will last into the pj_ell_set() function called */
- /* after this one. */
- /* -------------------------------------------------------------------- */
- std::string name = pj_param(pvalues, "sdatum").s;
- if(! name.empty())
- {
- /* find the datum definition */
- const int n = sizeof(pj_datums) / sizeof(pj_datums[0]);
- int index = -1;
- for (int i = 0; i < n && index == -1; i++)
- {
- if(pj_datums[i].id == name)
- {
- index = i;
- }
- }
-
- if (index == -1)
- {
- BOOST_THROW_EXCEPTION( projection_exception(-9) );
- }
-
- if(! pj_datums[index].ellipse_id.empty())
- {
- std::string entry("ellps=");
- entry +=pj_datums[index].ellipse_id;
- pvalues.push_back(pj_mkparam<T>(entry));
- }
-
- if(! pj_datums[index].defn.empty())
- {
- pvalues.push_back(pj_mkparam<T>(pj_datums[index].defn));
- }
- }
-}
-
-template <BOOST_GEOMETRY_PROJECTIONS_DETAIL_TYPENAME_PX, typename T>
-inline void pj_datum_add_defn(srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX> const& /*bg_params*/,
- std::vector<pvalue<T> >& pvalues)
-{
- typedef srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX> bg_parameters_type;
- typedef typename srs::par4::detail::tuples_find_if
- <
- bg_parameters_type,
- //srs::par4::detail::is_datum
- srs::par4::detail::is_param_t<srs::par4::datum>::pred
- >::type datum_type;
- typedef typename srs::par4::detail::datum_traits
- <
- datum_type
- > datum_traits;
-
- // is unknown if datum parameter found but traits are not specialized
- static const bool not_set_or_known = boost::is_same<datum_type, void>::value
- || ! boost::is_same<typename datum_traits::ellps_type, void>::value;
- BOOST_MPL_ASSERT_MSG((not_set_or_known), UNKNOWN_DATUM, (bg_parameters_type));
-
- std::string defn = datum_traits::definition();
-
- if (! defn.empty())
- {
- pvalues.push_back(pj_mkparam<T>(defn));
- }
-}
-
-/************************************************************************/
-/* pj_datum_set() */
-/************************************************************************/
-
-template <typename BGParams, typename T>
-inline void pj_datum_set(BGParams const& bg_params, std::vector<pvalue<T> >& pvalues, parameters<T>& projdef)
-{
- static const T SEC_TO_RAD = detail::SEC_TO_RAD<T>();
-
- projdef.datum_type = PJD_UNKNOWN;
-
- pj_datum_add_defn(bg_params, pvalues);
-
-/* -------------------------------------------------------------------- */
-/* Check for nadgrids parameter. */
-/* -------------------------------------------------------------------- */
- std::string nadgrids = pj_param(pvalues, "snadgrids").s;
- std::string towgs84 = pj_param(pvalues, "stowgs84").s;
- if(! nadgrids.empty())
- {
- /* We don't actually save the value separately. It will continue
- to exist int he param list for use in pj_apply_gridshift.c */
-
- projdef.datum_type = PJD_GRIDSHIFT;
- }
-
-/* -------------------------------------------------------------------- */
-/* Check for towgs84 parameter. */
-/* -------------------------------------------------------------------- */
- else if(! towgs84.empty())
- {
- int parm_count = 0;
-
- int n = sizeof(projdef.datum_params) / sizeof(projdef.datum_params[0]);
-
- /* parse out the pvalues */
- std::vector<std::string> parm;
- boost::split(parm, towgs84, boost::is_any_of(" ,"));
- for (std::vector<std::string>::const_iterator it = parm.begin();
- it != parm.end() && parm_count < n;
- ++it)
- {
- projdef.datum_params[parm_count++] = atof(it->c_str());
- }
-
- if( projdef.datum_params[3] != 0.0
- || projdef.datum_params[4] != 0.0
- || projdef.datum_params[5] != 0.0
- || projdef.datum_params[6] != 0.0 )
- {
- projdef.datum_type = PJD_7PARAM;
-
- /* transform from arc seconds to radians */
- projdef.datum_params[3] *= SEC_TO_RAD;
- projdef.datum_params[4] *= SEC_TO_RAD;
- projdef.datum_params[5] *= SEC_TO_RAD;
- /* transform from parts per million to scaling factor */
- projdef.datum_params[6] =
- (projdef.datum_params[6]/1000000.0) + 1;
- }
- else
- {
- projdef.datum_type = PJD_3PARAM;
- }
-
- /* Note that pj_init() will later switch datum_type to
- PJD_WGS84 if shifts are all zero, and ellipsoid is WGS84 or GRS80 */
- }
-}
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_DATUM_SET_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_datums.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_datums.hpp
deleted file mode 100644
index 55da24a2ca5..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_datums.hpp
+++ /dev/null
@@ -1,112 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_DATUMS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_DATUMS_HPP
-
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-
-namespace boost { namespace geometry { namespace projections {
-
-namespace detail {
-
-/*
- * The ellipse code must match one from pj_ellps.c. The datum id should
- * be kept to 12 characters or less if possible. Use the official OGC
- * datum name for the comments if available.
- */
-
-static const PJ_DATUMS pj_datums[] =
-{
- /* id definition ellipse comments */
- /* -- ---------- ------- -------- */
- {"WGS84", "towgs84=0,0,0",
- "WGS84", ""},
-
- {"GGRS87", "towgs84=-199.87,74.79,246.62",
- "GRS80", "Greek_Geodetic_Reference_System_1987"},
-
- {"NAD83", "towgs84=0,0,0",
- "GRS80", "North_American_Datum_1983"},
-
- {"NAD27", "nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",
- "clrk66", "North_American_Datum_1927"},
-
- {"potsdam", "towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7",
- "bessel", "Potsdam Rauenberg 1950 DHDN"},
-
- {"carthage", "towgs84=-263.0,6.0,431.0",
- "clrk80ign", "Carthage 1934 Tunisia"},
-
- {"hermannskogel", "towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232",
- "bessel", "Hermannskogel"},
-
- {"ire65", "towgs84=482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
- "mod_airy", "Ireland 1965"},
-
- {"nzgd49", "towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",
- "intl", "New Zealand Geodetic Datum 1949"},
-
- {"OSGB36", "towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",
- "airy", "Airy 1830"}
-};
-
-
-static const PJ_PRIME_MERIDIANS pj_prime_meridians[] =
-{
- /* id definition */
- /* -- ---------- */
- { "greenwich", "0dE" },
- { "lisbon", "9d07'54.862\"W" },
- { "paris", "2d20'14.025\"E" },
- { "bogota", "74d04'51.3\"W" },
- { "madrid", "3d41'16.58\"W" },
- { "rome", "12d27'8.4\"E" },
- { "bern", "7d26'22.5\"E" },
- { "jakarta", "106d48'27.79\"E" },
- { "ferro", "17d40'W" },
- { "brussels", "4d22'4.71\"E" },
- { "stockholm", "18d3'29.8\"E" },
- { "athens", "23d42'58.815\"E" },
- { "oslo", "10d43'22.5\"E" }
-};
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_DATUMS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_ell_set.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_ell_set.hpp
deleted file mode 100644
index 6f5f14b7804..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_ell_set.hpp
+++ /dev/null
@@ -1,205 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_ELL_SET_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_ELL_SET_HPP
-
-#include <string>
-#include <vector>
-
-#include <boost/geometry/formulas/eccentricity_sqr.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/pj_ellps.hpp>
-#include <boost/geometry/srs/projections/impl/pj_param.hpp>
-#include <boost/geometry/srs/projections/proj4.hpp>
-
-
-namespace boost { namespace geometry { namespace projections {
-
-namespace detail {
-
-/* set ellipsoid parameters a and es */
-template <typename T>
-inline T SIXTH() { return .1666666666666666667; } /* 1/6 */
-template <typename T>
-inline T RA4() { return .04722222222222222222; } /* 17/360 */
-template <typename T>
-inline T RA6() { return .02215608465608465608; } /* 67/3024 */
-template <typename T>
-inline T RV4() { return .06944444444444444444; } /* 5/72 */
-template <typename T>
-inline T RV6() { return .04243827160493827160; } /* 55/1296 */
-
-/* initialize geographic shape parameters */
-template <typename BGParams, typename T>
-inline void pj_ell_set(BGParams const& /*bg_params*/, std::vector<pvalue<T> >& parameters, T &a, T &es)
-{
- T b = 0.0;
- T e = 0.0;
- std::string name;
-
- /* check for varying forms of ellipsoid input */
- a = es = 0.;
-
- /* R takes precedence */
- if (pj_param(parameters, "tR").i)
- a = pj_param(parameters, "dR").f;
- else { /* probable elliptical figure */
-
- /* check if ellps present and temporarily append its values to pl */
- name = pj_param(parameters, "sellps").s;
- if (! name.empty())
- {
- const int n = sizeof(pj_ellps) / sizeof(pj_ellps[0]);
- int index = -1;
- for (int i = 0; i < n && index == -1; i++)
- {
- if(pj_ellps[i].id == name)
- {
- index = i;
- }
- }
-
- if (index == -1) {
- BOOST_THROW_EXCEPTION( projection_exception(-9) );
- }
-
- parameters.push_back(pj_mkparam<T>(pj_ellps[index].major));
- parameters.push_back(pj_mkparam<T>(pj_ellps[index].ell));
- }
- a = pj_param(parameters, "da").f;
- if (pj_param(parameters, "tes").i) /* eccentricity squared */
- es = pj_param(parameters, "des").f;
- else if (pj_param(parameters, "te").i) { /* eccentricity */
- e = pj_param(parameters, "de").f;
- es = e * e;
- } else if (pj_param(parameters, "trf").i) { /* recip flattening */
- es = pj_param(parameters, "drf").f;
- if (!es) {
- BOOST_THROW_EXCEPTION( projection_exception(-10) );
- }
- es = 1./ es;
- es = es * (2. - es);
- } else if (pj_param(parameters, "tf").i) { /* flattening */
- es = pj_param(parameters, "df").f;
- es = es * (2. - es);
- } else if (pj_param(parameters, "tb").i) { /* minor axis */
- b = pj_param(parameters, "db").f;
- es = 1. - (b * b) / (a * a);
- } /* else es == 0. and sphere of radius a */
- if (!b)
- b = a * sqrt(1. - es);
- /* following options turn ellipsoid into equivalent sphere */
- if (pj_param(parameters, "bR_A").i) { /* sphere--area of ellipsoid */
- a *= 1. - es * (SIXTH<T>() + es * (RA4<T>() + es * RA6<T>()));
- es = 0.;
- } else if (pj_param(parameters, "bR_V").i) { /* sphere--vol. of ellipsoid */
- a *= 1. - es * (SIXTH<T>() + es * (RV4<T>() + es * RV6<T>()));
- es = 0.;
- } else if (pj_param(parameters, "bR_a").i) { /* sphere--arithmetic mean */
- a = .5 * (a + b);
- es = 0.;
- } else if (pj_param(parameters, "bR_g").i) { /* sphere--geometric mean */
- a = sqrt(a * b);
- es = 0.;
- } else if (pj_param(parameters, "bR_h").i) { /* sphere--harmonic mean */
- a = 2. * a * b / (a + b);
- es = 0.;
- } else {
- int i = pj_param(parameters, "tR_lat_a").i;
- if (i || /* sphere--arith. */
- pj_param(parameters, "tR_lat_g").i) { /* or geom. mean at latitude */
- T tmp;
-
- tmp = sin(pj_param(parameters, i ? "rR_lat_a" : "rR_lat_g").f);
- if (geometry::math::abs(tmp) > geometry::math::half_pi<T>()) {
- BOOST_THROW_EXCEPTION( projection_exception(-11) );
- }
- tmp = 1. - es * tmp * tmp;
- a *= i ? .5 * (1. - es + tmp) / ( tmp * sqrt(tmp)) :
- sqrt(1. - es) / tmp;
- es = 0.;
- }
- }
- }
-
- /* some remaining checks */
- if (es < 0.) {
- BOOST_THROW_EXCEPTION( projection_exception(-12) );
- }
- if (a <= 0.) {
- BOOST_THROW_EXCEPTION( projection_exception(-13) );
- }
-}
-
-template <BOOST_GEOMETRY_PROJECTIONS_DETAIL_TYPENAME_PX, typename T>
-inline void pj_ell_set(srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX> const& bg_params,
- std::vector<pvalue<T> >& /*parameters*/, T &a, T &es)
-{
- typedef srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX> static_parameters_type;
- typedef typename srs::par4::detail::pick_ellps
- <
- static_parameters_type
- > pick_ellps;
-
- typename pick_ellps::model_type model = pick_ellps::model(bg_params);
-
- a = geometry::get_radius<0>(model);
- T b = geometry::get_radius<2>(model);
- es = 0.;
- if (a != b)
- {
- es = formula::eccentricity_sqr<T>(model);
-
- // Ignore all other parameters passed in string, at least for now
- }
-
- /* some remaining checks */
- if (es < 0.) {
- BOOST_THROW_EXCEPTION( projection_exception(-12) );
- }
- if (a <= 0.) {
- BOOST_THROW_EXCEPTION( projection_exception(-13) );
- }
-}
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_ELL_SET_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_ellps.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_ellps.hpp
deleted file mode 100644
index 586802778c7..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_ellps.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_ELLPS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_ELLPS_HPP
-
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-
-namespace boost { namespace geometry { namespace projections {
-
-namespace detail {
-
-static const PJ_ELLPS pj_ellps[] =
-{
- {"MERIT", "a=6378137.0", "rf=298.257", "MERIT 1983"},
- {"SGS85", "a=6378136.0", "rf=298.257", "Soviet Geodetic System 85"},
- {"GRS80", "a=6378137.0", "rf=298.257222101", "GRS 1980(IUGG, 1980)"},
- {"IAU76", "a=6378140.0", "rf=298.257", "IAU 1976"},
- {"airy", "a=6377563.396", "b=6356256.910", "Airy 1830"},
- {"APL4.9", "a=6378137.0.", "rf=298.25", "Appl. Physics. 1965"},
- {"NWL9D", "a=6378145.0.", "rf=298.25", "Naval Weapons Lab., 1965"},
- {"mod_airy", "a=6377340.189", "b=6356034.446", "Modified Airy"},
- {"andrae", "a=6377104.43", "rf=300.0", "Andrae 1876 (Den., Iclnd.)"},
- {"aust_SA", "a=6378160.0", "rf=298.25", "Australian Natl & S. Amer. 1969"},
- {"GRS67", "a=6378160.0", "rf=298.2471674270", "GRS 67(IUGG 1967)"},
- {"bessel", "a=6377397.155", "rf=299.1528128", "Bessel 1841"},
- {"bess_nam", "a=6377483.865", "rf=299.1528128", "Bessel 1841 (Namibia)"},
- {"clrk66", "a=6378206.4", "b=6356583.8", "Clarke 1866"},
- {"clrk80", "a=6378249.145", "rf=293.4663", "Clarke 1880 mod."},
- {"clrk80ign", "a=6378249.2", "rf=293.4660212936269", "Clarke 1880 (IGN)."},
- {"CPM", "a=6375738.7", "rf=334.29", "Comm. des Poids et Mesures 1799"},
- {"delmbr", "a=6376428.", "rf=311.5", "Delambre 1810 (Belgium)"},
- {"engelis", "a=6378136.05", "rf=298.2566", "Engelis 1985"},
- {"evrst30", "a=6377276.345", "rf=300.8017", "Everest 1830"},
- {"evrst48", "a=6377304.063", "rf=300.8017", "Everest 1948"},
- {"evrst56", "a=6377301.243", "rf=300.8017", "Everest 1956"},
- {"evrst69", "a=6377295.664", "rf=300.8017", "Everest 1969"},
- {"evrstSS", "a=6377298.556", "rf=300.8017", "Everest (Sabah & Sarawak)"},
- {"fschr60", "a=6378166.", "rf=298.3", "Fischer (Mercury Datum) 1960"},
- {"fschr60m", "a=6378155.", "rf=298.3", "Modified Fischer 1960"},
- {"fschr68", "a=6378150.", "rf=298.3", "Fischer 1968"},
- {"helmert", "a=6378200.", "rf=298.3", "Helmert 1906"},
- {"hough", "a=6378270.0", "rf=297.", "Hough"},
- {"intl", "a=6378388.0", "rf=297.", "International 1909 (Hayford)"},
- {"krass", "a=6378245.0", "rf=298.3", "Krassovsky, 1942"},
- {"kaula", "a=6378163.", "rf=298.24", "Kaula 1961"},
- {"lerch", "a=6378139.", "rf=298.257", "Lerch 1979"},
- {"mprts", "a=6397300.", "rf=191.", "Maupertius 1738"},
- {"new_intl", "a=6378157.5", "b=6356772.2", "New International 1967"},
- {"plessis", "a=6376523.", "b=6355863.", "Plessis 1817 (France)"},
- {"SEasia", "a=6378155.0", "b=6356773.3205", "Southeast Asia"},
- {"walbeck", "a=6376896.0", "b=6355834.8467", "Walbeck"},
- {"WGS60", "a=6378165.0", "rf=298.3", "WGS 60"},
- {"WGS66", "a=6378145.0", "rf=298.25", "WGS 66"},
- {"WGS72", "a=6378135.0", "rf=298.26", "WGS 72"},
- {"WGS84", "a=6378137.0", "rf=298.257223563", "WGS 84"},
- {"sphere", "a=6370997.0", "b=6370997.0", "Normal Sphere (r=6370997)"}
-};
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_ELLPS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_fwd.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_fwd.hpp
deleted file mode 100644
index 73101b7f402..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_fwd.hpp
+++ /dev/null
@@ -1,101 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_FWD_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_FWD_HPP
-
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/adjlon.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-
-#include <boost/math/constants/constants.hpp>
-
-/* general forward projection */
-
-namespace boost { namespace geometry { namespace projections {
-
-namespace detail {
-
-/* forward projection entry */
-template <typename Prj, typename LL, typename XY, typename P>
-inline void pj_fwd(Prj const& prj, P const& par, LL const& ll, XY& xy)
-{
- typedef typename P::type calc_t;
- static const calc_t EPS = 1.0e-12;
-
- using namespace detail;
-
- calc_t lp_lon = geometry::get_as_radian<0>(ll);
- calc_t lp_lat = geometry::get_as_radian<1>(ll);
- calc_t const t = geometry::math::abs(lp_lat) - geometry::math::half_pi<calc_t>();
-
- /* check for forward and latitude or longitude overange */
- if (t > EPS || geometry::math::abs(lp_lon) > 10.)
- {
- BOOST_THROW_EXCEPTION( projection_exception(-14) );
- }
-
- if (geometry::math::abs(t) <= EPS)
- {
- lp_lat = lp_lat < 0. ? -geometry::math::half_pi<calc_t>() : geometry::math::half_pi<calc_t>();
- }
- else if (par.geoc)
- {
- lp_lat = atan(par.rone_es * tan(lp_lat));
- }
-
- lp_lon -= par.lam0; /* compute del lp.lam */
- if (! par.over)
- {
- lp_lon = adjlon(lp_lon); /* post_forward del longitude */
- }
-
- calc_t x = 0;
- calc_t y = 0;
-
- prj.fwd(lp_lon, lp_lat, x, y);
- geometry::set<0>(xy, par.fr_meter * (par.a * x + par.x0));
- geometry::set<1>(xy, par.fr_meter * (par.a * y + par.y0));
-}
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_FWD_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_gauss.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_gauss.hpp
deleted file mode 100644
index 2c908704341..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_gauss.hpp
+++ /dev/null
@@ -1,142 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_GAUSS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_GAUSS_HPP
-
-
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry { namespace projections {
-
-namespace detail { namespace gauss {
-
-
-static const int MAX_ITER = 20;
-
-template <typename T>
-struct GAUSS
-{
- T C;
- T K;
- T e;
- T ratexp;
-};
-
-template <typename T>
-inline T srat(T const& esinp, T const& exp)
-{
- return (pow((1.0 - esinp) / (1.0 + esinp), exp));
-}
-
-template <typename T>
-inline GAUSS<T> gauss_ini(T const& e, T const& phi0, T& chi, T& rc)
-{
- static const T FORTPI = detail::FORTPI<T>();
-
- using std::asin;
- using std::cos;
- using std::sin;
- using std::sqrt;
- using std::tan;
-
- T sphi = 0;
- T cphi = 0;
- T es = 0;
-
- GAUSS<T> en;
- es = e * e;
- en.e = e;
- sphi = sin(phi0);
- cphi = cos(phi0);
- cphi *= cphi;
-
- rc = sqrt(1.0 - es) / (1.0 - es * sphi * sphi);
- en.C = sqrt(1.0 + es * cphi * cphi / (1.0 - es));
- chi = asin(sphi / en.C);
- en.ratexp = 0.5 * en.C * e;
- en.K = tan(0.5 * chi + FORTPI)
- / (pow(tan(0.5 * phi0 + FORTPI), en.C) * srat(en.e * sphi, en.ratexp));
-
- return en;
-}
-
-template <typename T>
-inline void gauss(GAUSS<T> const& en, T& lam, T& phi)
-{
- static const T FORTPI = detail::FORTPI<T>();
-
- phi = 2.0 * atan(en.K * pow(tan(0.5 * phi + FORTPI), en.C)
- * srat(en.e * sin(phi), en.ratexp) ) - geometry::math::half_pi<T>();
-
- lam *= en.C;
-}
-
-template <typename T>
-inline void inv_gauss(GAUSS<T> const& en, T& lam, T& phi)
-{
- static const T FORTPI = detail::FORTPI<T>();
- static const T DEL_TOL = 1e-14;
-
- lam /= en.C;
- const T num = pow(tan(0.5 * phi + FORTPI) / en.K, 1.0 / en.C);
-
- int i = 0;
- for (i = MAX_ITER; i; --i)
- {
- const T elp_phi = 2.0 * atan(num * srat(en.e * sin(phi), - 0.5 * en.e)) - geometry::math::half_pi<T>();
-
- if (geometry::math::abs(elp_phi - phi) < DEL_TOL)
- {
- break;
- }
- phi = elp_phi;
- }
-
- /* convergence failed */
- if (!i)
- {
- BOOST_THROW_EXCEPTION( projection_exception(-17) );
- }
-}
-
-}} // namespace detail::gauss
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_GAUSS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_init.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_init.hpp
deleted file mode 100644
index 8b93343bcd7..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_init.hpp
+++ /dev/null
@@ -1,395 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_INIT_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_INIT_HPP
-
-#include <cstdlib>
-#include <string>
-#include <vector>
-
-#include <boost/algorithm/string.hpp>
-#include <boost/lexical_cast.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/condition.hpp>
-
-#include <boost/geometry/srs/projections/impl/dms_parser.hpp>
-#include <boost/geometry/srs/projections/impl/pj_datum_set.hpp>
-#include <boost/geometry/srs/projections/impl/pj_datums.hpp>
-#include <boost/geometry/srs/projections/impl/pj_ell_set.hpp>
-#include <boost/geometry/srs/projections/impl/pj_param.hpp>
-#include <boost/geometry/srs/projections/impl/pj_units.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/proj4.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-
-namespace detail
-{
-
-template <typename BGParams, typename T>
-inline void pj_push_defaults(BGParams const& /*bg_params*/, parameters<T>& pin)
-{
- pin.params.push_back(pj_mkparam<T>("ellps=WGS84"));
-
- if (pin.name == "aea")
- {
- pin.params.push_back(pj_mkparam<T>("lat_1=29.5"));
- pin.params.push_back(pj_mkparam<T>("lat_2=45.5 "));
- }
- else if (pin.name == "lcc")
- {
- pin.params.push_back(pj_mkparam<T>("lat_1=33"));
- pin.params.push_back(pj_mkparam<T>("lat_2=45"));
- }
- else if (pin.name == "lagrng")
- {
- pin.params.push_back(pj_mkparam<T>("W=2"));
- }
-}
-
-template <BOOST_GEOMETRY_PROJECTIONS_DETAIL_TYPENAME_PX, typename T>
-inline void pj_push_defaults(srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX> const& /*bg_params*/,
- parameters<T>& pin)
-{
- typedef srs::static_proj4<BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX> static_parameters_type;
- typedef typename srs::par4::detail::pick_proj_tag
- <
- static_parameters_type
- >::type proj_tag;
-
- // statically defaulting to WGS84
- //pin.params.push_back(pj_mkparam("ellps=WGS84"));
-
- if (BOOST_GEOMETRY_CONDITION((boost::is_same<proj_tag, srs::par4::aea>::value)))
- {
- pin.params.push_back(pj_mkparam<T>("lat_1=29.5"));
- pin.params.push_back(pj_mkparam<T>("lat_2=45.5 "));
- }
- else if (BOOST_GEOMETRY_CONDITION((boost::is_same<proj_tag, srs::par4::lcc>::value)))
- {
- pin.params.push_back(pj_mkparam<T>("lat_1=33"));
- pin.params.push_back(pj_mkparam<T>("lat_2=45"));
- }
- else if (BOOST_GEOMETRY_CONDITION((boost::is_same<proj_tag, srs::par4::lagrng>::value)))
- {
- pin.params.push_back(pj_mkparam<T>("W=2"));
- }
-}
-
-template <typename T>
-inline void pj_init_units(std::vector<pvalue<T> > const& params,
- std::string const& sunits,
- std::string const& sto_meter,
- T & to_meter,
- T & fr_meter,
- T const& default_to_meter,
- T const& default_fr_meter)
-{
- std::string s;
- std::string units = pj_param(params, sunits).s;
- if (! units.empty())
- {
- const int n = sizeof(pj_units) / sizeof(pj_units[0]);
- int index = -1;
- for (int i = 0; i < n && index == -1; i++)
- {
- if(pj_units[i].id == units)
- {
- index = i;
- }
- }
-
- if (index == -1) {
- BOOST_THROW_EXCEPTION( projection_exception(-7) );
- }
- s = pj_units[index].to_meter;
- }
-
- if (s.empty())
- {
- s = pj_param(params, sto_meter).s;
- }
-
- if (! s.empty())
- {
- std::size_t const pos = s.find('/');
- if (pos == std::string::npos)
- {
- to_meter = lexical_cast<T>(s);
- }
- else
- {
- T const numerator = lexical_cast<T>(s.substr(0, pos));
- T const denominator = lexical_cast<T>(s.substr(pos + 1));
- if (numerator == 0.0 || denominator == 0.0)
- {
- BOOST_THROW_EXCEPTION( projection_exception(-99) );
- }
- to_meter = numerator / denominator;
- }
- if (to_meter == 0.0)
- {
- BOOST_THROW_EXCEPTION( projection_exception(-99) );
- }
- fr_meter = 1. / to_meter;
- }
- else
- {
- to_meter = default_to_meter;
- fr_meter = default_fr_meter;
- }
-}
-
-/************************************************************************/
-/* pj_init() */
-/* */
-/* Main entry point for initialing a PJ projections */
-/* definition. Note that the projection specific function is */
-/* called to do the initial allocation so it can be created */
-/* large enough to hold projection specific parameters. */
-/************************************************************************/
-template <typename T, typename BGParams, typename R>
-inline parameters<T> pj_init(BGParams const& bg_params, R const& arguments, bool use_defaults = true)
-{
- parameters<T> pin;
- for (std::vector<std::string>::const_iterator it = boost::begin(arguments);
- it != boost::end(arguments); it++)
- {
- pin.params.push_back(pj_mkparam<T>(*it));
- }
-
- /* check if +init present */
- if (pj_param(pin.params, "tinit").i)
- {
- // maybe TODO: handle "init" parameter
- //if (!(curr = get_init(&arguments, curr, pj_param(pin.params, "sinit").s)))
- }
-
- // find projection -> implemented in projection factory
- pin.name = pj_param(pin.params, "sproj").s;
- // exception thrown in projection<>
- // TODO: consider throwing here both projection_unknown_id_exception and
- // projection_not_named_exception in order to throw before other exceptions
- //if (pin.name.empty())
- //{ BOOST_THROW_EXCEPTION( projection_not_named_exception() ); }
-
- // set defaults, unless inhibited
- // GL-Addition, if use_defaults is false then defaults are ignored
- if (use_defaults && ! pj_param(pin.params, "bno_defs").i)
- {
- // proj4 gets defaults from "proj_def.dat", file of 94/02/23 with a few defaults.
- // Here manually
- pj_push_defaults(bg_params, pin);
- //curr = get_defaults(&arguments, curr, name);
- }
-
- /* allocate projection structure */
- // done by BGParams constructor:
- // pin.is_latlong = 0;
- // pin.is_geocent = 0;
- // pin.long_wrap_center = 0.0;
- // pin.long_wrap_center = 0.0;
- pin.is_long_wrap_set = false;
-
- /* set datum parameters */
- pj_datum_set(bg_params, pin.params, pin);
-
- /* set ellipsoid/sphere parameters */
- pj_ell_set(bg_params, pin.params, pin.a, pin.es);
-
- pin.a_orig = pin.a;
- pin.es_orig = pin.es;
-
- pin.e = sqrt(pin.es);
- pin.ra = 1. / pin.a;
- pin.one_es = 1. - pin.es;
- if (pin.one_es == 0.) {
- BOOST_THROW_EXCEPTION( projection_exception(-6) );
- }
- pin.rone_es = 1./pin.one_es;
-
- /* Now that we have ellipse information check for WGS84 datum */
- if( pin.datum_type == PJD_3PARAM
- && pin.datum_params[0] == 0.0
- && pin.datum_params[1] == 0.0
- && pin.datum_params[2] == 0.0
- && pin.a == 6378137.0
- && geometry::math::abs(pin.es - 0.006694379990) < 0.000000000050 )/*WGS84/GRS80*/
- {
- pin.datum_type = PJD_WGS84;
- }
-
- /* set pin.geoc coordinate system */
- pin.geoc = (pin.es && pj_param(pin.params, "bgeoc").i);
-
- /* over-ranging flag */
- pin.over = pj_param(pin.params, "bover").i;
-
- /* longitude center for wrapping */
- pin.is_long_wrap_set = pj_param(pin.params, "tlon_wrap").i != 0;
- if (pin.is_long_wrap_set)
- pin.long_wrap_center = pj_param(pin.params, "rlon_wrap").f;
-
- /* central meridian */
- pin.lam0 = pj_param(pin.params, "rlon_0").f;
-
- /* central latitude */
- pin.phi0 = pj_param(pin.params, "rlat_0").f;
-
- /* false easting and northing */
- pin.x0 = pj_param(pin.params, "dx_0").f;
- pin.y0 = pj_param(pin.params, "dy_0").f;
-
- /* general scaling factor */
- if (pj_param(pin.params, "tk_0").i)
- pin.k0 = pj_param(pin.params, "dk_0").f;
- else if (pj_param(pin.params, "tk").i)
- pin.k0 = pj_param(pin.params, "dk").f;
- else
- pin.k0 = 1.;
- if (pin.k0 <= 0.) {
- BOOST_THROW_EXCEPTION( projection_exception(-31) );
- }
-
- /* set units */
- pj_init_units(pin.params, "sunits", "sto_meter",
- pin.to_meter, pin.fr_meter, 1., 1.);
- pj_init_units(pin.params, "svunits", "svto_meter",
- pin.vto_meter, pin.vfr_meter, pin.to_meter, pin.fr_meter);
-
- /* prime meridian */
- std::string pm = pj_param(pin.params, "spm").s;
- if (! pm.empty())
- {
- std::string value;
-
- int n = sizeof(pj_prime_meridians) / sizeof(pj_prime_meridians[0]);
- for (int i = 0; i < n ; i++)
- {
- if(pj_prime_meridians[i].id == pm)
- {
- value = pj_prime_meridians[i].defn;
- break;
- }
- }
-
- dms_parser<T, true> parser;
-
- // TODO: Handle case when lexical_cast is not used consistently.
- // This should probably be done in dms_parser.
- BOOST_TRY
- {
- if (value.empty()) {
- pin.from_greenwich = parser.apply(pm).angle();
- } else {
- pin.from_greenwich = parser.apply(value).angle();
- }
- }
- BOOST_CATCH(boost::bad_lexical_cast const&)
- {
- BOOST_THROW_EXCEPTION( projection_exception(-46) );
- }
- BOOST_CATCH_END
- }
- else
- {
- pin.from_greenwich = 0.0;
- }
-
- return pin;
-}
-
-/************************************************************************/
-/* pj_init_plus() */
-/* */
-/* Same as pj_init() except it takes one argument string with */
-/* individual arguments preceeded by '+', such as "+proj=utm */
-/* +zone=11 +ellps=WGS84". */
-/************************************************************************/
-template <typename T, typename BGParams>
-inline parameters<T> pj_init_plus(BGParams const& bg_params, std::string const& definition, bool use_defaults = true)
-{
- const char* sep = " +";
-
- /* split into arguments based on '+' and trim white space */
-
- // boost::split splits on one character, here it should be on " +", so implementation below
- // todo: put in different routine or sort out
- std::vector<std::string> arguments;
- std::string def = boost::trim_copy(definition);
- boost::trim_left_if(def, boost::is_any_of(sep));
-
- std::string::size_type loc = def.find(sep);
- while (loc != std::string::npos)
- {
- std::string par = def.substr(0, loc);
- boost::trim(par);
- if (! par.empty())
- {
- arguments.push_back(par);
- }
-
- def.erase(0, loc);
- boost::trim_left_if(def, boost::is_any_of(sep));
- loc = def.find(sep);
- }
-
- if (! def.empty())
- {
- arguments.push_back(def);
- }
-
- /*boost::split(arguments, definition, boost::is_any_of("+"));
- for (std::vector<std::string>::iterator it = arguments.begin(); it != arguments.end(); it++)
- {
- boost::trim(*it);
- }*/
- return pj_init<T>(bg_params, arguments, use_defaults);
-}
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_INIT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_inv.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_inv.hpp
deleted file mode 100644
index 91cf4c50f66..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_inv.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PJ_INV_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PJ_INV_HPP
-
-
-
-#include <boost/geometry/srs/projections/impl/adjlon.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/util/math.hpp>
-
-/* general inverse projection */
-
-namespace boost { namespace geometry { namespace projections
-{
-
-namespace detail
-{
-
- /* inverse projection entry */
-template <typename PRJ, typename LL, typename XY, typename PAR>
-inline void pj_inv(PRJ const& prj, PAR const& par, XY const& xy, LL& ll)
-{
- typedef typename PAR::type calc_t;
- static const calc_t EPS = 1.0e-12;
-
- /* can't do as much preliminary checking as with forward */
- /* descale and de-offset */
- calc_t xy_x = (geometry::get<0>(xy) * par.to_meter - par.x0) * par.ra;
- calc_t xy_y = (geometry::get<1>(xy) * par.to_meter - par.y0) * par.ra;
- calc_t lon = 0, lat = 0;
- prj.inv(xy_x, xy_y, lon, lat); /* inverse project */
- lon += par.lam0; /* reduce from del lp.lam */
- if (!par.over)
- lon = adjlon(lon); /* adjust longitude to CM */
- if (par.geoc && geometry::math::abs(geometry::math::abs(lat)-geometry::math::half_pi<calc_t>()) > EPS)
- lat = atan(par.one_es * tan(lat));
-
- geometry::set_from_radian<0>(ll, lon);
- geometry::set_from_radian<1>(ll, lat);
-}
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_mlfn.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_mlfn.hpp
deleted file mode 100644
index 1317dd2e2f2..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_mlfn.hpp
+++ /dev/null
@@ -1,121 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PJ_MLFN_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PJ_MLFN_HPP
-
-
-
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry { namespace projections {
-
-namespace detail {
-
-static const int EN_SIZE = 5;
-
-template <typename T>
-inline bool pj_enfn(T const& es, T* en)
-{
- static const T C00 = 1.;
- static const T C02 = .25;
- static const T C04 = .046875;
- static const T C06 = .01953125;
- static const T C08 = .01068115234375;
- static const T C22 = .75;
- static const T C44 = .46875;
- static const T C46 = .01302083333333333333;
- static const T C48 = .00712076822916666666;
- static const T C66 = .36458333333333333333;
- static const T C68 = .00569661458333333333;
- static const T C88 = .3076171875;
-
- T t; //, *en;
-
- //if (en = (double *)pj_malloc(EN_SIZE * sizeof(double)))
- {
- en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));
- en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));
- en[2] = (t = es * es) * (C44 - es * (C46 + es * C48));
- en[3] = (t *= es) * (C66 - es * C68);
- en[4] = t * es * C88;
- }
- // return en;
- return true;
-}
-
-template <typename T>
-inline T pj_mlfn(T const& phi, T sphi, T cphi, const T *en)
-{
- cphi *= sphi;
- sphi *= sphi;
- return(en[0] * phi - cphi * (en[1] + sphi*(en[2]
- + sphi*(en[3] + sphi*en[4]))));
-}
-
-template <typename T>
-inline T pj_inv_mlfn(T const& arg, T const& es, const T *en)
-{
- /* meridinal distance for ellipsoid and inverse
- ** 8th degree - accurate to < 1e-5 meters when used in conjuction
- ** with typical major axis values.
- ** Inverse determines phi to EPS (1e-11) radians, about 1e-6 seconds.
- */
- static const T EPS = 1e-11;
- static const int MAX_ITER = 10;
-
- T s, t, phi, k = 1./(1.-es);
- int i;
-
- phi = arg;
- for (i = MAX_ITER; i ; --i) { /* rarely goes over 2 iterations */
- s = sin(phi);
- t = 1. - es * s * s;
- phi -= t = (pj_mlfn(phi, s, cos(phi), en) - arg) * (t * sqrt(t)) * k;
- if (geometry::math::abs(t) < EPS)
- return phi;
- }
- BOOST_THROW_EXCEPTION( projection_exception(-17) );
- return phi;
-}
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_msfn.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_msfn.hpp
deleted file mode 100644
index f99cc2c843c..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_msfn.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PJ_MSFN_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PJ_MSFN_HPP
-
-
-namespace boost { namespace geometry { namespace projections {
-
-namespace detail {
-
-
-/* determine constant small m */
-template <typename T>
-inline T pj_msfn(T const& sinphi, T const& cosphi, T const& es)
-{
- return (cosphi / sqrt (1. - es * sinphi * sinphi));
-}
-
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_param.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_param.hpp
deleted file mode 100644
index 4f33ad837fb..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_param.hpp
+++ /dev/null
@@ -1,161 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PJ_PARAM_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PJ_PARAM_HPP
-
-
-#include <string>
-#include <vector>
-
-#include <boost/geometry/srs/projections/impl/dms_parser.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-
-
-namespace boost { namespace geometry { namespace projections {
-
-namespace detail {
-
-
-
-/* create pvalue list entry */
-template <typename T>
-inline pvalue<T> pj_mkparam(std::string const& str)
-{
- std::string name = str;
- std::string value;
- boost::trim_left_if(name, boost::is_any_of("+"));
- std::string::size_type loc = name.find("=");
- if (loc != std::string::npos)
- {
- value = name.substr(loc + 1);
- name.erase(loc);
- }
-
-
- pvalue<T> newitem;
- newitem.param = name;
- newitem.s = value;
- newitem.used = 0;
- newitem.i = atoi(value.c_str());
- newitem.f = atof(value.c_str());
- return newitem;
-}
-
-/************************************************************************/
-/* pj_param() */
-/* */
-/* Test for presence or get pvalue value. The first */
-/* character in `opt' is a pvalue type which can take the */
-/* values: */
-/* */
-/* `t' - test for presence, return TRUE/FALSE in pvalue.i */
-/* `i' - integer value returned in pvalue.i */
-/* `d' - simple valued real input returned in pvalue.f */
-/* `r' - degrees (DMS translation applied), returned as */
-/* radians in pvalue.f */
-/* `s' - string returned in pvalue.s */
-/* `b' - test for t/T/f/F, return in pvalue.i */
-/* */
-/************************************************************************/
-
-template <typename T>
-inline pvalue<T> pj_param(std::vector<pvalue<T> > const& pl, std::string opt)
-{
- char type = opt[0];
- opt.erase(opt.begin());
-
- pvalue<T> value;
-
- /* simple linear lookup */
- typedef typename std::vector<pvalue<T> >::const_iterator iterator;
- for (iterator it = pl.begin(); it != pl.end(); it++)
- {
- if (it->param == opt)
- {
- //it->used = 1;
- switch (type)
- {
- case 't':
- value.i = 1;
- break;
- case 'i': /* integer input */
- value.i = atoi(it->s.c_str());
- break;
- case 'd': /* simple real input */
- value.f = atof(it->s.c_str());
- break;
- case 'r': /* degrees input */
- {
- dms_parser<T, true> parser;
- value.f = parser.apply(it->s.c_str()).angle();
- }
- break;
- case 's': /* char string */
- value.s = it->s;
- break;
- case 'b': /* boolean */
- switch (it->s[0])
- {
- case 'F': case 'f':
- value.i = 0;
- break;
- case '\0': case 'T': case 't':
- value.i = 1;
- break;
- default:
- value.i = 0;
- break;
- }
- break;
- }
- return value;
- }
-
- }
-
- value.i = 0;
- value.f = 0.0;
- value.s = "";
- return value;
-}
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_phi2.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_phi2.hpp
deleted file mode 100644
index 71f0cf12494..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_phi2.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PHI2_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PHI2_HPP
-
-#include <boost/geometry/util/math.hpp>
-
-namespace boost { namespace geometry { namespace projections {
-namespace detail {
-
-template <typename T>
-inline T pj_phi2(T const& ts, T const& e)
-{
- static const T TOL = 1.0e-10;
- static const int N_ITER = 15;
-
- T eccnth, Phi, con, dphi;
- int i;
-
- eccnth = .5 * e;
- Phi = geometry::math::half_pi<T>() - 2. * atan (ts);
- i = N_ITER;
- do {
- con = e * sin (Phi);
- dphi = geometry::math::half_pi<T>() - 2. * atan (ts * pow((1. - con) /
- (1. + con), eccnth)) - Phi;
- Phi += dphi;
- } while ( geometry::math::abs(dphi) > TOL && --i);
- if (i <= 0)
- BOOST_THROW_EXCEPTION( projection_exception(-18) );
- return Phi;
-}
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_qsfn.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_qsfn.hpp
deleted file mode 100644
index 606fab5e4ec..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_qsfn.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PJ_QSFN_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PJ_QSFN_HPP
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-namespace detail {
-
-/* determine small q */
-template <typename T>
-inline T pj_qsfn(T const& sinphi, T const& e, T const& one_es)
-{
- static const T EPSILON = 1.0e-7;
-
- if (e >= EPSILON)
- {
- T con = e * sinphi;
- return (one_es * (sinphi / (1. - con * con) -
- (.5 / e) * log ((1. - con) / (1. + con))));
- } else
- return (sinphi + sinphi);
-}
-
-
-static const int MAX_C = 9;
-
-template <typename T>
-struct AUTHALIC
-{
- T C[MAX_C], CP[MAX_C], CQ[MAX_C];
-};
-
-/**
- * @brief determine authalic latitude
- * @param[in] phi geographic latitude
- * @param[in] a initialized structure pointer
- * @return authalic latitude
- */
-template <typename T>
-inline T proj_qsfn(T const& phi, AUTHALIC<T> const& a)
-{
- T s, s2, sum;
- int i = MAX_C;
-
- s = sin(phi);
- s2 = s * s;
- sum = a.CQ[MAX_C - 1];
- while (--i) sum = a.CQ[i] + s2 * sum;
- return(s * sum);
-}
-
-} // namespace detail
-
-}}} // namespace boost::geometry::projections
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_strerrno.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_strerrno.hpp
deleted file mode 100644
index 22e0c48af45..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_strerrno.hpp
+++ /dev/null
@@ -1,144 +0,0 @@
-// Boost.Geometry
-// This file is manually converted from PROJ4
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// This file was converted to Geometry Library by Adam Wulkiewicz
-
-// Original copyright notice:
-
-// None
-
-/* list of projection system pj_errno values */
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_STRERRNO_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_STRERRNO_HPP
-
-#include <cerrno>
-#include <cstring>
-#include <sstream>
-#include <string>
-
-namespace boost { namespace geometry { namespace projections
-{
-
-namespace detail
-{
-
- static const char *
-pj_err_list[] = {
- "no arguments in initialization list", /* -1 */
- "no options found in 'init' file", /* -2 */
- "no colon in init= string", /* -3 */
- "projection not named", /* -4 */
- "unknown projection id", /* -5 */
- "effective eccentricity = 1.", /* -6 */
- "unknown unit conversion id", /* -7 */
- "invalid boolean param argument", /* -8 */
- "unknown elliptical parameter name", /* -9 */
- "reciprocal flattening (1/f) = 0", /* -10 */
- "|radius reference latitude| > 90", /* -11 */
- "squared eccentricity < 0", /* -12 */
- "major axis or radius = 0 or not given", /* -13 */
- "latitude or longitude exceeded limits", /* -14 */
- "invalid x or y", /* -15 */
- "improperly formed DMS value", /* -16 */
- "non-convergent inverse meridional dist", /* -17 */
- "non-convergent inverse phi2", /* -18 */
- "acos/asin: |arg| >1.+1e-14", /* -19 */
- "tolerance condition error", /* -20 */
- "conic lat_1 = -lat_2", /* -21 */
- "lat_1 >= 90", /* -22 */
- "lat_1 = 0", /* -23 */
- "lat_ts >= 90", /* -24 */
- "no distance between control points", /* -25 */
- "projection not selected to be rotated", /* -26 */
- "W <= 0 or M <= 0", /* -27 */
- "lsat not in 1-5 range", /* -28 */
- "path not in range", /* -29 */
- "h <= 0", /* -30 */
- "k <= 0", /* -31 */
- "lat_0 = 0 or 90 or alpha = 90", /* -32 */
- "lat_1=lat_2 or lat_1=0 or lat_2=90", /* -33 */
- "elliptical usage required", /* -34 */
- "invalid UTM zone number", /* -35 */
- "arg(s) out of range for Tcheby eval", /* -36 */
- "failed to find projection to be rotated", /* -37 */
- "failed to load datum shift file", /* -38 */
- "both n & m must be spec'd and > 0", /* -39 */
- "n <= 0, n > 1 or not specified", /* -40 */
- "lat_1 or lat_2 not specified", /* -41 */
- "|lat_1| == |lat_2|", /* -42 */
- "lat_0 is pi/2 from mean lat", /* -43 */
- "unparseable coordinate system definition", /* -44 */
- "geocentric transformation missing z or ellps", /* -45 */
- "unknown prime meridian conversion id", /* -46 */
- "illegal axis orientation combination", /* -47 */
- "point not within available datum shift grids", /* -48 */
- "invalid sweep axis, choose x or y", /* -49 */
- "malformed pipeline", /* -50 */
-};
-
-inline std::string pj_generic_strerrno(std::string const& msg, int err)
-{
- std::stringstream ss;
- ss << msg << " (" << err << ")";
- return ss.str();
-}
-
-inline std::string pj_strerrno(int err) {
- if (0==err)
- {
- return "";
- }
- else if (err > 0)
- {
- // std::strerror function may be not thread-safe
- //return std::strerror(err);
-
- switch(err)
- {
-#ifdef EINVAL
- case EINVAL:
- return "Invalid argument";
-#endif
-#ifdef EDOM
- case EDOM:
- return "Math argument out of domain of func";
-#endif
-#ifdef ERANGE
- case ERANGE:
- return "Math result not representable";
-#endif
- default:
- return pj_generic_strerrno("system error", err);
- }
- }
- else /*if (err < 0)*/
- {
- size_t adjusted_err = - err - 1;
- if (adjusted_err < (sizeof(pj_err_list) / sizeof(char *)))
- {
- return(pj_err_list[adjusted_err]);
- }
- else
- {
- return pj_generic_strerrno("invalid projection system error", err);
- }
- }
-}
-
-} // namespace detail
-
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_STRERRNO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_transform.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_transform.hpp
deleted file mode 100644
index 8c2095642f0..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_transform.hpp
+++ /dev/null
@@ -1,1009 +0,0 @@
-// Boost.Geometry
-// This file is manually converted from PROJ4
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// This file was converted to Geometry Library by Adam Wulkiewicz
-
-// Original copyright notice:
-
-// Copyright (c) 2000, Frank Warmerdam
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_SRS_PROJECTIONS_IMPL_PJ_TRANSFORM_HPP
-#define BOOST_GEOMETRY_SRS_PROJECTIONS_IMPL_PJ_TRANSFORM_HPP
-
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-
-#include <boost/geometry/srs/projections/impl/geocent.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/invalid_point.hpp>
-
-#include <boost/geometry/util/range.hpp>
-
-#include <cstring>
-#include <cmath>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-namespace detail
-{
-
-// -----------------------------------------------------------
-// Boost.Geometry helpers begin
-// -----------------------------------------------------------
-
-template
-<
- typename Point,
- bool HasCoord2 = (dimension<Point>::value > 2)
->
-struct z_access
-{
- typedef typename coordinate_type<Point>::type type;
- static inline type get(Point const& point)
- {
- return geometry::get<2>(point);
- }
- static inline void set(Point & point, type const& h)
- {
- return geometry::set<2>(point, h);
- }
-};
-
-template <typename Point>
-struct z_access<Point, false>
-{
- typedef typename coordinate_type<Point>::type type;
- static inline type get(Point const& )
- {
- return type(0);
- }
- static inline void set(Point & , type const& )
- {}
-};
-
-template <typename XYorXYZ>
-inline typename z_access<XYorXYZ>::type
-get_z(XYorXYZ const& xy_or_xyz)
-{
- return z_access<XYorXYZ>::get(xy_or_xyz);
-}
-
-template <typename XYorXYZ>
-inline void set_z(XYorXYZ & xy_or_xyz,
- typename z_access<XYorXYZ>::type const& z)
-{
- return z_access<XYorXYZ>::set(xy_or_xyz, z);
-}
-
-template
-<
- typename Range,
- bool AddZ = (dimension<typename boost::range_value<Range>::type>::value < 3)
->
-struct range_wrapper
-{
- typedef Range range_type;
- typedef typename boost::range_value<Range>::type point_type;
- typedef typename coordinate_type<point_type>::type coord_t;
-
- range_wrapper(Range & range)
- : m_range(range)
- {}
-
- range_type & get_range() { return m_range; }
-
- coord_t get_z(std::size_t i) { return detail::get_z(range::at(m_range, i)); }
- void set_z(std::size_t i, coord_t const& v) { return detail::set_z(range::at(m_range, i), v); }
-
-private:
- Range & m_range;
-};
-
-template <typename Range>
-struct range_wrapper<Range, true>
-{
- typedef Range range_type;
- typedef typename boost::range_value<Range>::type point_type;
- typedef typename coordinate_type<point_type>::type coord_t;
-
- range_wrapper(Range & range)
- : m_range(range)
- , m_zs(boost::size(range), coord_t(0))
- {}
-
- range_type & get_range() { return m_range; }
-
- coord_t get_z(std::size_t i) { return m_zs[i]; }
- void set_z(std::size_t i, coord_t const& v) { m_zs[i] = v; }
-
-private:
- Range & m_range;
- std::vector<coord_t> m_zs;
-};
-
-// -----------------------------------------------------------
-// Boost.Geometry helpers end
-// -----------------------------------------------------------
-
-/*#ifndef SRS_WGS84_SEMIMAJOR
-#define SRS_WGS84_SEMIMAJOR 6378137.0
-#endif
-
-#ifndef SRS_WGS84_ESQUARED
-#define SRS_WGS84_ESQUARED 0.0066943799901413165
-#endif*/
-
-template <typename Par>
-inline typename Par::type Dx_BF(Par const& defn) { return defn.datum_params[0]; }
-template <typename Par>
-inline typename Par::type Dy_BF(Par const& defn) { return defn.datum_params[1]; }
-template <typename Par>
-inline typename Par::type Dz_BF(Par const& defn) { return defn.datum_params[2]; }
-template <typename Par>
-inline typename Par::type Rx_BF(Par const& defn) { return defn.datum_params[3]; }
-template <typename Par>
-inline typename Par::type Ry_BF(Par const& defn) { return defn.datum_params[4]; }
-template <typename Par>
-inline typename Par::type Rz_BF(Par const& defn) { return defn.datum_params[5]; }
-template <typename Par>
-inline typename Par::type M_BF(Par const& defn) { return defn.datum_params[6]; }
-
-/*
-** This table is intended to indicate for any given error code in
-** the range 0 to -44, whether that error will occur for all locations (ie.
-** it is a problem with the coordinate system as a whole) in which case the
-** value would be 0, or if the problem is with the point being transformed
-** in which case the value is 1.
-**
-** At some point we might want to move this array in with the error message
-** list or something, but while experimenting with it this should be fine.
-*/
-
-static const int transient_error[50] = {
- /* 0 1 2 3 4 5 6 7 8 9 */
- /* 0 to 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 10 to 19 */ 0, 0, 0, 0, 1, 1, 0, 1, 1, 1,
- /* 20 to 29 */ 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- /* 30 to 39 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 40 to 49 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 };
-
-
-template <typename T, typename Range>
-inline int pj_geocentric_to_geodetic( T const& a, T const& es,
- Range & range );
-template <typename T, typename Range>
-inline int pj_geodetic_to_geocentric( T const& a, T const& es,
- Range & range );
-
-/************************************************************************/
-/* pj_transform() */
-/* */
-/* Currently this function doesn't recognise if two projections */
-/* are identical (to short circuit reprojection) because it is */
-/* difficult to compare PJ structures (since there are some */
-/* projection specific components). */
-/************************************************************************/
-
-template <typename SrcPrj, typename DstPrj2, typename Par, typename Range>
-inline bool pj_transform(SrcPrj const& srcprj, Par const& srcdefn,
- DstPrj2 const& dstprj, Par const& dstdefn,
- Range & range)
-
-{
- typedef typename boost::range_value<Range>::type point_type;
- typedef typename coordinate_type<point_type>::type coord_t;
- static const std::size_t dimension = geometry::dimension<point_type>::value;
- std::size_t point_count = boost::size(range);
- bool result = true;
-
-/* -------------------------------------------------------------------- */
-/* Transform unusual input coordinate axis orientation to */
-/* standard form if needed. */
-/* -------------------------------------------------------------------- */
- // Ignored
-
-/* -------------------------------------------------------------------- */
-/* Transform Z to meters if it isn't already. */
-/* -------------------------------------------------------------------- */
- if( srcdefn.vto_meter != 1.0 && dimension > 2 )
- {
- for( std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = geometry::range::at(range, i);
- set_z(point, get_z(point) * srcdefn.vto_meter);
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* Transform geocentric source coordinates to lat/long. */
-/* -------------------------------------------------------------------- */
- if( srcdefn.is_geocent )
- {
- // Point should be cartesian 3D (ECEF)
- if (dimension < 3)
- BOOST_THROW_EXCEPTION( projection_exception(PJD_ERR_GEOCENTRIC) );
- //return PJD_ERR_GEOCENTRIC;
-
- if( srcdefn.to_meter != 1.0 )
- {
- for(std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = range::at(range, i);
- if( ! is_invalid_point(point) )
- {
- set<0>(point, get<0>(point) * srcdefn.to_meter);
- set<1>(point, get<1>(point) * srcdefn.to_meter);
- }
- }
- }
-
- range_wrapper<Range, false> rng(range);
- int err = pj_geocentric_to_geodetic( srcdefn.a_orig, srcdefn.es_orig,
- rng );
- if( err != 0 )
- BOOST_THROW_EXCEPTION( projection_exception(err) );
- //return err;
-
- // NOTE: here 3D cartesian ECEF is converted into 3D geodetic LLH
- }
-
-/* -------------------------------------------------------------------- */
-/* Transform source points to lat/long, if they aren't */
-/* already. */
-/* -------------------------------------------------------------------- */
- else if( !srcdefn.is_latlong )
- {
- // Point should be cartesian 2D or 3D (map projection)
-
- /* Check first if projection is invertible. */
- /*if( (srcdefn->inv3d == NULL) && (srcdefn->inv == NULL))
- {
- pj_ctx_set_errno( pj_get_ctx(srcdefn), -17 );
- pj_log( pj_get_ctx(srcdefn), PJ_LOG_ERROR,
- "pj_transform(): source projection not invertible" );
- return -17;
- }*/
-
- /* If invertible - First try inv3d if defined */
- //if (srcdefn->inv3d != NULL)
- //{
- // /* Three dimensions must be defined */
- // if ( z == NULL)
- // {
- // pj_ctx_set_errno( pj_get_ctx(srcdefn), PJD_ERR_GEOCENTRIC);
- // return PJD_ERR_GEOCENTRIC;
- // }
-
- // for (i=0; i < point_count; i++)
- // {
- // XYZ projected_loc;
- // XYZ geodetic_loc;
-
- // projected_loc.u = x[point_offset*i];
- // projected_loc.v = y[point_offset*i];
- // projected_loc.w = z[point_offset*i];
-
- // if (projected_loc.u == HUGE_VAL)
- // continue;
-
- // geodetic_loc = pj_inv3d(projected_loc, srcdefn);
- // if( srcdefn->ctx->last_errno != 0 )
- // {
- // if( (srcdefn->ctx->last_errno != 33 /*EDOM*/
- // && srcdefn->ctx->last_errno != 34 /*ERANGE*/ )
- // && (srcdefn->ctx->last_errno > 0
- // || srcdefn->ctx->last_errno < -44 || point_count == 1
- // || transient_error[-srcdefn->ctx->last_errno] == 0 ) )
- // return srcdefn->ctx->last_errno;
- // else
- // {
- // geodetic_loc.u = HUGE_VAL;
- // geodetic_loc.v = HUGE_VAL;
- // geodetic_loc.w = HUGE_VAL;
- // }
- // }
-
- // x[point_offset*i] = geodetic_loc.u;
- // y[point_offset*i] = geodetic_loc.v;
- // z[point_offset*i] = geodetic_loc.w;
-
- // }
-
- //}
- //else
- {
- /* Fallback to the original PROJ.4 API 2d inversion - inv */
- for( std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = range::at(range, i);
-
- if( is_invalid_point(point) )
- continue;
-
- try
- {
- pj_inv(srcprj, srcdefn, point, point);
- }
- catch(projection_exception const& e)
- {
- if( (e.code() != 33 /*EDOM*/
- && e.code() != 34 /*ERANGE*/ )
- && (e.code() > 0
- || e.code() < -44 /*|| point_count == 1*/
- || transient_error[-e.code()] == 0) ) {
- BOOST_RETHROW
- } else {
- set_invalid_point(point);
- result = false;
- if (point_count == 1)
- return result;
- }
- }
- }
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* But if they are already lat long, adjust for the prime */
-/* meridian if there is one in effect. */
-/* -------------------------------------------------------------------- */
- if( srcdefn.from_greenwich != 0.0 )
- {
- for( std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = range::at(range, i);
-
- if( ! is_invalid_point(point) )
- set<0>(point, get<0>(point) + srcdefn.from_greenwich);
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* Do we need to translate from geoid to ellipsoidal vertical */
-/* datum? */
-/* -------------------------------------------------------------------- */
- /*if( srcdefn->has_geoid_vgrids && z != NULL )
- {
- if( pj_apply_vgridshift( srcdefn, "sgeoidgrids",
- &(srcdefn->vgridlist_geoid),
- &(srcdefn->vgridlist_geoid_count),
- 0, point_count, point_offset, x, y, z ) != 0 )
- return pj_ctx_get_errno(srcdefn->ctx);
- }*/
-
-/* -------------------------------------------------------------------- */
-/* Convert datums if needed, and possible. */
-/* -------------------------------------------------------------------- */
- if ( ! pj_datum_transform( srcdefn, dstdefn, range ) )
- {
- result = false;
- }
-
-/* -------------------------------------------------------------------- */
-/* Do we need to translate from ellipsoidal to geoid vertical */
-/* datum? */
-/* -------------------------------------------------------------------- */
- /*if( dstdefn->has_geoid_vgrids && z != NULL )
- {
- if( pj_apply_vgridshift( dstdefn, "sgeoidgrids",
- &(dstdefn->vgridlist_geoid),
- &(dstdefn->vgridlist_geoid_count),
- 1, point_count, point_offset, x, y, z ) != 0 )
- return dstdefn->ctx->last_errno;
- }*/
-
-/* -------------------------------------------------------------------- */
-/* But if they are staying lat long, adjust for the prime */
-/* meridian if there is one in effect. */
-/* -------------------------------------------------------------------- */
- if( dstdefn.from_greenwich != 0.0 )
- {
- for( std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = range::at(range, i);
-
- if( ! is_invalid_point(point) )
- set<0>(point, get<0>(point) - dstdefn.from_greenwich);
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* Transform destination latlong to geocentric if required. */
-/* -------------------------------------------------------------------- */
- if( dstdefn.is_geocent )
- {
- // Point should be cartesian 3D (ECEF)
- if (dimension < 3)
- BOOST_THROW_EXCEPTION( projection_exception(PJD_ERR_GEOCENTRIC) );
- //return PJD_ERR_GEOCENTRIC;
-
- // NOTE: In the original code the return value of the following
- // function is not checked
- range_wrapper<Range, false> rng(range);
- int err = pj_geodetic_to_geocentric( dstdefn.a_orig, dstdefn.es_orig,
- rng );
- if( err == -14 )
- result = false;
- else
- BOOST_THROW_EXCEPTION( projection_exception(err) );
-
- if( dstdefn.fr_meter != 1.0 )
- {
- for( std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = range::at(range, i);
- if( ! is_invalid_point(point) )
- {
- set<0>(point, get<0>(point) * dstdefn.fr_meter);
- set<1>(point, get<1>(point) * dstdefn.fr_meter);
- }
- }
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* Transform destination points to projection coordinates, if */
-/* desired. */
-/* -------------------------------------------------------------------- */
- else if( !dstdefn.is_latlong )
- {
-
- //if( dstdefn->fwd3d != NULL)
- //{
- // for( i = 0; i < point_count; i++ )
- // {
- // XYZ projected_loc;
- // LPZ geodetic_loc;
-
- // geodetic_loc.u = x[point_offset*i];
- // geodetic_loc.v = y[point_offset*i];
- // geodetic_loc.w = z[point_offset*i];
-
- // if (geodetic_loc.u == HUGE_VAL)
- // continue;
-
- // projected_loc = pj_fwd3d( geodetic_loc, dstdefn);
- // if( dstdefn->ctx->last_errno != 0 )
- // {
- // if( (dstdefn->ctx->last_errno != 33 /*EDOM*/
- // && dstdefn->ctx->last_errno != 34 /*ERANGE*/ )
- // && (dstdefn->ctx->last_errno > 0
- // || dstdefn->ctx->last_errno < -44 || point_count == 1
- // || transient_error[-dstdefn->ctx->last_errno] == 0 ) )
- // return dstdefn->ctx->last_errno;
- // else
- // {
- // projected_loc.u = HUGE_VAL;
- // projected_loc.v = HUGE_VAL;
- // projected_loc.w = HUGE_VAL;
- // }
- // }
-
- // x[point_offset*i] = projected_loc.u;
- // y[point_offset*i] = projected_loc.v;
- // z[point_offset*i] = projected_loc.w;
- // }
-
- //}
- //else
- {
- for(std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = range::at(range, i);
-
- if( is_invalid_point(point) )
- continue;
-
- try {
- pj_fwd(dstprj, dstdefn, point, point);
- } catch (projection_exception const& e) {
-
- if( (e.code() != 33 /*EDOM*/
- && e.code() != 34 /*ERANGE*/ )
- && (e.code() > 0
- || e.code() < -44 /*|| point_count == 1*/
- || transient_error[-e.code()] == 0) ) {
- BOOST_RETHROW
- } else {
- set_invalid_point(point);
- result = false;
- if (point_count == 1)
- return result;
- }
- }
- }
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* If a wrapping center other than 0 is provided, rewrap around */
-/* the suggested center (for latlong coordinate systems only). */
-/* -------------------------------------------------------------------- */
- else if( dstdefn.is_latlong && dstdefn.is_long_wrap_set )
- {
- for( std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = range::at(range, i);
- coord_t x = get_as_radian<0>(point);
-
- if( is_invalid_point(point) )
- continue;
-
- // TODO - units-dependant constants could be used instead
- while( x < dstdefn.long_wrap_center - math::pi<coord_t>() )
- x += math::two_pi<coord_t>();
- while( x > dstdefn.long_wrap_center + math::pi<coord_t>() )
- x -= math::two_pi<coord_t>();
-
- set_from_radian<0>(point, x);
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* Transform Z from meters if needed. */
-/* -------------------------------------------------------------------- */
- if( dstdefn.vto_meter != 1.0 && dimension > 2 )
- {
- for( std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = geometry::range::at(range, i);
- set_z(point, get_z(point) * dstdefn.vfr_meter);
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* Transform normalized axes into unusual output coordinate axis */
-/* orientation if needed. */
-/* -------------------------------------------------------------------- */
- // Ignored
-
- return result;
-}
-
-/************************************************************************/
-/* pj_geodetic_to_geocentric() */
-/************************************************************************/
-
-template <typename T, typename Range, bool AddZ>
-inline int pj_geodetic_to_geocentric( T const& a, T const& es,
- range_wrapper<Range, AddZ> & range_wrapper )
-
-{
- //typedef typename boost::range_iterator<Range>::type iterator;
- typedef typename boost::range_value<Range>::type point_type;
- //typedef typename coordinate_type<point_type>::type coord_t;
-
- Range & rng = range_wrapper.get_range();
- std::size_t point_count = boost::size(rng);
-
- int ret_errno = 0;
-
- T const b = (es == 0.0) ? a : a * sqrt(1-es);
-
- GeocentricInfo<T> gi;
- if( pj_Set_Geocentric_Parameters( gi, a, b ) != 0 )
- {
- return PJD_ERR_GEOCENTRIC;
- }
-
- for( std::size_t i = 0 ; i < point_count ; ++i )
- {
- point_type & point = range::at(rng, i);
-
- if( is_invalid_point(point) )
- continue;
-
- T X = 0, Y = 0, Z = 0;
- if( pj_Convert_Geodetic_To_Geocentric( gi,
- get_as_radian<0>(point),
- get_as_radian<1>(point),
- range_wrapper.get_z(i), // Height
- X, Y, Z ) != 0 )
- {
- ret_errno = -14;
- set_invalid_point(point);
- /* but keep processing points! */
- }
- else
- {
- set<0>(point, X);
- set<1>(point, Y);
- range_wrapper.set_z(i, Z);
- }
- }
-
- return ret_errno;
-}
-
-/************************************************************************/
-/* pj_geodetic_to_geocentric() */
-/************************************************************************/
-
-template <typename T, typename Range, bool AddZ>
-inline int pj_geocentric_to_geodetic( T const& a, T const& es,
- range_wrapper<Range, AddZ> & range_wrapper )
-
-{
- //typedef typename boost::range_iterator<Range>::type iterator;
- typedef typename boost::range_value<Range>::type point_type;
- //typedef typename coordinate_type<point_type>::type coord_t;
-
- Range & rng = range_wrapper.get_range();
- std::size_t point_count = boost::size(rng);
-
- T const b = (es == 0.0) ? a : a * sqrt(1-es);
-
- GeocentricInfo<T> gi;
- if( pj_Set_Geocentric_Parameters( gi, a, b ) != 0 )
- {
- return PJD_ERR_GEOCENTRIC;
- }
-
- for( std::size_t i = 0 ; i < point_count ; ++i )
- {
- point_type & point = range::at(rng, i);
-
- if( is_invalid_point(point) )
- continue;
-
- T Longitude = 0, Latitude = 0, Height = 0;
- pj_Convert_Geocentric_To_Geodetic( gi,
- get<0>(point),
- get<1>(point),
- range_wrapper.get_z(i), // z
- Longitude, Latitude, Height );
-
- set_from_radian<0>(point, Longitude);
- set_from_radian<1>(point, Latitude);
- range_wrapper.set_z(i, Height); // Height
- }
-
- return 0;
-}
-
-/************************************************************************/
-/* pj_compare_datums() */
-/* */
-/* Returns TRUE if the two datums are identical, otherwise */
-/* FALSE. */
-/************************************************************************/
-
-template <typename Par>
-inline bool pj_compare_datums( Par & srcdefn, Par & dstdefn )
-{
- if( srcdefn.datum_type != dstdefn.datum_type )
- {
- return false;
- }
- else if( srcdefn.a_orig != dstdefn.a_orig
- || math::abs(srcdefn.es_orig - dstdefn.es_orig) > 0.000000000050 )
- {
- /* the tolerance for es is to ensure that GRS80 and WGS84 are
- considered identical */
- return false;
- }
- else if( srcdefn.datum_type == PJD_3PARAM )
- {
- return (srcdefn.datum_params[0] == dstdefn.datum_params[0]
- && srcdefn.datum_params[1] == dstdefn.datum_params[1]
- && srcdefn.datum_params[2] == dstdefn.datum_params[2]);
- }
- else if( srcdefn.datum_type == PJD_7PARAM )
- {
- return (srcdefn.datum_params[0] == dstdefn.datum_params[0]
- && srcdefn.datum_params[1] == dstdefn.datum_params[1]
- && srcdefn.datum_params[2] == dstdefn.datum_params[2]
- && srcdefn.datum_params[3] == dstdefn.datum_params[3]
- && srcdefn.datum_params[4] == dstdefn.datum_params[4]
- && srcdefn.datum_params[5] == dstdefn.datum_params[5]
- && srcdefn.datum_params[6] == dstdefn.datum_params[6]);
- }
- else if( srcdefn.datum_type == PJD_GRIDSHIFT )
- {
- return pj_param(srcdefn.params,"snadgrids").s
- == pj_param(dstdefn.params,"snadgrids").s;
- }
- else
- return true;
-}
-
-/************************************************************************/
-/* pj_geocentic_to_wgs84() */
-/************************************************************************/
-
-template <typename Par, typename Range, bool AddZ>
-inline int pj_geocentric_to_wgs84( Par const& defn,
- range_wrapper<Range, AddZ> & range_wrapper )
-
-{
- typedef typename boost::range_value<Range>::type point_type;
- typedef typename coordinate_type<point_type>::type coord_t;
-
- Range & rng = range_wrapper.get_range();
- std::size_t point_count = boost::size(rng);
-
- if( defn.datum_type == PJD_3PARAM )
- {
- for(std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = range::at(rng, i);
-
- if( is_invalid_point(point) )
- continue;
-
- set<0>(point, get<0>(point) + Dx_BF(defn));
- set<1>(point, get<1>(point) + Dy_BF(defn));
- range_wrapper.set_z(i, range_wrapper.get_z(i) + Dz_BF(defn));
- }
- }
- else if( defn.datum_type == PJD_7PARAM )
- {
- for(std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = range::at(rng, i);
-
- if( is_invalid_point(point) )
- continue;
-
- coord_t x = get<0>(point);
- coord_t y = get<1>(point);
- coord_t z = range_wrapper.get_z(i);
-
- coord_t x_out, y_out, z_out;
-
- x_out = M_BF(defn)*( x - Rz_BF(defn)*y + Ry_BF(defn)*z) + Dx_BF(defn);
- y_out = M_BF(defn)*( Rz_BF(defn)*x + y - Rx_BF(defn)*z) + Dy_BF(defn);
- z_out = M_BF(defn)*(-Ry_BF(defn)*x + Rx_BF(defn)*y + z) + Dz_BF(defn);
-
- set<0>(point, x_out);
- set<1>(point, y_out);
- range_wrapper.set_z(i, z_out);
- }
- }
-
- return 0;
-}
-
-/************************************************************************/
-/* pj_geocentic_from_wgs84() */
-/************************************************************************/
-
-template <typename Par, typename Range, bool AddZ>
-inline int pj_geocentric_from_wgs84( Par const& defn,
- range_wrapper<Range, AddZ> & range_wrapper )
-
-{
- typedef typename boost::range_value<Range>::type point_type;
- typedef typename coordinate_type<point_type>::type coord_t;
-
- Range & rng = range_wrapper.get_range();
- std::size_t point_count = boost::size(rng);
-
- if( defn.datum_type == PJD_3PARAM )
- {
- for(std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = range::at(rng, i);
-
- if( is_invalid_point(point) )
- continue;
-
- set<0>(point, get<0>(point) - Dx_BF(defn));
- set<1>(point, get<1>(point) - Dy_BF(defn));
- range_wrapper.set_z(i, range_wrapper.get_z(i) - Dz_BF(defn));
- }
- }
- else if( defn.datum_type == PJD_7PARAM )
- {
- for(std::size_t i = 0; i < point_count; i++ )
- {
- point_type & point = range::at(rng, i);
-
- if( is_invalid_point(point) )
- continue;
-
- coord_t x = get<0>(point);
- coord_t y = get<1>(point);
- coord_t z = range_wrapper.get_z(i);
-
- coord_t x_tmp = (x - Dx_BF(defn)) / M_BF(defn);
- coord_t y_tmp = (y - Dy_BF(defn)) / M_BF(defn);
- coord_t z_tmp = (z - Dz_BF(defn)) / M_BF(defn);
-
- x = x_tmp + Rz_BF(defn)*y_tmp - Ry_BF(defn)*z_tmp;
- y = -Rz_BF(defn)*x_tmp + y_tmp + Rx_BF(defn)*z_tmp;
- z = Ry_BF(defn)*x_tmp - Rx_BF(defn)*y_tmp + z_tmp;
-
- set<0>(point, x);
- set<1>(point, y);
- range_wrapper.set_z(i, z);
- }
- }
-
- return 0;
-}
-
-
-inline bool pj_datum_check_error(int err)
-{
- return err != 0 && (err > 0 || transient_error[-err] == 0);
-}
-
-/************************************************************************/
-/* pj_datum_transform() */
-/* */
-/* The input should be long/lat/z coordinates in radians in the */
-/* source datum, and the output should be long/lat/z */
-/* coordinates in radians in the destination datum. */
-/************************************************************************/
-
-template <typename Par, typename Range>
-inline bool pj_datum_transform( Par const& srcdefn, Par const& dstdefn,
- Range & range )
-
-{
- typedef typename Par::type calc_t;
- bool result = true;
-
- calc_t src_a, src_es, dst_a, dst_es;
-
-/* -------------------------------------------------------------------- */
-/* We cannot do any meaningful datum transformation if either */
-/* the source or destination are of an unknown datum type */
-/* (ie. only a +ellps declaration, no +datum). This is new */
-/* behavior for PROJ 4.6.0. */
-/* -------------------------------------------------------------------- */
- if( srcdefn.datum_type == PJD_UNKNOWN
- || dstdefn.datum_type == PJD_UNKNOWN )
- return result;
-
-/* -------------------------------------------------------------------- */
-/* Short cut if the datums are identical. */
-/* -------------------------------------------------------------------- */
- if( pj_compare_datums( srcdefn, dstdefn ) )
- return result;
-
- src_a = srcdefn.a_orig;
- src_es = srcdefn.es_orig;
-
- dst_a = dstdefn.a_orig;
- dst_es = dstdefn.es_orig;
-
-/* -------------------------------------------------------------------- */
-/* Create a temporary Z array if one is not provided. */
-/* -------------------------------------------------------------------- */
-
- range_wrapper<Range> z_range(range);
-
-/* -------------------------------------------------------------------- */
-/* If this datum requires grid shifts, then apply it to geodetic */
-/* coordinates. */
-/* -------------------------------------------------------------------- */
- /*if( srcdefn.datum_type == PJD_GRIDSHIFT )
- {
- try {
- pj_apply_gridshift_2( srcdefn, 0, point_count, point_offset, x, y, z );
- } catch (projection_exception const& e) {
- if (pj_datum_check_error(e.code())) {
- BOOST_RETHROW
- }
- }
-
- src_a = SRS_WGS84_SEMIMAJOR;
- src_es = SRS_WGS84_ESQUARED;
- }
-
- if( dstdefn.datum_type == PJD_GRIDSHIFT )
- {
- dst_a = SRS_WGS84_SEMIMAJOR;
- dst_es = SRS_WGS84_ESQUARED;
- }*/
-
-/* ==================================================================== */
-/* Do we need to go through geocentric coordinates? */
-/* ==================================================================== */
- if( src_es != dst_es || src_a != dst_a
- || srcdefn.datum_type == PJD_3PARAM
- || srcdefn.datum_type == PJD_7PARAM
- || dstdefn.datum_type == PJD_3PARAM
- || dstdefn.datum_type == PJD_7PARAM)
- {
-/* -------------------------------------------------------------------- */
-/* Convert to geocentric coordinates. */
-/* -------------------------------------------------------------------- */
- int err = pj_geodetic_to_geocentric( src_a, src_es, z_range );
- if (pj_datum_check_error(err))
- BOOST_THROW_EXCEPTION( projection_exception(err) );
- else if (err != 0)
- result = false;
-
-/* -------------------------------------------------------------------- */
-/* Convert between datums. */
-/* -------------------------------------------------------------------- */
- if( srcdefn.datum_type == PJD_3PARAM
- || srcdefn.datum_type == PJD_7PARAM )
- {
- try {
- pj_geocentric_to_wgs84( srcdefn, z_range );
- } catch (projection_exception const& e) {
- if (pj_datum_check_error(e.code())) {
- BOOST_RETHROW
- }
- }
- }
-
- if( dstdefn.datum_type == PJD_3PARAM
- || dstdefn.datum_type == PJD_7PARAM )
- {
- try {
- pj_geocentric_from_wgs84( dstdefn, z_range );
- } catch (projection_exception const& e) {
- if (pj_datum_check_error(e.code())) {
- BOOST_RETHROW
- }
- }
- }
-
-/* -------------------------------------------------------------------- */
-/* Convert back to geodetic coordinates. */
-/* -------------------------------------------------------------------- */
- err = pj_geocentric_to_geodetic( dst_a, dst_es, z_range );
- if (pj_datum_check_error(err))
- BOOST_THROW_EXCEPTION( projection_exception(err) );
- else if (err != 0)
- result = false;
- }
-
-/* -------------------------------------------------------------------- */
-/* Apply grid shift to destination if required. */
-/* -------------------------------------------------------------------- */
- /*if( dstdefn.datum_type == PJD_GRIDSHIFT )
- {
- try {
- pj_apply_gridshift_2( dstdefn, 1, point_count, point_offset, x, y, z );
- } catch (projection_exception const& e) {
- if (pj_datum_check_error(e.code()))
- BOOST_RETHROW
- }
- }*/
-
- return result;
-}
-
-} // namespace detail
-
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_SRS_PROJECTIONS_IMPL_PJ_TRANSFORM_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_tsfn.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_tsfn.hpp
deleted file mode 100644
index d39a0fb2fc8..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_tsfn.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PJ_TSFN_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PJ_TSFN_HPP
-
-#include <boost/geometry/util/math.hpp>
-
-namespace boost { namespace geometry { namespace projections {
-namespace detail {
-
- /* determine small t */
- template <typename T>
- inline T pj_tsfn(T const& phi, T sinphi, T const& e)
- {
- sinphi *= e;
- return (tan (.5 * (geometry::math::half_pi<T>() - phi)) /
- pow((1. - sinphi) / (1. + sinphi), .5 * e));
- }
-
-} // namespace detail
-}}} // namespace boost::geometry::projections
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_units.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_units.hpp
deleted file mode 100644
index 269b8ff92ee..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_units.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_UNITS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_UNITS_HPP
-
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-
-namespace boost { namespace geometry { namespace projections {
-namespace detail {
-
-/* Field 2 that contains the multiplier to convert named units to meters
-** may be expressed by either a simple floating point constant or a
-** numerator/denomenator values (e.g. 1/1000) */
-
-static const PJ_UNITS pj_units[] =
-{
- { "km", "1000.", "Kilometer" },
- { "m", "1.", "Meter" },
- { "dm", "1/10", "Decimeter" },
- { "cm", "1/100", "Centimeter" },
- { "mm", "1/1000", "Millimeter" },
- { "kmi", "1852.0", "International Nautical Mile" },
- { "in", "0.0254", "International Inch" },
- { "ft", "0.3048", "International Foot" },
- { "yd", "0.9144", "International Yard" },
- { "mi", "1609.344", "International Statute Mile" },
- { "fath", "1.8288", "International Fathom" },
- { "ch", "20.1168", "International Chain" },
- { "link", "0.201168", "International Link" },
- { "us-in", "1./39.37", "U.S. Surveyor's Inch" },
- { "us-ft", "0.304800609601219", "U.S. Surveyor's Foot" },
- { "us-yd", "0.914401828803658", "U.S. Surveyor's Yard" },
- { "us-ch", "20.11684023368047", "U.S. Surveyor's Chain" },
- { "us-mi", "1609.347218694437", "U.S. Surveyor's Statute Mile" },
- { "ind-yd", "0.91439523", "Indian Yard" },
- { "ind-ft", "0.30479841", "Indian Foot" },
- { "ind-ch", "20.11669506", "Indian Chain" }
-};
-
-} // detail
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PJ_UNITS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_zpoly1.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_zpoly1.hpp
deleted file mode 100644
index 613b6d2b35a..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/pj_zpoly1.hpp
+++ /dev/null
@@ -1,106 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_ZPOLY1_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ZPOLY1_HPP
-
-
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-
-
-namespace boost { namespace geometry { namespace projections { namespace detail {
-
- /* evaluate complex polynomial */
-
- /* note: coefficients are always from C_1 to C_n
- ** i.e. C_0 == (0., 0)
- ** n should always be >= 1 though no checks are made
- */
- template <typename T>
- inline COMPLEX<T>
- pj_zpoly1(COMPLEX<T> z, const COMPLEX<T> *C, int n)
- {
- COMPLEX<T> a;
- T t;
-
- a = *(C += n);
- while (n-- > 0)
- {
- a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i;
- a.i = C->i + z.r * a.i + z.i * t;
- }
- a.r = z.r * (t = a.r) - z.i * a.i;
- a.i = z.r * a.i + z.i * t;
- return a;
- }
-
- /* evaluate complex polynomial and derivative */
- template <typename T>
- inline COMPLEX<T>
- pj_zpolyd1(COMPLEX<T> z, const COMPLEX<T> *C, int n, COMPLEX<T> *der)
- {
- T t;
- bool first = true;
-
- COMPLEX<T> a = *(C += n);
- COMPLEX<T> b = a;
- while (n-- > 0)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- b.r = a.r + z.r * (t = b.r) - z.i * b.i;
- b.i = a.i + z.r * b.i + z.i * t;
- }
- a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i;
- a.i = C->i + z.r * a.i + z.i * t;
- }
- b.r = a.r + z.r * (t = b.r) - z.i * b.i;
- b.i = a.i + z.r * b.i + z.i * t;
- a.r = z.r * (t = a.r) - z.i * a.i;
- a.i = z.r * a.i + z.i * t;
- *der = b;
- return a;
- }
-
-}}}} // namespace boost::geometry::projections::detail
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/proj_mdist.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/proj_mdist.hpp
deleted file mode 100644
index 1c325df1c64..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/proj_mdist.hpp
+++ /dev/null
@@ -1,144 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4
-
-// Copyright (c) 2008-2012 Barend Gehrels, 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PROJ_MDIST_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PROJ_MDIST_HPP
-
-
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-namespace detail
-{
- static const int MDIST_MAX_ITER = 20;
-
- template <typename T>
- struct MDIST
- {
- int nb;
- T es;
- T E;
- T b[MDIST_MAX_ITER];
- };
-
- template <typename CT>
- inline bool proj_mdist_ini(CT const& es, MDIST<CT>& b)
- {
- CT numf, numfi, twon1, denf, denfi, ens, T, twon;
- CT den, El, Es;
- CT E[MDIST_MAX_ITER];
- int i, j;
-
- /* generate E(e^2) and its terms E[] */
- ens = es;
- numf = twon1 = denfi = 1.;
- denf = 1.;
- twon = 4.;
- Es = El = E[0] = 1.;
- for (i = 1; i < MDIST_MAX_ITER ; ++i)
- {
- numf *= (twon1 * twon1);
- den = twon * denf * denf * twon1;
- T = numf/den;
- Es -= (E[i] = T * ens);
- ens *= es;
- twon *= 4.;
- denf *= ++denfi;
- twon1 += 2.;
- if (Es == El) /* jump out if no change */
- break;
- El = Es;
- }
- b.nb = i - 1;
- b.es = es;
- b.E = Es;
- /* generate b_n coefficients--note: collapse with prefix ratios */
- b.b[0] = Es = 1. - Es;
- numf = denf = 1.;
- numfi = 2.;
- denfi = 3.;
- for (j = 1; j < i; ++j)
- {
- Es -= E[j];
- numf *= numfi;
- denf *= denfi;
- b.b[j] = Es * numf / denf;
- numfi += 2.;
- denfi += 2.;
- }
- return true;
- }
-
- template <typename T>
- inline T proj_mdist(T const& phi, T const& sphi, T const& cphi, MDIST<T> const& b)
- {
- T sc, sum, sphi2, D;
- int i;
-
- sc = sphi * cphi;
- sphi2 = sphi * sphi;
- D = phi * b.E - b.es * sc / sqrt(1. - b.es * sphi2);
- sum = b.b[i = b.nb];
- while (i) sum = b.b[--i] + sphi2 * sum;
- return(D + sc * sum);
- }
-
- template <typename T>
- inline T proj_inv_mdist(T const& dist, MDIST<T> const& b)
- {
- static const T TOL = 1e-14;
- T s, t, phi, k;
- int i;
-
- k = 1./(1.- b.es);
- i = MDIST_MAX_ITER;
- phi = dist;
- while ( i-- ) {
- s = sin(phi);
- t = 1. - b.es * s * s;
- phi -= t = (proj_mdist(phi, s, cos(phi), b) - dist) *
- (t * sqrt(t)) * k;
- if (geometry::math::abs(t) < TOL) /* that is no change */
- return phi;
- }
- /* convergence failed */
- BOOST_THROW_EXCEPTION( projection_exception(-17) );
- }
-} // namespace detail
-
-}}} // namespace boost::geometry::projections
-
-#endif
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/impl/projects.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/impl/projects.hpp
deleted file mode 100644
index 232ae67ae95..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/impl/projects.hpp
+++ /dev/null
@@ -1,272 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// This file is manually converted from PROJ4 (projects.h)
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Geometry Library by Barend Gehrels (Geodan, Amsterdam)
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMPL_PROJECTS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMPL_PROJECTS_HPP
-
-
-#include <cstring>
-#include <string>
-#include <vector>
-
-#include <boost/geometry/srs/projections/exception.hpp>
-#include <boost/math/constants/constants.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_pod.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-/* some useful constants */
-template <typename T>
-inline T ONEPI() { return boost::math::constants::pi<T>(); }
-template <typename T>
-inline T HALFPI() { return boost::math::constants::half_pi<T>(); }
-template <typename T>
-inline T FORTPI() { return boost::math::constants::pi<T>() / T(4); }
-template <typename T>
-inline T TWOPI() { return boost::math::constants::two_pi<T>(); }
-template <typename T>
-inline T TWO_D_PI() { return boost::math::constants::two_div_pi<T>(); }
-template <typename T>
-inline T HALFPI_SQR() { return 2.4674011002723396547086227499689; }
-template <typename T>
-inline T PI_SQR() { return boost::math::constants::pi_sqr<T>(); }
-template <typename T>
-inline T THIRD() { return 0.3333333333333333333333333333333; }
-template <typename T>
-inline T TWOTHIRD() { return 0.6666666666666666666666666666666; }
-template <typename T>
-inline T PI_HALFPI() { return 4.7123889803846898576939650749193; }
-template <typename T>
-inline T TWOPI_HALFPI() { return 7.8539816339744830961566084581988; }
-template <typename T>
-inline T PI_DIV_3() { return 1.0471975511965977461542144610932; }
-
-/* datum_type values */
-static const int PJD_UNKNOWN = 0;
-static const int PJD_3PARAM = 1;
-static const int PJD_7PARAM = 2;
-static const int PJD_GRIDSHIFT = 3;
-static const int PJD_WGS84 = 4; /* WGS84 (or anything considered equivelent) */
-
-/* library errors */
-static const int PJD_ERR_GEOCENTRIC = -45;
-static const int PJD_ERR_AXIS = -47;
-static const int PJD_ERR_GRID_AREA = -48;
-static const int PJD_ERR_CATALOG = -49;
-
-template <typename T>
-struct pvalue
-{
- std::string param;
- int used;
-
- int i;
- T f;
- std::string s;
-};
-
-template <typename T>
-struct pj_const_pod
-{
- int over; /* over-range flag */
- int geoc; /* geocentric latitude flag */
- int is_latlong; /* proj=latlong ... not really a projection at all */
- int is_geocent; /* proj=geocent ... not really a projection at all */
- T
- a, /* major axis or radius if es==0 */
- a_orig, /* major axis before any +proj related adjustment */
- es, /* e ^ 2 */
- es_orig, /* es before any +proj related adjustment */
- e, /* eccentricity */
- ra, /* 1/A */
- one_es, /* 1 - e^2 */
- rone_es, /* 1/one_es */
- lam0, phi0, /* central longitude, latitude */
- x0, y0, /* easting and northing */
- k0, /* general scaling factor */
- to_meter, fr_meter, /* cartesian scaling */
- vto_meter, vfr_meter; /* Vertical scaling. Internal unit [m] */
-
- int datum_type; /* PJD_UNKNOWN/3PARAM/7PARAM/GRIDSHIFT/WGS84 */
- T datum_params[7];
- T from_greenwich; /* prime meridian offset (in radians) */
- T long_wrap_center; /* 0.0 for -180 to 180, actually in radians*/
- bool is_long_wrap_set;
-
- // Initialize all variables to zero
- pj_const_pod()
- {
- std::memset(this, 0, sizeof(pj_const_pod));
- }
-};
-
-template <typename T>
-struct pj_const_non_pod
-{
- int over; /* over-range flag */
- int geoc; /* geocentric latitude flag */
- int is_latlong; /* proj=latlong ... not really a projection at all */
- int is_geocent; /* proj=geocent ... not really a projection at all */
- T
- a, /* major axis or radius if es==0 */
- a_orig, /* major axis before any +proj related adjustment */
- es, /* e ^ 2 */
- es_orig, /* es before any +proj related adjustment */
- e, /* eccentricity */
- ra, /* 1/A */
- one_es, /* 1 - e^2 */
- rone_es, /* 1/one_es */
- lam0, phi0, /* central longitude, latitude */
- x0, y0, /* easting and northing */
- k0, /* general scaling factor */
- to_meter, fr_meter, /* cartesian scaling */
- vto_meter, vfr_meter; /* Vertical scaling. Internal unit [m] */
-
- int datum_type; /* PJD_UNKNOWN/3PARAM/7PARAM/GRIDSHIFT/WGS84 */
- T datum_params[7];
- T from_greenwich; /* prime meridian offset (in radians) */
- T long_wrap_center; /* 0.0 for -180 to 180, actually in radians*/
- bool is_long_wrap_set;
-
- // Initialize all variables to zero
- pj_const_non_pod()
- : over(0), geoc(0), is_latlong(0), is_geocent(0)
- , a(0), a_orig(0), es(0), es_orig(0), e(0), ra(0)
- , one_es(0), rone_es(0), lam0(0), phi0(0), x0(0), y0(0), k0(0)
- , to_meter(0), fr_meter(0), vto_meter(0), vfr_meter(0)
- , datum_type(PJD_UNKNOWN)
- , from_greenwich(0), long_wrap_center(0), is_long_wrap_set(false)
- {
- datum_params[0] = 0;
- datum_params[1] = 0;
- datum_params[2] = 0;
- datum_params[3] = 0;
- datum_params[4] = 0;
- datum_params[5] = 0;
- datum_params[6] = 0;
- }
-};
-
-template <typename T>
-struct pj_const
- : boost::mpl::if_c
- <
- boost::is_pod<T>::value,
- pj_const_pod<T>,
- pj_const_non_pod<T>
- >::type
-{};
-
-// PROJ4 complex. Might be replaced with std::complex
-template <typename T>
-struct COMPLEX { T r, i; };
-
-struct PJ_ELLPS
-{
- std::string id; /* ellipse keyword name */
- std::string major; /* a= value */
- std::string ell; /* elliptical parameter */
- std::string name; /* comments */
-};
-
-struct PJ_DATUMS
-{
- std::string id; /* datum keyword */
- std::string defn; /* ie. "to_wgs84=..." */
- std::string ellipse_id; /* ie from ellipse table */
- std::string comments; /* EPSG code, etc */
-};
-
-struct PJ_PRIME_MERIDIANS
-{
- std::string id; /* prime meridian keyword */
- std::string defn; /* offset from greenwich in DMS format. */
-};
-
-struct PJ_UNITS
-{
- std::string id; /* units keyword */
- std::string to_meter; /* multiply by value to get meters */
- std::string name; /* comments */
-};
-
-template <typename T>
-struct DERIVS
-{
- T x_l, x_p; /* derivatives of x for lambda-phi */
- T y_l, y_p; /* derivatives of y for lambda-phi */
-};
-
-template <typename T>
-struct FACTORS
-{
- DERIVS<T> der;
- T h, k; /* meridinal, parallel scales */
- T omega, thetap; /* angular distortion, theta prime */
- T conv; /* convergence */
- T s; /* areal scale factor */
- T a, b; /* max-min scale error */
- int code; /* info as to analytics, see following */
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-/*!
- \brief parameters, projection parameters
- \details This structure initializes all projections
- \ingroup projection
-*/
-template <typename T>
-struct parameters : public detail::pj_const<T>
-{
- typedef T type;
-
- std::string name;
- std::vector<detail::pvalue<T> > params;
-};
-
-}}} // namespace boost::geometry::projections
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMPL_PROJECTS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/invalid_point.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/invalid_point.hpp
deleted file mode 100644
index 41bc8252c56..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/invalid_point.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_INVALID_POINT_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_INVALID_POINT_HPP
-
-
-#include <cmath>
-
-#include <boost/geometry/core/access.hpp>
-
-
-namespace boost { namespace geometry { namespace projections
-{
-
-// Originally in pj_transform()
-template <typename Point>
-inline void set_invalid_point(Point & point)
-{
- geometry::set<0>(point, HUGE_VAL);
- geometry::set<1>(point, HUGE_VAL);
-}
-
-template <typename Point>
-inline bool is_invalid_point(Point const& point)
-{
- return geometry::get<0>(point) == HUGE_VAL;
-}
-
-}}} // namespace boost::geometry::projections
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_INVALID_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/par4.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/par4.hpp
deleted file mode 100644
index 2b8656ae3e5..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/par4.hpp
+++ /dev/null
@@ -1,501 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_SRS_PROJECTIONS_PAR4_HPP
-#define BOOST_GEOMETRY_SRS_PROJECTIONS_PAR4_HPP
-
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/srs/sphere.hpp>
-#include <boost/geometry/srs/spheroid.hpp>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-
-namespace boost { namespace geometry { namespace srs { namespace par4
-{
-
-// proj
-// defined in projections' implementation files
-
-// ellps
-struct MERIT {};
-struct SGS85 {};
-struct GRS80 {};
-struct IAU76 {};
-struct airy {};
-struct APL4_9 {};
-struct NWL9D {};
-struct mod_airy {};
-struct andrae {};
-struct aust_SA {};
-struct GRS67 {};
-struct bessel {};
-struct bess_nam {};
-struct clrk66 {};
-struct clrk80 {};
-struct clrk80ign {};
-struct CPM {};
-struct delmbr {};
-struct engelis {};
-struct evrst30 {};
-struct evrst48 {};
-struct evrst56 {};
-struct evrst69 {};
-struct evrstSS {};
-struct fschr60 {};
-struct fschr60m {};
-struct fschr68 {};
-struct helmert {};
-struct hough {};
-struct intl {};
-struct krass {};
-struct kaula {};
-struct lerch {};
-struct mprts {};
-struct new_intl {};
-struct plessis {};
-struct SEasia {};
-struct walbeck {};
-struct WGS60 {};
-struct WGS66 {};
-struct WGS72 {};
-struct WGS84 {};
-struct sphere {};
-
-// datum
-//struct WGS84 {}; // already defined above
-struct GGRS87 {};
-struct NAD83 {};
-struct NAD27 {};
-struct potsdam {};
-struct carthage {};
-struct hermannskogel {};
-struct ire65 {};
-struct nzgd49 {};
-struct OSGB36 {};
-
-template <typename P>
-struct proj
-{
- typedef P type;
-};
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template
-<
- typename E,
- typename Tag = typename geometry::tag<E>::type
->
-struct ellps_impl
- : private E // empty base optimization
-{
- typedef E type;
-
- ellps_impl() : E() {}
- explicit ellps_impl(E const& e) : E(e) {}
-
- E const& model() const { return *this; }
-};
-
-template <typename E>
-struct ellps_impl<E, void>
-{
- typedef E type;
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-template<typename E>
-struct ellps
- : par4::detail::ellps_impl<E>
-{
- ellps() {}
- explicit ellps(E const& e)
- : par4::detail::ellps_impl<E>(e)
- {}
-};
-
-template <typename D>
-struct datum
-{
- typedef D type;
-};
-
-template <typename P>
-struct o_proj
-{
- typedef P type;
-};
-
-struct guam {};
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-inline double b_from_a_rf(double a, double rf)
-{
- return a * (1.0 - 1.0 / rf);
-}
-
-template
-<
- typename Ellps,
- typename Tag = typename geometry::tag<typename Ellps::type>::type
->
-struct ellps_traits
-{
- typedef typename Ellps::type model_type;
- static model_type model(Ellps const& e) { return e.model(); }
-};
-
-#define BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_B(NAME, A, B) \
-template <> \
-struct ellps_traits<ellps<par4::NAME>, void> \
-{ \
- typedef srs::spheroid<double> model_type; \
- static model_type model(ellps<par4::NAME> const&) { return model_type(A, B); } \
-};
-
-#define BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(NAME, A, RF) \
-template <> \
-struct ellps_traits<ellps<par4::NAME>, void> \
-{ \
- typedef srs::spheroid<double> model_type; \
- static model_type model(ellps<par4::NAME> const&) { return model_type(A, b_from_a_rf(A, RF)); } \
-};
-
-#define BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_SPHERE(NAME, R) \
-template <> \
-struct ellps_traits<ellps<par4::NAME>, void> \
-{ \
- typedef srs::sphere<double> model_type; \
- static model_type model(ellps<par4::NAME> const&) { return model_type(R); } \
-};
-
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(MERIT, 6378137.0, 298.257)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(SGS85, 6378136.0, 298.257)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(GRS80, 6378137.0, 298.257222101)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(IAU76, 6378140.0, 298.257)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_B (airy, 6377563.396, 6356256.910)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(APL4_9, 6378137.0, 298.25)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(NWL9D, 6378145.0, 298.25)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_B (mod_airy, 6377340.189, 6356034.446)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(andrae, 6377104.43, 300.0)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(aust_SA, 6378160.0, 298.25)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(GRS67, 6378160.0, 298.2471674270)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(bessel, 6377397.155, 299.1528128)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(bess_nam, 6377483.865, 299.1528128)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_B (clrk66, 6378206.4, 6356583.8)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(clrk80, 6378249.145, 293.4663)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(clrk80ign, 6378249.2, 293.4660212936269)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(CPM, 6375738.7, 334.29)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(delmbr, 6376428.0, 311.5)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(engelis, 6378136.05, 298.2566)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(evrst30, 6377276.345, 300.8017)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(evrst48, 6377304.063, 300.8017)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(evrst56, 6377301.243, 300.8017)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(evrst69, 6377295.664, 300.8017)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(evrstSS, 6377298.556, 300.8017)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(fschr60, 6378166.0, 298.3)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(fschr60m, 6378155.0, 298.3)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(fschr68, 6378150.0, 298.3)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(helmert, 6378200.0, 298.3)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(hough, 6378270.0, 297.0)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(intl, 6378388.0, 297.0)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(krass, 6378245.0, 298.3)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(kaula, 6378163.0, 298.24)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(lerch, 6378139.0, 298.257)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(mprts, 6397300.0, 191.0)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_B (new_intl, 6378157.5, 6356772.2)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_B (plessis, 6376523.0, 6355863.0)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_B (SEasia, 6378155.0, 6356773.3205)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_B (walbeck, 6376896.0, 6355834.8467)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(WGS60, 6378165.0, 298.3)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(WGS66, 6378145.0, 298.25)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(WGS72, 6378135.0, 298.26)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_ELLPS_A_RF(WGS84, 6378137.0, 298.257223563)
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_SPHERE (sphere, 6370997.0)
-
-
-template <typename D>
-struct datum_traits
-{
- typedef void ellps_type;
- static std::string id() { return ""; }
- static std::string definition() { return ""; }
-};
-
-#define BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_DATUM(NAME, ID, ELLPS, DEF) \
-template <> \
-struct datum_traits< datum<par4::NAME> > \
-{ \
- typedef par4::ellps<par4::ELLPS> ellps_type; \
- static std::string id() { return ID; } \
- static std::string definition() { return DEF; } \
-};
-
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_DATUM(WGS84, "WGS84", WGS84, "towgs84=0,0,0")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_DATUM(GGRS87, "GGRS87", GRS80, "towgs84=-199.87,74.79,246.62")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_DATUM(NAD83, "NAD83", GRS80, "towgs84=0,0,0")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_DATUM(NAD27, "NAD27", clrk66, "nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_DATUM(potsdam, "potsdam", bessel, "towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_DATUM(carthage, "carthage", clrk80ign, "towgs84=-263.0,6.0,431.0")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_DATUM(hermannskogel, "hermannskogel", bessel, "towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_DATUM(ire65, "ire65", mod_airy, "towgs84=482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_DATUM(nzgd49, "nzgd49", intl, "towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993")
-BOOST_GEOMETRY_PROJECTIONS_DETAIL_REGISTER_DATUM(OSGB36, "OSGB36", airy, "towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894")
-
-
-template
-<
- typename Tuple,
- template <typename> class IsSamePred,
- int I = 0,
- int N = boost::tuples::length<Tuple>::value
->
-struct tuples_find_index_if
- : boost::mpl::if_c
- <
- IsSamePred<typename boost::tuples::element<I, Tuple>::type>::value,
- boost::integral_constant<int, I>,
- typename tuples_find_index_if<Tuple, IsSamePred, I+1, N>::type
- >::type
-{};
-
-template
-<
- typename Tuple,
- template <typename> class IsSamePred,
- int N
->
-struct tuples_find_index_if<Tuple, IsSamePred, N, N>
- : boost::integral_constant<int, N>
-{};
-
-template
-<
- typename Tuple,
- template <typename> class IsSamePred,
- int I = tuples_find_index_if<Tuple, IsSamePred>::value,
- int N = boost::tuples::length<Tuple>::value
->
-struct tuples_find_if
- : boost::tuples::element<I, Tuple>
-{};
-
-template
-<
- typename Tuple,
- template <typename> class IsSamePred,
- int N
->
-struct tuples_find_if<Tuple, IsSamePred, N, N>
-{
- typedef void type;
-};
-
-/*template <typename Param>
-struct is_param
-{
- template <typename T, int D = 0>
- struct is_same_impl : boost::false_type {};
- template <int D>
- struct is_same_impl<Param, D> : boost::true_type {};
-
- template <typename T>
- struct is_same : is_same_impl<T> {};
-};
-
-template <template <typename> class Param>
-struct is_param_t
-{
- template <typename T>
- struct is_same : boost::false_type {};
- template <typename T>
- struct is_same<Param<T> > : boost::true_type {};
-};*/
-
-// NOTE: The following metafunctions are implemented one for each parameter
-// because mingw-gcc-4.1.2 is unable to compile a solution based on template
-// template parameter and member struct template partial specialization
-// (see above).
-
-/*template <typename T>
-struct is_proj : boost::false_type {};
-template <typename T>
-struct is_proj<proj<T> > : boost::true_type {};
-
-template <typename T>
-struct is_ellps : boost::false_type {};
-template <typename T>
-struct is_ellps<ellps<T> > : boost::true_type {};
-
-template <typename T>
-struct is_datum : boost::false_type {};
-template <typename T>
-struct is_datum<datum<T> > : boost::true_type {};
-
-template <typename T>
-struct is_o_proj : boost::false_type {};
-template <typename T>
-struct is_o_proj<o_proj<T> > : boost::true_type {};
-
-template <typename T>
-struct is_guam : boost::false_type {};
-template <>
-struct is_guam<guam> : boost::true_type {};*/
-
-// NOTE: The following implementation seems to work as well.
-
-// TEST
-
-template <typename T, template <typename> class Param>
-struct is_same_t : boost::false_type {};
-template <typename T, template <typename> class Param>
-struct is_same_t<Param<T>, Param> : boost::true_type {};
-
-template <typename Param>
-struct is_param
-{
- template <typename T>
- struct pred : boost::is_same<T, Param> {};
-};
-
-template <template <typename> class Param>
-struct is_param_t
-{
- template <typename T>
- struct pred : is_same_t<T, Param> {};
-};
-
-// pick proj static name
-
-template <typename Tuple>
-struct pick_proj_tag
-{
- typedef typename tuples_find_if
- <
- Tuple,
- // is_proj
- is_param_t<proj>::pred
- >::type proj_type;
-
- static const bool is_non_void = ! boost::is_void<proj_type>::value;
-
- BOOST_MPL_ASSERT_MSG((is_non_void), PROJECTION_NOT_NAMED, (Tuple));
-
- typedef typename proj_type::type type;
-};
-
-
-template <typename Ellps, typename Datum, int EllpsIndex>
-struct pick_ellps_impl
-{
- typedef Ellps type;
- typedef typename ellps_traits<Ellps>::model_type model_type;
- template <typename Tuple>
- static model_type model(Tuple const& tup)
- {
- return ellps_traits<Ellps>::model(boost::get<EllpsIndex>(tup));
- }
-};
-
-template <typename Ellps, int EllpsIndex>
-struct pick_ellps_impl<Ellps, void, EllpsIndex>
-{
- typedef Ellps type;
- typedef typename ellps_traits<Ellps>::model_type model_type;
- template <typename Tuple>
- static model_type model(Tuple const& tup)
- {
- return ellps_traits<Ellps>::model(boost::get<EllpsIndex>(tup));
- }
-};
-
-template <typename Datum, int EllpsIndex>
-struct pick_ellps_impl<void, Datum, EllpsIndex>
-{
- typedef typename datum_traits<Datum>::ellps_type type;
-
- static const bool is_datum_known = ! boost::is_void<type>::value;
- BOOST_MPL_ASSERT_MSG((is_datum_known), UNKNOWN_DATUM, (types<Datum>));
-
- typedef typename ellps_traits<type>::model_type model_type;
- template <typename Tuple>
- static model_type model(Tuple const& )
- {
- return ellps_traits<type>::model(type());
- }
-};
-
-template <int EllpsIndex>
-struct pick_ellps_impl<void, void, EllpsIndex>
-{
- // default ellipsoid
- typedef ellps<WGS84> type;
- typedef typename ellps_traits<type>::model_type model_type;
- template <typename Tuple>
- static model_type model(Tuple const& )
- {
- return ellps_traits<type>::model(type());
- }
-};
-
-// Pick spheroid/sphere model from ellps or datum
-// mimic pj_init() calling pj_datum_set() and pj_ell_set()
-template <typename Tuple>
-struct pick_ellps
- : pick_ellps_impl
- <
- typename tuples_find_if<Tuple, /*is_ellps*/is_param_t<ellps>::pred>::type,
- typename tuples_find_if<Tuple, /*is_datum*/is_param_t<datum>::pred>::type,
- tuples_find_index_if<Tuple, /*is_ellps*/is_param_t<ellps>::pred>::value
- >
-{};
-
-
-template <typename Tuple>
-struct pick_o_proj_tag
-{
- typedef typename tuples_find_if
- <
- Tuple,
- //is_o_proj
- is_param_t<o_proj>::pred
- >::type proj_type;
-
- static const bool is_non_void = ! boost::is_void<proj_type>::value;
-
- BOOST_MPL_ASSERT_MSG((is_non_void), PROJECTION_NOT_NAMED, (Tuple));
-
- typedef typename proj_type::type type;
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-}}}} // namespace boost::geometry::srs::par4
-
-
-#endif // BOOST_GEOMETRY_SRS_PROJECTIONS_PAR4_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/aea.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/aea.hpp
deleted file mode 100644
index 1df5896c347..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/aea.hpp
+++ /dev/null
@@ -1,349 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_AEA_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_AEA_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Purpose: Implementation of the aea (Albers Equal Area) projection.
-// Author: Gerald Evenden
-// Copyright (c) 1995, Gerald Evenden
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_mlfn.hpp>
-#include <boost/geometry/srs/projections/impl/pj_msfn.hpp>
-#include <boost/geometry/srs/projections/impl/pj_qsfn.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct aea {};
- struct leac {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace aea
- {
-
- static const double EPS10 = 1.e-10;
- static const double TOL7 = 1.e-7;
- static const double EPSILON = 1.0e-7;
- static const double TOL = 1.0e-10;
- static const int N_ITER = 15;
-
- template <typename T>
- struct par_aea
- {
- T ec;
- T n;
- T c;
- T dd;
- T n2;
- T rho0;
- T phi1;
- T phi2;
- T en[EN_SIZE];
- int ellips;
- };
-
- /* determine latitude angle phi-1 */
- template <typename T>
- inline T phi1_(T const& qs, T const& Te, T const& Tone_es)
- {
- int i;
- T Phi, sinpi, cospi, con, com, dphi;
-
- Phi = asin (.5 * qs);
- if (Te < EPSILON)
- return( Phi );
- i = N_ITER;
- do {
- sinpi = sin (Phi);
- cospi = cos (Phi);
- con = Te * sinpi;
- com = 1. - con * con;
- dphi = .5 * com * com / cospi * (qs / Tone_es -
- sinpi / com + .5 / Te * log ((1. - con) /
- (1. + con)));
- Phi += dphi;
- } while (fabs(dphi) > TOL && --i);
- return( i ? Phi : HUGE_VAL );
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_aea_ellipsoid : public base_t_fi<base_aea_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_aea<CalculationType> m_proj_parm;
-
- inline base_aea_ellipsoid(const Parameters& par)
- : base_t_fi<base_aea_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid & spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType rho = 0.0;
- if ((rho = this->m_proj_parm.c - (this->m_proj_parm.ellips ? this->m_proj_parm.n * pj_qsfn(sin(lp_lat),
- this->m_par.e, this->m_par.one_es) : this->m_proj_parm.n2 * sin(lp_lat))) < 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- rho = this->m_proj_parm.dd * sqrt(rho);
- xy_x = rho * sin( lp_lon *= this->m_proj_parm.n );
- xy_y = this->m_proj_parm.rho0 - rho * cos(lp_lon);
- }
-
- // INVERSE(e_inverse) ellipsoid & spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType rho = 0.0;
- if( (rho = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.rho0 - xy_y)) != 0.0 ) {
- if (this->m_proj_parm.n < 0.) {
- rho = -rho;
- xy_x = -xy_x;
- xy_y = -xy_y;
- }
- lp_lat = rho / this->m_proj_parm.dd;
- if (this->m_proj_parm.ellips) {
- lp_lat = (this->m_proj_parm.c - lp_lat * lp_lat) / this->m_proj_parm.n;
- if (fabs(this->m_proj_parm.ec - fabs(lp_lat)) > TOL7) {
- if ((lp_lat = phi1_(lp_lat, this->m_par.e, this->m_par.one_es)) == HUGE_VAL)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- } else
- lp_lat = lp_lat < 0. ? -HALFPI : HALFPI;
- } else if (fabs(lp_lat = (this->m_proj_parm.c - lp_lat * lp_lat) / this->m_proj_parm.n2) <= 1.)
- lp_lat = asin(lp_lat);
- else
- lp_lat = lp_lat < 0. ? -HALFPI : HALFPI;
- lp_lon = atan2(xy_x, xy_y) / this->m_proj_parm.n;
- } else {
- lp_lon = 0.;
- lp_lat = this->m_proj_parm.n > 0. ? HALFPI : - HALFPI;
- }
- }
-
- static inline std::string get_name()
- {
- return "aea_ellipsoid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_aea<T>& proj_parm)
- {
- T cosphi, sinphi;
- int secant;
-
- if (fabs(proj_parm.phi1 + proj_parm.phi2) < EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-21) );
- proj_parm.n = sinphi = sin(proj_parm.phi1);
- cosphi = cos(proj_parm.phi1);
- secant = fabs(proj_parm.phi1 - proj_parm.phi2) >= EPS10;
- if( (proj_parm.ellips = (par.es > 0.))) {
- T ml1, m1;
-
- if (!pj_enfn(par.es, proj_parm.en))
- BOOST_THROW_EXCEPTION( projection_exception(0) );
- m1 = pj_msfn(sinphi, cosphi, par.es);
- ml1 = pj_qsfn(sinphi, par.e, par.one_es);
- if (secant) { /* secant cone */
- T ml2, m2;
-
- sinphi = sin(proj_parm.phi2);
- cosphi = cos(proj_parm.phi2);
- m2 = pj_msfn(sinphi, cosphi, par.es);
- ml2 = pj_qsfn(sinphi, par.e, par.one_es);
- proj_parm.n = (m1 * m1 - m2 * m2) / (ml2 - ml1);
- }
- proj_parm.ec = 1. - .5 * par.one_es * log((1. - par.e) /
- (1. + par.e)) / par.e;
- proj_parm.c = m1 * m1 + proj_parm.n * ml1;
- proj_parm.dd = 1. / proj_parm.n;
- proj_parm.rho0 = proj_parm.dd * sqrt(proj_parm.c - proj_parm.n * pj_qsfn(sin(par.phi0),
- par.e, par.one_es));
- } else {
- if (secant) proj_parm.n = .5 * (proj_parm.n + sin(proj_parm.phi2));
- proj_parm.n2 = proj_parm.n + proj_parm.n;
- proj_parm.c = cosphi * cosphi + proj_parm.n2 * sinphi;
- proj_parm.dd = 1. / proj_parm.n;
- proj_parm.rho0 = proj_parm.dd * sqrt(proj_parm.c - proj_parm.n2 * sin(par.phi0));
- }
- }
-
-
- // Albers Equal Area
- template <typename Parameters, typename T>
- inline void setup_aea(Parameters& par, par_aea<T>& proj_parm)
- {
- proj_parm.phi1 = pj_param(par.params, "rlat_1").f;
- proj_parm.phi2 = pj_param(par.params, "rlat_2").f;
- setup(par, proj_parm);
- }
-
- // Lambert Equal Area Conic
- template <typename Parameters, typename T>
- inline void setup_leac(Parameters& par, par_aea<T>& proj_parm)
- {
- static const T HALFPI = detail::HALFPI<T>();
-
- proj_parm.phi2 = pj_param(par.params, "rlat_1").f;
- proj_parm.phi1 = pj_param(par.params, "bsouth").i ? -HALFPI : HALFPI;
- setup(par, proj_parm);
- }
-
- }} // namespace detail::aea
- #endif // doxygen
-
- /*!
- \brief Albers Equal Area projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel (degrees)
- - lat_2: Latitude of second standard parallel (degrees)
- \par Example
- \image html ex_aea.gif
- */
- template <typename CalculationType, typename Parameters>
- struct aea_ellipsoid : public detail::aea::base_aea_ellipsoid<CalculationType, Parameters>
- {
- inline aea_ellipsoid(const Parameters& par) : detail::aea::base_aea_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::aea::setup_aea(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Lambert Equal Area Conic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel (degrees)
- - south: Denotes southern hemisphere UTM zone (boolean)
- \par Example
- \image html ex_leac.gif
- */
- template <typename CalculationType, typename Parameters>
- struct leac_ellipsoid : public detail::aea::base_aea_ellipsoid<CalculationType, Parameters>
- {
- inline leac_ellipsoid(const Parameters& par) : detail::aea::base_aea_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::aea::setup_leac(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::aea, aea_ellipsoid, aea_ellipsoid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::leac, leac_ellipsoid, leac_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class aea_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<aea_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class leac_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<leac_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void aea_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("aea", new aea_entry<CalculationType, Parameters>);
- factory.add_to_factory("leac", new leac_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_AEA_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/aeqd.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/aeqd.hpp
deleted file mode 100644
index de499213db8..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/aeqd.hpp
+++ /dev/null
@@ -1,654 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_AEQD_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_AEQD_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Purpose: Implementation of the aeqd (Azimuthal Equidistant) projection.
-// Author: Gerald Evenden
-// Copyright (c) 1995, Gerald Evenden
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/config.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-#include <boost/geometry/srs/projections/impl/pj_mlfn.hpp>
-
-#include <boost/geometry/srs/projections/par4.hpp>
-
-#include <boost/type_traits/is_same.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct aeqd {};
- //struct aeqd_guam {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace aeqd
- {
-
- static const double EPS10 = 1.e-10;
- static const double TOL = 1.e-14;
- static const int N_POLE = 0;
- static const int S_POLE = 1;
- static const int EQUIT = 2;
- static const int OBLIQ = 3;
-
- template <typename T>
- struct par_aeqd
- {
- T sinph0;
- T cosph0;
- T en[EN_SIZE];
- T M1;
- T N1;
- T Mp;
- T He;
- T G;
- int mode;
- };
-
- template <typename T, typename Par, typename ProjParm>
- inline void e_forward(T& lp_lon, T& lp_lat, T& xy_x, T& xy_y, Par const& par, ProjParm const& proj_parm)
- {
- T coslam, cosphi, sinphi, rho, s, H, H2, c, Az, t, ct, st, cA, sA;
-
- coslam = cos(lp_lon);
- cosphi = cos(lp_lat);
- sinphi = sin(lp_lat);
- switch (proj_parm.mode) {
- case N_POLE:
- coslam = - coslam;
- BOOST_FALLTHROUGH;
- case S_POLE:
- xy_x = (rho = fabs(proj_parm.Mp - pj_mlfn(lp_lat, sinphi, cosphi, proj_parm.en))) *
- sin(lp_lon);
- xy_y = rho * coslam;
- break;
- case EQUIT:
- case OBLIQ:
- if (fabs(lp_lon) < EPS10 && fabs(lp_lat - par.phi0) < EPS10) {
- xy_x = xy_y = 0.;
- break;
- }
- t = atan2(par.one_es * sinphi + par.es * proj_parm.N1 * proj_parm.sinph0 *
- sqrt(1. - par.es * sinphi * sinphi), cosphi);
- ct = cos(t); st = sin(t);
- Az = atan2(sin(lp_lon) * ct, proj_parm.cosph0 * st - proj_parm.sinph0 * coslam * ct);
- cA = cos(Az); sA = sin(Az);
- s = aasin(fabs(sA) < TOL ?
- (proj_parm.cosph0 * st - proj_parm.sinph0 * coslam * ct) / cA :
- sin(lp_lon) * ct / sA );
- H = proj_parm.He * cA;
- H2 = H * H;
- c = proj_parm.N1 * s * (1. + s * s * (- H2 * (1. - H2)/6. +
- s * ( proj_parm.G * H * (1. - 2. * H2 * H2) / 8. +
- s * ((H2 * (4. - 7. * H2) - 3. * proj_parm.G * proj_parm.G * (1. - 7. * H2)) /
- 120. - s * proj_parm.G * H / 48.))));
- xy_x = c * sA;
- xy_y = c * cA;
- break;
- }
- }
-
- template <typename T, typename Par, typename ProjParm>
- inline void e_inverse(T& xy_x, T& xy_y, T& lp_lon, T& lp_lat, Par const& par, ProjParm const& proj_parm)
- {
- static const T HALFPI = detail::HALFPI<T>();
-
- T c, Az, cosAz, A, B, D, E, F, psi, t;
-
- if ((c = boost::math::hypot(xy_x, xy_y)) < EPS10) {
- lp_lat = par.phi0;
- lp_lon = 0.;
- return;
- }
- if (proj_parm.mode == OBLIQ || proj_parm.mode == EQUIT) {
- cosAz = cos(Az = atan2(xy_x, xy_y));
- t = proj_parm.cosph0 * cosAz;
- B = par.es * t / par.one_es;
- A = - B * t;
- B *= 3. * (1. - A) * proj_parm.sinph0;
- D = c / proj_parm.N1;
- E = D * (1. - D * D * (A * (1. + A) / 6. + B * (1. + 3.*A) * D / 24.));
- F = 1. - E * E * (A / 2. + B * E / 6.);
- psi = aasin(proj_parm.sinph0 * cos(E) + t * sin(E));
- lp_lon = aasin(sin(Az) * sin(E) / cos(psi));
- if ((t = fabs(psi)) < EPS10)
- lp_lat = 0.;
- else if (fabs(t - HALFPI) < 0.)
- lp_lat = HALFPI;
- else
- lp_lat = atan((1. - par.es * F * proj_parm.sinph0 / sin(psi)) * tan(psi) /
- par.one_es);
- } else { /* Polar */
- lp_lat = pj_inv_mlfn(proj_parm.mode == N_POLE ? proj_parm.Mp - c : proj_parm.Mp + c,
- par.es, proj_parm.en);
- lp_lon = atan2(xy_x, proj_parm.mode == N_POLE ? -xy_y : xy_y);
- }
- }
-
- template <typename T, typename Par, typename ProjParm>
- inline void e_guam_fwd(T& lp_lon, T& lp_lat, T& xy_x, T& xy_y, Par const& par, ProjParm const& proj_parm)
- {
- T cosphi, sinphi, t;
-
- cosphi = cos(lp_lat);
- sinphi = sin(lp_lat);
- t = 1. / sqrt(1. - par.es * sinphi * sinphi);
- xy_x = lp_lon * cosphi * t;
- xy_y = pj_mlfn(lp_lat, sinphi, cosphi, proj_parm.en) - proj_parm.M1 +
- .5 * lp_lon * lp_lon * cosphi * sinphi * t;
- }
-
- template <typename T, typename Par, typename ProjParm>
- inline void e_guam_inv(T& xy_x, T& xy_y, T& lp_lon, T& lp_lat, Par const& par, ProjParm const& proj_parm)
- {
- T x2, t;
- int i;
-
- x2 = 0.5 * xy_x * xy_x;
- lp_lat = par.phi0;
- for (i = 0; i < 3; ++i) {
- t = par.e * sin(lp_lat);
- lp_lat = pj_inv_mlfn(proj_parm.M1 + xy_y -
- x2 * tan(lp_lat) * (t = sqrt(1. - t * t)), par.es, proj_parm.en);
- }
- lp_lon = xy_x * t / cos(lp_lat);
- }
-
- template <typename T, typename Par, typename ProjParm>
- inline void s_forward(T& lp_lon, T& lp_lat, T& xy_x, T& xy_y, Par const& /*par*/, ProjParm const& proj_parm)
- {
- static const T HALFPI = detail::HALFPI<T>();
-
- T coslam, cosphi, sinphi;
-
- sinphi = sin(lp_lat);
- cosphi = cos(lp_lat);
- coslam = cos(lp_lon);
- switch (proj_parm.mode) {
- case EQUIT:
- xy_y = cosphi * coslam;
- goto oblcon;
- case OBLIQ:
- xy_y = proj_parm.sinph0 * sinphi + proj_parm.cosph0 * cosphi * coslam;
- oblcon:
- if (fabs(fabs(xy_y) - 1.) < TOL)
- if (xy_y < 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- else
- xy_x = xy_y = 0.;
- else {
- xy_y = acos(xy_y);
- xy_y /= sin(xy_y);
- xy_x = xy_y * cosphi * sin(lp_lon);
- xy_y *= (proj_parm.mode == EQUIT) ? sinphi :
- proj_parm.cosph0 * sinphi - proj_parm.sinph0 * cosphi * coslam;
- }
- break;
- case N_POLE:
- lp_lat = -lp_lat;
- coslam = -coslam;
- BOOST_FALLTHROUGH;
- case S_POLE:
- if (fabs(lp_lat - HALFPI) < EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_x = (xy_y = (HALFPI + lp_lat)) * sin(lp_lon);
- xy_y *= coslam;
- break;
- }
- }
-
- template <typename T, typename Par, typename ProjParm>
- inline void s_inverse(T& xy_x, T& xy_y, T& lp_lon, T& lp_lat, Par const& par, ProjParm const& proj_parm)
- {
- static const T ONEPI = detail::ONEPI<T>();
- static const T HALFPI = detail::HALFPI<T>();
-
- T cosc, c_rh, sinc;
-
- if ((c_rh = boost::math::hypot(xy_x, xy_y)) > ONEPI) {
- if (c_rh - EPS10 > ONEPI)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- c_rh = ONEPI;
- } else if (c_rh < EPS10) {
- lp_lat = par.phi0;
- lp_lon = 0.;
- return;
- }
- if (proj_parm.mode == OBLIQ || proj_parm.mode == EQUIT) {
- sinc = sin(c_rh);
- cosc = cos(c_rh);
- if (proj_parm.mode == EQUIT) {
- lp_lat = aasin(xy_y * sinc / c_rh);
- xy_x *= sinc;
- xy_y = cosc * c_rh;
- } else {
- lp_lat = aasin(cosc * proj_parm.sinph0 + xy_y * sinc * proj_parm.cosph0 /
- c_rh);
- xy_y = (cosc - proj_parm.sinph0 * sin(lp_lat)) * c_rh;
- xy_x *= sinc * proj_parm.cosph0;
- }
- lp_lon = atan2(xy_x, xy_y);
- } else if (proj_parm.mode == N_POLE) {
- lp_lat = HALFPI - c_rh;
- lp_lon = atan2(xy_x, -xy_y);
- } else {
- lp_lat = c_rh - HALFPI;
- lp_lon = atan2(xy_x, xy_y);
- }
- }
-
- // Azimuthal Equidistant
- template <typename Parameters, typename T>
- inline void setup_aeqd(Parameters& par, par_aeqd<T>& proj_parm, bool is_sphere, bool is_guam)
- {
- static const T HALFPI = detail::HALFPI<T>();
-
- par.phi0 = pj_param(par.params, "rlat_0").f;
- if (fabs(fabs(par.phi0) - HALFPI) < EPS10) {
- proj_parm.mode = par.phi0 < 0. ? S_POLE : N_POLE;
- proj_parm.sinph0 = par.phi0 < 0. ? -1. : 1.;
- proj_parm.cosph0 = 0.;
- } else if (fabs(par.phi0) < EPS10) {
- proj_parm.mode = EQUIT;
- proj_parm.sinph0 = 0.;
- proj_parm.cosph0 = 1.;
- } else {
- proj_parm.mode = OBLIQ;
- proj_parm.sinph0 = sin(par.phi0);
- proj_parm.cosph0 = cos(par.phi0);
- }
- if (is_sphere) {
- } else {
- if (!pj_enfn(par.es, proj_parm.en))
- BOOST_THROW_EXCEPTION( projection_exception(0) );
- if (is_guam) {
- proj_parm.M1 = pj_mlfn(par.phi0, proj_parm.sinph0, proj_parm.cosph0, proj_parm.en);
- } else {
- switch (proj_parm.mode) {
- case N_POLE:
- proj_parm.Mp = pj_mlfn<T>(HALFPI, 1., 0., proj_parm.en);
- break;
- case S_POLE:
- proj_parm.Mp = pj_mlfn<T>(-HALFPI, -1., 0., proj_parm.en);
- break;
- case EQUIT:
- case OBLIQ:
- proj_parm.N1 = 1. / sqrt(1. - par.es * proj_parm.sinph0 * proj_parm.sinph0);
- proj_parm.G = proj_parm.sinph0 * (proj_parm.He = par.e / sqrt(par.one_es));
- proj_parm.He *= proj_parm.cosph0;
- break;
- }
- }
- }
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_aeqd_e : public base_t_fi<base_aeqd_e<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_aeqd<CalculationType> m_proj_parm;
-
- inline base_aeqd_e(const Parameters& par)
- : base_t_fi<base_aeqd_e<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) elliptical
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- e_forward(lp_lon, lp_lat, xy_x, xy_y, this->m_par, this->m_proj_parm);
- }
-
- // INVERSE(e_inverse) elliptical
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- e_inverse(xy_x, xy_y, lp_lon, lp_lat, this->m_par, this->m_proj_parm);
- }
-
- static inline std::string get_name()
- {
- return "aeqd_e";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_aeqd_e_guam : public base_t_fi<base_aeqd_e_guam<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_aeqd<CalculationType> m_proj_parm;
-
- inline base_aeqd_e_guam(const Parameters& par)
- : base_t_fi<base_aeqd_e_guam<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_guam_fwd) Guam elliptical
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- e_guam_fwd(lp_lon, lp_lat, xy_x, xy_y, this->m_par, this->m_proj_parm);
- }
-
- // INVERSE(e_guam_inv) Guam elliptical
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- e_guam_inv(xy_x, xy_y, lp_lon, lp_lat, this->m_par, this->m_proj_parm);
- }
-
- static inline std::string get_name()
- {
- return "aeqd_e_guam";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename BGParameters, typename CalculationType, typename Parameters>
- struct base_aeqd_e_static : public base_t_fi<base_aeqd_e_static<BGParameters, CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_aeqd<CalculationType> m_proj_parm;
-
- static const bool is_guam = ! boost::is_same
- <
- typename srs::par4::detail::tuples_find_if
- <
- BGParameters,
- //srs::par4::detail::is_guam
- srs::par4::detail::is_param<srs::par4::guam>::pred
- >::type,
- void
- >::value;
-
- inline base_aeqd_e_static(const Parameters& par)
- : base_t_fi<base_aeqd_e_static<BGParameters, CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par)
- {}
-
- // FORWARD(e_forward or e_guam_fwd) elliptical
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- if (is_guam)
- e_guam_fwd(lp_lon, lp_lat, xy_x, xy_y, this->m_par, this->m_proj_parm);
- else
- e_forward(lp_lon, lp_lat, xy_x, xy_y, this->m_par, this->m_proj_parm);
- }
-
- // INVERSE(e_inverse or e_guam_inv) elliptical
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- if (is_guam)
- e_guam_inv(xy_x, xy_y, lp_lon, lp_lat, this->m_par, this->m_proj_parm);
- else
- e_inverse(xy_x, xy_y, lp_lon, lp_lat, this->m_par, this->m_proj_parm);
- }
-
- static inline std::string get_name()
- {
- return "aeqd_e_static";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_aeqd_s : public base_t_fi<base_aeqd_s<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_aeqd<CalculationType> m_proj_parm;
-
- inline base_aeqd_s(const Parameters& par)
- : base_t_fi<base_aeqd_s<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spherical
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- s_forward(lp_lon, lp_lat, xy_x, xy_y, this->m_par, this->m_proj_parm);
- }
-
- // INVERSE(s_inverse) spherical
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- s_inverse(xy_x, xy_y, lp_lon, lp_lat, this->m_par, this->m_proj_parm);
- }
-
- static inline std::string get_name()
- {
- return "aeqd_s";
- }
-
- };
-
- }} // namespace detail::aeqd
- #endif // doxygen
-
- /*!
- \brief Azimuthal Equidistant projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_0: Latitude of origin (degrees)
- - guam (boolean)
- \par Example
- \image html ex_aeqd.gif
- */
- template <typename CalculationType, typename Parameters>
- struct aeqd_e : public detail::aeqd::base_aeqd_e<CalculationType, Parameters>
- {
- inline aeqd_e(const Parameters& par) : detail::aeqd::base_aeqd_e<CalculationType, Parameters>(par)
- {
- detail::aeqd::setup_aeqd(this->m_par, this->m_proj_parm, false, false);
- }
- };
-
- /*!
- \brief Azimuthal Equidistant projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_0: Latitude of origin (degrees)
- - guam (boolean)
- \par Example
- \image html ex_aeqd.gif
- */
- template <typename CalculationType, typename Parameters>
- struct aeqd_e_guam : public detail::aeqd::base_aeqd_e_guam<CalculationType, Parameters>
- {
- inline aeqd_e_guam(const Parameters& par) : detail::aeqd::base_aeqd_e_guam<CalculationType, Parameters>(par)
- {
- detail::aeqd::setup_aeqd(this->m_par, this->m_proj_parm, false, true);
- }
- };
-
- /*!
- \brief Azimuthal Equidistant projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_0: Latitude of origin (degrees)
- - guam (boolean)
- \par Example
- \image html ex_aeqd.gif
- */
- template <typename BGParameters, typename CalculationType, typename Parameters>
- struct aeqd_e_static : public detail::aeqd::base_aeqd_e_static<BGParameters, CalculationType, Parameters>
- {
- inline aeqd_e_static(const Parameters& par) : detail::aeqd::base_aeqd_e_static<BGParameters, CalculationType, Parameters>(par)
- {
- detail::aeqd::setup_aeqd(this->m_par, this->m_proj_parm,
- false,
- detail::aeqd::base_aeqd_e_static<BGParameters, CalculationType, Parameters>::is_guam);
- }
- };
-
- /*!
- \brief Azimuthal Equidistant projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_0: Latitude of origin (degrees)
- - guam (boolean)
- \par Example
- \image html ex_aeqd.gif
- */
- template <typename CalculationType, typename Parameters>
- struct aeqd_s : public detail::aeqd::base_aeqd_s<CalculationType, Parameters>
- {
- inline aeqd_s(const Parameters& par) : detail::aeqd::base_aeqd_s<CalculationType, Parameters>(par)
- {
- detail::aeqd::setup_aeqd(this->m_par, this->m_proj_parm, true, false);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- template <typename BGP, typename CT, typename P>
- struct static_projection_type<srs::par4::aeqd, srs_sphere_tag, BGP, CT, P>
- {
- typedef aeqd_s<CT, P> type;
- };
- template <typename BGP, typename CT, typename P>
- struct static_projection_type<srs::par4::aeqd, srs_spheroid_tag, BGP, CT, P>
- {
- typedef aeqd_e_static<BGP, CT, P> type;
- };
- //BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::aeqd, aeqd_s, aeqd_e_static)
- //BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::aeqd_guam, aeqd_guam, aeqd_guam)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class aeqd_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- bool const guam = pj_param(par.params, "bguam").i != 0;
-
- if (par.es && ! guam)
- return new base_v_fi<aeqd_e<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else if (par.es && guam)
- return new base_v_fi<aeqd_e_guam<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<aeqd_s<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void aeqd_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("aeqd", new aeqd_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_AEQD_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/airy.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/airy.hpp
deleted file mode 100644
index 557d95f3e44..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/airy.hpp
+++ /dev/null
@@ -1,257 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_AIRY_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_AIRY_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Purpose: Implementation of the airy (Airy) projection.
-// Author: Gerald Evenden
-// Copyright (c) 1995, Gerald Evenden
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-#include <boost/geometry/srs/projections/par4.hpp> // airy tag
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- // already defined in par4.hpp as ellps name
- //struct airy {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace airy
- {
-
- static const double EPS = 1.e-10;
- static const int N_POLE = 0;
- static const int S_POLE = 1;
- static const int EQUIT = 2;
- static const int OBLIQ = 3;
-
- template <typename T>
- struct par_airy
- {
- T p_halfpi;
- T sinph0;
- T cosph0;
- T Cb;
- int mode;
- int no_cut; /* do not cut at hemisphere limit */
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_airy_spheroid : public base_t_f<base_airy_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_airy<CalculationType> m_proj_parm;
-
- inline base_airy_spheroid(const Parameters& par)
- : base_t_f<base_airy_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType sinlam, coslam, cosphi, sinphi, t, s, Krho, cosz;
-
- sinlam = sin(lp_lon);
- coslam = cos(lp_lon);
- switch (this->m_proj_parm.mode) {
- case EQUIT:
- case OBLIQ:
- sinphi = sin(lp_lat);
- cosphi = cos(lp_lat);
- cosz = cosphi * coslam;
- if (this->m_proj_parm.mode == OBLIQ)
- cosz = this->m_proj_parm.sinph0 * sinphi + this->m_proj_parm.cosph0 * cosz;
- if (!this->m_proj_parm.no_cut && cosz < -EPS)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- if (fabs(s = 1. - cosz) > EPS) {
- t = 0.5 * (1. + cosz);
- Krho = -log(t)/s - this->m_proj_parm.Cb / t;
- } else
- Krho = 0.5 - this->m_proj_parm.Cb;
- xy_x = Krho * cosphi * sinlam;
- if (this->m_proj_parm.mode == OBLIQ)
- xy_y = Krho * (this->m_proj_parm.cosph0 * sinphi -
- this->m_proj_parm.sinph0 * cosphi * coslam);
- else
- xy_y = Krho * sinphi;
- break;
- case S_POLE:
- case N_POLE:
- lp_lat = fabs(this->m_proj_parm.p_halfpi - lp_lat);
- if (!this->m_proj_parm.no_cut && (lp_lat - EPS) > HALFPI)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- if ((lp_lat *= 0.5) > EPS) {
- t = tan(lp_lat);
- Krho = -2.*(log(cos(lp_lat)) / t + t * this->m_proj_parm.Cb);
- xy_x = Krho * sinlam;
- xy_y = Krho * coslam;
- if (this->m_proj_parm.mode == N_POLE)
- xy_y = -xy_y;
- } else
- xy_x = xy_y = 0.;
- }
- }
-
- static inline std::string get_name()
- {
- return "airy_spheroid";
- }
-
- };
-
- // Airy
- template <typename Parameters, typename T>
- inline void setup_airy(Parameters& par, par_airy<T>& proj_parm)
- {
- static const T HALFPI = detail::HALFPI<T>();
-
- T beta;
-
- proj_parm.no_cut = pj_param(par.params, "bno_cut").i;
- beta = 0.5 * (HALFPI - pj_param(par.params, "rlat_b").f);
- if (fabs(beta) < EPS)
- proj_parm.Cb = -0.5;
- else {
- proj_parm.Cb = 1./tan(beta);
- proj_parm.Cb *= proj_parm.Cb * log(cos(beta));
- }
- if (fabs(fabs(par.phi0) - HALFPI) < EPS)
- if (par.phi0 < 0.) {
- proj_parm.p_halfpi = -HALFPI;
- proj_parm.mode = S_POLE;
- } else {
- proj_parm.p_halfpi = HALFPI;
- proj_parm.mode = N_POLE;
- }
- else {
- if (fabs(par.phi0) < EPS)
- proj_parm.mode = EQUIT;
- else {
- proj_parm.mode = OBLIQ;
- proj_parm.sinph0 = sin(par.phi0);
- proj_parm.cosph0 = cos(par.phi0);
- }
- }
- par.es = 0.;
- }
-
- }} // namespace detail::airy
- #endif // doxygen
-
- /*!
- \brief Airy projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Projection parameters
- - no_cut: Do not cut at hemisphere limit (boolean)
- - lat_b (degrees)
- \par Example
- \image html ex_airy.gif
- */
- template <typename CalculationType, typename Parameters>
- struct airy_spheroid : public detail::airy::base_airy_spheroid<CalculationType, Parameters>
- {
- inline airy_spheroid(const Parameters& par) : detail::airy::base_airy_spheroid<CalculationType, Parameters>(par)
- {
- detail::airy::setup_airy(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::airy, airy_spheroid, airy_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class airy_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<airy_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void airy_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("airy", new airy_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_AIRY_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/aitoff.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/aitoff.hpp
deleted file mode 100644
index 7d34a232879..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/aitoff.hpp
+++ /dev/null
@@ -1,324 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_AITOFF_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_AITOFF_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Purpose: Implementation of the aitoff (Aitoff) and wintri (Winkel Tripel)
-// projections.
-// Author: Gerald Evenden
-// Copyright (c) 1995, Gerald Evenden
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct aitoff {};
- struct wintri {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace aitoff
- {
- template <typename T>
- struct par_aitoff
- {
- T cosphi1;
- int mode;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_aitoff_spheroid : public base_t_fi<base_aitoff_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_aitoff<CalculationType> m_proj_parm;
-
- inline base_aitoff_spheroid(const Parameters& par)
- : base_t_fi<base_aitoff_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType c, d;
-
- if((d = acos(cos(lp_lat) * cos(c = 0.5 * lp_lon)))) {/* basic Aitoff */
- xy_x = 2. * d * cos(lp_lat) * sin(c) * (xy_y = 1. / sin(d));
- xy_y *= d * sin(lp_lat);
- } else
- xy_x = xy_y = 0.;
- if (this->m_proj_parm.mode) { /* Winkel Tripel */
- xy_x = (xy_x + lp_lon * this->m_proj_parm.cosphi1) * 0.5;
- xy_y = (xy_y + lp_lat) * 0.5;
- }
- }
- /***********************************************************************************
- *
- * Inverse functions added by Drazen Tutic and Lovro Gradiser based on paper:
- *
- * I.Özbug Biklirici and Cengizhan Ipbüker. A General Algorithm for the Inverse
- * Transformation of Map Projections Using Jacobian Matrices. In Proceedings of the
- * Third International Symposium Mathematical & Computational Applications,
- * pages 175{182, Turkey, September 2002.
- *
- * Expected accuracy is defined by EPSILON = 1e-12. Should be appropriate for
- * most applications of Aitoff and Winkel Tripel projections.
- *
- * Longitudes of 180W and 180E can be mixed in solution obtained.
- *
- * Inverse for Aitoff projection in poles is undefined, longitude value of 0 is assumed.
- *
- * Contact : dtutic@geof.hr
- * Date: 2015-02-16
- *
- ************************************************************************************/
-
- // INVERSE(s_inverse) sphere
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType ONEPI = detail::ONEPI<CalculationType>();
- static const CalculationType TWOPI = detail::TWOPI<CalculationType>();
- static const CalculationType EPSILON = 1e-12;
-
- int iter, MAXITER = 10, round = 0, MAXROUND = 20;
- CalculationType D, C, f1, f2, f1p, f1l, f2p, f2l, dp, dl, sl, sp, cp, cl, x, y;
-
- if ((fabs(xy_x) < EPSILON) && (fabs(xy_y) < EPSILON )) { lp_lat = 0.; lp_lon = 0.; return; }
-
- /* intial values for Newton-Raphson method */
- lp_lat = xy_y; lp_lon = xy_x;
- do {
- iter = 0;
- do {
- sl = sin(lp_lon * 0.5); cl = cos(lp_lon * 0.5);
- sp = sin(lp_lat); cp = cos(lp_lat);
- D = cp * cl;
- C = 1. - D * D;
- D = acos(D) / pow(C, 1.5);
- f1 = 2. * D * C * cp * sl;
- f2 = D * C * sp;
- f1p = 2.* (sl * cl * sp * cp / C - D * sp * sl);
- f1l = cp * cp * sl * sl / C + D * cp * cl * sp * sp;
- f2p = sp * sp * cl / C + D * sl * sl * cp;
- f2l = 0.5 * (sp * cp * sl / C - D * sp * cp * cp * sl * cl);
- if (this->m_proj_parm.mode) { /* Winkel Tripel */
- f1 = 0.5 * (f1 + lp_lon * this->m_proj_parm.cosphi1);
- f2 = 0.5 * (f2 + lp_lat);
- f1p *= 0.5;
- f1l = 0.5 * (f1l + this->m_proj_parm.cosphi1);
- f2p = 0.5 * (f2p + 1.);
- f2l *= 0.5;
- }
- f1 -= xy_x; f2 -= xy_y;
- dl = (f2 * f1p - f1 * f2p) / (dp = f1p * f2l - f2p * f1l);
- dp = (f1 * f2l - f2 * f1l) / dp;
- while (dl > ONEPI) dl -= ONEPI; /* set to interval [-ONEPI, ONEPI] */
- while (dl < -ONEPI) dl += ONEPI; /* set to interval [-ONEPI, ONEPI] */
- lp_lat -= dp; lp_lon -= dl;
- } while ((fabs(dp) > EPSILON || fabs(dl) > EPSILON) && (iter++ < MAXITER));
- if (lp_lat > TWOPI) lp_lat -= 2.*(lp_lat-TWOPI); /* correct if symmetrical solution for Aitoff */
- if (lp_lat < -TWOPI) lp_lat -= 2.*(lp_lat+TWOPI); /* correct if symmetrical solution for Aitoff */
- if ((fabs(fabs(lp_lat) - TWOPI) < EPSILON) && (!this->m_proj_parm.mode)) lp_lon = 0.; /* if pole in Aitoff, return longitude of 0 */
-
- /* calculate x,y coordinates with solution obtained */
- if((D = acos(cos(lp_lat) * cos(C = 0.5 * lp_lon)))) {/* Aitoff */
- x = 2. * D * cos(lp_lat) * sin(C) * (y = 1. / sin(D));
- y *= D * sin(lp_lat);
- } else
- x = y = 0.;
- if (this->m_proj_parm.mode) { /* Winkel Tripel */
- x = (x + lp_lon * this->m_proj_parm.cosphi1) * 0.5;
- y = (y + lp_lat) * 0.5;
- }
- /* if too far from given values of x,y, repeat with better approximation of phi,lam */
- } while (((fabs(xy_x-x) > EPSILON) || (fabs(xy_y-y) > EPSILON)) && (round++ < MAXROUND));
-
- //if (iter == MAXITER && round == MAXROUND) fprintf(stderr, "Warning: Accuracy of 1e-12 not reached. Last increments: dlat=%e and dlon=%e\n", dp, dl);
- }
-
- static inline std::string get_name()
- {
- return "aitoff_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_aitoff<T>& proj_parm)
- {
- boost::ignore_unused(proj_parm);
- par.es = 0.;
- }
-
-
- // Aitoff
- template <typename Parameters, typename T>
- inline void setup_aitoff(Parameters& par, par_aitoff<T>& proj_parm)
- {
- proj_parm.mode = 0;
- setup(par, proj_parm);
- }
-
- // Winkel Tripel
- template <typename Parameters, typename T>
- inline void setup_wintri(Parameters& par, par_aitoff<T>& proj_parm)
- {
- static const T TWO_D_PI = detail::TWO_D_PI<T>();
-
- proj_parm.mode = 1;
- if (pj_param(par.params, "tlat_1").i) {
- if ((proj_parm.cosphi1 = cos(pj_param(par.params, "rlat_1").f)) == 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-22) );
- } else /* 50d28' or phi1=acos(2/pi) */
- proj_parm.cosphi1 = TWO_D_PI;
- setup(par, proj_parm);
- }
-
- }} // namespace detail::aitoff
- #endif // doxygen
-
- /*!
- \brief Aitoff projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- \par Example
- \image html ex_aitoff.gif
- */
- template <typename CalculationType, typename Parameters>
- struct aitoff_spheroid : public detail::aitoff::base_aitoff_spheroid<CalculationType, Parameters>
- {
- inline aitoff_spheroid(const Parameters& par) : detail::aitoff::base_aitoff_spheroid<CalculationType, Parameters>(par)
- {
- detail::aitoff::setup_aitoff(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Winkel Tripel projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel (degrees)
- \par Example
- \image html ex_wintri.gif
- */
- template <typename CalculationType, typename Parameters>
- struct wintri_spheroid : public detail::aitoff::base_aitoff_spheroid<CalculationType, Parameters>
- {
- inline wintri_spheroid(const Parameters& par) : detail::aitoff::base_aitoff_spheroid<CalculationType, Parameters>(par)
- {
- detail::aitoff::setup_wintri(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::aitoff, aitoff_spheroid, aitoff_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::wintri, wintri_spheroid, wintri_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class aitoff_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<aitoff_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class wintri_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<wintri_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void aitoff_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("aitoff", new aitoff_entry<CalculationType, Parameters>);
- factory.add_to_factory("wintri", new wintri_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_AITOFF_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/august.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/august.hpp
deleted file mode 100644
index 7358cfb12fe..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/august.hpp
+++ /dev/null
@@ -1,168 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_AUGUST_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_AUGUST_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct august {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace august
- {
-
- //static const double M = 1.333333333333333;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_august_spheroid : public base_t_f<base_august_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_august_spheroid(const Parameters& par)
- : base_t_f<base_august_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType M = 1.333333333333333333333333333333333333;
-
- CalculationType t, c1, c, x1, x12, y1, y12;
-
- t = tan(.5 * lp_lat);
- c1 = sqrt(1. - t * t);
- c = 1. + c1 * cos(lp_lon *= .5);
- x1 = sin(lp_lon) * c1 / c;
- y1 = t / c;
- xy_x = M * x1 * (3. + (x12 = x1 * x1) - 3. * (y12 = y1 * y1));
- xy_y = M * y1 * (3. + 3. * x12 - y12);
- }
-
- static inline std::string get_name()
- {
- return "august_spheroid";
- }
-
- };
-
- // August Epicycloidal
- template <typename Parameters>
- inline void setup_august(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::august
- #endif // doxygen
-
- /*!
- \brief August Epicycloidal projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Example
- \image html ex_august.gif
- */
- template <typename CalculationType, typename Parameters>
- struct august_spheroid : public detail::august::base_august_spheroid<CalculationType, Parameters>
- {
- inline august_spheroid(const Parameters& par) : detail::august::base_august_spheroid<CalculationType, Parameters>(par)
- {
- detail::august::setup_august(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::august, august_spheroid, august_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class august_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<august_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void august_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("august", new august_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_AUGUST_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/bacon.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/bacon.hpp
deleted file mode 100644
index 5e8d37980f2..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/bacon.hpp
+++ /dev/null
@@ -1,272 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_BACON_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_BACON_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct apian {};
- struct ortel {};
- struct bacon {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace bacon
- {
-
- //static const double HLFPI2 = 2.46740110027233965467;
- static const double EPS = 1e-10;
-
- struct par_bacon
- {
- int bacn;
- int ortl;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_bacon_spheroid : public base_t_f<base_bacon_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_bacon m_proj_parm;
-
- inline base_bacon_spheroid(const Parameters& par)
- : base_t_f<base_bacon_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType HLFPI2 = detail::HALFPI_SQR<CalculationType>();
-
- CalculationType ax, f;
-
- xy_y = this->m_proj_parm.bacn ? HALFPI * sin(lp_lat) : lp_lat;
- if ((ax = fabs(lp_lon)) >= EPS) {
- if (this->m_proj_parm.ortl && ax >= HALFPI)
- xy_x = sqrt(HLFPI2 - lp_lat * lp_lat + EPS) + ax - HALFPI;
- else {
- f = 0.5 * (HLFPI2 / ax + ax);
- xy_x = ax - f + sqrt(f * f - xy_y * xy_y);
- }
- if (lp_lon < 0.) xy_x = - xy_x;
- } else
- xy_x = 0.;
- }
-
- static inline std::string get_name()
- {
- return "bacon_spheroid";
- }
-
- };
-
- // Apian Globular I
- template <typename Parameters>
- inline void setup_apian(Parameters& par, par_bacon& proj_parm)
- {
- proj_parm.bacn = proj_parm.ortl = 0;
- par.es = 0.;
- }
-
- // Ortelius Oval
- template <typename Parameters>
- inline void setup_ortel(Parameters& par, par_bacon& proj_parm)
- {
- proj_parm.bacn = 0;
- proj_parm.ortl = 1;
- par.es = 0.;
- }
-
- // Bacon Globular
- template <typename Parameters>
- inline void setup_bacon(Parameters& par, par_bacon& proj_parm)
- {
- proj_parm.bacn = 1;
- proj_parm.ortl = 0;
- par.es = 0.;
- }
-
- }} // namespace detail::bacon
- #endif // doxygen
-
- /*!
- \brief Apian Globular I projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Example
- \image html ex_apian.gif
- */
- template <typename CalculationType, typename Parameters>
- struct apian_spheroid : public detail::bacon::base_bacon_spheroid<CalculationType, Parameters>
- {
- inline apian_spheroid(const Parameters& par) : detail::bacon::base_bacon_spheroid<CalculationType, Parameters>(par)
- {
- detail::bacon::setup_apian(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Ortelius Oval projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Example
- \image html ex_ortel.gif
- */
- template <typename CalculationType, typename Parameters>
- struct ortel_spheroid : public detail::bacon::base_bacon_spheroid<CalculationType, Parameters>
- {
- inline ortel_spheroid(const Parameters& par) : detail::bacon::base_bacon_spheroid<CalculationType, Parameters>(par)
- {
- detail::bacon::setup_ortel(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Bacon Globular projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Example
- \image html ex_bacon.gif
- */
- template <typename CalculationType, typename Parameters>
- struct bacon_spheroid : public detail::bacon::base_bacon_spheroid<CalculationType, Parameters>
- {
- inline bacon_spheroid(const Parameters& par) : detail::bacon::base_bacon_spheroid<CalculationType, Parameters>(par)
- {
- detail::bacon::setup_bacon(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::apian, apian_spheroid, apian_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::bacon, bacon_spheroid, bacon_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::ortel, ortel_spheroid, ortel_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class apian_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<apian_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class ortel_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<ortel_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class bacon_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<bacon_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void bacon_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("apian", new apian_entry<CalculationType, Parameters>);
- factory.add_to_factory("ortel", new ortel_entry<CalculationType, Parameters>);
- factory.add_to_factory("bacon", new bacon_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_BACON_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/bipc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/bipc.hpp
deleted file mode 100644
index 6f014d0e66e..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/bipc.hpp
+++ /dev/null
@@ -1,297 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_BIPC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_BIPC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct bipc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace bipc
- {
-
- static const double EPS = 1e-10;
- static const double EPS10 = 1e-10;
- static const double ONEEPS = 1.000000001;
- static const int NITER = 10;
- static const double lamB = -.34894976726250681539;
- static const double n = .63055844881274687180;
- static const double F = 1.89724742567461030582;
- static const double Azab = .81650043674686363166;
- static const double Azba = 1.82261843856185925133;
- static const double T = 1.27246578267089012270;
- static const double rhoc = 1.20709121521568721927;
- static const double cAzc = .69691523038678375519;
- static const double sAzc = .71715351331143607555;
- static const double C45 = .70710678118654752469;
- static const double S45 = .70710678118654752410;
- static const double C20 = .93969262078590838411;
- static const double S20 = -.34202014332566873287;
- static const double R110 = 1.91986217719376253360;
- static const double R104 = 1.81514242207410275904;
-
- struct par_bipc
- {
- int noskew;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_bipc_spheroid : public base_t_fi<base_bipc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_bipc m_proj_parm;
-
- inline base_bipc_spheroid(const Parameters& par)
- : base_t_fi<base_bipc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType ONEPI = detail::ONEPI<CalculationType>();
-
- CalculationType cphi, sphi, tphi, t, al, Az, z, Av, cdlam, sdlam, r;
- int tag;
-
- cphi = cos(lp_lat);
- sphi = sin(lp_lat);
- cdlam = cos(sdlam = lamB - lp_lon);
- sdlam = sin(sdlam);
- if (fabs(fabs(lp_lat) - HALFPI) < EPS10) {
- Az = lp_lat < 0. ? ONEPI : 0.;
- tphi = HUGE_VAL;
- } else {
- tphi = sphi / cphi;
- Az = atan2(sdlam , C45 * (tphi - cdlam));
- }
- if( (tag = (Az > Azba)) ) {
- cdlam = cos(sdlam = lp_lon + R110);
- sdlam = sin(sdlam);
- z = S20 * sphi + C20 * cphi * cdlam;
- if (fabs(z) > 1.) {
- if (fabs(z) > ONEEPS)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- else
- z = z < 0. ? -1. : 1.;
- } else
- z = acos(z);
- if (tphi != HUGE_VAL)
- Az = atan2(sdlam, (C20 * tphi - S20 * cdlam));
- Av = Azab;
- xy_y = rhoc;
- } else {
- z = S45 * (sphi + cphi * cdlam);
- if (fabs(z) > 1.) {
- if (fabs(z) > ONEEPS)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- else
- z = z < 0. ? -1. : 1.;
- } else
- z = acos(z);
- Av = Azba;
- xy_y = -rhoc;
- }
- if (z < 0.) BOOST_THROW_EXCEPTION( projection_exception(-20) );
- r = F * (t = pow(tan(.5 * z), n));
- if ((al = .5 * (R104 - z)) < 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- al = (t + pow(al, n)) / T;
- if (fabs(al) > 1.) {
- if (fabs(al) > ONEEPS)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- else
- al = al < 0. ? -1. : 1.;
- } else
- al = acos(al);
- if (fabs(t = n * (Av - Az)) < al)
- r /= cos(al + (tag ? t : -t));
- xy_x = r * sin(t);
- xy_y += (tag ? -r : r) * cos(t);
- if (this->m_proj_parm.noskew) {
- t = xy_x;
- xy_x = -xy_x * cAzc - xy_y * sAzc;
- xy_y = -xy_y * cAzc + t * sAzc;
- }
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType t, r, rp, rl, al, z, fAz, Az, s, c, Av;
- int neg, i;
-
- if (this->m_proj_parm.noskew) {
- t = xy_x;
- xy_x = -xy_x * cAzc + xy_y * sAzc;
- xy_y = -xy_y * cAzc - t * sAzc;
- }
- if( (neg = (xy_x < 0.)) ) {
- xy_y = rhoc - xy_y;
- s = S20;
- c = C20;
- Av = Azab;
- } else {
- xy_y += rhoc;
- s = S45;
- c = C45;
- Av = Azba;
- }
- rl = rp = r = boost::math::hypot(xy_x, xy_y);
- fAz = fabs(Az = atan2(xy_x, xy_y));
- for (i = NITER; i ; --i) {
- z = 2. * atan(pow(r / F,1 / n));
- al = acos((pow(tan(.5 * z), n) +
- pow(tan(.5 * (R104 - z)), n)) / T);
- if (fAz < al)
- r = rp * cos(al + (neg ? Az : -Az));
- if (fabs(rl - r) < EPS)
- break;
- rl = r;
- }
- if (! i)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- Az = Av - Az / n;
- lp_lat = asin(s * cos(z) + c * sin(z) * cos(Az));
- lp_lon = atan2(sin(Az), c / tan(z) - s * cos(Az));
- if (neg)
- lp_lon -= R110;
- else
- lp_lon = lamB - lp_lon;
- }
-
- static inline std::string get_name()
- {
- return "bipc_spheroid";
- }
-
- };
-
- // Bipolar conic of western hemisphere
- template <typename Parameters>
- inline void setup_bipc(Parameters& par, par_bipc& proj_parm)
- {
- proj_parm.noskew = pj_param(par.params, "bns").i;
- par.es = 0.;
- }
-
- }} // namespace detail::bipc
- #endif // doxygen
-
- /*!
- \brief Bipolar conic of western hemisphere projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- \par Projection parameters
- - ns (boolean)
- \par Example
- \image html ex_bipc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct bipc_spheroid : public detail::bipc::base_bipc_spheroid<CalculationType, Parameters>
- {
- inline bipc_spheroid(const Parameters& par) : detail::bipc::base_bipc_spheroid<CalculationType, Parameters>(par)
- {
- detail::bipc::setup_bipc(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::bipc, bipc_spheroid, bipc_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class bipc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<bipc_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void bipc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("bipc", new bipc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_BIPC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/boggs.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/boggs.hpp
deleted file mode 100644
index 6c371e430fc..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/boggs.hpp
+++ /dev/null
@@ -1,185 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_BOGGS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_BOGGS_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct boggs {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace boggs
- {
-
- static const int NITER = 20;
- static const double EPS = 1e-7;
- static const double ONETOL = 1.000001;
- static const double FXC = 2.00276;
- static const double FXC2 = 1.11072;
- static const double FYC = 0.49931;
- static const double FYC2 = 1.41421356237309504880;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_boggs_spheroid : public base_t_f<base_boggs_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_boggs_spheroid(const Parameters& par)
- : base_t_f<base_boggs_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType ONEPI = detail::ONEPI<CalculationType>();
-
- CalculationType theta, th1, c;
- int i;
-
- theta = lp_lat;
- if (fabs(fabs(lp_lat) - HALFPI) < EPS)
- xy_x = 0.;
- else {
- c = sin(theta) * ONEPI;
- for (i = NITER; i; --i) {
- theta -= th1 = (theta + sin(theta) - c) /
- (1. + cos(theta));
- if (fabs(th1) < EPS) break;
- }
- theta *= 0.5;
- xy_x = FXC * lp_lon / (1. / cos(lp_lat) + FXC2 / cos(theta));
- }
- xy_y = FYC * (lp_lat + FYC2 * sin(theta));
- }
-
- static inline std::string get_name()
- {
- return "boggs_spheroid";
- }
-
- };
-
- // Boggs Eumorphic
- template <typename Parameters>
- inline void setup_boggs(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::boggs
- #endif // doxygen
-
- /*!
- \brief Boggs Eumorphic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - no inverse
- - Spheroid
- \par Example
- \image html ex_boggs.gif
- */
- template <typename CalculationType, typename Parameters>
- struct boggs_spheroid : public detail::boggs::base_boggs_spheroid<CalculationType, Parameters>
- {
- inline boggs_spheroid(const Parameters& par) : detail::boggs::base_boggs_spheroid<CalculationType, Parameters>(par)
- {
- detail::boggs::setup_boggs(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::boggs, boggs_spheroid, boggs_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class boggs_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<boggs_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void boggs_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("boggs", new boggs_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_BOGGS_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/bonne.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/bonne.hpp
deleted file mode 100644
index 52120a905fb..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/bonne.hpp
+++ /dev/null
@@ -1,298 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_BONNE_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_BONNE_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_mlfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct bonne {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace bonne
- {
-
- static const double EPS10 = 1e-10;
-
- template <typename T>
- struct par_bonne
- {
- T phi1;
- T cphi1;
- T am1;
- T m1;
- T en[EN_SIZE];
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_bonne_ellipsoid : public base_t_fi<base_bonne_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_bonne<CalculationType> m_proj_parm;
-
- inline base_bonne_ellipsoid(const Parameters& par)
- : base_t_fi<base_bonne_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType rh, E, c;
-
- rh = this->m_proj_parm.am1 + this->m_proj_parm.m1 - pj_mlfn(lp_lat, E = sin(lp_lat), c = cos(lp_lat), this->m_proj_parm.en);
- E = c * lp_lon / (rh * sqrt(1. - this->m_par.es * E * E));
- xy_x = rh * sin(E);
- xy_y = this->m_proj_parm.am1 - rh * cos(E);
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType s, rh;
-
- rh = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.am1 - xy_y);
- lp_lat = pj_inv_mlfn(this->m_proj_parm.am1 + this->m_proj_parm.m1 - rh, this->m_par.es, this->m_proj_parm.en);
- if ((s = fabs(lp_lat)) < HALFPI) {
- s = sin(lp_lat);
- lp_lon = rh * atan2(xy_x, xy_y) *
- sqrt(1. - this->m_par.es * s * s) / cos(lp_lat);
- } else if (fabs(s - HALFPI) <= EPS10)
- lp_lon = 0.;
- else
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- }
-
- static inline std::string get_name()
- {
- return "bonne_ellipsoid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_bonne_spheroid : public base_t_fi<base_bonne_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_bonne<CalculationType> m_proj_parm;
-
- inline base_bonne_spheroid(const Parameters& par)
- : base_t_fi<base_bonne_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType E, rh;
-
- rh = this->m_proj_parm.cphi1 + this->m_proj_parm.phi1 - lp_lat;
- if (fabs(rh) > EPS10) {
- xy_x = rh * sin(E = lp_lon * cos(lp_lat) / rh);
- xy_y = this->m_proj_parm.cphi1 - rh * cos(E);
- } else
- xy_x = xy_y = 0.;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType rh;
-
- rh = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.cphi1 - xy_y);
- lp_lat = this->m_proj_parm.cphi1 + this->m_proj_parm.phi1 - rh;
- if (fabs(lp_lat) > HALFPI)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- if (fabs(fabs(lp_lat) - HALFPI) <= EPS10)
- lp_lon = 0.;
- else
- lp_lon = rh * atan2(xy_x, xy_y) / cos(lp_lat);
- }
-
- static inline std::string get_name()
- {
- return "bonne_spheroid";
- }
-
- };
-
- // Bonne (Werner lat_1=90)
- template <typename Parameters, typename T>
- inline void setup_bonne(Parameters& par, par_bonne<T>& proj_parm)
- {
- static const T HALFPI = detail::HALFPI<T>();
-
- T c;
-
- proj_parm.phi1 = pj_param(par.params, "rlat_1").f;
- if (fabs(proj_parm.phi1) < EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-23) );
- if (par.es) {
- pj_enfn(par.es, proj_parm.en);
- proj_parm.m1 = pj_mlfn(proj_parm.phi1, proj_parm.am1 = sin(proj_parm.phi1),
- c = cos(proj_parm.phi1), proj_parm.en);
- proj_parm.am1 = c / (sqrt(1. - par.es * proj_parm.am1 * proj_parm.am1) * proj_parm.am1);
- } else {
- if (fabs(proj_parm.phi1) + EPS10 >= HALFPI)
- proj_parm.cphi1 = 0.;
- else
- proj_parm.cphi1 = 1. / tan(proj_parm.phi1);
- }
- }
-
- }} // namespace detail::bonne
- #endif // doxygen
-
- /*!
- \brief Bonne (Werner lat_1=90) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel (degrees)
- \par Example
- \image html ex_bonne.gif
- */
- template <typename CalculationType, typename Parameters>
- struct bonne_ellipsoid : public detail::bonne::base_bonne_ellipsoid<CalculationType, Parameters>
- {
- inline bonne_ellipsoid(const Parameters& par) : detail::bonne::base_bonne_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::bonne::setup_bonne(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Bonne (Werner lat_1=90) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel (degrees)
- \par Example
- \image html ex_bonne.gif
- */
- template <typename CalculationType, typename Parameters>
- struct bonne_spheroid : public detail::bonne::base_bonne_spheroid<CalculationType, Parameters>
- {
- inline bonne_spheroid(const Parameters& par) : detail::bonne::base_bonne_spheroid<CalculationType, Parameters>(par)
- {
- detail::bonne::setup_bonne(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::bonne, bonne_spheroid, bonne_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class bonne_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<bonne_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<bonne_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void bonne_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("bonne", new bonne_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_BONNE_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/cass.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/cass.hpp
deleted file mode 100644
index b5f32b5aab9..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/cass.hpp
+++ /dev/null
@@ -1,292 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_CASS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_CASS_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_mlfn.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct cass {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace cass
- {
-
- //static const double EPS10 = 1e-10;
- //static const double C1 = .16666666666666666666;
- //static const double C2 = .00833333333333333333;
- //static const double C3 = .04166666666666666666;
- //static const double C4 = .33333333333333333333;
- //static const double C5 = .06666666666666666666;
-
- template <typename T>
- inline T C1() { return .16666666666666666666666666666666666666; }
- template <typename T>
- inline T C2() { return .00833333333333333333333333333333333333; }
- template <typename T>
- inline T C3() { return .04166666666666666666666666666666666666; }
- template <typename T>
- inline T C4() { return .33333333333333333333333333333333333333; }
- template <typename T>
- inline T C5() { return .06666666666666666666666666666666666666; }
-
- template <typename T>
- struct par_cass
- {
- T m0;
- T en[EN_SIZE];
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_cass_ellipsoid : public base_t_fi<base_cass_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_cass<CalculationType> m_proj_parm;
-
- inline base_cass_ellipsoid(const Parameters& par)
- : base_t_fi<base_cass_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType C1 = cass::C1<CalculationType>();
- static const CalculationType C2 = cass::C2<CalculationType>();
- static const CalculationType C3 = cass::C3<CalculationType>();
-
- CalculationType n = sin(lp_lat);
- CalculationType c = cos(lp_lat);
- xy_y = pj_mlfn(lp_lat, n, c, this->m_proj_parm.en);
- n = 1./sqrt(1. - this->m_par.es * n * n);
- CalculationType tn = tan(lp_lat); CalculationType t = tn * tn;
- CalculationType a1 = lp_lon * c;
- c *= this->m_par.es * c / (1 - this->m_par.es);
- CalculationType a2 = a1 * a1;
- xy_x = n * a1 * (1. - a2 * t *
- (C1 - (8. - t + 8. * c) * a2 * C2));
- xy_y -= this->m_proj_parm.m0 - n * tn * a2 *
- (.5 + (5. - t + 6. * c) * a2 * C3);
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType C3 = cass::C3<CalculationType>();
- static const CalculationType C4 = cass::C4<CalculationType>();
- static const CalculationType C5 = cass::C5<CalculationType>();
-
- CalculationType ph1;
-
- ph1 = pj_inv_mlfn(this->m_proj_parm.m0 + xy_y, this->m_par.es, this->m_proj_parm.en);
- CalculationType tn = tan(ph1); CalculationType t = tn * tn;
- CalculationType n = sin(ph1);
- CalculationType r = 1. / (1. - this->m_par.es * n * n);
- n = sqrt(r);
- r *= (1. - this->m_par.es) * n;
- CalculationType dd = xy_x / n;
- CalculationType d2 = dd * dd;
- lp_lat = ph1 - (n * tn / r) * d2 *
- (.5 - (1. + 3. * t) * d2 * C3);
- lp_lon = dd * (1. + t * d2 *
- (-C4 + (1. + 3. * t) * d2 * C5)) / cos(ph1);
- }
-
- static inline std::string get_name()
- {
- return "cass_ellipsoid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_cass_spheroid : public base_t_fi<base_cass_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_cass<CalculationType> m_proj_parm;
-
- inline base_cass_spheroid(const Parameters& par)
- : base_t_fi<base_cass_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = asin(cos(lp_lat) * sin(lp_lon));
- xy_y = atan2(tan(lp_lat) , cos(lp_lon)) - this->m_par.phi0;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType dd = xy_y + this->m_par.phi0;
- lp_lat = asin(sin(dd) * cos(xy_x));
- lp_lon = atan2(tan(xy_x), cos(dd));
- }
-
- static inline std::string get_name()
- {
- return "cass_spheroid";
- }
-
- };
-
- // Cassini
- template <typename Parameters, typename T>
- inline void setup_cass(Parameters& par, par_cass<T>& proj_parm)
- {
- if (par.es) {
- if (!pj_enfn(par.es, proj_parm.en))
- BOOST_THROW_EXCEPTION( projection_exception(0) );
- proj_parm.m0 = pj_mlfn(par.phi0, sin(par.phi0), cos(par.phi0), proj_parm.en);
- } else {
- }
- }
-
- }} // namespace detail::cass
- #endif // doxygen
-
- /*!
- \brief Cassini projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_cass.gif
- */
- template <typename CalculationType, typename Parameters>
- struct cass_ellipsoid : public detail::cass::base_cass_ellipsoid<CalculationType, Parameters>
- {
- inline cass_ellipsoid(const Parameters& par) : detail::cass::base_cass_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::cass::setup_cass(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Cassini projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_cass.gif
- */
- template <typename CalculationType, typename Parameters>
- struct cass_spheroid : public detail::cass::base_cass_spheroid<CalculationType, Parameters>
- {
- inline cass_spheroid(const Parameters& par) : detail::cass::base_cass_spheroid<CalculationType, Parameters>(par)
- {
- detail::cass::setup_cass(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::cass, cass_spheroid, cass_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class cass_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<cass_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<cass_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void cass_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("cass", new cass_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_CASS_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/cc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/cc.hpp
deleted file mode 100644
index c7fc1f20ab0..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/cc.hpp
+++ /dev/null
@@ -1,171 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_CC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_CC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct cc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace cc
- {
-
- static const double EPS10 = 1.e-10;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_cc_spheroid : public base_t_fi<base_cc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- inline base_cc_spheroid(const Parameters& par)
- : base_t_fi<base_cc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- if (fabs(fabs(lp_lat) - HALFPI) <= EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_x = lp_lon;
- xy_y = tan(lp_lat);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = atan(xy_y);
- lp_lon = xy_x;
- }
-
- static inline std::string get_name()
- {
- return "cc_spheroid";
- }
-
- };
-
- // Central Cylindrical
- template <typename Parameters>
- inline void setup_cc(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::cc
- #endif // doxygen
-
- /*!
- \brief Central Cylindrical projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- \par Example
- \image html ex_cc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct cc_spheroid : public detail::cc::base_cc_spheroid<CalculationType, Parameters>
- {
- inline cc_spheroid(const Parameters& par) : detail::cc::base_cc_spheroid<CalculationType, Parameters>(par)
- {
- detail::cc::setup_cc(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::cc, cc_spheroid, cc_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class cc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<cc_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void cc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("cc", new cc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_CC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/cea.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/cea.hpp
deleted file mode 100644
index b6d8707e085..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/cea.hpp
+++ /dev/null
@@ -1,269 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_CEA_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_CEA_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_auth.hpp>
-#include <boost/geometry/srs/projections/impl/pj_qsfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct cea {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace cea
- {
-
- static const double EPS = 1e-10;
-
- template <typename T>
- struct par_cea
- {
- T qp;
- T apa[APA_SIZE];
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_cea_ellipsoid : public base_t_fi<base_cea_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_cea<CalculationType> m_proj_parm;
-
- inline base_cea_ellipsoid(const Parameters& par)
- : base_t_fi<base_cea_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = this->m_par.k0 * lp_lon;
- xy_y = .5 * pj_qsfn(sin(lp_lat), this->m_par.e, this->m_par.one_es) / this->m_par.k0;
- }
-
- // INVERSE(e_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = pj_authlat(asin( 2. * xy_y * this->m_par.k0 / this->m_proj_parm.qp), this->m_proj_parm.apa);
- lp_lon = xy_x / this->m_par.k0;
- }
-
- static inline std::string get_name()
- {
- return "cea_ellipsoid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_cea_spheroid : public base_t_fi<base_cea_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_cea<CalculationType> m_proj_parm;
-
- inline base_cea_spheroid(const Parameters& par)
- : base_t_fi<base_cea_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = this->m_par.k0 * lp_lon;
- xy_y = sin(lp_lat) / this->m_par.k0;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType t;
-
- if ((t = fabs(xy_y *= this->m_par.k0)) - EPS <= 1.) {
- if (t >= 1.)
- lp_lat = xy_y < 0. ? -HALFPI : HALFPI;
- else
- lp_lat = asin(xy_y);
- lp_lon = xy_x / this->m_par.k0;
- } else
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- }
-
- static inline std::string get_name()
- {
- return "cea_spheroid";
- }
-
- };
-
- // Equal Area Cylindrical
- template <typename Parameters, typename T>
- inline void setup_cea(Parameters& par, par_cea<T>& proj_parm)
- {
- T t = 0;
-
- if (pj_param(par.params, "tlat_ts").i &&
- (par.k0 = cos(t = pj_param(par.params, "rlat_ts").f)) < 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-24) );
- if (par.es) {
- t = sin(t);
- par.k0 /= sqrt(1. - par.es * t * t);
- par.e = sqrt(par.es);
- if (!pj_authset(par.es, proj_parm.apa))
- BOOST_THROW_EXCEPTION( projection_exception(0) );
- proj_parm.qp = pj_qsfn(1., par.e, par.one_es);
- } else {
- }
- }
-
- }} // namespace detail::cea
- #endif // doxygen
-
- /*!
- \brief Equal Area Cylindrical projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_ts: Latitude of true scale (degrees)
- \par Example
- \image html ex_cea.gif
- */
- template <typename CalculationType, typename Parameters>
- struct cea_ellipsoid : public detail::cea::base_cea_ellipsoid<CalculationType, Parameters>
- {
- inline cea_ellipsoid(const Parameters& par) : detail::cea::base_cea_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::cea::setup_cea(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Equal Area Cylindrical projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_ts: Latitude of true scale (degrees)
- \par Example
- \image html ex_cea.gif
- */
- template <typename CalculationType, typename Parameters>
- struct cea_spheroid : public detail::cea::base_cea_spheroid<CalculationType, Parameters>
- {
- inline cea_spheroid(const Parameters& par) : detail::cea::base_cea_spheroid<CalculationType, Parameters>(par)
- {
- detail::cea::setup_cea(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::cea, cea_spheroid, cea_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class cea_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<cea_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<cea_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void cea_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("cea", new cea_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_CEA_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/chamb.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/chamb.hpp
deleted file mode 100644
index 9fd123bb2ee..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/chamb.hpp
+++ /dev/null
@@ -1,288 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_CHAMB_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_CHAMB_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-#include <cstdio>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct chamb {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace chamb
- {
-
- //static const double THIRD = 0.333333333333333333;
- static const double TOL = 1e-9;
-
- // specific for 'chamb'
- template <typename T>
- struct VECT { T r, Az; };
- template <typename T>
- struct XY { T x, y; };
-
- template <typename T>
- struct par_chamb
- {
- struct { /* control point data */
- T phi, lam;
- T cosphi, sinphi;
- VECT<T> v;
- XY<T> p;
- T Az;
- } c[3];
- XY<T> p;
- T beta_0, beta_1, beta_2;
- };
-
- template <typename T>
- inline VECT<T> /* distance and azimuth from point 1 to point 2 */
- vect(T const& dphi, T const& c1, T const& s1, T const& c2, T const& s2, T const& dlam)
- {
- VECT<T> v;
- T cdl, dp, dl;
-
- cdl = cos(dlam);
- if (fabs(dphi) > 1. || fabs(dlam) > 1.)
- v.r = aacos(s1 * s2 + c1 * c2 * cdl);
- else { /* more accurate for smaller distances */
- dp = sin(.5 * dphi);
- dl = sin(.5 * dlam);
- v.r = 2. * aasin(sqrt(dp * dp + c1 * c2 * dl * dl));
- }
- if (fabs(v.r) > TOL)
- v.Az = atan2(c2 * sin(dlam), c1 * s2 - s1 * c2 * cdl);
- else
- v.r = v.Az = 0.;
- return v;
- }
-
- template <typename T>
- inline T /* law of cosines */
- lc(T const& b, T const& c, T const& a)
- {
- return aacos(.5 * (b * b + c * c - a * a) / (b * c));
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_chamb_spheroid : public base_t_f<base_chamb_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_chamb<CalculationType> m_proj_parm;
-
- inline base_chamb_spheroid(const Parameters& par)
- : base_t_f<base_chamb_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType THIRD = detail::THIRD<CalculationType>();
-
- CalculationType sinphi, cosphi, a;
- VECT<CalculationType> v[3];
- int i, j;
-
- sinphi = sin(lp_lat);
- cosphi = cos(lp_lat);
- for (i = 0; i < 3; ++i) { /* dist/azimiths from control */
- v[i] = vect(lp_lat - this->m_proj_parm.c[i].phi, this->m_proj_parm.c[i].cosphi, this->m_proj_parm.c[i].sinphi,
- cosphi, sinphi, lp_lon - this->m_proj_parm.c[i].lam);
- if ( ! v[i].r)
- break;
- v[i].Az = adjlon(v[i].Az - this->m_proj_parm.c[i].v.Az);
- }
- if (i < 3) /* current point at control point */
- { xy_x = this->m_proj_parm.c[i].p.x; xy_y = this->m_proj_parm.c[i].p.y; }
- else { /* point mean of intersepts */
- { xy_x = this->m_proj_parm.p.x; xy_y = this->m_proj_parm.p.y; }
- for (i = 0; i < 3; ++i) {
- j = i == 2 ? 0 : i + 1;
- a = lc(this->m_proj_parm.c[i].v.r, v[i].r, v[j].r);
- if (v[i].Az < 0.)
- a = -a;
- if (! i) { /* coord comp unique to each arc */
- xy_x += v[i].r * cos(a);
- xy_y -= v[i].r * sin(a);
- } else if (i == 1) {
- a = this->m_proj_parm.beta_1 - a;
- xy_x -= v[i].r * cos(a);
- xy_y -= v[i].r * sin(a);
- } else {
- a = this->m_proj_parm.beta_2 - a;
- xy_x += v[i].r * cos(a);
- xy_y += v[i].r * sin(a);
- }
- }
- xy_x *= THIRD; /* mean of arc intercepts */
- xy_y *= THIRD;
- }
- }
-
- static inline std::string get_name()
- {
- return "chamb_spheroid";
- }
-
- };
-
- // Chamberlin Trimetric
- template <typename Parameters, typename T>
- inline void setup_chamb(Parameters& par, par_chamb<T>& proj_parm)
- {
- static const T ONEPI = detail::ONEPI<T>();
-
- int i, j;
- char line[10];
-
- for (i = 0; i < 3; ++i) { /* get control point locations */
- (void)sprintf(line, "rlat_%d", i+1);
- proj_parm.c[i].phi = pj_param(par.params, line).f;
- (void)sprintf(line, "rlon_%d", i+1);
- proj_parm.c[i].lam = pj_param(par.params, line).f;
- proj_parm.c[i].lam = adjlon(proj_parm.c[i].lam - par.lam0);
- proj_parm.c[i].cosphi = cos(proj_parm.c[i].phi);
- proj_parm.c[i].sinphi = sin(proj_parm.c[i].phi);
- }
- for (i = 0; i < 3; ++i) { /* inter ctl pt. distances and azimuths */
- j = i == 2 ? 0 : i + 1;
- proj_parm.c[i].v = vect(proj_parm.c[j].phi - proj_parm.c[i].phi, proj_parm.c[i].cosphi, proj_parm.c[i].sinphi,
- proj_parm.c[j].cosphi, proj_parm.c[j].sinphi, proj_parm.c[j].lam - proj_parm.c[i].lam);
- if (! proj_parm.c[i].v.r)
- BOOST_THROW_EXCEPTION( projection_exception(-25) );
- /* co-linearity problem ignored for now */
- }
- proj_parm.beta_0 = lc(proj_parm.c[0].v.r, proj_parm.c[2].v.r, proj_parm.c[1].v.r);
- proj_parm.beta_1 = lc(proj_parm.c[0].v.r, proj_parm.c[1].v.r, proj_parm.c[2].v.r);
- proj_parm.beta_2 = ONEPI - proj_parm.beta_0;
- proj_parm.p.y = 2. * (proj_parm.c[0].p.y = proj_parm.c[1].p.y = proj_parm.c[2].v.r * sin(proj_parm.beta_0));
- proj_parm.c[2].p.y = 0.;
- proj_parm.c[0].p.x = - (proj_parm.c[1].p.x = 0.5 * proj_parm.c[0].v.r);
- proj_parm.p.x = proj_parm.c[2].p.x = proj_parm.c[0].p.x + proj_parm.c[2].v.r * cos(proj_parm.beta_0);
- par.es = 0.;
- }
-
- }} // namespace detail::chamb
- #endif // doxygen
-
- /*!
- \brief Chamberlin Trimetric projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Projection parameters
- - lat_1: Latitude of control point 1 (degrees)
- - lon_1: Longitude of control point 1 (degrees)
- - lat_2: Latitude of control point 2 (degrees)
- - lon_2: Longitude of control point 2 (degrees)
- - lat_3: Latitude of control point 3 (degrees)
- - lon_3: Longitude of control point 3 (degrees)
- \par Example
- \image html ex_chamb.gif
- */
- template <typename CalculationType, typename Parameters>
- struct chamb_spheroid : public detail::chamb::base_chamb_spheroid<CalculationType, Parameters>
- {
- inline chamb_spheroid(const Parameters& par) : detail::chamb::base_chamb_spheroid<CalculationType, Parameters>(par)
- {
- detail::chamb::setup_chamb(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::chamb, chamb_spheroid, chamb_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class chamb_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<chamb_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void chamb_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("chamb", new chamb_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_CHAMB_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/collg.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/collg.hpp
deleted file mode 100644
index 0bc347a305e..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/collg.hpp
+++ /dev/null
@@ -1,183 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_COLLG_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_COLLG_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct collg {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace collg
- {
-
- static const double FXC = 1.12837916709551257390;
- static const double FYC = 1.77245385090551602729;
- static const double ONEEPS = 1.0000001;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_collg_spheroid : public base_t_fi<base_collg_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_collg_spheroid(const Parameters& par)
- : base_t_fi<base_collg_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- if ((xy_y = 1. - sin(lp_lat)) <= 0.)
- xy_y = 0.;
- else
- xy_y = sqrt(xy_y);
- xy_x = FXC * lp_lon * xy_y;
- xy_y = FYC * (1. - xy_y);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = xy_y / FYC - 1.;
- if (fabs(lp_lat = 1. - lp_lat * lp_lat) < 1.)
- lp_lat = asin(lp_lat);
- else if (fabs(lp_lat) > ONEEPS)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- else
- lp_lat = lp_lat < 0. ? -geometry::math::half_pi<double>() : geometry::math::half_pi<double>();
- if ((lp_lon = 1. - sin(lp_lat)) <= 0.)
- lp_lon = 0.;
- else
- lp_lon = xy_x / (FXC * sqrt(lp_lon));
- }
-
- static inline std::string get_name()
- {
- return "collg_spheroid";
- }
-
- };
-
- // Collignon
- template <typename Parameters>
- inline void setup_collg(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace collg
- #endif // doxygen
-
- /*!
- \brief Collignon projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_collg.gif
- */
- template <typename CalculationType, typename Parameters>
- struct collg_spheroid : public detail::collg::base_collg_spheroid<CalculationType, Parameters>
- {
- inline collg_spheroid(const Parameters& par) : detail::collg::base_collg_spheroid<CalculationType, Parameters>(par)
- {
- detail::collg::setup_collg(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::collg, collg_spheroid, collg_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class collg_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<collg_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void collg_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("collg", new collg_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_COLLG_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/crast.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/crast.hpp
deleted file mode 100644
index 4aea8860710..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/crast.hpp
+++ /dev/null
@@ -1,175 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_CRAST_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_CRAST_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct crast {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace crast
- {
-
- static const double XM = 0.97720502380583984317;
- static const double RXM = 1.02332670794648848847;
- static const double YM = 3.06998012383946546542;
- static const double RYM = 0.32573500793527994772;
- //static const double THIRD = 0.333333333333333333;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_crast_spheroid : public base_t_fi<base_crast_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_crast_spheroid(const Parameters& par)
- : base_t_fi<base_crast_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType THIRD = detail::THIRD<CalculationType>();
-
- lp_lat *= THIRD;
- xy_x = XM * lp_lon * (2. * cos(lp_lat + lp_lat) - 1.);
- xy_y = YM * sin(lp_lat);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType THIRD = detail::THIRD<CalculationType>();
-
- lp_lat = 3. * asin(xy_y * RYM);
- lp_lon = xy_x * RXM / (2. * cos((lp_lat + lp_lat) * THIRD) - 1);
- }
-
- static inline std::string get_name()
- {
- return "crast_spheroid";
- }
-
- };
-
- // Craster Parabolic (Putnins P4)
- template <typename Parameters>
- inline void setup_crast(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::crast
- #endif // doxygen
-
- /*!
- \brief Craster Parabolic (Putnins P4) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_crast.gif
- */
- template <typename CalculationType, typename Parameters>
- struct crast_spheroid : public detail::crast::base_crast_spheroid<CalculationType, Parameters>
- {
- inline crast_spheroid(const Parameters& par) : detail::crast::base_crast_spheroid<CalculationType, Parameters>(par)
- {
- detail::crast::setup_crast(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::crast, crast_spheroid, crast_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class crast_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<crast_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void crast_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("crast", new crast_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_CRAST_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/denoy.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/denoy.hpp
deleted file mode 100644
index afedae87348..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/denoy.hpp
+++ /dev/null
@@ -1,174 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_DENOY_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_DENOY_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct denoy {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace denoy
- {
-
- static const double C0 = 0.95;
- //static const double C1 = -.08333333333333333333;
- //static const double C3 = .00166666666666666666;
- static const double D1 = 0.9;
- static const double D5 = 0.03;
-
- template <typename T>
- inline T C1() { return -.0833333333333333333333333333333; }
- template <typename T>
- inline T C3() { return .0016666666666666666666666666666; }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_denoy_spheroid : public base_t_f<base_denoy_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_denoy_spheroid(const Parameters& par)
- : base_t_f<base_denoy_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType C1 = denoy::C1<CalculationType>();
- static const CalculationType C3 = denoy::C3<CalculationType>();
-
- xy_y = lp_lat;
- xy_x = lp_lon;
- lp_lon = fabs(lp_lon);
- xy_x *= cos((C0 + lp_lon * (C1 + lp_lon * lp_lon * C3)) *
- (lp_lat * (D1 + D5 * lp_lat * lp_lat * lp_lat * lp_lat)));
- }
-
- static inline std::string get_name()
- {
- return "denoy_spheroid";
- }
-
- };
-
- // Denoyer Semi-Elliptical
- template <typename Parameters>
- inline void setup_denoy(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::denoy
- #endif // doxygen
-
- /*!
- \brief Denoyer Semi-Elliptical projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - no inverse
- - Spheroid
- \par Example
- \image html ex_denoy.gif
- */
- template <typename CalculationType, typename Parameters>
- struct denoy_spheroid : public detail::denoy::base_denoy_spheroid<CalculationType, Parameters>
- {
- inline denoy_spheroid(const Parameters& par) : detail::denoy::base_denoy_spheroid<CalculationType, Parameters>(par)
- {
- detail::denoy::setup_denoy(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::denoy, denoy_spheroid, denoy_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class denoy_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<denoy_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void denoy_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("denoy", new denoy_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_DENOY_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck1.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck1.hpp
deleted file mode 100644
index 41f0f6424f1..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck1.hpp
+++ /dev/null
@@ -1,167 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_ECK1_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ECK1_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct eck1 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eck1
- {
-
- static const double FC = .92131773192356127802;
- static const double RP = .31830988618379067154;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_eck1_spheroid : public base_t_fi<base_eck1_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_eck1_spheroid(const Parameters& par)
- : base_t_fi<base_eck1_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = FC * lp_lon * (1. - RP * fabs(lp_lat));
- xy_y = FC * lp_lat;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = xy_y / FC;
- lp_lon = xy_x / (FC * (1. - RP * fabs(lp_lat)));
- }
-
- static inline std::string get_name()
- {
- return "eck1_spheroid";
- }
-
- };
-
- // Eckert I
- template <typename Parameters>
- inline void setup_eck1(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::eck1
- #endif // doxygen
-
- /*!
- \brief Eckert I projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_eck1.gif
- */
- template <typename CalculationType, typename Parameters>
- struct eck1_spheroid : public detail::eck1::base_eck1_spheroid<CalculationType, Parameters>
- {
- inline eck1_spheroid(const Parameters& par) : detail::eck1::base_eck1_spheroid<CalculationType, Parameters>(par)
- {
- detail::eck1::setup_eck1(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::eck1, eck1_spheroid, eck1_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class eck1_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<eck1_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void eck1_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("eck1", new eck1_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_ECK1_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck2.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck2.hpp
deleted file mode 100644
index 737057bfcda..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck2.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_ECK2_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ECK2_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct eck2 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eck2
- {
-
- static const double FXC = 0.46065886596178063902;
- static const double FYC = 1.44720250911653531871;
- //static const double C13 = 0.33333333333333333333;
- static const double ONEEPS = 1.0000001;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_eck2_spheroid : public base_t_fi<base_eck2_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_eck2_spheroid(const Parameters& par)
- : base_t_fi<base_eck2_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = FXC * lp_lon * (xy_y = sqrt(4. - 3. * sin(fabs(lp_lat))));
- xy_y = FYC * (2. - xy_y);
- if ( lp_lat < 0.) xy_y = -xy_y;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType C13 = detail::THIRD<CalculationType>();
-
- lp_lon = xy_x / (FXC * ( lp_lat = 2. - fabs(xy_y) / FYC) );
- lp_lat = (4. - lp_lat * lp_lat) * C13;
- if (fabs(lp_lat) >= 1.) {
- if (fabs(lp_lat) > ONEEPS)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- else
- lp_lat = lp_lat < 0. ? -HALFPI : HALFPI;
- } else
- lp_lat = asin(lp_lat);
- if (xy_y < 0)
- lp_lat = -lp_lat;
- }
-
- static inline std::string get_name()
- {
- return "eck2_spheroid";
- }
-
- };
-
- // Eckert II
- template <typename Parameters>
- inline void setup_eck2(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::eck2
- #endif // doxygen
-
- /*!
- \brief Eckert II projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_eck2.gif
- */
- template <typename CalculationType, typename Parameters>
- struct eck2_spheroid : public detail::eck2::base_eck2_spheroid<CalculationType, Parameters>
- {
- inline eck2_spheroid(const Parameters& par) : detail::eck2::base_eck2_spheroid<CalculationType, Parameters>(par)
- {
- detail::eck2::setup_eck2(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::eck2, eck2_spheroid, eck2_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class eck2_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<eck2_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void eck2_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("eck2", new eck2_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_ECK2_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck3.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck3.hpp
deleted file mode 100644
index dbc1beb625c..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck3.hpp
+++ /dev/null
@@ -1,321 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_ECK3_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ECK3_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct eck3 {};
- struct putp1 {};
- struct wag6 {};
- struct kav7 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eck3
- {
-
- template <typename T>
- struct par_eck3
- {
- T C_x, C_y, A, B;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_eck3_spheroid : public base_t_fi<base_eck3_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_eck3<CalculationType> m_proj_parm;
-
- inline base_eck3_spheroid(const Parameters& par)
- : base_t_fi<base_eck3_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_y = this->m_proj_parm.C_y * lp_lat;
- xy_x = this->m_proj_parm.C_x * lp_lon * (this->m_proj_parm.A + asqrt(1. - this->m_proj_parm.B * lp_lat * lp_lat));
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = xy_y / this->m_proj_parm.C_y;
- lp_lon = xy_x / (this->m_proj_parm.C_x * (this->m_proj_parm.A + asqrt(1. - this->m_proj_parm.B * lp_lat * lp_lat)));
- }
-
- static inline std::string get_name()
- {
- return "eck3_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_eck3<T>& proj_parm)
- {
- boost::ignore_unused(proj_parm);
- par.es = 0.;
- }
-
-
- // Eckert III
- template <typename Parameters, typename T>
- inline void setup_eck3(Parameters& par, par_eck3<T>& proj_parm)
- {
- proj_parm.C_x = .42223820031577120149;
- proj_parm.C_y = .84447640063154240298;
- proj_parm.A = 1.;
- proj_parm.B = 0.4052847345693510857755;
- setup(par, proj_parm);
- }
-
- // Putnins P1
- template <typename Parameters, typename T>
- inline void setup_putp1(Parameters& par, par_eck3<T>& proj_parm)
- {
- proj_parm.C_x = 1.89490;
- proj_parm.C_y = 0.94745;
- proj_parm.A = -0.5;
- proj_parm.B = 0.30396355092701331433;
- setup(par, proj_parm);
- }
-
- // Wagner VI
- template <typename Parameters, typename T>
- inline void setup_wag6(Parameters& par, par_eck3<T>& proj_parm)
- {
- proj_parm.C_x = proj_parm.C_y = 0.94745;
- proj_parm.A = 0.;
- proj_parm.B = 0.30396355092701331433;
- setup(par, proj_parm);
- }
-
- // Kavraisky VII
- template <typename Parameters, typename T>
- inline void setup_kav7(Parameters& par, par_eck3<T>& proj_parm)
- {
- proj_parm.C_x = 0.2632401569273184856851;
- proj_parm.C_x = 0.8660254037844;
- proj_parm.C_y = 1.;
- proj_parm.A = 0.;
- proj_parm.B = 0.30396355092701331433;
- setup(par, proj_parm);
- }
-
- }} // namespace detail::eck3
- #endif // doxygen
-
- /*!
- \brief Eckert III projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_eck3.gif
- */
- template <typename CalculationType, typename Parameters>
- struct eck3_spheroid : public detail::eck3::base_eck3_spheroid<CalculationType, Parameters>
- {
- inline eck3_spheroid(const Parameters& par) : detail::eck3::base_eck3_spheroid<CalculationType, Parameters>(par)
- {
- detail::eck3::setup_eck3(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Putnins P1 projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_putp1.gif
- */
- template <typename CalculationType, typename Parameters>
- struct putp1_spheroid : public detail::eck3::base_eck3_spheroid<CalculationType, Parameters>
- {
- inline putp1_spheroid(const Parameters& par) : detail::eck3::base_eck3_spheroid<CalculationType, Parameters>(par)
- {
- detail::eck3::setup_putp1(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Wagner VI projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_wag6.gif
- */
- template <typename CalculationType, typename Parameters>
- struct wag6_spheroid : public detail::eck3::base_eck3_spheroid<CalculationType, Parameters>
- {
- inline wag6_spheroid(const Parameters& par) : detail::eck3::base_eck3_spheroid<CalculationType, Parameters>(par)
- {
- detail::eck3::setup_wag6(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Kavraisky VII projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_kav7.gif
- */
- template <typename CalculationType, typename Parameters>
- struct kav7_spheroid : public detail::eck3::base_eck3_spheroid<CalculationType, Parameters>
- {
- inline kav7_spheroid(const Parameters& par) : detail::eck3::base_eck3_spheroid<CalculationType, Parameters>(par)
- {
- detail::eck3::setup_kav7(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::eck3, eck3_spheroid, eck3_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::putp1, putp1_spheroid, putp1_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::wag6, wag6_spheroid, wag6_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::kav7, kav7_spheroid, kav7_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class eck3_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<eck3_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class putp1_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<putp1_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class wag6_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<wag6_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class kav7_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<kav7_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void eck3_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("eck3", new eck3_entry<CalculationType, Parameters>);
- factory.add_to_factory("putp1", new putp1_entry<CalculationType, Parameters>);
- factory.add_to_factory("wag6", new wag6_entry<CalculationType, Parameters>);
- factory.add_to_factory("kav7", new kav7_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_ECK3_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck4.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck4.hpp
deleted file mode 100644
index 4307b594394..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck4.hpp
+++ /dev/null
@@ -1,195 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_ECK4_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ECK4_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct eck4 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eck4
- {
-
- static const double C_x = .42223820031577120149;
- static const double C_y = 1.32650042817700232218;
- static const double RC_y = .75386330736002178205;
- static const double C_p = 3.57079632679489661922;
- static const double RC_p = .28004957675577868795;
- static const double EPS = 1e-7;
- static const int NITER = 6;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_eck4_spheroid : public base_t_fi<base_eck4_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_eck4_spheroid(const Parameters& par)
- : base_t_fi<base_eck4_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType p, V, s, c;
- int i;
-
- p = C_p * sin(lp_lat);
- V = lp_lat * lp_lat;
- lp_lat *= 0.895168 + V * ( 0.0218849 + V * 0.00826809 );
- for (i = NITER; i ; --i) {
- c = cos(lp_lat);
- s = sin(lp_lat);
- lp_lat -= V = (lp_lat + s * (c + 2.) - p) /
- (1. + c * (c + 2.) - s * s);
- if (fabs(V) < EPS)
- break;
- }
- if (!i) {
- xy_x = C_x * lp_lon;
- xy_y = lp_lat < 0. ? -C_y : C_y;
- } else {
- xy_x = C_x * lp_lon * (1. + cos(lp_lat));
- xy_y = C_y * sin(lp_lat);
- }
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType c;
-
- lp_lat = aasin(xy_y / C_y);
- lp_lon = xy_x / (C_x * (1. + (c = cos(lp_lat))));
- lp_lat = aasin((lp_lat + sin(lp_lat) * (c + 2.)) / C_p);
- }
-
- static inline std::string get_name()
- {
- return "eck4_spheroid";
- }
-
- };
-
- // Eckert IV
- template <typename Parameters>
- inline void setup_eck4(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::eck4
- #endif // doxygen
-
- /*!
- \brief Eckert IV projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_eck4.gif
- */
- template <typename CalculationType, typename Parameters>
- struct eck4_spheroid : public detail::eck4::base_eck4_spheroid<CalculationType, Parameters>
- {
- inline eck4_spheroid(const Parameters& par) : detail::eck4::base_eck4_spheroid<CalculationType, Parameters>(par)
- {
- detail::eck4::setup_eck4(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::eck4, eck4_spheroid, eck4_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class eck4_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<eck4_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void eck4_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("eck4", new eck4_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_ECK4_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck5.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck5.hpp
deleted file mode 100644
index bc075702e82..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eck5.hpp
+++ /dev/null
@@ -1,168 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_ECK5_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ECK5_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct eck5 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eck5
- {
-
- static const double XF = 0.44101277172455148219;
- static const double RXF = 2.26750802723822639137;
- static const double YF = 0.88202554344910296438;
- static const double RYF = 1.13375401361911319568;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_eck5_spheroid : public base_t_fi<base_eck5_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_eck5_spheroid(const Parameters& par)
- : base_t_fi<base_eck5_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = XF * (1. + cos(lp_lat)) * lp_lon;
- xy_y = YF * lp_lat;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lon = RXF * xy_x / (1. + cos( lp_lat = RYF * xy_y));
- }
-
- static inline std::string get_name()
- {
- return "eck5_spheroid";
- }
-
- };
-
- // Eckert V
- template <typename Parameters>
- inline void setup_eck5(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::eck5
- #endif // doxygen
-
- /*!
- \brief Eckert V projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_eck5.gif
- */
- template <typename CalculationType, typename Parameters>
- struct eck5_spheroid : public detail::eck5::base_eck5_spheroid<CalculationType, Parameters>
- {
- inline eck5_spheroid(const Parameters& par) : detail::eck5::base_eck5_spheroid<CalculationType, Parameters>(par)
- {
- detail::eck5::setup_eck5(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::eck5, eck5_spheroid, eck5_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class eck5_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<eck5_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void eck5_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("eck5", new eck5_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_ECK5_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eqc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/eqc.hpp
deleted file mode 100644
index 5234ce9b8d8..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eqc.hpp
+++ /dev/null
@@ -1,175 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_EQC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_EQC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct eqc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eqc
- {
- template <typename T>
- struct par_eqc
- {
- T rc;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_eqc_spheroid : public base_t_fi<base_eqc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_eqc<CalculationType> m_proj_parm;
-
- inline base_eqc_spheroid(const Parameters& par)
- : base_t_fi<base_eqc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = this->m_proj_parm.rc * lp_lon;
- xy_y = lp_lat - this->m_par.phi0;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lon = xy_x / this->m_proj_parm.rc;
- lp_lat = xy_y + this->m_par.phi0;
- }
-
- static inline std::string get_name()
- {
- return "eqc_spheroid";
- }
-
- };
-
- // Equidistant Cylindrical (Plate Caree)
- template <typename Parameters, typename T>
- inline void setup_eqc(Parameters& par, par_eqc<T>& proj_parm)
- {
- if ((proj_parm.rc = cos(pj_param(par.params, "rlat_ts").f)) <= 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-24) );
- par.es = 0.;
- }
-
- }} // namespace detail::eqc
- #endif // doxygen
-
- /*!
- \brief Equidistant Cylindrical (Plate Caree) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- \par Projection parameters
- - lat_ts: Latitude of true scale (degrees)
- - lat_0: Latitude of origin
- \par Example
- \image html ex_eqc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct eqc_spheroid : public detail::eqc::base_eqc_spheroid<CalculationType, Parameters>
- {
- inline eqc_spheroid(const Parameters& par) : detail::eqc::base_eqc_spheroid<CalculationType, Parameters>(par)
- {
- detail::eqc::setup_eqc(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::eqc, eqc_spheroid, eqc_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class eqc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<eqc_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void eqc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("eqc", new eqc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_EQC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eqdc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/eqdc.hpp
deleted file mode 100644
index 1af11338a41..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/eqdc.hpp
+++ /dev/null
@@ -1,250 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_EQDC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_EQDC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_mlfn.hpp>
-#include <boost/geometry/srs/projections/impl/pj_msfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct eqdc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace eqdc
- {
-
- static const double EPS10 = 1.e-10;
-
- template <typename T>
- struct par_eqdc
- {
- T phi1;
- T phi2;
- T n;
- T rho0;
- T c;
- T en[EN_SIZE];
- int ellips;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_eqdc_ellipsoid : public base_t_fi<base_eqdc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_eqdc<CalculationType> m_proj_parm;
-
- inline base_eqdc_ellipsoid(const Parameters& par)
- : base_t_fi<base_eqdc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) sphere & ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType rho = 0.0;
- rho = this->m_proj_parm.c - (this->m_proj_parm.ellips ? pj_mlfn(lp_lat, sin(lp_lat),
- cos(lp_lat), this->m_proj_parm.en) : lp_lat);
- xy_x = rho * sin( lp_lon *= this->m_proj_parm.n );
- xy_y = this->m_proj_parm.rho0 - rho * cos(lp_lon);
- }
-
- // INVERSE(e_inverse) sphere & ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType rho = 0.0;
- if ((rho = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.rho0 - xy_y)) != 0.0 ) {
- if (this->m_proj_parm.n < 0.) {
- rho = -rho;
- xy_x = -xy_x;
- xy_y = -xy_y;
- }
- lp_lat = this->m_proj_parm.c - rho;
- if (this->m_proj_parm.ellips)
- lp_lat = pj_inv_mlfn(lp_lat, this->m_par.es, this->m_proj_parm.en);
- lp_lon = atan2(xy_x, xy_y) / this->m_proj_parm.n;
- } else {
- lp_lon = 0.;
- lp_lat = this->m_proj_parm.n > 0. ? geometry::math::half_pi<double>() : - geometry::math::half_pi<double>();
- }
- }
-
- // SPECIAL(fac)
- #ifdef SPECIAL_FACTORS_NOT_CONVERTED
- inline void fac(Geographic lp, Factors &fac) const
- {
- CalculationType sinphi, cosphi;
-
- sinphi = sin(lp_lat);
- cosphi = cos(lp_lat);
- this->m_fac.code |= IS_ANAL_HK;
- this->m_fac.h = 1.;
- this->m_fac.k = this->m_proj_parm.n * (this->m_proj_parm.c - (this->m_proj_parm.ellips ? pj_mlfn(lp_lat, sinphi,
- cosphi, this->m_proj_parm.en) : lp_lat)) / pj_msfn(sinphi, cosphi, this->m_par.es);
- }
- #endif
-
- static inline std::string get_name()
- {
- return "eqdc_ellipsoid";
- }
-
- };
-
- // Equidistant Conic
- template <typename Parameters, typename T>
- inline void setup_eqdc(Parameters& par, par_eqdc<T>& proj_parm)
- {
- T cosphi, sinphi;
- int secant;
-
- proj_parm.phi1 = pj_param(par.params, "rlat_1").f;
- proj_parm.phi2 = pj_param(par.params, "rlat_2").f;
- if (fabs(proj_parm.phi1 + proj_parm.phi2) < EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-21) );
- if (!pj_enfn(par.es, proj_parm.en))
- BOOST_THROW_EXCEPTION( projection_exception(0) );
- proj_parm.n = sinphi = sin(proj_parm.phi1);
- cosphi = cos(proj_parm.phi1);
- secant = fabs(proj_parm.phi1 - proj_parm.phi2) >= EPS10;
- if( (proj_parm.ellips = (par.es > 0.)) ) {
- double ml1, m1;
-
- m1 = pj_msfn(sinphi, cosphi, par.es);
- ml1 = pj_mlfn(proj_parm.phi1, sinphi, cosphi, proj_parm.en);
- if (secant) { /* secant cone */
- sinphi = sin(proj_parm.phi2);
- cosphi = cos(proj_parm.phi2);
- proj_parm.n = (m1 - pj_msfn(sinphi, cosphi, par.es)) /
- (pj_mlfn(proj_parm.phi2, sinphi, cosphi, proj_parm.en) - ml1);
- }
- proj_parm.c = ml1 + m1 / proj_parm.n;
- proj_parm.rho0 = proj_parm.c - pj_mlfn(par.phi0, sin(par.phi0),
- cos(par.phi0), proj_parm.en);
- } else {
- if (secant)
- proj_parm.n = (cosphi - cos(proj_parm.phi2)) / (proj_parm.phi2 - proj_parm.phi1);
- proj_parm.c = proj_parm.phi1 + cos(proj_parm.phi1) / proj_parm.n;
- proj_parm.rho0 = proj_parm.c - par.phi0;
- }
- }
-
- }} // namespace detail::eqdc
- #endif // doxygen
-
- /*!
- \brief Equidistant Conic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel (degrees)
- - lat_2: Latitude of second standard parallel (degrees)
- \par Example
- \image html ex_eqdc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct eqdc_ellipsoid : public detail::eqdc::base_eqdc_ellipsoid<CalculationType, Parameters>
- {
- inline eqdc_ellipsoid(const Parameters& par) : detail::eqdc::base_eqdc_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::eqdc::setup_eqdc(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::eqdc, eqdc_ellipsoid, eqdc_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class eqdc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<eqdc_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void eqdc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("eqdc", new eqdc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_EQDC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/etmerc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/etmerc.hpp
deleted file mode 100644
index 479c128f11a..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/etmerc.hpp
+++ /dev/null
@@ -1,395 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_ETMERC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ETMERC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Copyright (c) 2008 Gerald I. Evenden
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct etmerc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace etmerc
- {
-
- static const int PROJ_ETMERC_ORDER = 6;
-
- template <typename T>
- struct par_etmerc
- {
- T Qn; /* Merid. quad., scaled to the projection */
- T Zb; /* Radius vector in polar coord. systems */
- T cgb[6]; /* Constants for Gauss -> Geo lat */
- T cbg[6]; /* Constants for Geo lat -> Gauss */
- T utg[6]; /* Constants for transv. merc. -> geo */
- T gtu[6]; /* Constants for geo -> transv. merc. */
- };
-
- /* The code in this file is largly based upon procedures:
- *
- * Written by: Knud Poder and Karsten Engsager
- *
- * Based on math from: R.Koenig and K.H. Weise, "Mathematische
- * Grundlagen der hoeheren Geodaesie und Kartographie,
- * Springer-Verlag, Berlin/Goettingen" Heidelberg, 1951.
- *
- * Modified and used here by permission of Reference Networks
- * Division, Kort og Matrikelstyrelsen (KMS), Copenhagen, Denmark
- */
-
-
-
-
-
- template <typename T>
- inline T
- log1py(T const& x) { /* Compute log(1+x) accurately */
- volatile T
- y = 1 + x,
- z = y - 1;
- /* Here's the explanation for this magic: y = 1 + z, exactly, and z
- * approx x, thus log(y)/z (which is nearly constant near z = 0) returns
- * a good approximation to the true log(1 + x)/x. The multiplication x *
- * (log(y)/z) introduces little additional error. */
- return z == 0 ? x : x * log(y) / z;
- }
-
- template <typename T>
- inline T
- asinhy(T const& x) { /* Compute asinh(x) accurately */
- T y = fabs(x); /* Enforce odd parity */
- y = log1py(y * (1 + y/(boost::math::hypot(1.0, y) + 1)));
- return x < 0 ? -y : y;
- }
-
- template <typename T>
- inline T
- gatg(const T *p1, int len_p1, T const& B) {
- const T *p;
- T h = 0, h1, h2 = 0, cos_2B;
-
- cos_2B = 2*cos(2*B);
- for (p = p1 + len_p1, h1 = *--p; p - p1; h2 = h1, h1 = h)
- h = -h2 + cos_2B*h1 + *--p;
- return (B + h*sin(2*B));
- }
-
- template <typename T>
- inline T
- clenS(const T *a, int size, T const& arg_r, T const& arg_i, T *R, T *I) {
- T r, i, hr, hr1, hr2, hi, hi1, hi2;
- T sin_arg_r, cos_arg_r, sinh_arg_i, cosh_arg_i;
-
- /* arguments */
- const T* p = a + size;
- sin_arg_r = sin(arg_r);
- cos_arg_r = cos(arg_r);
- sinh_arg_i = sinh(arg_i);
- cosh_arg_i = cosh(arg_i);
- r = 2*cos_arg_r*cosh_arg_i;
- i = -2*sin_arg_r*sinh_arg_i;
- /* summation loop */
- for (hi1 = hr1 = hi = 0, hr = *--p; a - p;) {
- hr2 = hr1;
- hi2 = hi1;
- hr1 = hr;
- hi1 = hi;
- hr = -hr2 + r*hr1 - i*hi1 + *--p;
- hi = -hi2 + i*hr1 + r*hi1;
- }
- r = sin_arg_r*cosh_arg_i;
- i = cos_arg_r*sinh_arg_i;
- *R = r*hr - i*hi;
- *I = r*hi + i*hr;
- return(*R);
- }
-
- template <typename T>
- inline T
- clens(const T *a, int size, T const& arg_r) {
- T r, hr, hr1, hr2, cos_arg_r;
-
- const T* p = a + size;
- cos_arg_r = cos(arg_r);
- r = 2*cos_arg_r;
- /* summation loop */
- for (hr1 = 0, hr = *--p; a - p;) {
- hr2 = hr1;
- hr1 = hr;
- hr = -hr2 + r*hr1 + *--p;
- }
- return(sin(arg_r)*hr);
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_etmerc_ellipsoid : public base_t_fi<base_etmerc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_etmerc<CalculationType> m_proj_parm;
-
- inline base_etmerc_ellipsoid(const Parameters& par)
- : base_t_fi<base_etmerc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType sin_Cn, cos_Cn, cos_Ce, sin_Ce, dCn, dCe;
- CalculationType Cn = lp_lat, Ce = lp_lon;
-
- /* ell. LAT, LNG -> Gaussian LAT, LNG */
- Cn = gatg(this->m_proj_parm.cbg, PROJ_ETMERC_ORDER, Cn);
- /* Gaussian LAT, LNG -> compl. sph. LAT */
- sin_Cn = sin(Cn);
- cos_Cn = cos(Cn);
- sin_Ce = sin(Ce);
- cos_Ce = cos(Ce);
-
- Cn = atan2(sin_Cn, cos_Ce*cos_Cn);
- Ce = atan2(sin_Ce*cos_Cn, boost::math::hypot(sin_Cn, cos_Cn*cos_Ce));
- /* compl. sph. N, E -> ell. norm. N, E */
- Ce = asinhy(tan(Ce)); /* Replaces: Ce = log(tan(FORTPI + Ce*0.5)); */
- Cn += clenS(this->m_proj_parm.gtu, PROJ_ETMERC_ORDER, 2*Cn, 2*Ce, &dCn, &dCe);
- Ce += dCe;
- if (fabs(Ce) <= 2.623395162778) {
- xy_y = this->m_proj_parm.Qn * Cn + this->m_proj_parm.Zb; /* Northing */
- xy_x = this->m_proj_parm.Qn * Ce; /* Easting */
- } else
- xy_x = xy_y = HUGE_VAL;
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType sin_Cn, cos_Cn, cos_Ce, sin_Ce, dCn, dCe;
- CalculationType Cn = xy_y, Ce = xy_x;
-
- /* normalize N, E */
- Cn = (Cn - this->m_proj_parm.Zb)/this->m_proj_parm.Qn;
- Ce = Ce/this->m_proj_parm.Qn;
- if (fabs(Ce) <= 2.623395162778) { /* 150 degrees */
- /* norm. N, E -> compl. sph. LAT, LNG */
- Cn += clenS(this->m_proj_parm.utg, PROJ_ETMERC_ORDER, 2*Cn, 2*Ce, &dCn, &dCe);
- Ce += dCe;
- Ce = atan(sinh(Ce)); /* Replaces: Ce = 2*(atan(exp(Ce)) - FORTPI); */
- /* compl. sph. LAT -> Gaussian LAT, LNG */
- sin_Cn = sin(Cn);
- cos_Cn = cos(Cn);
- sin_Ce = sin(Ce);
- cos_Ce = cos(Ce);
- Ce = atan2(sin_Ce, cos_Ce*cos_Cn);
- Cn = atan2(sin_Cn*cos_Ce, boost::math::hypot(sin_Ce, cos_Ce*cos_Cn));
- /* Gaussian LAT, LNG -> ell. LAT, LNG */
- lp_lat = gatg(this->m_proj_parm.cgb, PROJ_ETMERC_ORDER, Cn);
- lp_lon = Ce;
- }
- else
- lp_lat = lp_lon = HUGE_VAL;
- }
-
- static inline std::string get_name()
- {
- return "etmerc_ellipsoid";
- }
-
- };
-
- // Extended Transverse Mercator
- template <typename Parameters, typename T>
- inline void setup_etmerc(Parameters& par, par_etmerc<T>& proj_parm)
- {
- T f, n, np, Z;
-
- if (par.es <= 0)
- BOOST_THROW_EXCEPTION( projection_exception(-34) );
- f = par.es / (1 + sqrt(1 - par.es)); /* Replaces: f = 1 - sqrt(1-par.es); */
- /* third flattening */
- np = n = f/(2 - f);
-
- /* COEF. OF TRIG SERIES GEO <-> GAUSS */
- /* cgb := Gaussian -> Geodetic, KW p190 - 191 (61) - (62) */
- /* cbg := Geodetic -> Gaussian, KW p186 - 187 (51) - (52) */
- /* PROJ_ETMERC_ORDER = 6th degree : Engsager and Poder: ICC2007 */
- proj_parm.cgb[0] = n*( 2 + n*(-2/3.0 + n*(-2 + n*(116/45.0 + n*(26/45.0 +
- n*(-2854/675.0 ))))));
- proj_parm.cbg[0] = n*(-2 + n*( 2/3.0 + n*( 4/3.0 + n*(-82/45.0 + n*(32/45.0 +
- n*( 4642/4725.0))))));
- np *= n;
- proj_parm.cgb[1] = np*(7/3.0 + n*( -8/5.0 + n*(-227/45.0 + n*(2704/315.0 +
- n*( 2323/945.0)))));
- proj_parm.cbg[1] = np*(5/3.0 + n*(-16/15.0 + n*( -13/9.0 + n*( 904/315.0 +
- n*(-1522/945.0)))));
- np *= n;
- /* n^5 coeff corrected from 1262/105 -> -1262/105 */
- proj_parm.cgb[2] = np*( 56/15.0 + n*(-136/35.0 + n*(-1262/105.0 +
- n*( 73814/2835.0))));
- proj_parm.cbg[2] = np*(-26/15.0 + n*( 34/21.0 + n*( 8/5.0 +
- n*(-12686/2835.0))));
- np *= n;
- /* n^5 coeff corrected from 322/35 -> 332/35 */
- proj_parm.cgb[3] = np*(4279/630.0 + n*(-332/35.0 + n*(-399572/14175.0)));
- proj_parm.cbg[3] = np*(1237/630.0 + n*( -12/5.0 + n*( -24832/14175.0)));
- np *= n;
- proj_parm.cgb[4] = np*(4174/315.0 + n*(-144838/6237.0 ));
- proj_parm.cbg[4] = np*(-734/315.0 + n*( 109598/31185.0));
- np *= n;
- proj_parm.cgb[5] = np*(601676/22275.0 );
- proj_parm.cbg[5] = np*(444337/155925.0);
-
- /* Constants of the projections */
- /* Transverse Mercator (UTM, ITM, etc) */
- np = n*n;
- /* Norm. mer. quad, K&W p.50 (96), p.19 (38b), p.5 (2) */
- proj_parm.Qn = par.k0/(1 + n) * (1 + np*(1/4.0 + np*(1/64.0 + np/256.0)));
- /* coef of trig series */
- /* utg := ell. N, E -> sph. N, E, KW p194 (65) */
- /* gtu := sph. N, E -> ell. N, E, KW p196 (69) */
- proj_parm.utg[0] = n*(-0.5 + n*( 2/3.0 + n*(-37/96.0 + n*( 1/360.0 +
- n*( 81/512.0 + n*(-96199/604800.0))))));
- proj_parm.gtu[0] = n*( 0.5 + n*(-2/3.0 + n*( 5/16.0 + n*(41/180.0 +
- n*(-127/288.0 + n*( 7891/37800.0 ))))));
- proj_parm.utg[1] = np*(-1/48.0 + n*(-1/15.0 + n*(437/1440.0 + n*(-46/105.0 +
- n*( 1118711/3870720.0)))));
- proj_parm.gtu[1] = np*(13/48.0 + n*(-3/5.0 + n*(557/1440.0 + n*(281/630.0 +
- n*(-1983433/1935360.0)))));
- np *= n;
- proj_parm.utg[2] = np*(-17/480.0 + n*( 37/840.0 + n*( 209/4480.0 +
- n*( -5569/90720.0 ))));
- proj_parm.gtu[2] = np*( 61/240.0 + n*(-103/140.0 + n*(15061/26880.0 +
- n*(167603/181440.0))));
- np *= n;
- proj_parm.utg[3] = np*(-4397/161280.0 + n*( 11/504.0 + n*( 830251/7257600.0)));
- proj_parm.gtu[3] = np*(49561/161280.0 + n*(-179/168.0 + n*(6601661/7257600.0)));
- np *= n;
- proj_parm.utg[4] = np*(-4583/161280.0 + n*( 108847/3991680.0));
- proj_parm.gtu[4] = np*(34729/80640.0 + n*(-3418889/1995840.0));
- np *= n;
- proj_parm.utg[5] = np*(-20648693/638668800.0);
- proj_parm.gtu[5] = np*(212378941/319334400.0);
- /* Gaussian latitude value of the origin latitude */
- Z = gatg(proj_parm.cbg, PROJ_ETMERC_ORDER, par.phi0);
- /* Origin northing minus true northing at the origin latitude */
- /* i.e. true northing = N - proj_parm.Zb */
- proj_parm.Zb = - proj_parm.Qn*(Z + clens(proj_parm.gtu, PROJ_ETMERC_ORDER, 2*Z));
- }
-
- }} // namespace detail::etmerc
- #endif // doxygen
-
- /*!
- \brief Extended Transverse Mercator projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- \par Projection parameters
- - lat_ts: Latitude of true scale
- - lat_0: Latitude of origin
- \par Example
- \image html ex_etmerc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct etmerc_ellipsoid : public detail::etmerc::base_etmerc_ellipsoid<CalculationType, Parameters>
- {
- inline etmerc_ellipsoid(const Parameters& par) : detail::etmerc::base_etmerc_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::etmerc::setup_etmerc(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::etmerc, etmerc_ellipsoid, etmerc_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class etmerc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<etmerc_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void etmerc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("etmerc", new etmerc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_ETMERC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/fahey.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/fahey.hpp
deleted file mode 100644
index 8ea43ee94bd..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/fahey.hpp
+++ /dev/null
@@ -1,168 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_FAHEY_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_FAHEY_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct fahey {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace fahey
- {
-
- static const double TOL = 1e-6;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_fahey_spheroid : public base_t_fi<base_fahey_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_fahey_spheroid(const Parameters& par)
- : base_t_fi<base_fahey_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_y = 1.819152 * ( xy_x = tan(0.5 * lp_lat) );
- xy_x = 0.819152 * lp_lon * asqrt(1 - xy_x * xy_x);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = 2. * atan(xy_y /= 1.819152);
- lp_lon = fabs(xy_y = 1. - xy_y * xy_y) < TOL ? 0. :
- xy_x / (0.819152 * sqrt(xy_y));
- }
-
- static inline std::string get_name()
- {
- return "fahey_spheroid";
- }
-
- };
-
- // Fahey
- template <typename Parameters>
- inline void setup_fahey(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::fahey
- #endif // doxygen
-
- /*!
- \brief Fahey projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_fahey.gif
- */
- template <typename CalculationType, typename Parameters>
- struct fahey_spheroid : public detail::fahey::base_fahey_spheroid<CalculationType, Parameters>
- {
- inline fahey_spheroid(const Parameters& par) : detail::fahey::base_fahey_spheroid<CalculationType, Parameters>(par)
- {
- detail::fahey::setup_fahey(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::fahey, fahey_spheroid, fahey_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class fahey_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<fahey_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void fahey_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("fahey", new fahey_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_FAHEY_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/fouc_s.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/fouc_s.hpp
deleted file mode 100644
index 0f34593161b..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/fouc_s.hpp
+++ /dev/null
@@ -1,201 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_FOUC_S_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_FOUC_S_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct fouc_s {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace fouc_s
- {
-
- static const int MAX_ITER = 10;
- static const double LOOP_TOL = 1e-7;
-
- template <typename T>
- struct par_fouc_s
- {
- T n, n1;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_fouc_s_spheroid : public base_t_fi<base_fouc_s_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_fouc_s<CalculationType> m_proj_parm;
-
- inline base_fouc_s_spheroid(const Parameters& par)
- : base_t_fi<base_fouc_s_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType t;
-
- t = cos(lp_lat);
- xy_x = lp_lon * t / (this->m_proj_parm.n + this->m_proj_parm.n1 * t);
- xy_y = this->m_proj_parm.n * lp_lat + this->m_proj_parm.n1 * sin(lp_lat);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType V;
- int i;
-
- if (this->m_proj_parm.n) {
- lp_lat = xy_y;
- for (i = MAX_ITER; i ; --i) {
- lp_lat -= V = (this->m_proj_parm.n * lp_lat + this->m_proj_parm.n1 * sin(lp_lat) - xy_y ) /
- (this->m_proj_parm.n + this->m_proj_parm.n1 * cos(lp_lat));
- if (fabs(V) < LOOP_TOL)
- break;
- }
- if (!i)
- lp_lat = xy_y < 0. ? -geometry::math::half_pi<double>() : geometry::math::half_pi<double>();
- } else
- lp_lat = aasin(xy_y);
- V = cos(lp_lat);
- lp_lon = xy_x * (this->m_proj_parm.n + this->m_proj_parm.n1 * V) / V;
- }
-
- static inline std::string get_name()
- {
- return "fouc_s_spheroid";
- }
-
- };
-
- // Foucaut Sinusoidal
- template <typename Parameters, typename T>
- inline void setup_fouc_s(Parameters& par, par_fouc_s<T>& proj_parm)
- {
- proj_parm.n = pj_param(par.params, "dn").f;
- if (proj_parm.n < 0. || proj_parm.n > 1.)
- BOOST_THROW_EXCEPTION( projection_exception(-99) );
- proj_parm.n1 = 1. - proj_parm.n;
- par.es = 0;
- }
-
- }} // namespace detail::fouc_s
- #endif // doxygen
-
- /*!
- \brief Foucaut Sinusoidal projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Projection parameters
- - n (real)
- \par Example
- \image html ex_fouc_s.gif
- */
- template <typename CalculationType, typename Parameters>
- struct fouc_s_spheroid : public detail::fouc_s::base_fouc_s_spheroid<CalculationType, Parameters>
- {
- inline fouc_s_spheroid(const Parameters& par) : detail::fouc_s::base_fouc_s_spheroid<CalculationType, Parameters>(par)
- {
- detail::fouc_s::setup_fouc_s(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::fouc_s, fouc_s_spheroid, fouc_s_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class fouc_s_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<fouc_s_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void fouc_s_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("fouc_s", new fouc_s_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_FOUC_S_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/gall.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/gall.hpp
deleted file mode 100644
index fc1ad144d77..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/gall.hpp
+++ /dev/null
@@ -1,169 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_GALL_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_GALL_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct gall {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace gall
- {
-
- static const double YF = 1.70710678118654752440;
- static const double XF = 0.70710678118654752440;
- static const double RYF = 0.58578643762690495119;
- static const double RXF = 1.41421356237309504880;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_gall_spheroid : public base_t_fi<base_gall_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_gall_spheroid(const Parameters& par)
- : base_t_fi<base_gall_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = XF * lp_lon;
- xy_y = YF * tan(.5 * lp_lat);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lon = RXF * xy_x;
- lp_lat = 2. * atan(xy_y * RYF);
- }
-
- static inline std::string get_name()
- {
- return "gall_spheroid";
- }
-
- };
-
- // Gall (Gall Stereographic)
- template <typename Parameters>
- inline void setup_gall(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::gall
- #endif // doxygen
-
- /*!
- \brief Gall (Gall Stereographic) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- \par Example
- \image html ex_gall.gif
- */
- template <typename CalculationType, typename Parameters>
- struct gall_spheroid : public detail::gall::base_gall_spheroid<CalculationType, Parameters>
- {
- inline gall_spheroid(const Parameters& par) : detail::gall::base_gall_spheroid<CalculationType, Parameters>(par)
- {
- detail::gall::setup_gall(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::gall, gall_spheroid, gall_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class gall_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<gall_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void gall_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("gall", new gall_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_GALL_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/geocent.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/geocent.hpp
deleted file mode 100644
index bfcbb145fa1..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/geocent.hpp
+++ /dev/null
@@ -1,169 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_GEOCENT_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_GEOCENT_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Purpose: Stub projection for geocentric. The transformation isn't
-// really done here since this code is 2D. The real transformation
-// is handled by pj_transform.c.
-// Author: Frank Warmerdam, warmerdam@pobox.com
-// Copyright (c) 2002, Frank Warmerdam
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct geocent {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace geocent
- {
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_geocent_other : public base_t_fi<base_geocent_other<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_geocent_other(const Parameters& par)
- : base_t_fi<base_geocent_other<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(forward)
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = lp_lon;
- xy_y = lp_lat;
- }
-
- // INVERSE(inverse)
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = xy_y;
- lp_lon = xy_x;
- }
-
- static inline std::string get_name()
- {
- return "geocent_other";
- }
-
- };
-
- // Geocentric
- template <typename Parameters>
- inline void setup_geocent(Parameters& par)
- {
- par.is_geocent = 1;
- par.x0 = 0.0;
- par.y0 = 0.0;
- }
-
- }} // namespace detail::geocent
- #endif // doxygen
-
- /*!
- \brief Geocentric projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Example
- \image html ex_geocent.gif
- */
- template <typename CalculationType, typename Parameters>
- struct geocent_other : public detail::geocent::base_geocent_other<CalculationType, Parameters>
- {
- inline geocent_other(const Parameters& par) : detail::geocent::base_geocent_other<CalculationType, Parameters>(par)
- {
- detail::geocent::setup_geocent(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::geocent, geocent_other, geocent_other)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class geocent_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<geocent_other<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void geocent_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("geocent", new geocent_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_GEOCENT_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/geos.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/geos.hpp
deleted file mode 100644
index 798f7f6247e..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/geos.hpp
+++ /dev/null
@@ -1,377 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_GEOS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_GEOS_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Copyright (c) 2004 Gerald I. Evenden
-// Copyright (c) 2012 Martin Raspaud
-// See also (section 4.4.3.2):
-// http://www.eumetsat.int/en/area4/msg/news/us_doc/cgms_03_26.pdf
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct geos {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace geos
- {
- template <typename T>
- struct par_geos
- {
- T h;
- T radius_p;
- T radius_p2;
- T radius_p_inv2;
- T radius_g;
- T radius_g_1;
- T C;
- std::string sweep_axis;
- int flip_axis;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_geos_ellipsoid : public base_t_fi<base_geos_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_geos<CalculationType> m_proj_parm;
-
- inline base_geos_ellipsoid(const Parameters& par)
- : base_t_fi<base_geos_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType r, Vx, Vy, Vz, tmp;
-
- /* Calculation of geocentric latitude. */
- lp_lat = atan (this->m_proj_parm.radius_p2 * tan (lp_lat));
- /* Calculation of the three components of the vector from satellite to
- ** position on earth surface (lon,lat).*/
- r = (this->m_proj_parm.radius_p) / boost::math::hypot(this->m_proj_parm.radius_p * cos (lp_lat), sin (lp_lat));
- Vx = r * cos (lp_lon) * cos (lp_lat);
- Vy = r * sin (lp_lon) * cos (lp_lat);
- Vz = r * sin (lp_lat);
- /* Check visibility. */
- if (((this->m_proj_parm.radius_g - Vx) * Vx - Vy * Vy - Vz * Vz * this->m_proj_parm.radius_p_inv2) < 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- /* Calculation based on view angles from satellite. */
- tmp = this->m_proj_parm.radius_g - Vx;
- if(this->m_proj_parm.flip_axis)
- {
- xy_x = this->m_proj_parm.radius_g_1 * atan (Vy / boost::math::hypot (Vz, tmp));
- xy_y = this->m_proj_parm.radius_g_1 * atan (Vz / tmp);
- }
- else
- {
- xy_x = this->m_proj_parm.radius_g_1 * atan (Vy / tmp);
- xy_y = this->m_proj_parm.radius_g_1 * atan (Vz / boost::math::hypot (Vy, tmp));
- }
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType Vx, Vy, Vz, a, b, det, k;
-
- /* Setting three components of vector from satellite to position.*/
- Vx = -1.0;
- if(this->m_proj_parm.flip_axis)
- {
- Vz = tan (xy_y / this->m_proj_parm.radius_g_1);
- Vy = tan (xy_x / this->m_proj_parm.radius_g_1) * boost::math::hypot(1.0, Vz);
- }
- else
- {
- Vy = tan (xy_x / this->m_proj_parm.radius_g_1);
- Vz = tan (xy_y / this->m_proj_parm.radius_g_1) * boost::math::hypot(1.0, Vy);
- }
- /* Calculation of terms in cubic equation and determinant.*/
- a = Vz / this->m_proj_parm.radius_p;
- a = Vy * Vy + a * a + Vx * Vx;
- b = 2 * this->m_proj_parm.radius_g * Vx;
- if ((det = (b * b) - 4 * a * this->m_proj_parm.C) < 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- /* Calculation of three components of vector from satellite to position.*/
- k = (-b - sqrt(det)) / (2. * a);
- Vx = this->m_proj_parm.radius_g + k * Vx;
- Vy *= k;
- Vz *= k;
- /* Calculation of longitude and latitude.*/
- lp_lon = atan2 (Vy, Vx);
- lp_lat = atan (Vz * cos (lp_lon) / Vx);
- lp_lat = atan (this->m_proj_parm.radius_p_inv2 * tan (lp_lat));
- }
-
- static inline std::string get_name()
- {
- return "geos_ellipsoid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_geos_spheroid : public base_t_fi<base_geos_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_geos<CalculationType> m_proj_parm;
-
- inline base_geos_spheroid(const Parameters& par)
- : base_t_fi<base_geos_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType Vx, Vy, Vz, tmp;
-
- /* Calculation of the three components of the vector from satellite to
- ** position on earth surface (lon,lat).*/
- tmp = cos(lp_lat);
- Vx = cos (lp_lon) * tmp;
- Vy = sin (lp_lon) * tmp;
- Vz = sin (lp_lat);
- /* Check visibility.*/
- if (((this->m_proj_parm.radius_g - Vx) * Vx - Vy * Vy - Vz * Vz) < 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- /* Calculation based on view angles from satellite.*/
- tmp = this->m_proj_parm.radius_g - Vx;
- if(this->m_proj_parm.flip_axis)
- {
- xy_x = this->m_proj_parm.radius_g_1 * atan(Vy / boost::math::hypot(Vz, tmp));
- xy_y = this->m_proj_parm.radius_g_1 * atan(Vz / tmp);
- }
- else
- {
- xy_x = this->m_proj_parm.radius_g_1 * atan(Vy / tmp);
- xy_y = this->m_proj_parm.radius_g_1 * atan(Vz / boost::math::hypot(Vy, tmp));
- }
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType Vx, Vy, Vz, a, b, det, k;
-
- /* Setting three components of vector from satellite to position.*/
- Vx = -1.0;
- if(this->m_proj_parm.flip_axis)
- {
- Vz = tan (xy_y / (this->m_proj_parm.radius_g - 1.0));
- Vy = tan (xy_x / (this->m_proj_parm.radius_g - 1.0)) * sqrt (1.0 + Vz * Vz);
- }
- else
- {
- Vy = tan (xy_x / (this->m_proj_parm.radius_g - 1.0));
- Vz = tan (xy_y / (this->m_proj_parm.radius_g - 1.0)) * sqrt (1.0 + Vy * Vy);
- }
- /* Calculation of terms in cubic equation and determinant.*/
- a = Vy * Vy + Vz * Vz + Vx * Vx;
- b = 2 * this->m_proj_parm.radius_g * Vx;
- if ((det = (b * b) - 4 * a * this->m_proj_parm.C) < 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- /* Calculation of three components of vector from satellite to position.*/
- k = (-b - sqrt(det)) / (2 * a);
- Vx = this->m_proj_parm.radius_g + k * Vx;
- Vy *= k;
- Vz *= k;
- /* Calculation of longitude and latitude.*/
- lp_lon = atan2 (Vy, Vx);
- lp_lat = atan (Vz * cos (lp_lon) / Vx);
- }
-
- static inline std::string get_name()
- {
- return "geos_spheroid";
- }
-
- };
-
- // Geostationary Satellite View
- template <typename Parameters, typename T>
- inline void setup_geos(Parameters& par, par_geos<T>& proj_parm)
- {
- if ((proj_parm.h = pj_param(par.params, "dh").f) <= 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-30) );
- if (par.phi0)
- BOOST_THROW_EXCEPTION( projection_exception(-46) );
- proj_parm.sweep_axis = pj_param(par.params, "ssweep").s;
- if (proj_parm.sweep_axis.empty())
- proj_parm.flip_axis = 0;
- else {
- if (proj_parm.sweep_axis[1] != '\0' ||
- (proj_parm.sweep_axis[0] != 'x' &&
- proj_parm.sweep_axis[0] != 'y'))
- BOOST_THROW_EXCEPTION( projection_exception(-49) );
- if (proj_parm.sweep_axis[0] == 'x')
- proj_parm.flip_axis = 1;
- else
- proj_parm.flip_axis = 0;
- }
- proj_parm.radius_g_1 = proj_parm.h / par.a;
- proj_parm.radius_g = 1. + proj_parm.radius_g_1;
- proj_parm.C = proj_parm.radius_g * proj_parm.radius_g - 1.0;
- if (par.es) {
- proj_parm.radius_p = sqrt (par.one_es);
- proj_parm.radius_p2 = par.one_es;
- proj_parm.radius_p_inv2 = par.rone_es;
- } else {
- proj_parm.radius_p = proj_parm.radius_p2 = proj_parm.radius_p_inv2 = 1.0;
- }
- }
-
- }} // namespace detail::geos
- #endif // doxygen
-
- /*!
- \brief Geostationary Satellite View projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - h: Height (real)
- - sweep: Sweep axis ('x' or 'y') (string)
- \par Example
- \image html ex_geos.gif
- */
- template <typename CalculationType, typename Parameters>
- struct geos_ellipsoid : public detail::geos::base_geos_ellipsoid<CalculationType, Parameters>
- {
- inline geos_ellipsoid(const Parameters& par) : detail::geos::base_geos_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::geos::setup_geos(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Geostationary Satellite View projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - h: Height (real)
- - sweep: Sweep axis ('x' or 'y') (string)
- \par Example
- \image html ex_geos.gif
- */
- template <typename CalculationType, typename Parameters>
- struct geos_spheroid : public detail::geos::base_geos_spheroid<CalculationType, Parameters>
- {
- inline geos_spheroid(const Parameters& par) : detail::geos::base_geos_spheroid<CalculationType, Parameters>(par)
- {
- detail::geos::setup_geos(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::geos, geos_spheroid, geos_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class geos_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<geos_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<geos_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void geos_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("geos", new geos_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_GEOS_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/gins8.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/gins8.hpp
deleted file mode 100644
index f6c0059b07e..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/gins8.hpp
+++ /dev/null
@@ -1,170 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_GINS8_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_GINS8_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct gins8 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace gins8
- {
-
- static const double Cl = 0.000952426;
- static const double Cp = 0.162388;
- //static const double C12 = 0.08333333333333333;
-
- template <typename T>
- inline T C12() { return 0.083333333333333333333333333333333333; }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_gins8_spheroid : public base_t_f<base_gins8_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_gins8_spheroid(const Parameters& par)
- : base_t_f<base_gins8_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType C12 = gins8::C12<CalculationType>();
-
- CalculationType t = lp_lat * lp_lat;
-
- xy_y = lp_lat * (1. + t * C12);
- xy_x = lp_lon * (1. - Cp * t);
- t = lp_lon * lp_lon;
- xy_x *= (0.87 - Cl * t * t);
- }
-
- static inline std::string get_name()
- {
- return "gins8_spheroid";
- }
-
- };
-
- // Ginsburg VIII (TsNIIGAiK)
- template <typename Parameters>
- inline void setup_gins8(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::gins8
- #endif // doxygen
-
- /*!
- \brief Ginsburg VIII (TsNIIGAiK) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- - no inverse
- \par Example
- \image html ex_gins8.gif
- */
- template <typename CalculationType, typename Parameters>
- struct gins8_spheroid : public detail::gins8::base_gins8_spheroid<CalculationType, Parameters>
- {
- inline gins8_spheroid(const Parameters& par) : detail::gins8::base_gins8_spheroid<CalculationType, Parameters>(par)
- {
- detail::gins8::setup_gins8(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::gins8, gins8_spheroid, gins8_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class gins8_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<gins8_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void gins8_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("gins8", new gins8_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_GINS8_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/gn_sinu.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/gn_sinu.hpp
deleted file mode 100644
index c41b2782554..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/gn_sinu.hpp
+++ /dev/null
@@ -1,426 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_GN_SINU_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_GN_SINU_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-#include <boost/geometry/srs/projections/impl/pj_mlfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct gn_sinu {};
- struct sinu {};
- struct eck6 {};
- struct mbtfps {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace gn_sinu
- {
-
- static const double EPS10 = 1e-10;
- static const int MAX_ITER = 8;
- static const double LOOP_TOL = 1e-7;
-
- template <typename T>
- struct par_gn_sinu
- {
- T en[EN_SIZE];
- T m, n, C_x, C_y;
- };
-
- /* Ellipsoidal Sinusoidal only */
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_gn_sinu_ellipsoid : public base_t_fi<base_gn_sinu_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_gn_sinu<CalculationType> m_proj_parm;
-
- inline base_gn_sinu_ellipsoid(const Parameters& par)
- : base_t_fi<base_gn_sinu_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType s, c;
-
- xy_y = pj_mlfn(lp_lat, s = sin(lp_lat), c = cos(lp_lat), this->m_proj_parm.en);
- xy_x = lp_lon * c / sqrt(1. - this->m_par.es * s * s);
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType s;
-
- if ((s = fabs(lp_lat = pj_inv_mlfn(xy_y, this->m_par.es, this->m_proj_parm.en))) < HALFPI) {
- s = sin(lp_lat);
- lp_lon = xy_x * sqrt(1. - this->m_par.es * s * s) / cos(lp_lat);
- } else if ((s - EPS10) < HALFPI)
- lp_lon = 0.;
- else
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- }
- /* General spherical sinusoidals */
-
- static inline std::string get_name()
- {
- return "gn_sinu_ellipsoid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_gn_sinu_spheroid : public base_t_fi<base_gn_sinu_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_gn_sinu<CalculationType> m_proj_parm;
-
- inline base_gn_sinu_spheroid(const Parameters& par)
- : base_t_fi<base_gn_sinu_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) sphere
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- if (!this->m_proj_parm.m)
- lp_lat = this->m_proj_parm.n != 1. ? aasin(this->m_proj_parm.n * sin(lp_lat)): lp_lat;
- else {
- CalculationType k, V;
- int i;
-
- k = this->m_proj_parm.n * sin(lp_lat);
- for (i = MAX_ITER; i ; --i) {
- lp_lat -= V = (this->m_proj_parm.m * lp_lat + sin(lp_lat) - k) /
- (this->m_proj_parm.m + cos(lp_lat));
- if (fabs(V) < LOOP_TOL)
- break;
- }
- if (!i)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- }
- xy_x = this->m_proj_parm.C_x * lp_lon * (this->m_proj_parm.m + cos(lp_lat));
- xy_y = this->m_proj_parm.C_y * lp_lat;
- }
-
- // INVERSE(s_inverse) sphere
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- xy_y /= this->m_proj_parm.C_y;
- lp_lat = this->m_proj_parm.m ? aasin((this->m_proj_parm.m * xy_y + sin(xy_y)) / this->m_proj_parm.n) :
- ( this->m_proj_parm.n != 1. ? aasin(sin(xy_y) / this->m_proj_parm.n) : xy_y );
- lp_lon = xy_x / (this->m_proj_parm.C_x * (this->m_proj_parm.m + cos(xy_y)));
- }
-
- static inline std::string get_name()
- {
- return "gn_sinu_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_gn_sinu<T>& proj_parm)
- {
- par.es = 0;
- proj_parm.C_x = (proj_parm.C_y = sqrt((proj_parm.m + 1.) / proj_parm.n))/(proj_parm.m + 1.);
- }
-
-
- // General Sinusoidal Series
- template <typename Parameters, typename T>
- inline void setup_gn_sinu(Parameters& par, par_gn_sinu<T>& proj_parm)
- {
- if (pj_param(par.params, "tn").i && pj_param(par.params, "tm").i) {
- proj_parm.n = pj_param(par.params, "dn").f;
- proj_parm.m = pj_param(par.params, "dm").f;
- } else
- BOOST_THROW_EXCEPTION( projection_exception(-99) );
- setup(par, proj_parm);
- }
-
- // Sinusoidal (Sanson-Flamsteed)
- template <typename Parameters, typename T>
- inline void setup_sinu(Parameters& par, par_gn_sinu<T>& proj_parm)
- {
- if (!pj_enfn(par.es, proj_parm.en))
- BOOST_THROW_EXCEPTION( projection_exception(0) );
- if (par.es) {
- } else {
- proj_parm.n = 1.;
- proj_parm.m = 0.;
- setup(par, proj_parm);
- }
- }
-
- // Eckert VI
- template <typename Parameters, typename T>
- inline void setup_eck6(Parameters& par, par_gn_sinu<T>& proj_parm)
- {
- proj_parm.m = 1.;
- proj_parm.n = 2.570796326794896619231321691;
- setup(par, proj_parm);
- }
-
- // McBryde-Thomas Flat-Polar Sinusoidal
- template <typename Parameters, typename T>
- inline void setup_mbtfps(Parameters& par, par_gn_sinu<T>& proj_parm)
- {
- proj_parm.m = 0.5;
- proj_parm.n = 1.785398163397448309615660845;
- setup(par, proj_parm);
- }
-
- }} // namespace detail::gn_sinu
- #endif // doxygen
-
- /*!
- \brief General Sinusoidal Series projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Projection parameters
- - m (real)
- - n (real)
- \par Example
- \image html ex_gn_sinu.gif
- */
- template <typename CalculationType, typename Parameters>
- struct gn_sinu_spheroid : public detail::gn_sinu::base_gn_sinu_spheroid<CalculationType, Parameters>
- {
- inline gn_sinu_spheroid(const Parameters& par) : detail::gn_sinu::base_gn_sinu_spheroid<CalculationType, Parameters>(par)
- {
- detail::gn_sinu::setup_gn_sinu(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Sinusoidal (Sanson-Flamsteed) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_sinu.gif
- */
- template <typename CalculationType, typename Parameters>
- struct sinu_ellipsoid : public detail::gn_sinu::base_gn_sinu_ellipsoid<CalculationType, Parameters>
- {
- inline sinu_ellipsoid(const Parameters& par) : detail::gn_sinu::base_gn_sinu_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::gn_sinu::setup_sinu(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Sinusoidal (Sanson-Flamsteed) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_sinu.gif
- */
- template <typename CalculationType, typename Parameters>
- struct sinu_spheroid : public detail::gn_sinu::base_gn_sinu_spheroid<CalculationType, Parameters>
- {
- inline sinu_spheroid(const Parameters& par) : detail::gn_sinu::base_gn_sinu_spheroid<CalculationType, Parameters>(par)
- {
- detail::gn_sinu::setup_sinu(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Eckert VI projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_eck6.gif
- */
- template <typename CalculationType, typename Parameters>
- struct eck6_spheroid : public detail::gn_sinu::base_gn_sinu_spheroid<CalculationType, Parameters>
- {
- inline eck6_spheroid(const Parameters& par) : detail::gn_sinu::base_gn_sinu_spheroid<CalculationType, Parameters>(par)
- {
- detail::gn_sinu::setup_eck6(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief McBryde-Thomas Flat-Polar Sinusoidal projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_mbtfps.gif
- */
- template <typename CalculationType, typename Parameters>
- struct mbtfps_spheroid : public detail::gn_sinu::base_gn_sinu_spheroid<CalculationType, Parameters>
- {
- inline mbtfps_spheroid(const Parameters& par) : detail::gn_sinu::base_gn_sinu_spheroid<CalculationType, Parameters>(par)
- {
- detail::gn_sinu::setup_mbtfps(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::gn_sinu, gn_sinu_spheroid, gn_sinu_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::sinu, sinu_spheroid, sinu_ellipsoid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::eck6, eck6_spheroid, eck6_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::mbtfps, mbtfps_spheroid, mbtfps_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class gn_sinu_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<gn_sinu_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class sinu_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<sinu_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<sinu_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class eck6_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<eck6_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class mbtfps_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<mbtfps_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void gn_sinu_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("gn_sinu", new gn_sinu_entry<CalculationType, Parameters>);
- factory.add_to_factory("sinu", new sinu_entry<CalculationType, Parameters>);
- factory.add_to_factory("eck6", new eck6_entry<CalculationType, Parameters>);
- factory.add_to_factory("mbtfps", new mbtfps_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_GN_SINU_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/gnom.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/gnom.hpp
deleted file mode 100644
index d691c136b6f..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/gnom.hpp
+++ /dev/null
@@ -1,266 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_GNOM_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_GNOM_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/config.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct gnom {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace gnom
- {
-
- static const double EPS10 = 1.e-10;
- static const int N_POLE = 0;
- static const int S_POLE = 1;
- static const int EQUIT = 2;
- static const int OBLIQ = 3;
-
- template <typename T>
- struct par_gnom
- {
- T sinph0;
- T cosph0;
- int mode;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_gnom_spheroid : public base_t_fi<base_gnom_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_gnom<CalculationType> m_proj_parm;
-
- inline base_gnom_spheroid(const Parameters& par)
- : base_t_fi<base_gnom_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType coslam, cosphi, sinphi;
-
- sinphi = sin(lp_lat);
- cosphi = cos(lp_lat);
- coslam = cos(lp_lon);
- switch (this->m_proj_parm.mode) {
- case EQUIT:
- xy_y = cosphi * coslam;
- break;
- case OBLIQ:
- xy_y = this->m_proj_parm.sinph0 * sinphi + this->m_proj_parm.cosph0 * cosphi * coslam;
- break;
- case S_POLE:
- xy_y = - sinphi;
- break;
- case N_POLE:
- xy_y = sinphi;
- break;
- }
- if (xy_y <= EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_x = (xy_y = 1. / xy_y) * cosphi * sin(lp_lon);
- switch (this->m_proj_parm.mode) {
- case EQUIT:
- xy_y *= sinphi;
- break;
- case OBLIQ:
- xy_y *= this->m_proj_parm.cosph0 * sinphi - this->m_proj_parm.sinph0 * cosphi * coslam;
- break;
- case N_POLE:
- coslam = - coslam;
- BOOST_FALLTHROUGH;
- case S_POLE:
- xy_y *= cosphi * coslam;
- break;
- }
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType rh, cosz, sinz;
-
- rh = boost::math::hypot(xy_x, xy_y);
- sinz = sin(lp_lat = atan(rh));
- cosz = sqrt(1. - sinz * sinz);
- if (fabs(rh) <= EPS10) {
- lp_lat = this->m_par.phi0;
- lp_lon = 0.;
- } else {
- switch (this->m_proj_parm.mode) {
- case OBLIQ:
- lp_lat = cosz * this->m_proj_parm.sinph0 + xy_y * sinz * this->m_proj_parm.cosph0 / rh;
- if (fabs(lp_lat) >= 1.)
- lp_lat = lp_lat > 0. ? HALFPI : -HALFPI;
- else
- lp_lat = asin(lp_lat);
- xy_y = (cosz - this->m_proj_parm.sinph0 * sin(lp_lat)) * rh;
- xy_x *= sinz * this->m_proj_parm.cosph0;
- break;
- case EQUIT:
- lp_lat = xy_y * sinz / rh;
- if (fabs(lp_lat) >= 1.)
- lp_lat = lp_lat > 0. ? HALFPI : -HALFPI;
- else
- lp_lat = asin(lp_lat);
- xy_y = cosz * rh;
- xy_x *= sinz;
- break;
- case S_POLE:
- lp_lat -= HALFPI;
- break;
- case N_POLE:
- lp_lat = HALFPI - lp_lat;
- xy_y = -xy_y;
- break;
- }
- lp_lon = atan2(xy_x, xy_y);
- }
- }
-
- static inline std::string get_name()
- {
- return "gnom_spheroid";
- }
-
- };
-
- // Gnomonic
- template <typename Parameters, typename T>
- inline void setup_gnom(Parameters& par, par_gnom<T>& proj_parm)
- {
- static const T HALFPI = detail::HALFPI<T>();
-
- if (fabs(fabs(par.phi0) - HALFPI) < EPS10)
- proj_parm.mode = par.phi0 < 0. ? S_POLE : N_POLE;
- else if (fabs(par.phi0) < EPS10)
- proj_parm.mode = EQUIT;
- else {
- proj_parm.mode = OBLIQ;
- proj_parm.sinph0 = sin(par.phi0);
- proj_parm.cosph0 = cos(par.phi0);
- }
- par.es = 0.;
- }
-
- }} // namespace detail::gnom
- #endif // doxygen
-
- /*!
- \brief Gnomonic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- \par Example
- \image html ex_gnom.gif
- */
- template <typename CalculationType, typename Parameters>
- struct gnom_spheroid : public detail::gnom::base_gnom_spheroid<CalculationType, Parameters>
- {
- inline gnom_spheroid(const Parameters& par) : detail::gnom::base_gnom_spheroid<CalculationType, Parameters>(par)
- {
- detail::gnom::setup_gnom(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::gnom, gnom_spheroid, gnom_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class gnom_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<gnom_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void gnom_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("gnom", new gnom_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_GNOM_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/goode.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/goode.hpp
deleted file mode 100644
index ef4e5ebeeee..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/goode.hpp
+++ /dev/null
@@ -1,187 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_GOODE_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_GOODE_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/proj/gn_sinu.hpp>
-#include <boost/geometry/srs/projections/proj/moll.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct goode {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace goode
- {
-
- static const double Y_COR = 0.05280;
- static const double PHI_LIM = .71093078197902358062;
-
- template <typename CalculationType, typename Parameters>
- struct par_goode
- {
- sinu_ellipsoid<CalculationType, Parameters> sinu;
- moll_spheroid<CalculationType, Parameters> moll;
-
- par_goode(const Parameters& par) : sinu(par), moll(par) {}
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_goode_spheroid : public base_t_fi<base_goode_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_goode<CalculationType, Parameters> m_proj_parm;
-
- inline base_goode_spheroid(const Parameters& par)
- : base_t_fi<base_goode_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par), m_proj_parm(par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- if (fabs(lp_lat) <= PHI_LIM)
- this->m_proj_parm.sinu.fwd(lp_lon, lp_lat, xy_x, xy_y);
- else {
- this->m_proj_parm.moll.fwd(lp_lon, lp_lat, xy_x, xy_y);
- xy_y -= lp_lat >= 0.0 ? Y_COR : -Y_COR;
- }
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- if (fabs(xy_y) <= PHI_LIM)
- this->m_proj_parm.sinu.inv(xy_x, xy_y, lp_lon, lp_lat);
- else {
- xy_y += xy_y >= 0.0 ? Y_COR : -Y_COR;
- this->m_proj_parm.moll.inv(xy_x, xy_y, lp_lon, lp_lat);
- }
- }
-
- static inline std::string get_name()
- {
- return "goode_spheroid";
- }
-
- };
-
- // Goode Homolosine
- template <typename CalculationType, typename Parameters>
- inline void setup_goode(Parameters& par, par_goode<CalculationType, Parameters>& /*proj_parm*/)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::goode
- #endif // doxygen
-
- /*!
- \brief Goode Homolosine projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_goode.gif
- */
- template <typename CalculationType, typename Parameters>
- struct goode_spheroid : public detail::goode::base_goode_spheroid<CalculationType, Parameters>
- {
- inline goode_spheroid(const Parameters& par) : detail::goode::base_goode_spheroid<CalculationType, Parameters>(par)
- {
- detail::goode::setup_goode(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::goode, goode_spheroid, goode_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class goode_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<goode_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void goode_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("goode", new goode_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_GOODE_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/gstmerc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/gstmerc.hpp
deleted file mode 100644
index 5e3581328ed..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/gstmerc.hpp
+++ /dev/null
@@ -1,202 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_GSTMERC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_GSTMERC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_phi2.hpp>
-#include <boost/geometry/srs/projections/impl/pj_tsfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct gstmerc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace gstmerc
- {
- template <typename T>
- struct par_gstmerc
- {
- T lamc;
- T phic;
- T c;
- T n1;
- T n2;
- T XS;
- T YS;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_gstmerc_spheroid : public base_t_fi<base_gstmerc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_gstmerc<CalculationType> m_proj_parm;
-
- inline base_gstmerc_spheroid(const Parameters& par)
- : base_t_fi<base_gstmerc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType L, Ls, sinLs1, Ls1;
- L= this->m_proj_parm.n1*lp_lon;
- Ls= this->m_proj_parm.c+this->m_proj_parm.n1*log(pj_tsfn(-1.0*lp_lat,-1.0*sin(lp_lat),this->m_par.e));
- sinLs1= sin(L)/cosh(Ls);
- Ls1= log(pj_tsfn(-1.0*asin(sinLs1),0.0,0.0));
- xy_x= (this->m_proj_parm.XS + this->m_proj_parm.n2*Ls1)*this->m_par.ra;
- xy_y= (this->m_proj_parm.YS + this->m_proj_parm.n2*atan(sinh(Ls)/cos(L)))*this->m_par.ra;
- /*fprintf(stderr,"fwd:\nL =%16.13f\nLs =%16.13f\nLs1 =%16.13f\nLP(%16.13f,%16.13f)=XY(%16.4f,%16.4f)\n",L,Ls,Ls1,lp_lon+this->m_par.lam0,lp_lat,(xy_x*this->m_par.a + this->m_par.x0)*this->m_par.to_meter,(xy_y*this->m_par.a + this->m_par.y0)*this->m_par.to_meter);*/
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType L, LC, sinC;
- L= atan(sinh((xy_x*this->m_par.a - this->m_proj_parm.XS)/this->m_proj_parm.n2)/cos((xy_y*this->m_par.a - this->m_proj_parm.YS)/this->m_proj_parm.n2));
- sinC= sin((xy_y*this->m_par.a - this->m_proj_parm.YS)/this->m_proj_parm.n2)/cosh((xy_x*this->m_par.a - this->m_proj_parm.XS)/this->m_proj_parm.n2);
- LC= log(pj_tsfn(-1.0*asin(sinC),0.0,0.0));
- lp_lon= L/this->m_proj_parm.n1;
- lp_lat= -1.0*pj_phi2(exp((LC-this->m_proj_parm.c)/this->m_proj_parm.n1),this->m_par.e);
- /*fprintf(stderr,"inv:\nL =%16.13f\nsinC =%16.13f\nLC =%16.13f\nXY(%16.4f,%16.4f)=LP(%16.13f,%16.13f)\n",L,sinC,LC,((xy_x/this->m_par.ra)+this->m_par.x0)/this->m_par.to_meter,((xy_y/this->m_par.ra)+this->m_par.y0)/this->m_par.to_meter,lp_lon+this->m_par.lam0,lp_lat);*/
- }
-
- static inline std::string get_name()
- {
- return "gstmerc_spheroid";
- }
-
- };
-
- // Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)
- template <typename Parameters, typename T>
- inline void setup_gstmerc(Parameters& par, par_gstmerc<T>& proj_parm)
- {
- proj_parm.lamc= par.lam0;
- proj_parm.n1= sqrt(1.0+par.es*pow(cos(par.phi0),4.0)/(1.0-par.es));
- proj_parm.phic= asin(sin(par.phi0)/proj_parm.n1);
- proj_parm.c= log(pj_tsfn(-1.0*proj_parm.phic,0.0,0.0))
- -proj_parm.n1*log(pj_tsfn(-1.0*par.phi0,-1.0*sin(par.phi0),par.e));
- proj_parm.n2= par.k0*par.a*sqrt(1.0-par.es)/(1.0-par.es*sin(par.phi0)*sin(par.phi0));
- proj_parm.XS= 0;/* -par.x0 */
- proj_parm.YS= -1.0*proj_parm.n2*proj_parm.phic;/* -par.y0 */
- /*fprintf(stderr,"a (m) =%16.4f\ne =%16.13f\nl0(rad)=%16.13f\np0(rad)=%16.13f\nk0 =%16.4f\nX0 (m)=%16.4f\nY0 (m)=%16.4f\n\nlC(rad)=%16.13f\npC(rad)=%16.13f\nc =%16.13f\nn1 =%16.13f\nn2 (m) =%16.4f\nXS (m) =%16.4f\nYS (m) =%16.4f\n", par.a, par.e, par.lam0, par.phi0, par.k0, par.x0, par.y0, proj_parm.lamc, proj_parm.phic, proj_parm.c, proj_parm.n1, proj_parm.n2, proj_parm.XS +par.x0, proj_parm.YS + par.y0);*/
- }
-
- }} // namespace detail::gstmerc
- #endif // doxygen
-
- /*!
- \brief Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_0: Latitude of origin
- - lon_0: Central meridian
- - k_0: Scale factor
- \par Example
- \image html ex_gstmerc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct gstmerc_spheroid : public detail::gstmerc::base_gstmerc_spheroid<CalculationType, Parameters>
- {
- inline gstmerc_spheroid(const Parameters& par) : detail::gstmerc::base_gstmerc_spheroid<CalculationType, Parameters>(par)
- {
- detail::gstmerc::setup_gstmerc(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::gstmerc, gstmerc_spheroid, gstmerc_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class gstmerc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<gstmerc_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void gstmerc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("gstmerc", new gstmerc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_GSTMERC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/hammer.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/hammer.hpp
deleted file mode 100644
index 58707a14993..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/hammer.hpp
+++ /dev/null
@@ -1,201 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_HAMMER_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_HAMMER_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct hammer {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace hammer
- {
- static const double EPS = 1.0e-10;
-
- template <typename T>
- struct par_hammer
- {
- T w;
- T m, rm;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_hammer_spheroid : public base_t_fi<base_hammer_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_hammer<CalculationType> m_proj_parm;
-
- inline base_hammer_spheroid(const Parameters& par)
- : base_t_fi<base_hammer_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType cosphi, d;
-
- d = sqrt(2./(1. + (cosphi = cos(lp_lat)) * cos(lp_lon *= this->m_proj_parm.w)));
- xy_x = this->m_proj_parm.m * d * cosphi * sin(lp_lon);
- xy_y = this->m_proj_parm.rm * d * sin(lp_lat);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType z;
-
- z = sqrt(1. - 0.25*this->m_proj_parm.w*this->m_proj_parm.w*xy_x*xy_x - 0.25*xy_y*xy_y);
- if (geometry::math::abs(2.*z*z-1.) < EPS) {
- lp_lon = HUGE_VAL;
- lp_lat = HUGE_VAL;
- BOOST_THROW_EXCEPTION( projection_exception(-14) );
- } else {
- lp_lon = aatan2(this->m_proj_parm.w * xy_x * z,2. * z * z - 1)/this->m_proj_parm.w;
- lp_lat = aasin(z * xy_y);
- }
- }
-
- static inline std::string get_name()
- {
- return "hammer_spheroid";
- }
-
- };
-
- // Hammer & Eckert-Greifendorff
- template <typename Parameters, typename T>
- inline void setup_hammer(Parameters& par, par_hammer<T>& proj_parm)
- {
- if (pj_param(par.params, "tW").i) {
- if ((proj_parm.w = fabs(pj_param(par.params, "dW").f)) <= 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-27) );
- } else
- proj_parm.w = .5;
- if (pj_param(par.params, "tM").i) {
- if ((proj_parm.m = fabs(pj_param(par.params, "dM").f)) <= 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-27) );
- } else
- proj_parm.m = 1.;
- proj_parm.rm = 1. / proj_parm.m;
- proj_parm.m /= proj_parm.w;
- par.es = 0.;
- }
-
- }} // namespace detail::hammer
- #endif // doxygen
-
- /*!
- \brief Hammer & Eckert-Greifendorff projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Projection parameters
- - W (real)
- - M (real)
- \par Example
- \image html ex_hammer.gif
- */
- template <typename CalculationType, typename Parameters>
- struct hammer_spheroid : public detail::hammer::base_hammer_spheroid<CalculationType, Parameters>
- {
- inline hammer_spheroid(const Parameters& par) : detail::hammer::base_hammer_spheroid<CalculationType, Parameters>(par)
- {
- detail::hammer::setup_hammer(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::hammer, hammer_spheroid, hammer_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class hammer_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<hammer_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void hammer_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("hammer", new hammer_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_HAMMER_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/hatano.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/hatano.hpp
deleted file mode 100644
index e37a78196b9..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/hatano.hpp
+++ /dev/null
@@ -1,211 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_HATANO_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_HATANO_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct hatano {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace hatano
- {
-
- static const int NITER = 20;
- static const double EPS = 1e-7;
- static const double ONETOL = 1.000001;
- static const double CN_ = 2.67595;
- static const double CS_ = 2.43763;
- static const double RCN = 0.37369906014686373063;
- static const double RCS = 0.41023453108141924738;
- static const double FYCN = 1.75859;
- static const double FYCS = 1.93052;
- static const double RYCN = 0.56863737426006061674;
- static const double RYCS = 0.51799515156538134803;
- static const double FXC = 0.85;
- static const double RXC = 1.17647058823529411764;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_hatano_spheroid : public base_t_fi<base_hatano_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_hatano_spheroid(const Parameters& par)
- : base_t_fi<base_hatano_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType th1, c;
- int i;
-
- c = sin(lp_lat) * (lp_lat < 0. ? CS_ : CN_);
- for (i = NITER; i; --i) {
- lp_lat -= th1 = (lp_lat + sin(lp_lat) - c) / (1. + cos(lp_lat));
- if (fabs(th1) < EPS) break;
- }
- xy_x = FXC * lp_lon * cos(lp_lat *= .5);
- xy_y = sin(lp_lat) * (lp_lat < 0. ? FYCS : FYCN);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType th;
-
- th = xy_y * ( xy_y < 0. ? RYCS : RYCN);
- if (fabs(th) > 1.) {
- if (fabs(th) > ONETOL) {
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- } else {
- th = th > 0. ? geometry::math::half_pi<double>() : - geometry::math::half_pi<double>();
- }
- } else {
- th = asin(th);
- }
-
- lp_lon = RXC * xy_x / cos(th);
- th += th;
- lp_lat = (th + sin(th)) * (xy_y < 0. ? RCS : RCN);
- if (fabs(lp_lat) > 1.) {
- if (fabs(lp_lat) > ONETOL) {
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- } else {
- lp_lat = lp_lat > 0. ? geometry::math::half_pi<double>() : - geometry::math::half_pi<double>();
- }
- } else {
- lp_lat = asin(lp_lat);
- }
- }
-
- static inline std::string get_name()
- {
- return "hatano_spheroid";
- }
-
- };
-
- // Hatano Asymmetrical Equal Area
- template <typename Parameters>
- inline void setup_hatano(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::hatano
- #endif // doxygen
-
- /*!
- \brief Hatano Asymmetrical Equal Area projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_hatano.gif
- */
- template <typename CalculationType, typename Parameters>
- struct hatano_spheroid : public detail::hatano::base_hatano_spheroid<CalculationType, Parameters>
- {
- inline hatano_spheroid(const Parameters& par) : detail::hatano::base_hatano_spheroid<CalculationType, Parameters>(par)
- {
- detail::hatano::setup_hatano(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::hatano, hatano_spheroid, hatano_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class hatano_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<hatano_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void hatano_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("hatano", new hatano_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_HATANO_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/healpix.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/healpix.hpp
deleted file mode 100644
index d2f5a8c0817..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/healpix.hpp
+++ /dev/null
@@ -1,897 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_HEALPIX_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_HEALPIX_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Purpose: Implementation of the HEALPix and rHEALPix projections.
-// For background see <http://code.scenzgrid.org/index.php/p/scenzgrid-py/source/tree/master/docs/rhealpix_dggs.pdf>.
-// Authors: Alex Raichev (raichev@cs.auckland.ac.nz)
-// Michael Speth (spethm@landcareresearch.co.nz)
-// Notes: Raichev implemented these projections in Python and
-// Speth translated them into C here.
-// Copyright (c) 2001, Thomas Flemming, tf@ttqv.com
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_auth.hpp>
-#include <boost/geometry/srs/projections/impl/pj_qsfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct healpix {};
- struct rhealpix {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace healpix
- {
-
- static const double EPS = 1e-15;
-
- template <typename T>
- struct par_healpix
- {
- int north_square;
- int south_square;
- T qp;
- T apa[APA_SIZE];
- };
-
- /* Matrix for counterclockwise rotation by pi/2: */
- /* Matrix for counterclockwise rotation by pi: */
- /* Matrix for counterclockwise rotation by 3*pi/2: */
- /* Identity matrix */
- /* IDENT, R1, R2, R3, R1 inverse, R2 inverse, R3 inverse:*/
- /* Fuzz to handle rounding errors: */
- template <typename T>
- struct CapMap
- {
- int cn; /* An integer 0--3 indicating the position of the polar cap. */
- T x, y; /* Coordinates of the pole point (point of most extreme latitude on the polar caps). */
- enum Region {north, south, equatorial} region;
- };
- template <typename T>
- struct Point
- {
- T x, y;
- };
- static double rot[7][2][2] = {{{1, 0},{0, 1}}, {{ 0,-1},{ 1, 0}}, {{-1, 0},{ 0,-1}}, {{ 0, 1},{-1, 0}}, {{ 0, 1},{-1, 0}}, {{-1, 0},{ 0,-1}}, {{ 0,-1},{ 1, 0}}};
-
- /**
- * Returns the sign of the double.
- * @param v the parameter whose sign is returned.
- * @return 1 for positive number, -1 for negative, and 0 for zero.
- **/
- template <typename T>
- inline T pj_sign (T const& v)
- {
- return v > 0 ? 1 : (v < 0 ? -1 : 0);
- }
- /**
- * Return the index of the matrix in {{{1, 0},{0, 1}}, {{ 0,-1},{ 1, 0}}, {{-1, 0},{ 0,-1}}, {{ 0, 1},{-1, 0}}, {{ 0, 1},{-1, 0}}, {{-1, 0},{ 0,-1}}, {{ 0,-1},{ 1, 0}}}.
- * @param index ranges from -3 to 3.
- */
- inline int get_rotate_index(int index)
- {
- switch(index) {
- case 0:
- return 0;
- case 1:
- return 1;
- case 2:
- return 2;
- case 3:
- return 3;
- case -1:
- return 4;
- case -2:
- return 5;
- case -3:
- return 6;
- }
- return 0;
- }
- /**
- * Return 1 if point (testx, testy) lies in the interior of the polygon
- * determined by the vertices in vert, and return 0 otherwise.
- * See http://paulbourke.net/geometry/polygonmesh/ for more details.
- * @param nvert the number of vertices in the polygon.
- * @param vert the (x, y)-coordinates of the polygon's vertices
- **/
- template <typename T>
- inline int pnpoly(int nvert, T vert[][2], T const& testx, T const& testy)
- {
- int i, c = 0;
- int counter = 0;
- T xinters;
- Point<T> p1, p2;
- /* Check for boundrary cases */
- for (i = 0; i < nvert; i++) {
- if (testx == vert[i][0] && testy == vert[i][1]) {
- return 1;
- }
- }
- p1.x = vert[0][0];
- p1.y = vert[0][1];
- for (i = 1; i < nvert; i++) {
- p2.x = vert[i % nvert][0];
- p2.y = vert[i % nvert][1];
- if (testy > (std::min)(p1.y, p2.y)) {
- if (testy <= (std::max)(p1.y, p2.y)) {
- if (testx <= (std::max)(p1.x, p2.x)) {
- if (p1.y != p2.y) {
- xinters = (testy-p1.y)*(p2.x-p1.x)/(p2.y-p1.y)+p1.x;
- if (p1.x == p2.x || testx <= xinters) {
- counter++;
- }
- }
- }
- }
- }
- p1 = p2;
- }
- if (counter % 2 == 0) {
- return 0;
- } else {
- return 1;
- }
- return c;
- }
- /**
- * Return 1 if (x, y) lies in (the interior or boundary of) the image of the
- * HEALPix projection (in case proj=0) or in the image the rHEALPix projection
- * (in case proj=1), and return 0 otherwise.
- * @param north_square the position of the north polar square (rHEALPix only)
- * @param south_square the position of the south polar square (rHEALPix only)
- **/
- template <typename T>
- inline int in_image(T const& x, T const& y, int proj, int north_square, int south_square)
- {
- static const T ONEPI = detail::ONEPI<T>();
-
- if (proj == 0) {
- T healpixVertsJit[][2] = {
- {-1.0*ONEPI- EPS, ONEPI/4.0},
- {-3.0*ONEPI/4.0, ONEPI/2.0 + EPS},
- {-1.0*ONEPI/2.0, ONEPI/4.0 + EPS},
- {-1.0*ONEPI/4.0, ONEPI/2.0 + EPS},
- {0.0, ONEPI/4.0 + EPS},
- {ONEPI/4.0, ONEPI/2.0 + EPS},
- {ONEPI/2.0, ONEPI/4.0 + EPS},
- {3.0*ONEPI/4.0, ONEPI/2.0 + EPS},
- {ONEPI+ EPS, ONEPI/4.0},
- {ONEPI+ EPS, -1.0*ONEPI/4.0},
- {3.0*ONEPI/4.0, -1.0*ONEPI/2.0 - EPS},
- {ONEPI/2.0, -1.0*ONEPI/4.0 - EPS},
- {ONEPI/4.0, -1.0*ONEPI/2.0 - EPS},
- {0.0, -1.0*ONEPI/4.0 - EPS},
- {-1.0*ONEPI/4.0, -1.0*ONEPI/2.0 - EPS},
- {-1.0*ONEPI/2.0, -1.0*ONEPI/4.0 - EPS},
- {-3.0*ONEPI/4.0, -1.0*ONEPI/2.0 - EPS},
- {-1.0*ONEPI - EPS, -1.0*ONEPI/4.0}
- };
- return pnpoly((int)sizeof(healpixVertsJit)/
- sizeof(healpixVertsJit[0]), healpixVertsJit, x, y);
- } else {
- T rhealpixVertsJit[][2] = {
- {-1.0*ONEPI - EPS, ONEPI/4.0 + EPS},
- {-1.0*ONEPI + north_square*ONEPI/2.0- EPS, ONEPI/4.0 + EPS},
- {-1.0*ONEPI + north_square*ONEPI/2.0- EPS, 3*ONEPI/4.0 + EPS},
- {-1.0*ONEPI + (north_square + 1.0)*ONEPI/2.0 + EPS, 3*ONEPI/4.0 + EPS},
- {-1.0*ONEPI + (north_square + 1.0)*ONEPI/2.0 + EPS, ONEPI/4.0 + EPS},
- {ONEPI + EPS, ONEPI/4.0 + EPS},
- {ONEPI + EPS, -1.0*ONEPI/4.0 - EPS},
- {-1.0*ONEPI + (south_square + 1.0)*ONEPI/2.0 + EPS, -1.0*ONEPI/4.0 - EPS},
- {-1.0*ONEPI + (south_square + 1.0)*ONEPI/2.0 + EPS, -3.0*ONEPI/4.0 - EPS},
- {-1.0*ONEPI + south_square*ONEPI/2.0 - EPS, -3.0*ONEPI/4.0 - EPS},
- {-1.0*ONEPI + south_square*ONEPI/2.0 - EPS, -1.0*ONEPI/4.0 - EPS},
- {-1.0*ONEPI - EPS, -1.0*ONEPI/4.0 - EPS}};
- return pnpoly((int)sizeof(rhealpixVertsJit)/
- sizeof(rhealpixVertsJit[0]), rhealpixVertsJit, x, y);
- }
- }
- /**
- * Return the authalic latitude of latitude alpha (if inverse=0) or
- * return the approximate latitude of authalic latitude alpha (if inverse=1).
- * P contains the relavent ellipsoid parameters.
- **/
- template <typename Parameters, typename T>
- inline T auth_lat(const Parameters& par, const par_healpix<T>& proj_parm, T const& alpha, int inverse)
- {
- if (inverse == 0) {
- /* Authalic latitude. */
- T q = pj_qsfn(sin(alpha), par.e, 1.0 - par.es);
- T qp = proj_parm.qp;
- T ratio = q/qp;
- if (fabsl(ratio) > 1) {
- /* Rounding error. */
- ratio = pj_sign(ratio);
- }
- return asin(ratio);
- } else {
- /* Approximation to inverse authalic latitude. */
- return pj_authlat(alpha, proj_parm.apa);
- }
- }
- /**
- * Return the HEALPix projection of the longitude-latitude point lp on
- * the unit sphere.
- **/
- template <typename T>
- inline void healpix_sphere(T const& lp_lam, T const& lp_phi, T& xy_x, T& xy_y)
- {
- static const T ONEPI = detail::ONEPI<T>();
-
- T lam = lp_lam;
- T phi = lp_phi;
- T phi0 = asin(T(2.0)/T(3.0));
-
- /* equatorial region */
- if ( fabsl(phi) <= phi0) {
- xy_x = lam;
- xy_y = 3.0*ONEPI/8.0*sin(phi);
- } else {
- T lamc;
- T sigma = sqrt(3.0*(1 - fabsl(sin(phi))));
- T cn = floor(2*lam / ONEPI + 2);
- if (cn >= 4) {
- cn = 3;
- }
- lamc = -3*ONEPI/4 + (ONEPI/2)*cn;
- xy_x = lamc + (lam - lamc)*sigma;
- xy_y = pj_sign(phi)*ONEPI/4*(2 - sigma);
- }
- return;
- }
- /**
- * Return the inverse of healpix_sphere().
- **/
- template <typename T>
- inline void healpix_sphere_inverse(T const& xy_x, T const& xy_y, T& lp_lam, T& lp_phi)
- {
- static const T ONEPI = detail::ONEPI<T>();
-
- T x = xy_x;
- T y = xy_y;
- T y0 = ONEPI/4.0;
- /* Equatorial region. */
- if (fabsl(y) <= y0) {
- lp_lam = x;
- lp_phi = asin(8.0*y/(3.0*ONEPI));
- } else if (fabsl(y) < ONEPI/2.0) {
- T cn = floor(2.0*x/ONEPI + 2.0);
- T xc, tau;
- if (cn >= 4) {
- cn = 3;
- }
- xc = -3.0*ONEPI/4.0 + (ONEPI/2.0)*cn;
- tau = 2.0 - 4.0*fabsl(y)/ONEPI;
- lp_lam = xc + (x - xc)/tau;
- lp_phi = pj_sign(y)*asin(1.0 - pow(tau , 2.0)/3.0);
- } else {
- lp_lam = -1.0*ONEPI;
- lp_phi = pj_sign(y)*ONEPI/2.0;
- }
- return;
- }
- /**
- * Return the vector sum a + b, where a and b are 2-dimensional vectors.
- * @param ret holds a + b.
- **/
- template <typename T>
- inline void vector_add(T a[2], T b[2], T *ret)
- {
- int i;
- for(i = 0; i < 2; i++) {
- ret[i] = a[i] + b[i];
- }
- }
- /**
- * Return the vector difference a - b, where a and b are 2-dimensional vectors.
- * @param ret holds a - b.
- **/
- template <typename T>
- inline void vector_sub(T a[2], T b[2], T*ret)
- {
- int i;
- for(i = 0; i < 2; i++) {
- ret[i] = a[i] - b[i];
- }
- }
- /**
- * Return the 2 x 1 matrix product a*b, where a is a 2 x 2 matrix and
- * b is a 2 x 1 matrix.
- * @param ret holds a*b.
- **/
- template <typename T>
- inline void dot_product(T a[2][2], T b[2], T *ret)
- {
- int i, j;
- int length = 2;
- for(i = 0; i < length; i++) {
- ret[i] = 0;
- for(j = 0; j < length; j++) {
- ret[i] += a[i][j]*b[j];
- }
- }
- }
- /**
- * Return the number of the polar cap, the pole point coordinates, and
- * the region that (x, y) lies in.
- * If inverse=0, then assume (x,y) lies in the image of the HEALPix
- * projection of the unit sphere.
- * If inverse=1, then assume (x,y) lies in the image of the
- * (north_square, south_square)-rHEALPix projection of the unit sphere.
- **/
- template <typename T>
- inline CapMap<T> get_cap(T x, T const& y, int north_square, int south_square,
- int inverse)
- {
- static const T ONEPI = detail::ONEPI<T>();
-
- CapMap<T> capmap;
- T c;
- capmap.x = x;
- capmap.y = y;
- if (inverse == 0) {
- if (y > ONEPI/4.0) {
- capmap.region = CapMap<T>::north;
- c = ONEPI/2.0;
- } else if (y < -1*ONEPI/4.0) {
- capmap.region = CapMap<T>::south;
- c = -1*ONEPI/2.0;
- } else {
- capmap.region = CapMap<T>::equatorial;
- capmap.cn = 0;
- return capmap;
- }
- /* polar region */
- if (x < -1*ONEPI/2.0) {
- capmap.cn = 0;
- capmap.x = (-1*3.0*ONEPI/4.0);
- capmap.y = c;
- } else if (x >= -1*ONEPI/2.0 && x < 0) {
- capmap.cn = 1;
- capmap.x = -1*ONEPI/4.0;
- capmap.y = c;
- } else if (x >= 0 && x < ONEPI/2.0) {
- capmap.cn = 2;
- capmap.x = ONEPI/4.0;
- capmap.y = c;
- } else {
- capmap.cn = 3;
- capmap.x = 3.0*ONEPI/4.0;
- capmap.y = c;
- }
- return capmap;
- } else {
- T eps;
- if (y > ONEPI/4.0) {
- capmap.region = CapMap<T>::north;
- capmap.x = (-3.0*ONEPI/4.0 + north_square*ONEPI/2.0);
- capmap.y = ONEPI/2.0;
- x = x - north_square*ONEPI/2.0;
- } else if (y < -1*ONEPI/4.0) {
- capmap.region = CapMap<T>::south;
- capmap.x = (-3.0*ONEPI/4.0 + south_square*ONEPI/2);
- capmap.y = -1*ONEPI/2.0;
- x = x - south_square*ONEPI/2.0;
- } else {
- capmap.region = CapMap<T>::equatorial;
- capmap.cn = 0;
- return capmap;
- }
- /* Polar Region, find the HEALPix polar cap number that
- x, y moves to when rHEALPix polar square is disassembled. */
- eps = 1e-15; /* Kludge. Fuzz to avoid some rounding errors. */
- if (capmap.region == CapMap<T>::north) {
- if (y >= -1*x - ONEPI/4.0 - eps && y < x + 5.0*ONEPI/4.0 - eps) {
- capmap.cn = (north_square + 1) % 4;
- } else if (y > -1*x -1*ONEPI/4.0 + eps && y >= x + 5.0*ONEPI/4.0 - eps) {
- capmap.cn = (north_square + 2) % 4;
- } else if (y <= -1*x -1*ONEPI/4.0 + eps && y > x + 5.0*ONEPI/4.0 + eps) {
- capmap.cn = (north_square + 3) % 4;
- } else {
- capmap.cn = north_square;
- }
- } else if (capmap.region == CapMap<T>::south) {
- if (y <= x + ONEPI/4.0 + eps && y > -1*x - 5.0*ONEPI/4 + eps) {
- capmap.cn = (south_square + 1) % 4;
- } else if (y < x + ONEPI/4.0 - eps && y <= -1*x - 5.0*ONEPI/4.0 + eps) {
- capmap.cn = (south_square + 2) % 4;
- } else if (y >= x + ONEPI/4.0 - eps && y < -1*x - 5.0*ONEPI/4.0 - eps) {
- capmap.cn = (south_square + 3) % 4;
- } else {
- capmap.cn = south_square;
- }
- }
- return capmap;
- }
- }
- /**
- * Rearrange point (x, y) in the HEALPix projection by
- * combining the polar caps into two polar squares.
- * Put the north polar square in position north_square and
- * the south polar square in position south_square.
- * If inverse=1, then uncombine the polar caps.
- * @param north_square integer between 0 and 3.
- * @param south_square integer between 0 and 3.
- **/
- template <typename T>
- inline void combine_caps(T& xy_x, T& xy_y, int north_square, int south_square,
- int inverse)
- {
- static const T ONEPI = detail::ONEPI<T>();
-
- T v[2];
- T a[2];
- T vector[2];
- T v_min_c[2];
- T ret_dot[2];
- CapMap<T> capmap = get_cap(xy_x, xy_y, north_square, south_square, inverse);
- if (capmap.region == CapMap<T>::equatorial) {
- xy_x = capmap.x;
- xy_y = capmap.y;
- return;
- }
- v[0] = xy_x;
- v[1] = xy_y;
- if (inverse == 0) {
- /* Rotate (xy_x, xy_y) about its polar cap tip and then translate it to
- north_square or south_square. */
- int pole = 0;
- T (*tmpRot)[2];
- T c[2] = {capmap.x, capmap.y};
- if (capmap.region == CapMap<T>::north) {
- pole = north_square;
- a[0] = (-3.0*ONEPI/4.0 + pole*ONEPI/2);
- a[1] = (ONEPI/2.0 + pole*0);
- tmpRot = rot[get_rotate_index(capmap.cn - pole)];
- vector_sub(v, c, v_min_c);
- dot_product(tmpRot, v_min_c, ret_dot);
- vector_add(ret_dot, a, vector);
- } else {
- pole = south_square;
- a[0] = (-3.0*ONEPI/4.0 + pole*ONEPI/2);
- a[1] = (ONEPI/-2.0 + pole*0);
- tmpRot = rot[get_rotate_index(-1*(capmap.cn - pole))];
- vector_sub(v, c, v_min_c);
- dot_product(tmpRot, v_min_c, ret_dot);
- vector_add(ret_dot, a, vector);
- }
- xy_x = vector[0];
- xy_y = vector[1];
- return;
- } else {
- /* Inverse function.
- Unrotate (xy_x, xy_y) and then translate it back. */
- int pole = 0;
- T (*tmpRot)[2];
- T c[2] = {capmap.x, capmap.y};
- /* disassemble */
- if (capmap.region == CapMap<T>::north) {
- pole = north_square;
- a[0] = (-3.0*ONEPI/4.0 + capmap.cn*ONEPI/2);
- a[1] = (ONEPI/2.0 + capmap.cn*0);
- tmpRot = rot[get_rotate_index(-1*(capmap.cn - pole))];
- vector_sub(v, c, v_min_c);
- dot_product(tmpRot, v_min_c, ret_dot);
- vector_add(ret_dot, a, vector);
- } else {
- pole = south_square;
- a[0] = (-3.0*ONEPI/4.0 + capmap.cn*ONEPI/2);
- a[1] = (ONEPI/-2.0 + capmap.cn*0);
- tmpRot = rot[get_rotate_index(capmap.cn - pole)];
- vector_sub(v, c, v_min_c);
- dot_product(tmpRot, v_min_c, ret_dot);
- vector_add(ret_dot, a, vector);
- }
- xy_x = vector[0];
- xy_y = vector[1];
- return;
- }
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_healpix_ellipsoid : public base_t_fi<base_healpix_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_healpix<CalculationType> m_proj_parm;
-
- inline base_healpix_ellipsoid(const Parameters& par)
- : base_t_fi<base_healpix_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_healpix_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- lp_lat = auth_lat(this->params(), m_proj_parm, lp_lat, 0);
- return healpix_sphere(lp_lon, lp_lat, xy_x, xy_y);
- }
-
- // INVERSE(e_healpix_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- /* Check whether (x, y) lies in the HEALPix image. */
- if (in_image(xy_x, xy_y, 0, 0, 0) == 0) {
- lp_lon = HUGE_VAL;
- lp_lat = HUGE_VAL;
- BOOST_THROW_EXCEPTION( projection_exception(-15) );
- }
- healpix_sphere_inverse(xy_x, xy_y, lp_lon, lp_lat);
- lp_lat = auth_lat(this->params(), m_proj_parm, lp_lat, 1);
- }
-
- static inline std::string get_name()
- {
- return "healpix_ellipsoid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_healpix_spheroid : public base_t_fi<base_healpix_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_healpix<CalculationType> m_proj_parm;
-
- inline base_healpix_spheroid(const Parameters& par)
- : base_t_fi<base_healpix_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_healpix_forward) sphere
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- return healpix_sphere(lp_lon, lp_lat, xy_x, xy_y);
- }
-
- // INVERSE(s_healpix_inverse) sphere
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- /* Check whether (x, y) lies in the HEALPix image */
- if (in_image(xy_x, xy_y, 0, 0, 0) == 0) {
- lp_lon = HUGE_VAL;
- lp_lat = HUGE_VAL;
- BOOST_THROW_EXCEPTION( projection_exception(-15) );
- }
- return healpix_sphere_inverse(xy_x, xy_y, lp_lon, lp_lat);
- }
-
- static inline std::string get_name()
- {
- return "healpix_spheroid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_rhealpix_ellipsoid : public base_t_fi<base_rhealpix_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_healpix<CalculationType> m_proj_parm;
-
- inline base_rhealpix_ellipsoid(const Parameters& par)
- : base_t_fi<base_rhealpix_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_rhealpix_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- lp_lat = auth_lat(this->params(), m_proj_parm, lp_lat, 0);
- healpix_sphere(lp_lon, lp_lat, xy_x, xy_y);
- combine_caps(xy_x, xy_y, this->m_proj_parm.north_square, this->m_proj_parm.south_square, 0);
- }
-
- // INVERSE(e_rhealpix_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- /* Check whether (x, y) lies in the rHEALPix image. */
- if (in_image(xy_x, xy_y, 1, this->m_proj_parm.north_square, this->m_proj_parm.south_square) == 0) {
- lp_lon = HUGE_VAL;
- lp_lat = HUGE_VAL;
- BOOST_THROW_EXCEPTION( projection_exception(-15) );
- }
- combine_caps(xy_x, xy_y, this->m_proj_parm.north_square, this->m_proj_parm.south_square, 1);
- healpix_sphere_inverse(xy_x, xy_y, lp_lon, lp_lat);
- lp_lat = auth_lat(this->params(), m_proj_parm, lp_lat, 1);
- }
-
- static inline std::string get_name()
- {
- return "rhealpix_ellipsoid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_rhealpix_spheroid : public base_t_fi<base_rhealpix_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_healpix<CalculationType> m_proj_parm;
-
- inline base_rhealpix_spheroid(const Parameters& par)
- : base_t_fi<base_rhealpix_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_rhealpix_forward) sphere
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- healpix_sphere(lp_lon, lp_lat, xy_x, xy_y);
- combine_caps(xy_x, xy_y, this->m_proj_parm.north_square, this->m_proj_parm.south_square, 0);
- }
-
- // INVERSE(s_rhealpix_inverse) sphere
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- /* Check whether (x, y) lies in the rHEALPix image. */
- if (in_image(xy_x, xy_y, 1, this->m_proj_parm.north_square, this->m_proj_parm.south_square) == 0) {
- lp_lon = HUGE_VAL;
- lp_lat = HUGE_VAL;
- BOOST_THROW_EXCEPTION( projection_exception(-15) );
- }
- combine_caps(xy_x, xy_y, this->m_proj_parm.north_square, this->m_proj_parm.south_square, 1);
- return healpix_sphere_inverse(xy_x, xy_y, lp_lon, lp_lat);
- }
-
- static inline std::string get_name()
- {
- return "rhealpix_spheroid";
- }
-
- };
-
- // HEALPix
- template <typename Parameters, typename T>
- inline void setup_healpix(Parameters& par, par_healpix<T>& proj_parm)
- {
- if (par.es) {
- pj_authset(par.es, proj_parm.apa); /* For auth_lat(). */
- proj_parm.qp = pj_qsfn(1.0, par.e, par.one_es); /* For auth_lat(). */
- par.a = par.a*sqrt(0.5*proj_parm.qp); /* Set par.a to authalic radius. */
- par.ra = 1.0/par.a;
- } else {
- }
- }
-
- // rHEALPix
- template <typename Parameters, typename T>
- inline void setup_rhealpix(Parameters& par, par_healpix<T>& proj_parm)
- {
- proj_parm.north_square = pj_param(par.params,"inorth_square").i;
- proj_parm.south_square = pj_param(par.params,"isouth_square").i;
- /* Check for valid north_square and south_square inputs. */
- if (proj_parm.north_square < 0 || proj_parm.north_square > 3) {
- BOOST_THROW_EXCEPTION( projection_exception(-47) );
- }
- if (proj_parm.south_square < 0 || proj_parm.south_square > 3) {
- BOOST_THROW_EXCEPTION( projection_exception(-47) );
- }
- if (par.es) {
- pj_authset(par.es, proj_parm.apa); /* For auth_lat(). */
- proj_parm.qp = pj_qsfn(1.0, par.e, par.one_es); /* For auth_lat(). */
- par.a = par.a*sqrt(0.5*proj_parm.qp); /* Set par.a to authalic radius. */
- par.ra = 1.0/par.a;
- } else {
- }
- }
-
- }} // namespace detail::healpix
- #endif // doxygen
-
- /*!
- \brief HEALPix projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_healpix.gif
- */
- template <typename CalculationType, typename Parameters>
- struct healpix_ellipsoid : public detail::healpix::base_healpix_ellipsoid<CalculationType, Parameters>
- {
- inline healpix_ellipsoid(const Parameters& par) : detail::healpix::base_healpix_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::healpix::setup_healpix(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief HEALPix projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_healpix.gif
- */
- template <typename CalculationType, typename Parameters>
- struct healpix_spheroid : public detail::healpix::base_healpix_spheroid<CalculationType, Parameters>
- {
- inline healpix_spheroid(const Parameters& par) : detail::healpix::base_healpix_spheroid<CalculationType, Parameters>(par)
- {
- detail::healpix::setup_healpix(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief rHEALPix projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - north_square (integer)
- - south_square (integer)
- \par Example
- \image html ex_rhealpix.gif
- */
- template <typename CalculationType, typename Parameters>
- struct rhealpix_ellipsoid : public detail::healpix::base_rhealpix_ellipsoid<CalculationType, Parameters>
- {
- inline rhealpix_ellipsoid(const Parameters& par) : detail::healpix::base_rhealpix_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::healpix::setup_rhealpix(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief rHEALPix projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - north_square (integer)
- - south_square (integer)
- \par Example
- \image html ex_rhealpix.gif
- */
- template <typename CalculationType, typename Parameters>
- struct rhealpix_spheroid : public detail::healpix::base_rhealpix_spheroid<CalculationType, Parameters>
- {
- inline rhealpix_spheroid(const Parameters& par) : detail::healpix::base_rhealpix_spheroid<CalculationType, Parameters>(par)
- {
- detail::healpix::setup_rhealpix(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::healpix, healpix_spheroid, healpix_ellipsoid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::rhealpix, rhealpix_spheroid, rhealpix_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class healpix_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<healpix_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<healpix_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class rhealpix_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<rhealpix_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<rhealpix_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void healpix_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("healpix", new healpix_entry<CalculationType, Parameters>);
- factory.add_to_factory("rhealpix", new rhealpix_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_HEALPIX_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/igh.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/igh.hpp
deleted file mode 100644
index 219f74239e5..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/igh.hpp
+++ /dev/null
@@ -1,377 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IGH_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IGH_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/proj/gn_sinu.hpp>
-#include <boost/geometry/srs/projections/proj/moll.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct igh {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace igh
- {
-
- template <typename CalculationType, typename Parameters>
- struct par_igh
- {
- boost::shared_ptr<base_v<CalculationType, Parameters> > pj[12];
- CalculationType dy0;
- };
-
- template <typename T>
- inline T d4044118() { return (T(40) + T(44)/T(60.) + T(11.8)/T(3600.)) * geometry::math::d2r<T>(); } // 40d 44' 11.8" [degrees]
-
- template <typename T>
- inline T d10() { return T(10) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T d20() { return T(20) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T d30() { return T(30) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T d40() { return T(40) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T d50() { return T(50) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T d60() { return T(60) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T d80() { return T(80) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T d90() { return T(90) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T d100() { return T(100) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T d140() { return T(140) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T d160() { return T(160) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T d180() { return T(180) * geometry::math::d2r<T>(); }
-
- static const double EPSLN = 1.e-10; // allow a little 'slack' on zone edge positions
-
- // Converted from #define SETUP(n, proj, x_0, y_0, lon_0)
- template <template <typename, typename> class Entry, typename Parameters, typename CalculationType>
- inline void do_setup(int n, Parameters const& par, par_igh<CalculationType, Parameters>& proj_parm,
- CalculationType const& x_0, CalculationType const& y_0,
- CalculationType const& lon_0)
- {
- Entry<CalculationType, Parameters> entry;
- proj_parm.pj[n-1].reset(entry.create_new(par));
- proj_parm.pj[n-1]->mutable_params().x0 = x_0;
- proj_parm.pj[n-1]->mutable_params().y0 = y_0;
- proj_parm.pj[n-1]->mutable_params().lam0 = lon_0;
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_igh_spheroid : public base_t_fi<base_igh_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_igh<CalculationType, Parameters> m_proj_parm;
-
- inline base_igh_spheroid(const Parameters& par)
- : base_t_fi<base_igh_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType d4044118 = igh::d4044118<CalculationType>();
- static const CalculationType d20 = igh::d20<CalculationType>();
- static const CalculationType d40 = igh::d40<CalculationType>();
- static const CalculationType d80 = igh::d80<CalculationType>();
- static const CalculationType d100 = igh::d100<CalculationType>();
-
- int z;
- if (lp_lat >= d4044118) { // 1|2
- z = (lp_lon <= -d40 ? 1: 2);
- }
- else if (lp_lat >= 0) { // 3|4
- z = (lp_lon <= -d40 ? 3: 4);
- }
- else if (lp_lat >= -d4044118) { // 5|6|7|8
- if (lp_lon <= -d100) z = 5; // 5
- else if (lp_lon <= -d20) z = 6; // 6
- else if (lp_lon <= d80) z = 7; // 7
- else z = 8; // 8
- }
- else { // 9|10|11|12
- if (lp_lon <= -d100) z = 9; // 9
- else if (lp_lon <= -d20) z = 10; // 10
- else if (lp_lon <= d80) z = 11; // 11
- else z = 12; // 12
- }
-
- lp_lon -= this->m_proj_parm.pj[z-1]->params().lam0;
- this->m_proj_parm.pj[z-1]->fwd(lp_lon, lp_lat, xy_x, xy_y);
- xy_x += this->m_proj_parm.pj[z-1]->params().x0;
- xy_y += this->m_proj_parm.pj[z-1]->params().y0;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType d4044118 = igh::d4044118<CalculationType>();
- static const CalculationType d10 = igh::d10<CalculationType>();
- static const CalculationType d20 = igh::d20<CalculationType>();
- static const CalculationType d40 = igh::d40<CalculationType>();
- static const CalculationType d50 = igh::d50<CalculationType>();
- static const CalculationType d60 = igh::d60<CalculationType>();
- static const CalculationType d80 = igh::d80<CalculationType>();
- static const CalculationType d90 = igh::d90<CalculationType>();
- static const CalculationType d100 = igh::d100<CalculationType>();
- static const CalculationType d160 = igh::d160<CalculationType>();
- static const CalculationType d180 = igh::d180<CalculationType>();
-
- static const CalculationType c2 = 2.0;
-
- const CalculationType y90 = this->m_proj_parm.dy0 + sqrt(c2); // lt=90 corresponds to y=y0+sqrt(2.0)
-
- int z = 0;
- if (xy_y > y90+EPSLN || xy_y < -y90+EPSLN) // 0
- z = 0;
- else if (xy_y >= d4044118) // 1|2
- z = (xy_x <= -d40? 1: 2);
- else if (xy_y >= 0) // 3|4
- z = (xy_x <= -d40? 3: 4);
- else if (xy_y >= -d4044118) { // 5|6|7|8
- if (xy_x <= -d100) z = 5; // 5
- else if (xy_x <= -d20) z = 6; // 6
- else if (xy_x <= d80) z = 7; // 7
- else z = 8; // 8
- }
- else { // 9|10|11|12
- if (xy_x <= -d100) z = 9; // 9
- else if (xy_x <= -d20) z = 10; // 10
- else if (xy_x <= d80) z = 11; // 11
- else z = 12; // 12
- }
-
- if (z)
- {
- int ok = 0;
-
- xy_x -= this->m_proj_parm.pj[z-1]->params().x0;
- xy_y -= this->m_proj_parm.pj[z-1]->params().y0;
- this->m_proj_parm.pj[z-1]->inv(xy_x, xy_y, lp_lon, lp_lat);
- lp_lon += this->m_proj_parm.pj[z-1]->params().lam0;
-
- switch (z) {
- case 1: ok = (lp_lon >= -d180-EPSLN && lp_lon <= -d40+EPSLN) ||
- ((lp_lon >= -d40-EPSLN && lp_lon <= -d10+EPSLN) &&
- (lp_lat >= d60-EPSLN && lp_lat <= d90+EPSLN)); break;
- case 2: ok = (lp_lon >= -d40-EPSLN && lp_lon <= d180+EPSLN) ||
- ((lp_lon >= -d180-EPSLN && lp_lon <= -d160+EPSLN) &&
- (lp_lat >= d50-EPSLN && lp_lat <= d90+EPSLN)) ||
- ((lp_lon >= -d50-EPSLN && lp_lon <= -d40+EPSLN) &&
- (lp_lat >= d60-EPSLN && lp_lat <= d90+EPSLN)); break;
- case 3: ok = (lp_lon >= -d180-EPSLN && lp_lon <= -d40+EPSLN); break;
- case 4: ok = (lp_lon >= -d40-EPSLN && lp_lon <= d180+EPSLN); break;
- case 5: ok = (lp_lon >= -d180-EPSLN && lp_lon <= -d100+EPSLN); break;
- case 6: ok = (lp_lon >= -d100-EPSLN && lp_lon <= -d20+EPSLN); break;
- case 7: ok = (lp_lon >= -d20-EPSLN && lp_lon <= d80+EPSLN); break;
- case 8: ok = (lp_lon >= d80-EPSLN && lp_lon <= d180+EPSLN); break;
- case 9: ok = (lp_lon >= -d180-EPSLN && lp_lon <= -d100+EPSLN); break;
- case 10: ok = (lp_lon >= -d100-EPSLN && lp_lon <= -d20+EPSLN); break;
- case 11: ok = (lp_lon >= -d20-EPSLN && lp_lon <= d80+EPSLN); break;
- case 12: ok = (lp_lon >= d80-EPSLN && lp_lon <= d180+EPSLN); break;
- }
-
- z = (!ok? 0: z); // projectable?
- }
- // if (!z) pj_errno = -15; // invalid x or y
- if (!z) lp_lon = HUGE_VAL;
- if (!z) lp_lat = HUGE_VAL;
- }
-
- static inline std::string get_name()
- {
- return "igh_spheroid";
- }
-
- };
-
- // Interrupted Goode Homolosine
- template <typename CalculationType, typename Parameters>
- inline void setup_igh(Parameters& par, par_igh<CalculationType, Parameters>& proj_parm)
- {
- static const CalculationType d0 = 0;
- static const CalculationType d4044118 = igh::d4044118<CalculationType>();
- static const CalculationType d20 = igh::d20<CalculationType>();
- static const CalculationType d30 = igh::d30<CalculationType>();
- static const CalculationType d60 = igh::d60<CalculationType>();
- static const CalculationType d100 = igh::d100<CalculationType>();
- static const CalculationType d140 = igh::d140<CalculationType>();
- static const CalculationType d160 = igh::d160<CalculationType>();
-
- /*
- Zones:
-
- -180 -40 180
- +--------------+-------------------------+ Zones 1,2,9,10,11 & 12:
- |1 |2 | Mollweide projection
- | | |
- +--------------+-------------------------+ Zones 3,4,5,6,7 & 8:
- |3 |4 | Sinusoidal projection
- | | |
- 0 +-------+------+-+-----------+-----------+
- |5 |6 |7 |8 |
- | | | | |
- +-------+--------+-----------+-----------+
- |9 |10 |11 |12 |
- | | | | |
- +-------+--------+-----------+-----------+
- -180 -100 -20 80 180
- */
-
-
- CalculationType lp_lam = 0, lp_phi = d4044118;
- CalculationType xy1_x, xy1_y;
- CalculationType xy3_x, xy3_y;
-
- // sinusoidal zones
- do_setup<sinu_entry>(3, par, proj_parm, -d100, d0, -d100);
- do_setup<sinu_entry>(4, par, proj_parm, d30, d0, d30);
- do_setup<sinu_entry>(5, par, proj_parm, -d160, d0, -d160);
- do_setup<sinu_entry>(6, par, proj_parm, -d60, d0, -d60);
- do_setup<sinu_entry>(7, par, proj_parm, d20, d0, d20);
- do_setup<sinu_entry>(8, par, proj_parm, d140, d0, d140);
-
- // mollweide zones
- do_setup<moll_entry>(1, par, proj_parm, -d100, d0, -d100);
-
- // y0 ?
- proj_parm.pj[0]->fwd(lp_lam, lp_phi, xy1_x, xy1_y); // zone 1
- proj_parm.pj[2]->fwd(lp_lam, lp_phi, xy3_x, xy3_y); // zone 3
- // y0 + xy1_y = xy3_y for lt = 40d44'11.8"
- proj_parm.dy0 = xy3_y - xy1_y;
-
- proj_parm.pj[0]->mutable_params().y0 = proj_parm.dy0;
-
- // mollweide zones (cont'd)
- do_setup<moll_entry>( 2, par, proj_parm, d30, proj_parm.dy0, d30);
- do_setup<moll_entry>( 9, par, proj_parm, -d160, -proj_parm.dy0, -d160);
- do_setup<moll_entry>(10, par, proj_parm, -d60, -proj_parm.dy0, -d60);
- do_setup<moll_entry>(11, par, proj_parm, d20, -proj_parm.dy0, d20);
- do_setup<moll_entry>(12, par, proj_parm, d140, -proj_parm.dy0, d140);
-
- par.es = 0.;
- }
-
- }} // namespace detail::igh
- #endif // doxygen
-
- /*!
- \brief Interrupted Goode Homolosine projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_igh.gif
- */
- template <typename CalculationType, typename Parameters>
- struct igh_spheroid : public detail::igh::base_igh_spheroid<CalculationType, Parameters>
- {
- inline igh_spheroid(const Parameters& par) : detail::igh::base_igh_spheroid<CalculationType, Parameters>(par)
- {
- detail::igh::setup_igh(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::igh, igh_spheroid, igh_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class igh_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<igh_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void igh_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("igh", new igh_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IGH_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/imw_p.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/imw_p.hpp
deleted file mode 100644
index 1a7fe9e9157..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/imw_p.hpp
+++ /dev/null
@@ -1,320 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_IMW_P_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_IMW_P_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_mlfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct imw_p {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace imw_p
- {
-
- static const double TOL = 1e-10;
- static const double EPS = 1e-10;
-
- template <typename T>
- struct XY { T x, y; }; // specific for IMW_P
-
- template <typename T>
- struct par_imw_p
- {
- T P, Pp, Q, Qp, R_1, R_2, sphi_1, sphi_2, C2;
- T phi_1, phi_2, lam_1;
- T en[EN_SIZE];
- int mode; /* = 0, phi_1 and phi_2 != 0, = 1, phi_1 = 0, = -1 phi_2 = 0 */
- };
-
- template <typename Parameters, typename T>
- inline int
- phi12(Parameters& par, par_imw_p<T>& proj_parm, T *del, T *sig)
- {
- int err = 0;
-
- if (!pj_param(par.params, "tlat_1").i ||
- !pj_param(par.params, "tlat_2").i) {
- err = -41;
- } else {
- proj_parm.phi_1 = pj_param(par.params, "rlat_1").f;
- proj_parm.phi_2 = pj_param(par.params, "rlat_2").f;
- *del = 0.5 * (proj_parm.phi_2 - proj_parm.phi_1);
- *sig = 0.5 * (proj_parm.phi_2 + proj_parm.phi_1);
- err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? -42 : 0;
- }
- return err;
- }
- template <typename Parameters, typename T>
- inline XY<T>
- loc_for(T const& lp_lam, T const& lp_phi, Parameters const& par, par_imw_p<T> const& proj_parm, T *yc)
- {
- XY<T> xy;
-
- if (! lp_phi) {
- xy.x = lp_lam;
- xy.y = 0.;
- } else {
- T xa, ya, xb, yb, xc, D, B, m, sp, t, R, C;
-
- sp = sin(lp_phi);
- m = pj_mlfn(lp_phi, sp, cos(lp_phi), proj_parm.en);
- xa = proj_parm.Pp + proj_parm.Qp * m;
- ya = proj_parm.P + proj_parm.Q * m;
- R = 1. / (tan(lp_phi) * sqrt(1. - par.es * sp * sp));
- C = sqrt(R * R - xa * xa);
- if (lp_phi < 0.) C = - C;
- C += ya - R;
- if (proj_parm.mode < 0) {
- xb = lp_lam;
- yb = proj_parm.C2;
- } else {
- t = lp_lam * proj_parm.sphi_2;
- xb = proj_parm.R_2 * sin(t);
- yb = proj_parm.C2 + proj_parm.R_2 * (1. - cos(t));
- }
- if (proj_parm.mode > 0) {
- xc = lp_lam;
- *yc = 0.;
- } else {
- t = lp_lam * proj_parm.sphi_1;
- xc = proj_parm.R_1 * sin(t);
- *yc = proj_parm.R_1 * (1. - cos(t));
- }
- D = (xb - xc)/(yb - *yc);
- B = xc + D * (C + R - *yc);
- xy.x = D * sqrt(R * R * (1 + D * D) - B * B);
- if (lp_phi > 0)
- xy.x = - xy.x;
- xy.x = (B + xy.x) / (1. + D * D);
- xy.y = sqrt(R * R - xy.x * xy.x);
- if (lp_phi > 0)
- xy.y = - xy.y;
- xy.y += C + R;
- }
- return (xy);
- }
- template <typename Parameters, typename T>
- inline void
- xy(Parameters const& par, par_imw_p<T> const& proj_parm, T const& phi, T *x, T *y, T *sp, T *R)
- {
- T F;
-
- *sp = sin(phi);
- *R = 1./(tan(phi) * sqrt(1. - par.es * *sp * *sp ));
- F = proj_parm.lam_1 * *sp;
- *y = *R * (1 - cos(F));
- *x = *R * sin(F);
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_imw_p_ellipsoid : public base_t_fi<base_imw_p_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_imw_p<CalculationType> m_proj_parm;
-
- inline base_imw_p_ellipsoid(const Parameters& par)
- : base_t_fi<base_imw_p_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType yc = 0;
- XY<CalculationType> xy = loc_for(lp_lon, lp_lat, this->m_par, m_proj_parm, &yc);
- xy_x = xy.x; xy_y = xy.y;
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- XY<CalculationType> t;
- CalculationType yc = 0;
-
- lp_lat = this->m_proj_parm.phi_2;
- lp_lon = xy_x / cos(lp_lat);
- do {
- t = loc_for(lp_lon, lp_lat, this->m_par, m_proj_parm, &yc);
- lp_lat = ((lp_lat - this->m_proj_parm.phi_1) * (xy_y - yc) / (t.y - yc)) + this->m_proj_parm.phi_1;
- lp_lon = lp_lon * xy_x / t.x;
- } while (fabs(t.x - xy_x) > TOL || fabs(t.y - xy_y) > TOL);
- }
-
- static inline std::string get_name()
- {
- return "imw_p_ellipsoid";
- }
-
- };
-
- // International Map of the World Polyconic
- template <typename Parameters, typename T>
- inline void setup_imw_p(Parameters& par, par_imw_p<T>& proj_parm)
- {
- T del, sig, s, t, x1, x2, T2, y1, m1, m2, y2;
- int i;
-
- if (!pj_enfn(par.es, proj_parm.en))
- BOOST_THROW_EXCEPTION( projection_exception(0) );
- if( (i = phi12(par, proj_parm, &del, &sig)) != 0)
- BOOST_THROW_EXCEPTION( projection_exception(i) );
- if (proj_parm.phi_2 < proj_parm.phi_1) { /* make sure proj_parm.phi_1 most southerly */
- del = proj_parm.phi_1;
- proj_parm.phi_1 = proj_parm.phi_2;
- proj_parm.phi_2 = del;
- }
- if (pj_param(par.params, "tlon_1").i)
- proj_parm.lam_1 = pj_param(par.params, "rlon_1").f;
- else { /* use predefined based upon latitude */
- sig = fabs(sig * geometry::math::r2d<T>());
- if (sig <= 60) sig = 2.;
- else if (sig <= 76) sig = 4.;
- else sig = 8.;
- proj_parm.lam_1 = sig * geometry::math::d2r<T>();
- }
- proj_parm.mode = 0;
- if (proj_parm.phi_1) xy(par, proj_parm, proj_parm.phi_1, &x1, &y1, &proj_parm.sphi_1, &proj_parm.R_1);
- else {
- proj_parm.mode = 1;
- y1 = 0.;
- x1 = proj_parm.lam_1;
- }
- if (proj_parm.phi_2) xy(par, proj_parm, proj_parm.phi_2, &x2, &T2, &proj_parm.sphi_2, &proj_parm.R_2);
- else {
- proj_parm.mode = -1;
- T2 = 0.;
- x2 = proj_parm.lam_1;
- }
- m1 = pj_mlfn(proj_parm.phi_1, proj_parm.sphi_1, cos(proj_parm.phi_1), proj_parm.en);
- m2 = pj_mlfn(proj_parm.phi_2, proj_parm.sphi_2, cos(proj_parm.phi_2), proj_parm.en);
- t = m2 - m1;
- s = x2 - x1;
- y2 = sqrt(t * t - s * s) + y1;
- proj_parm.C2 = y2 - T2;
- t = 1. / t;
- proj_parm.P = (m2 * y1 - m1 * y2) * t;
- proj_parm.Q = (y2 - y1) * t;
- proj_parm.Pp = (m2 * x1 - m1 * x2) * t;
- proj_parm.Qp = (x2 - x1) * t;
- }
-
- }} // namespace detail::imw_p
- #endif // doxygen
-
- /*!
- \brief International Map of the World Polyconic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Mod. Polyconic
- - Ellipsoid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel
- - lat_2: Latitude of second standard parallel
- - lon_1 (degrees)
- \par Example
- \image html ex_imw_p.gif
- */
- template <typename CalculationType, typename Parameters>
- struct imw_p_ellipsoid : public detail::imw_p::base_imw_p_ellipsoid<CalculationType, Parameters>
- {
- inline imw_p_ellipsoid(const Parameters& par) : detail::imw_p::base_imw_p_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::imw_p::setup_imw_p(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::imw_p, imw_p_ellipsoid, imw_p_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class imw_p_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<imw_p_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void imw_p_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("imw_p", new imw_p_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_IMW_P_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/isea.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/isea.hpp
deleted file mode 100644
index 4cffbc430f8..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/isea.hpp
+++ /dev/null
@@ -1,1311 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_ISEA_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ISEA_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// This code was entirely written by Nathan Wagner
-// and is in the public domain.
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <sstream>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct isea {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace isea
- {
-
- static const double E = 52.62263186;
- static const double F = 10.81231696;
- //static const double DEG60 = 1.04719755119659774614;
- //static const double DEG120 = 2.09439510239319549229;
- //static const double DEG72 = 1.25663706143591729537;
- //static const double DEG90 = 1.57079632679489661922;
- //static const double DEG144 = 2.51327412287183459075;
- //static const double DEG36 = 0.62831853071795864768;
- //static const double DEG108 = 1.88495559215387594306;
- //static const double DEG180 = geometry::math::pi<double>();
- static const double ISEA_SCALE = 0.8301572857837594396028083;
- static const double V_LAT = 0.46364760899944494524;
- static const double E_RAD = 0.91843818702186776133;
- static const double F_RAD = 0.18871053072122403508;
- static const double TABLE_G = 0.6615845383;
- static const double TABLE_H = 0.1909830056;
- static const double RPRIME = 0.91038328153090290025;
- static const double PRECISION = 0.0000000000005;
- static const double ISEA_STD_LAT = 1.01722196792335072101;
- static const double ISEA_STD_LON = .19634954084936207740;
-
- template <typename T>
- inline T DEG30() { return T(30) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T DEG60() { return T(60) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T DEG120() { return T(120) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T DEG72() { return T(72) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T DEG90() { return geometry::math::half_pi<T>(); }
- template <typename T>
- inline T DEG144() { return T(144) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T DEG36() { return T(36) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T DEG108() { return T(108) * geometry::math::d2r<T>(); }
- template <typename T>
- inline T DEG180() { return geometry::math::pi<T>(); }
-
- inline bool DOWNTRI(int tri) { return (((tri - 1) / 5) % 2 == 1); }
-
- /*
- * Proj 4 provides its own entry points into
- * the code, so none of the library functions
- * need to be global
- */
-
- struct hex {
- int iso;
- int x, y, z;
- };
-
- /* y *must* be positive down as the xy /iso conversion assumes this */
- inline
- int hex_xy(struct hex *h) {
- if (!h->iso) return 1;
- if (h->x >= 0) {
- h->y = -h->y - (h->x+1)/2;
- } else {
- /* need to round toward -inf, not toward zero, so x-1 */
- h->y = -h->y - h->x/2;
- }
- h->iso = 0;
-
- return 1;
- }
-
- inline
- int hex_iso(struct hex *h) {
- if (h->iso) return 1;
-
- if (h->x >= 0) {
- h->y = (-h->y - (h->x+1)/2);
- } else {
- /* need to round toward -inf, not toward zero, so x-1 */
- h->y = (-h->y - (h->x)/2);
- }
-
- h->z = -h->x - h->y;
- h->iso = 1;
- return 1;
- }
-
- template <typename T>
- inline
- int hexbin2(T const& width, T x, T y,
- int *i, int *j) {
- T z, rx, ry, rz;
- T abs_dx, abs_dy, abs_dz;
- int ix, iy, iz, s;
- struct hex h;
-
- x = x / cos(DEG30<T>()); /* rotated X coord */
- y = y - x / 2.0; /* adjustment for rotated X */
-
- /* adjust for actual hexwidth */
- x /= width;
- y /= width;
-
- z = -x - y;
-
- rx = floor(x + 0.5);
- ix = (int)rx;
- ry = floor(y + 0.5);
- iy = (int)ry;
- rz = floor(z + 0.5);
- iz = (int)rz;
-
- s = ix + iy + iz;
-
- if (s) {
- abs_dx = fabs(rx - x);
- abs_dy = fabs(ry - y);
- abs_dz = fabs(rz - z);
-
- if (abs_dx >= abs_dy && abs_dx >= abs_dz) {
- ix -= s;
- } else if (abs_dy >= abs_dx && abs_dy >= abs_dz) {
- iy -= s;
- } else {
- iz -= s;
- }
- }
- h.x = ix;
- h.y = iy;
- h.z = iz;
- h.iso = 1;
-
- hex_xy(&h);
- *i = h.x;
- *j = h.y;
- return ix * 100 + iy;
- }
-
- enum isea_poly { ISEA_NONE, ISEA_ICOSAHEDRON = 20 };
- enum isea_topology { ISEA_HEXAGON=6, ISEA_TRIANGLE=3, ISEA_DIAMOND=4 };
- enum isea_address_form { ISEA_GEO, ISEA_Q2DI, ISEA_SEQNUM, ISEA_INTERLEAVE,
- ISEA_PLANE, ISEA_Q2DD, ISEA_PROJTRI, ISEA_VERTEX2DD, ISEA_HEX
- };
-
- template <typename T>
- struct isea_dgg {
- int polyhedron; /* ignored, icosahedron */
- T o_lat, o_lon, o_az; /* orientation, radians */
- int pole; /* true if standard snyder */
- int topology; /* ignored, hexagon */
- int aperture; /* valid values depend on partitioning method */
- int resolution;
- T radius; /* radius of the earth in meters, ignored 1.0 */
- int output; /* an isea_address_form */
- int triangle; /* triangle of last transformed point */
- int quad; /* quad of last transformed point */
- unsigned long serial;
- };
-
- template <typename T>
- struct isea_pt {
- T x, y;
- };
-
- template <typename T>
- struct isea_geo {
- T lon, lat;
- };
-
- template <typename T>
- struct isea_address {
- int type; /* enum isea_address_form */
- int number;
- T x,y; /* or i,j or lon,lat depending on type */
- };
-
- /* ENDINC */
-
- enum snyder_polyhedron {
- SNYDER_POLY_HEXAGON, SNYDER_POLY_PENTAGON,
- SNYDER_POLY_TETRAHEDRON, SNYDER_POLY_CUBE,
- SNYDER_POLY_OCTAHEDRON, SNYDER_POLY_DODECAHEDRON,
- SNYDER_POLY_ICOSAHEDRON
- };
-
- template <typename T>
- struct snyder_constants {
- T g, G, theta, ea_w, ea_a, ea_b, g_w, g_a, g_b;
- };
-
- template <typename T>
- inline const snyder_constants<T> * constants()
- {
- /* TODO put these in radians to avoid a later conversion */
- static snyder_constants<T> result[] = {
- {23.80018260, 62.15458023, 60.0, 3.75, 1.033, 0.968, 5.09, 1.195, 1.0},
- {20.07675127, 55.69063953, 54.0, 2.65, 1.030, 0.983, 3.59, 1.141, 1.027},
- {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
- {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
- {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
- {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
- {37.37736814, 36.0, 30.0, 17.27, 1.163, 0.860, 13.14, 1.584, 1.0}
- };
- return result;
- }
-
-
- /* sqrt(5)/M_PI */
-
- /* 26.565051177 degrees */
-
-
- template <typename T>
- inline const isea_geo<T> * vertex()
- {
- static isea_geo<T> result[] = {
- {0.0, DEG90<T>()},
- {DEG180<T>(), V_LAT},
- {-DEG108<T>(), V_LAT},
- {-DEG36<T>(), V_LAT},
- {DEG36<T>(), V_LAT},
- {DEG108<T>(), V_LAT},
- {-DEG144<T>(), -V_LAT},
- {-DEG72<T>(), -V_LAT},
- {0.0, -V_LAT},
- {DEG72<T>(), -V_LAT},
- {DEG144<T>(), -V_LAT},
- {0.0, -DEG90<T>()}
- };
- return result;
- }
-
- /* TODO make an isea_pt array of the vertices as well */
-
- static int tri_v1[] = {0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 2, 3, 4, 5, 1, 11, 11, 11, 11, 11};
-
- /* 52.62263186 */
-
- /* 10.81231696 */
-
- /* triangle Centers */
- template <typename T>
- inline const isea_geo<T> * icostriangles()
- {
- static isea_geo<T> result[] = {
- {0.0, 0.0},
- {-DEG144<T>(), E_RAD},
- {-DEG72<T>(), E_RAD},
- {0.0, E_RAD},
- {DEG72<T>(), E_RAD},
- {DEG144<T>(), E_RAD},
- {-DEG144<T>(), F_RAD},
- {-DEG72<T>(), F_RAD},
- {0.0, F_RAD},
- {DEG72<T>(), F_RAD},
- {DEG144<T>(), F_RAD},
- {-DEG108<T>(), -F_RAD},
- {-DEG36<T>(), -F_RAD},
- {DEG36<T>(), -F_RAD},
- {DEG108<T>(), -F_RAD},
- {DEG180<T>(), -F_RAD},
- {-DEG108<T>(), -E_RAD},
- {-DEG36<T>(), -E_RAD},
- {DEG36<T>(), -E_RAD},
- {DEG108<T>(), -E_RAD},
- {DEG180<T>(), -E_RAD},
- };
- return result;
- }
-
- template <typename T>
- inline T az_adjustment(int triangle)
- {
- T adj;
-
- isea_geo<T> v;
- isea_geo<T> c;
-
- v = vertex<T>()[tri_v1[triangle]];
- c = icostriangles<T>()[triangle];
-
- /* TODO looks like the adjustment is always either 0 or 180 */
- /* at least if you pick your vertex carefully */
- adj = atan2(cos(v.lat) * sin(v.lon - c.lon),
- cos(c.lat) * sin(v.lat)
- - sin(c.lat) * cos(v.lat) * cos(v.lon - c.lon));
- return adj;
- }
-
- /* R tan(g) sin(60) */
-
- /* H = 0.25 R tan g = */
-
-
- template <typename T>
- inline isea_pt<T> isea_triangle_xy(int triangle)
- {
- isea_pt<T> c;
- T Rprime = 0.91038328153090290025;
-
- triangle = (triangle - 1) % 20;
-
- c.x = TABLE_G * ((triangle % 5) - 2) * 2.0;
- if (triangle > 9) {
- c.x += TABLE_G;
- }
- switch (triangle / 5) {
- case 0:
- c.y = 5.0 * TABLE_H;
- break;
- case 1:
- c.y = TABLE_H;
- break;
- case 2:
- c.y = -TABLE_H;
- break;
- case 3:
- c.y = -5.0 * TABLE_H;
- break;
- default:
- /* should be impossible */
- BOOST_THROW_EXCEPTION( projection_exception() );
- };
- c.x *= Rprime;
- c.y *= Rprime;
-
- return c;
- }
-
- /* snyder eq 14 */
- template <typename T>
- inline T sph_azimuth(T const& f_lon, T const& f_lat, T const& t_lon, T const& t_lat)
- {
- T az;
-
- az = atan2(cos(t_lat) * sin(t_lon - f_lon),
- cos(f_lat) * sin(t_lat)
- - sin(f_lat) * cos(t_lat) * cos(t_lon - f_lon)
- );
- return az;
- }
-
- /* coord needs to be in radians */
- template <typename T>
- inline int isea_snyder_forward(isea_geo<T> * ll, isea_pt<T> * out)
- {
- int i;
-
- /*
- * spherical distance from center of polygon face to any of its
- * vertexes on the globe
- */
- T g;
-
- /*
- * spherical angle between radius vector to center and adjacent edge
- * of spherical polygon on the globe
- */
- T G;
-
- /*
- * plane angle between radius vector to center and adjacent edge of
- * plane polygon
- */
- T theta;
-
- /* additional variables from snyder */
- T q, Rprime, H, Ag, Azprime, Az, dprime, f, rho,
- x, y;
-
- /* variables used to store intermediate results */
- T cot_theta, tan_g, az_offset;
-
- /* how many multiples of 60 degrees we adjust the azimuth */
- int Az_adjust_multiples;
-
- snyder_constants<T> c;
-
- /*
- * TODO by locality of reference, start by trying the same triangle
- * as last time
- */
-
- /* TODO put these constants in as radians to begin with */
- c = constants<T>()[SNYDER_POLY_ICOSAHEDRON];
- theta = c.theta * geometry::math::d2r<T>();
- g = c.g * geometry::math::d2r<T>();
- G = c.G * geometry::math::d2r<T>();
-
- for (i = 1; i <= 20; i++) {
- T z;
- isea_geo<T> center;
-
- center = icostriangles<T>()[i];
-
- /* step 1 */
- #if 0
- z = sph_distance(center.lon, center.lat, ll->lon, ll->lat);
- #else
- z = acos(sin(center.lat) * sin(ll->lat)
- + cos(center.lat) * cos(ll->lat) * cos(ll->lon - center.lon));
- #endif
-
- /* not on this triangle */
- if (z > g + 0.000005) { /* TODO DBL_EPSILON */
- continue;
- }
- Az = sph_azimuth(ll->lon, ll->lat, center.lon, center.lat);
-
- Az = atan2(cos(ll->lat) * sin(ll->lon - center.lon),
- cos(center.lat) * sin(ll->lat)
- - sin(center.lat) * cos(ll->lat) * cos(ll->lon - center.lon)
- );
-
- /* step 2 */
-
- /* This calculates "some" vertex coordinate */
- az_offset = az_adjustment<T>(i);
-
- Az -= az_offset;
-
- /* TODO I don't know why we do this. It's not in snyder */
- /* maybe because we should have picked a better vertex */
- if (Az < 0.0) {
- Az += geometry::math::two_pi<T>();
- }
- /*
- * adjust Az for the point to fall within the range of 0 to
- * 2(90 - theta) or 60 degrees for the hexagon, by
- * and therefore 120 degrees for the triangle
- * of the icosahedron
- * subtracting or adding multiples of 60 degrees to Az and
- * recording the amount of adjustment
- */
-
- Az_adjust_multiples = 0;
- while (Az < 0.0) {
- Az += DEG120<T>();
- Az_adjust_multiples--;
- }
- while (Az > DEG120<T>() + DBL_EPSILON) {
- Az -= DEG120<T>();
- Az_adjust_multiples++;
- }
-
- /* step 3 */
- cot_theta = 1.0 / tan(theta);
- tan_g = tan(g); /* TODO this is a constant */
-
- /* Calculate q from eq 9. */
- /* TODO cot_theta is cot(30) */
- q = atan2(tan_g, cos(Az) + sin(Az) * cot_theta);
-
- /* not in this triangle */
- if (z > q + 0.000005) {
- continue;
- }
- /* step 4 */
-
- /* Apply equations 5-8 and 10-12 in order */
-
- /* eq 5 */
- /* Rprime = 0.9449322893 * R; */
- /* R' in the paper is for the truncated */
- Rprime = 0.91038328153090290025;
-
- /* eq 6 */
- H = acos(sin(Az) * sin(G) * cos(g) - cos(Az) * cos(G));
-
- /* eq 7 */
- /* Ag = (Az + G + H - DEG180) * M_PI * R * R / DEG180; */
- Ag = Az + G + H - DEG180<T>();
-
- /* eq 8 */
- Azprime = atan2(2.0 * Ag, Rprime * Rprime * tan_g * tan_g - 2.0 * Ag * cot_theta);
-
- /* eq 10 */
- /* cot(theta) = 1.73205080756887729355 */
- dprime = Rprime * tan_g / (cos(Azprime) + sin(Azprime) * cot_theta);
-
- /* eq 11 */
- f = dprime / (2.0 * Rprime * sin(q / 2.0));
-
- /* eq 12 */
- rho = 2.0 * Rprime * f * sin(z / 2.0);
-
- /*
- * add back the same 60 degree multiple adjustment from step
- * 2 to Azprime
- */
-
- Azprime += DEG120<T>() * Az_adjust_multiples;
-
- /* calculate rectangular coordinates */
-
- x = rho * sin(Azprime);
- y = rho * cos(Azprime);
-
- /*
- * TODO
- * translate coordinates to the origin for the particular
- * hexagon on the flattened polyhedral map plot
- */
-
- out->x = x;
- out->y = y;
-
- return i;
- }
-
- /*
- * should be impossible, this implies that the coordinate is not on
- * any triangle
- */
-
- //fprintf(stderr, "impossible transform: %f %f is not on any triangle\n",
- // ll->lon * geometry::math::r2d<double>(), ll->lat * geometry::math::r2d<double>());
- std::stringstream ss;
- ss << "impossible transform: " << ll->lon * geometry::math::r2d<T>()
- << " " << ll->lat * geometry::math::r2d<T>() << " is not on any triangle.";
-
- BOOST_THROW_EXCEPTION( projection_exception(ss.str()) );
-
- /* not reached */
- return 0; /* supresses a warning */
- }
-
- /*
- * return the new coordinates of any point in orginal coordinate system.
- * Define a point (newNPold) in orginal coordinate system as the North Pole in
- * new coordinate system, and the great circle connect the original and new
- * North Pole as the lon0 longitude in new coordinate system, given any point
- * in orginal coordinate system, this function return the new coordinates.
- */
-
-
- /* formula from Snyder, Map Projections: A working manual, p31 */
- /*
- * old north pole at np in new coordinates
- * could be simplified a bit with fewer intermediates
- *
- * TODO take a result pointer
- */
- template <typename T>
- inline isea_geo<T> snyder_ctran(isea_geo<T> * np, isea_geo<T> * pt)
- {
- isea_geo<T> npt;
- T alpha, phi, lambda, lambda0, beta, lambdap, phip;
- T sin_phip;
- T lp_b; /* lambda prime minus beta */
- T cos_p, sin_a;
-
- phi = pt->lat;
- lambda = pt->lon;
- alpha = np->lat;
- beta = np->lon;
- lambda0 = beta;
-
- cos_p = cos(phi);
- sin_a = sin(alpha);
-
- /* mpawm 5-7 */
- sin_phip = sin_a * sin(phi) - cos(alpha) * cos_p * cos(lambda - lambda0);
-
- /* mpawm 5-8b */
-
- /* use the two argument form so we end up in the right quadrant */
- lp_b = atan2(cos_p * sin(lambda - lambda0),
- (sin_a * cos_p * cos(lambda - lambda0) + cos(alpha) * sin(phi)));
-
- lambdap = lp_b + beta;
-
- /* normalize longitude */
- /* TODO can we just do a modulus ? */
- lambdap = fmod(lambdap, geometry::math::two_pi<T>());
- while (lambdap > geometry::math::pi<T>())
- lambdap -= geometry::math::two_pi<T>();
- while (lambdap < -geometry::math::pi<T>())
- lambdap += geometry::math::two_pi<T>();
-
- phip = asin(sin_phip);
-
- npt.lat = phip;
- npt.lon = lambdap;
-
- return npt;
- }
-
- template <typename T>
- inline isea_geo<T> isea_ctran(isea_geo<T> * np, isea_geo<T> * pt, T const& lon0)
- {
- isea_geo<T> npt;
-
- np->lon += geometry::math::pi<T>();
- npt = snyder_ctran(np, pt);
- np->lon -= geometry::math::pi<T>();
-
- npt.lon -= (geometry::math::pi<T>() - lon0 + np->lon);
-
- /*
- * snyder is down tri 3, isea is along side of tri1 from vertex 0 to
- * vertex 1 these are 180 degrees apart
- */
- npt.lon += geometry::math::pi<T>();
- /* normalize longitude */
- npt.lon = fmod(npt.lon, geometry::math::two_pi<T>());
- while (npt.lon > geometry::math::pi<T>())
- npt.lon -= geometry::math::two_pi<T>();
- while (npt.lon < -geometry::math::pi<T>())
- npt.lon += geometry::math::two_pi<T>();
-
- return npt;
- }
-
- /* in radians */
-
- /* fuller's at 5.2454 west, 2.3009 N, adjacent at 7.46658 deg */
-
- template <typename T>
- inline int isea_grid_init(isea_dgg<T> * g)
- {
- if (!g)
- return 0;
-
- g->polyhedron = 20;
- g->o_lat = ISEA_STD_LAT;
- g->o_lon = ISEA_STD_LON;
- g->o_az = 0.0;
- g->aperture = 4;
- g->resolution = 6;
- g->radius = 1.0;
- g->topology = 6;
-
- return 1;
- }
-
- template <typename T>
- inline int isea_orient_isea(isea_dgg<T> * g)
- {
- if (!g)
- return 0;
- g->o_lat = ISEA_STD_LAT;
- g->o_lon = ISEA_STD_LON;
- g->o_az = 0.0;
- return 1;
- }
-
- template <typename T>
- inline int isea_orient_pole(isea_dgg<T> * g)
- {
- if (!g)
- return 0;
- g->o_lat = geometry::math::half_pi<T>();
- g->o_lon = 0.0;
- g->o_az = 0;
- return 1;
- }
-
- template <typename T>
- inline int isea_transform(isea_dgg<T> * g, isea_geo<T> * in,
- isea_pt<T> * out)
- {
- isea_geo<T> i, pole;
- int tri;
-
- pole.lat = g->o_lat;
- pole.lon = g->o_lon;
-
- i = isea_ctran(&pole, in, g->o_az);
-
- tri = isea_snyder_forward(&i, out);
- out->x *= g->radius;
- out->y *= g->radius;
- g->triangle = tri;
-
- return tri;
- }
-
-
- template <typename T>
- inline void isea_rotate(isea_pt<T> * pt, T const& degrees)
- {
- T rad;
-
- T x, y;
-
- rad = -degrees * geometry::math::d2r<T>();
- while (rad >= geometry::math::two_pi<T>()) rad -= geometry::math::two_pi<T>();
- while (rad <= -geometry::math::two_pi<T>()) rad += geometry::math::two_pi<T>();
-
- x = pt->x * cos(rad) + pt->y * sin(rad);
- y = -pt->x * sin(rad) + pt->y * cos(rad);
-
- pt->x = x;
- pt->y = y;
- }
-
- template <typename T>
- inline int isea_tri_plane(int tri, isea_pt<T> *pt, T const& radius)
- {
- isea_pt<T> tc; /* center of triangle */
-
- if (DOWNTRI(tri)) {
- isea_rotate(pt, 180.0);
- }
- tc = isea_triangle_xy<T>(tri);
- tc.x *= radius;
- tc.y *= radius;
- pt->x += tc.x;
- pt->y += tc.y;
-
- return tri;
- }
-
- /* convert projected triangle coords to quad xy coords, return quad number */
- template <typename T>
- inline int isea_ptdd(int tri, isea_pt<T> *pt)
- {
- int downtri, quad;
-
- downtri = (((tri - 1) / 5) % 2 == 1);
- boost::ignore_unused(downtri);
- quad = ((tri - 1) % 5) + ((tri - 1) / 10) * 5 + 1;
-
- isea_rotate(pt, downtri ? 240.0 : 60.0);
- if (downtri) {
- pt->x += 0.5;
- /* pt->y += cos(30.0 * M_PI / 180.0); */
- pt->y += .86602540378443864672;
- }
- return quad;
- }
-
- template <typename T>
- inline int isea_dddi_ap3odd(isea_dgg<T> *g, int quad, isea_pt<T> *pt, isea_pt<T> *di)
- {
- isea_pt<T> v;
- T hexwidth;
- T sidelength; /* in hexes */
- int d, i;
- int maxcoord;
- hex h;
-
- /* This is the number of hexes from apex to base of a triangle */
- sidelength = (pow(2.0, g->resolution) + 1.0) / 2.0;
-
- /* apex to base is cos(30deg) */
- hexwidth = cos(geometry::math::pi<T>() / 6.0) / sidelength;
-
- /* TODO I think sidelength is always x.5, so
- * (int)sidelength * 2 + 1 might be just as good
- */
- maxcoord = (int) (sidelength * 2.0 + 0.5);
-
- v = *pt;
- hexbin2(hexwidth, v.x, v.y, &h.x, &h.y);
- h.iso = 0;
- hex_iso(&h);
-
- d = h.x - h.z;
- i = h.x + h.y + h.y;
-
- /*
- * you want to test for max coords for the next quad in the same
- * "row" first to get the case where both are max
- */
- if (quad <= 5) {
- if (d == 0 && i == maxcoord) {
- /* north pole */
- quad = 0;
- d = 0;
- i = 0;
- } else if (i == maxcoord) {
- /* upper right in next quad */
- quad += 1;
- if (quad == 6)
- quad = 1;
- i = maxcoord - d;
- d = 0;
- } else if (d == maxcoord) {
- /* lower right in quad to lower right */
- quad += 5;
- d = 0;
- }
- } else if (quad >= 6) {
- if (i == 0 && d == maxcoord) {
- /* south pole */
- quad = 11;
- d = 0;
- i = 0;
- } else if (d == maxcoord) {
- /* lower right in next quad */
- quad += 1;
- if (quad == 11)
- quad = 6;
- d = maxcoord - i;
- i = 0;
- } else if (i == maxcoord) {
- /* upper right in quad to upper right */
- quad = (quad - 4) % 5;
- i = 0;
- }
- }
-
- di->x = d;
- di->y = i;
-
- g->quad = quad;
- return quad;
- }
-
- template <typename T>
- inline int isea_dddi(isea_dgg<T> *g, int quad, isea_pt<T> *pt, isea_pt<T> *di)
- {
- isea_pt<T> v;
- T hexwidth;
- int sidelength; /* in hexes */
- hex h;
-
- if (g->aperture == 3 && g->resolution % 2 != 0) {
- return isea_dddi_ap3odd(g, quad, pt, di);
- }
- /* todo might want to do this as an iterated loop */
- if (g->aperture >0) {
- sidelength = (int) (pow(T(g->aperture), T(g->resolution / 2.0)) + 0.5);
- } else {
- sidelength = g->resolution;
- }
-
- hexwidth = 1.0 / sidelength;
-
- v = *pt;
- isea_rotate(&v, -30.0);
- hexbin2(hexwidth, v.x, v.y, &h.x, &h.y);
- h.iso = 0;
- hex_iso(&h);
-
- /* we may actually be on another quad */
- if (quad <= 5) {
- if (h.x == 0 && h.z == -sidelength) {
- /* north pole */
- quad = 0;
- h.z = 0;
- h.y = 0;
- h.x = 0;
- } else if (h.z == -sidelength) {
- quad = quad + 1;
- if (quad == 6)
- quad = 1;
- h.y = sidelength - h.x;
- h.z = h.x - sidelength;
- h.x = 0;
- } else if (h.x == sidelength) {
- quad += 5;
- h.y = -h.z;
- h.x = 0;
- }
- } else if (quad >= 6) {
- if (h.z == 0 && h.x == sidelength) {
- /* south pole */
- quad = 11;
- h.x = 0;
- h.y = 0;
- h.z = 0;
- } else if (h.x == sidelength) {
- quad = quad + 1;
- if (quad == 11)
- quad = 6;
- h.x = h.y + sidelength;
- h.y = 0;
- h.z = -h.x;
- } else if (h.y == -sidelength) {
- quad -= 4;
- h.y = 0;
- h.z = -h.x;
- }
- }
- di->x = h.x;
- di->y = -h.z;
-
- g->quad = quad;
- return quad;
- }
-
- template <typename T>
- inline int isea_ptdi(isea_dgg<T> *g, int tri, isea_pt<T> *pt,
- isea_pt<T> *di)
- {
- isea_pt<T> v;
- int quad;
-
- v = *pt;
- quad = isea_ptdd(tri, &v);
- quad = isea_dddi(g, quad, &v, di);
- return quad;
- }
-
- /* q2di to seqnum */
- template <typename T>
- inline int isea_disn(isea_dgg<T> *g, int quad, isea_pt<T> *di)
- {
- int sidelength;
- int sn, height;
- int hexes;
-
- if (quad == 0) {
- g->serial = 1;
- return g->serial;
- }
- /* hexes in a quad */
- hexes = (int) (pow(T(g->aperture), T(g->resolution)) + 0.5);
- if (quad == 11) {
- g->serial = 1 + 10 * hexes + 1;
- return g->serial;
- }
- if (g->aperture == 3 && g->resolution % 2 == 1) {
- height = (int) (pow(T(g->aperture), T((g->resolution - 1) / 2.0)));
- sn = ((int) di->x) * height;
- sn += ((int) di->y) / height;
- sn += (quad - 1) * hexes;
- sn += 2;
- } else {
- sidelength = (int) (pow(T(g->aperture), T(g->resolution / 2.0)) + 0.5);
- sn = (int) ((quad - 1) * hexes + sidelength * di->x + di->y + 2);
- }
-
- g->serial = sn;
- return sn;
- }
-
- /* TODO just encode the quad in the d or i coordinate
- * quad is 0-11, which can be four bits.
- * d' = d << 4 + q, d = d' >> 4, q = d' & 0xf
- */
- /* convert a q2di to global hex coord */
- template <typename T>
- inline int isea_hex(isea_dgg<T> *g, int tri, isea_pt<T> *pt,
- isea_pt<T> *hex)
- {
- isea_pt<T> v;
-#ifdef BOOST_GEOMETRY_PROJECTIONS_FIXME
- int sidelength;
- int d, i, x, y;
-#endif // BOOST_GEOMETRY_PROJECTIONS_FIXME
- int quad;
-
- quad = isea_ptdi(g, tri, pt, &v);
-
- hex->x = ((int)v.x << 4) + quad;
- hex->y = v.y;
-
- return 1;
-#ifdef BOOST_GEOMETRY_PROJECTIONS_FIXME
- d = (int)v.x;
- i = (int)v.y;
-
- /* Aperture 3 odd resolutions */
- if (g->aperture == 3 && g->resolution % 2 != 0) {
- int offset = (int)(pow(T(3.0), T(g->resolution - 1)) + 0.5);
-
- d += offset * ((g->quad-1) % 5);
- i += offset * ((g->quad-1) % 5);
-
- if (quad == 0) {
- d = 0;
- i = offset;
- } else if (quad == 11) {
- d = 2 * offset;
- i = 0;
- } else if (quad > 5) {
- d += offset;
- }
-
- x = (2*d - i) /3;
- y = (2*i - d) /3;
-
- hex->x = x + offset / 3;
- hex->y = y + 2 * offset / 3;
- return 1;
- }
-
- /* aperture 3 even resolutions and aperture 4 */
- sidelength = (int) (pow(T(g->aperture), T(g->resolution / 2.0)) + 0.5);
- if (g->quad == 0) {
- hex->x = 0;
- hex->y = sidelength;
- } else if (g->quad == 11) {
- hex->x = sidelength * 2;
- hex->y = 0;
- } else {
- hex->x = d + sidelength * ((g->quad-1) % 5);
- if (g->quad > 5) hex->x += sidelength;
- hex->y = i + sidelength * ((g->quad-1) % 5);
- }
-
- return 1;
-#endif // BOOST_GEOMETRY_PROJECTIONS_FIXME
- }
-
- template <typename T>
- inline isea_pt<T> isea_forward(isea_dgg<T> *g, isea_geo<T> *in)
- {
- int tri, downtri;
- isea_pt<T> out, coord;
-
- tri = isea_transform(g, in, &out);
-
- downtri = (((tri - 1) / 5) % 2 == 1);
- boost::ignore_unused(downtri);
-
- if (g->output == ISEA_PLANE) {
- isea_tri_plane(tri, &out, g->radius);
- return out;
- }
-
- /* convert to isea standard triangle size */
- out.x = out.x / g->radius * ISEA_SCALE;
- out.y = out.y / g->radius * ISEA_SCALE;
- out.x += 0.5;
- out.y += 2.0 * .14433756729740644112;
-
- switch (g->output) {
- case ISEA_PROJTRI:
- /* nothing to do, already in projected triangle */
- break;
- case ISEA_VERTEX2DD:
- g->quad = isea_ptdd(tri, &out);
- break;
- case ISEA_Q2DD:
- /* Same as above, we just don't print as much */
- g->quad = isea_ptdd(tri, &out);
- break;
- case ISEA_Q2DI:
- g->quad = isea_ptdi(g, tri, &out, &coord);
- return coord;
- break;
- case ISEA_SEQNUM:
- isea_ptdi(g, tri, &out, &coord);
- /* disn will set g->serial */
- isea_disn(g, g->quad, &coord);
- return coord;
- break;
- case ISEA_HEX:
- isea_hex(g, tri, &out, &coord);
- return coord;
- break;
- }
-
- return out;
- }
- /*
- * Proj 4 integration code follows
- */
-
- template <typename T>
- struct par_isea
- {
- isea_dgg<T> dgg;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_isea_spheroid : public base_t_f<base_isea_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_isea<CalculationType> m_proj_parm;
-
- inline base_isea_spheroid(const Parameters& par)
- : base_t_f<base_isea_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward)
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- isea_pt<CalculationType> out;
- isea_geo<CalculationType> in;
-
- in.lon = lp_lon;
- in.lat = lp_lat;
-
- isea_dgg<CalculationType> copy = this->m_proj_parm.dgg;
- out = isea_forward(&copy, &in);
-
- xy_x = out.x;
- xy_y = out.y;
- }
-
- static inline std::string get_name()
- {
- return "isea_spheroid";
- }
-
- };
-
- // Icosahedral Snyder Equal Area
- template <typename Parameters, typename T>
- inline void setup_isea(Parameters& par, par_isea<T>& proj_parm)
- {
- std::string opt;
-
- isea_grid_init(&proj_parm.dgg);
-
- proj_parm.dgg.output = ISEA_PLANE;
- /* proj_parm.dgg.radius = par.a; / * otherwise defaults to 1 */
- /* calling library will scale, I think */
-
- opt = pj_param(par.params, "sorient").s;
- if (! opt.empty()) {
- if (opt == std::string("isea")) {
- isea_orient_isea(&proj_parm.dgg);
- } else if (opt == std::string("pole")) {
- isea_orient_pole(&proj_parm.dgg);
- } else {
- BOOST_THROW_EXCEPTION( projection_exception(-34) );
- }
- }
-
- if (pj_param(par.params, "tazi").i) {
- proj_parm.dgg.o_az = pj_param(par.params, "razi").f;
- }
-
- if (pj_param(par.params, "tlon_0").i) {
- proj_parm.dgg.o_lon = pj_param(par.params, "rlon_0").f;
- }
-
- if (pj_param(par.params, "tlat_0").i) {
- proj_parm.dgg.o_lat = pj_param(par.params, "rlat_0").f;
- }
-
- if (pj_param(par.params, "taperture").i) {
- proj_parm.dgg.aperture = pj_param(par.params, "iaperture").i;
- }
-
- if (pj_param(par.params, "tresolution").i) {
- proj_parm.dgg.resolution = pj_param(par.params, "iresolution").i;
- }
-
- opt = pj_param(par.params, "smode").s;
- if (! opt.empty()) {
- if (opt == std::string("plane")) {
- proj_parm.dgg.output = ISEA_PLANE;
- } else if (opt == std::string("di")) {
- proj_parm.dgg.output = ISEA_Q2DI;
- }
- else if (opt == std::string("dd")) {
- proj_parm.dgg.output = ISEA_Q2DD;
- }
- else if (opt == std::string("hex")) {
- proj_parm.dgg.output = ISEA_HEX;
- }
- else {
- /* TODO verify error code. Possibly eliminate magic */
- BOOST_THROW_EXCEPTION( projection_exception(-34) );
- }
- }
-
- if (pj_param(par.params, "trescale").i) {
- proj_parm.dgg.radius = ISEA_SCALE;
- }
-
- if (pj_param(par.params, "tresolution").i) {
- proj_parm.dgg.resolution = pj_param(par.params, "iresolution").i;
- } else {
- proj_parm.dgg.resolution = 4;
- }
-
- if (pj_param(par.params, "taperture").i) {
- proj_parm.dgg.aperture = pj_param(par.params, "iaperture").i;
- } else {
- proj_parm.dgg.aperture = 3;
- }
- }
-
- }} // namespace detail::isea
- #endif // doxygen
-
- /*!
- \brief Icosahedral Snyder Equal Area projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Spheroid
- \par Projection parameters
- - orient (string)
- - azi: Azimuth (or Gamma) (degrees)
- - lon_0: Central meridian (degrees)
- - lat_0: Latitude of origin (degrees)
- - aperture (integer)
- - resolution (integer)
- - mode (string)
- - rescale
- \par Example
- \image html ex_isea.gif
- */
- template <typename CalculationType, typename Parameters>
- struct isea_spheroid : public detail::isea::base_isea_spheroid<CalculationType, Parameters>
- {
- inline isea_spheroid(const Parameters& par) : detail::isea::base_isea_spheroid<CalculationType, Parameters>(par)
- {
- detail::isea::setup_isea(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::isea, isea_spheroid, isea_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class isea_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<isea_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void isea_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("isea", new isea_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_ISEA_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/krovak.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/krovak.hpp
deleted file mode 100644
index 09c24772ed2..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/krovak.hpp
+++ /dev/null
@@ -1,360 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_KROVAK_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_KROVAK_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Purpose: Implementation of the krovak (Krovak) projection.
-// Definition: http://www.ihsenergy.com/epsg/guid7.html#1.4.3
-// Author: Thomas Flemming, tf@ttqv.com
-// Copyright (c) 2001, Thomas Flemming, tf@ttqv.com
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct krovak {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace krovak
- {
- template <typename T>
- struct par_krovak
- {
- T C_x;
- };
-
- /**
- NOTES: According to EPSG the full Krovak projection method should have
- the following parameters. Within PROJ.4 the azimuth, and pseudo
- standard parallel are hardcoded in the algorithm and can't be
- altered from outside. The others all have defaults to match the
- common usage with Krovak projection.
-
- lat_0 = latitude of centre of the projection
-
- lon_0 = longitude of centre of the projection
-
- ** = azimuth (true) of the centre line passing through the centre of the projection
-
- ** = latitude of pseudo standard parallel
-
- k = scale factor on the pseudo standard parallel
-
- x_0 = False Easting of the centre of the projection at the apex of the cone
-
- y_0 = False Northing of the centre of the projection at the apex of the cone
-
- **/
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_krovak_ellipsoid : public base_t_fi<base_krovak_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_krovak<CalculationType> m_proj_parm;
-
- inline base_krovak_ellipsoid(const Parameters& par)
- : base_t_fi<base_krovak_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- /* calculate xy from lat/lon */
-
- /* Constants, identical to inverse transform function */
- CalculationType s45, s90, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n;
- CalculationType gfi, u, fi0, deltav, s, d, eps, ro;
-
-
- s45 = 0.785398163397448; /* 45 DEG */
- s90 = 2 * s45;
- fi0 = this->m_par.phi0; /* Latitude of projection centre 49 DEG 30' */
-
- /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must
- be set to 1 here.
- Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128,
- e2=0.006674372230614;
- */
- a = 1; /* 6377397.155; */
- /* e2 = this->m_par.es;*/ /* 0.006674372230614; */
- e2 = 0.006674372230614;
- e = sqrt(e2);
-
- alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2));
-
- uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */
- u0 = asin(sin(fi0) / alfa);
- g = pow( (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2. );
-
- k = tan( u0 / 2. + s45) / pow (tan(fi0 / 2. + s45) , alfa) * g;
-
- k1 = this->m_par.k0;
- n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2));
- s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78 DEG 30'00" N */
- n = sin(s0);
- ro0 = k1 * n0 / tan(s0);
- ad = s90 - uq;
-
- /* Transformation */
-
- gfi =pow ( ((1. + e * sin(lp_lat)) /
- (1. - e * sin(lp_lat))) , (alfa * e / 2.));
-
- u= 2. * (atan(k * pow( tan(lp_lat / 2. + s45), alfa) / gfi)-s45);
-
- deltav = - lp_lon * alfa;
-
- s = asin(cos(ad) * sin(u) + sin(ad) * cos(u) * cos(deltav));
- d = asin(cos(u) * sin(deltav) / cos(s));
- eps = n * d;
- ro = ro0 * pow(tan(s0 / 2. + s45) , n) / pow(tan(s / 2. + s45) , n) ;
-
- /* x and y are reverted! */
- xy_y = ro * cos(eps) / a;
- xy_x = ro * sin(eps) / a;
-
- if( !pj_param(this->m_par.params, "tczech").i )
- {
- xy_y *= -1.0;
- xy_x *= -1.0;
- }
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- /* calculate lat/lon from xy */
-
- /* Constants, identisch wie in der Umkehrfunktion */
- CalculationType s45, s90, fi0, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n;
- CalculationType u, deltav, s, d, eps, ro, fi1, xy0;
- int ok;
-
- s45 = 0.785398163397448; /* 45 DEG */
- s90 = 2 * s45;
- fi0 = this->m_par.phi0; /* Latitude of projection centre 49 DEG 30' */
-
-
- /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must
- be set to 1 here.
- Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128,
- e2=0.006674372230614;
- */
- a = 1; /* 6377397.155; */
- /* e2 = this->m_par.es; */ /* 0.006674372230614; */
- e2 = 0.006674372230614;
- e = sqrt(e2);
-
- alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2));
- uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */
- u0 = asin(sin(fi0) / alfa);
- g = pow( (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2. );
-
- k = tan( u0 / 2. + s45) / pow (tan(fi0 / 2. + s45) , alfa) * g;
-
- k1 = this->m_par.k0;
- n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2));
- s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78 DEG 30'00" N */
- n = sin(s0);
- ro0 = k1 * n0 / tan(s0);
- ad = s90 - uq;
-
-
- /* Transformation */
- /* revert y, x*/
- xy0=xy_x;
- xy_x=xy_y;
- xy_y=xy0;
-
- if( !pj_param(this->m_par.params, "tczech").i )
- {
- xy_x *= -1.0;
- xy_y *= -1.0;
- }
-
- ro = sqrt(xy_x * xy_x + xy_y * xy_y);
- eps = atan2(xy_y, xy_x);
- d = eps / sin(s0);
- s = 2. * (atan( pow(ro0 / ro, 1. / n) * tan(s0 / 2. + s45)) - s45);
-
- u = asin(cos(ad) * sin(s) - sin(ad) * cos(s) * cos(d));
- deltav = asin(cos(s) * sin(d) / cos(u));
-
- lp_lon = this->m_par.lam0 - deltav / alfa;
-
- /* ITERATION FOR lp_lat */
- fi1 = u;
-
- ok = 0;
- do
- {
- lp_lat = 2. * ( atan( pow( k, -1. / alfa) *
- pow( tan(u / 2. + s45) , 1. / alfa) *
- pow( (1. + e * sin(fi1)) / (1. - e * sin(fi1)) , e / 2.)
- ) - s45);
-
- if (fabs(fi1 - lp_lat) < 0.000000000000001) ok=1;
- fi1 = lp_lat;
-
- }
- while (ok==0);
-
- lp_lon -= this->m_par.lam0;
- }
-
- static inline std::string get_name()
- {
- return "krovak_ellipsoid";
- }
-
- };
-
- // Krovak
- template <typename Parameters, typename T>
- inline void setup_krovak(Parameters& par, par_krovak<T>& proj_parm)
- {
- T ts;
- /* read some Parameters,
- * here Latitude Truescale */
-
- ts = pj_param(par.params, "rlat_ts").f;
- proj_parm.C_x = ts;
-
- /* we want Bessel as fixed ellipsoid */
- par.a = 6377397.155;
- par.e = sqrt(par.es = 0.006674372230614);
-
- /* if latitude of projection center is not set, use 49d30'N */
- if (!pj_param(par.params, "tlat_0").i)
- par.phi0 = 0.863937979737193;
-
- /* if center long is not set use 42d30'E of Ferro - 17d40' for Ferro */
- /* that will correspond to using longitudes relative to greenwich */
- /* as input and output, instead of lat/long relative to Ferro */
- if (!pj_param(par.params, "tlon_0").i)
- par.lam0 = 0.7417649320975901 - 0.308341501185665;
-
- /* if scale not set default to 0.9999 */
- if (!pj_param(par.params, "tk").i)
- par.k0 = 0.9999;
-
- /* always the same */
- }
-
- }} // namespace detail::krovak
- #endif // doxygen
-
- /*!
- \brief Krovak projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Ellipsoid
- \par Projection parameters
- - lat_ts: Latitude of true scale (degrees)
- - lat_0: Latitude of origin
- - lon_0: Central meridian
- - k: Scale factor on the pseudo standard parallel
- \par Example
- \image html ex_krovak.gif
- */
- template <typename CalculationType, typename Parameters>
- struct krovak_ellipsoid : public detail::krovak::base_krovak_ellipsoid<CalculationType, Parameters>
- {
- inline krovak_ellipsoid(const Parameters& par) : detail::krovak::base_krovak_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::krovak::setup_krovak(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::krovak, krovak_ellipsoid, krovak_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class krovak_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<krovak_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void krovak_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("krovak", new krovak_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_KROVAK_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/labrd.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/labrd.hpp
deleted file mode 100644
index 0a516893083..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/labrd.hpp
+++ /dev/null
@@ -1,269 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_LABRD_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_LABRD_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct labrd {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace labrd
- {
- static const double EPS = 1.e-10;
-
- template <typename T>
- struct par_labrd
- {
- T Az, kRg, p0s, A, C, Ca, Cb, Cc, Cd;
- int rot;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_labrd_ellipsoid : public base_t_fi<base_labrd_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_labrd<CalculationType> m_proj_parm;
-
- inline base_labrd_ellipsoid(const Parameters& par)
- : base_t_fi<base_labrd_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward)
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
-
- CalculationType V1, V2, ps, sinps, cosps, sinps2, cosps2, I1, I2, I3, I4, I5, I6,
- x2, y2, t;
-
- V1 = this->m_proj_parm.A * log( tan(FORTPI + .5 * lp_lat) );
- t = this->m_par.e * sin(lp_lat);
- V2 = .5 * this->m_par.e * this->m_proj_parm.A * log ((1. + t)/(1. - t));
- ps = 2. * (atan(exp(V1 - V2 + this->m_proj_parm.C)) - FORTPI);
- I1 = ps - this->m_proj_parm.p0s;
- cosps = cos(ps); cosps2 = cosps * cosps;
- sinps = sin(ps); sinps2 = sinps * sinps;
- I4 = this->m_proj_parm.A * cosps;
- I2 = .5 * this->m_proj_parm.A * I4 * sinps;
- I3 = I2 * this->m_proj_parm.A * this->m_proj_parm.A * (5. * cosps2 - sinps2) / 12.;
- I6 = I4 * this->m_proj_parm.A * this->m_proj_parm.A;
- I5 = I6 * (cosps2 - sinps2) / 6.;
- I6 *= this->m_proj_parm.A * this->m_proj_parm.A *
- (5. * cosps2 * cosps2 + sinps2 * (sinps2 - 18. * cosps2)) / 120.;
- t = lp_lon * lp_lon;
- xy_x = this->m_proj_parm.kRg * lp_lon * (I4 + t * (I5 + t * I6));
- xy_y = this->m_proj_parm.kRg * (I1 + t * (I2 + t * I3));
- x2 = xy_x * xy_x;
- y2 = xy_y * xy_y;
- V1 = 3. * xy_x * y2 - xy_x * x2;
- V2 = xy_y * y2 - 3. * x2 * xy_y;
- xy_x += this->m_proj_parm.Ca * V1 + this->m_proj_parm.Cb * V2;
- xy_y += this->m_proj_parm.Ca * V2 - this->m_proj_parm.Cb * V1;
- }
-
- // INVERSE(e_inverse) ellipsoid & spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
-
- CalculationType x2, y2, V1, V2, V3, V4, t, t2, ps, pe, tpe, s,
- I7, I8, I9, I10, I11, d, Re;
- int i;
-
- x2 = xy_x * xy_x;
- y2 = xy_y * xy_y;
- V1 = 3. * xy_x * y2 - xy_x * x2;
- V2 = xy_y * y2 - 3. * x2 * xy_y;
- V3 = xy_x * (5. * y2 * y2 + x2 * (-10. * y2 + x2 ));
- V4 = xy_y * (5. * x2 * x2 + y2 * (-10. * x2 + y2 ));
- xy_x += - this->m_proj_parm.Ca * V1 - this->m_proj_parm.Cb * V2 + this->m_proj_parm.Cc * V3 + this->m_proj_parm.Cd * V4;
- xy_y += this->m_proj_parm.Cb * V1 - this->m_proj_parm.Ca * V2 - this->m_proj_parm.Cd * V3 + this->m_proj_parm.Cc * V4;
- ps = this->m_proj_parm.p0s + xy_y / this->m_proj_parm.kRg;
- pe = ps + this->m_par.phi0 - this->m_proj_parm.p0s;
- for ( i = 20; i; --i) {
- V1 = this->m_proj_parm.A * log(tan(FORTPI + .5 * pe));
- tpe = this->m_par.e * sin(pe);
- V2 = .5 * this->m_par.e * this->m_proj_parm.A * log((1. + tpe)/(1. - tpe));
- t = ps - 2. * (atan(exp(V1 - V2 + this->m_proj_parm.C)) - FORTPI);
- pe += t;
- if (fabs(t) < EPS)
- break;
- }
- /*
- if (!i) {
- } else {
- }
- */
- t = this->m_par.e * sin(pe);
- t = 1. - t * t;
- Re = this->m_par.one_es / ( t * sqrt(t) );
- t = tan(ps);
- t2 = t * t;
- s = this->m_proj_parm.kRg * this->m_proj_parm.kRg;
- d = Re * this->m_par.k0 * this->m_proj_parm.kRg;
- I7 = t / (2. * d);
- I8 = t * (5. + 3. * t2) / (24. * d * s);
- d = cos(ps) * this->m_proj_parm.kRg * this->m_proj_parm.A;
- I9 = 1. / d;
- d *= s;
- I10 = (1. + 2. * t2) / (6. * d);
- I11 = (5. + t2 * (28. + 24. * t2)) / (120. * d * s);
- x2 = xy_x * xy_x;
- lp_lat = pe + x2 * (-I7 + I8 * x2);
- lp_lon = xy_x * (I9 + x2 * (-I10 + x2 * I11));
- }
-
- static inline std::string get_name()
- {
- return "labrd_ellipsoid";
- }
-
- };
-
- // Laborde
- template <typename Parameters, typename T>
- inline void setup_labrd(Parameters& par, par_labrd<T>& proj_parm)
- {
- static const T FORTPI = detail::FORTPI<T>();
-
- T Az, sinp, R, N, t;
-
- proj_parm.rot = pj_param(par.params, "bno_rot").i == 0;
- Az = pj_param(par.params, "razi").f;
- sinp = sin(par.phi0);
- t = 1. - par.es * sinp * sinp;
- N = 1. / sqrt(t);
- R = par.one_es * N / t;
- proj_parm.kRg = par.k0 * sqrt( N * R );
- proj_parm.p0s = atan( sqrt(R / N) * tan(par.phi0) );
- proj_parm.A = sinp / sin(proj_parm.p0s);
- t = par.e * sinp;
- proj_parm.C = .5 * par.e * proj_parm.A * log((1. + t)/(1. - t)) +
- - proj_parm.A * log( tan(FORTPI + .5 * par.phi0))
- + log( tan(FORTPI + .5 * proj_parm.p0s));
- t = Az + Az;
- proj_parm.Ca = (1. - cos(t)) * ( proj_parm.Cb = 1. / (12. * proj_parm.kRg * proj_parm.kRg) );
- proj_parm.Cb *= sin(t);
- proj_parm.Cc = 3. * (proj_parm.Ca * proj_parm.Ca - proj_parm.Cb * proj_parm.Cb);
- proj_parm.Cd = 6. * proj_parm.Ca * proj_parm.Cb;
- }
-
- }} // namespace detail::labrd
- #endif // doxygen
-
- /*!
- \brief Laborde projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - Special for Madagascar
- \par Projection parameters
- - no_rot: No rotation (boolean)
- - azi: Azimuth (or Gamma) (degrees)
- \par Example
- \image html ex_labrd.gif
- */
- template <typename CalculationType, typename Parameters>
- struct labrd_ellipsoid : public detail::labrd::base_labrd_ellipsoid<CalculationType, Parameters>
- {
- inline labrd_ellipsoid(const Parameters& par) : detail::labrd::base_labrd_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::labrd::setup_labrd(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::labrd, labrd_ellipsoid, labrd_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class labrd_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<labrd_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void labrd_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("labrd", new labrd_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_LABRD_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/laea.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/laea.hpp
deleted file mode 100644
index 757d2b7ff09..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/laea.hpp
+++ /dev/null
@@ -1,447 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_LAEA_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_LAEA_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/config.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_auth.hpp>
-#include <boost/geometry/srs/projections/impl/pj_qsfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct laea {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace laea
- {
- static const double EPS10 = 1.e-10;
- static const int NITER = 20;
- static const double CONV = 1.e-10;
- static const int N_POLE = 0;
- static const int S_POLE = 1;
- static const int EQUIT = 2;
- static const int OBLIQ = 3;
-
- template <typename T>
- struct par_laea
- {
- T sinb1;
- T cosb1;
- T xmf;
- T ymf;
- T mmf;
- T qp;
- T dd;
- T rq;
- T apa[APA_SIZE];
- int mode;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_laea_ellipsoid : public base_t_fi<base_laea_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_laea<CalculationType> m_proj_parm;
-
- inline base_laea_ellipsoid(const Parameters& par)
- : base_t_fi<base_laea_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType coslam, sinlam, sinphi, q, sinb=0.0, cosb=0.0, b=0.0;
-
- coslam = cos(lp_lon);
- sinlam = sin(lp_lon);
- sinphi = sin(lp_lat);
- q = pj_qsfn(sinphi, this->m_par.e, this->m_par.one_es);
- if (this->m_proj_parm.mode == OBLIQ || this->m_proj_parm.mode == EQUIT) {
- sinb = q / this->m_proj_parm.qp;
- cosb = sqrt(1. - sinb * sinb);
- }
- switch (this->m_proj_parm.mode) {
- case OBLIQ:
- b = 1. + this->m_proj_parm.sinb1 * sinb + this->m_proj_parm.cosb1 * cosb * coslam;
- break;
- case EQUIT:
- b = 1. + cosb * coslam;
- break;
- case N_POLE:
- b = HALFPI + lp_lat;
- q = this->m_proj_parm.qp - q;
- break;
- case S_POLE:
- b = lp_lat - HALFPI;
- q = this->m_proj_parm.qp + q;
- break;
- }
- if (fabs(b) < EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- switch (this->m_proj_parm.mode) {
- case OBLIQ:
- xy_y = this->m_proj_parm.ymf * ( b = sqrt(2. / b) )
- * (this->m_proj_parm.cosb1 * sinb - this->m_proj_parm.sinb1 * cosb * coslam);
- goto eqcon;
- break;
- case EQUIT:
- xy_y = (b = sqrt(2. / (1. + cosb * coslam))) * sinb * this->m_proj_parm.ymf;
- eqcon:
- xy_x = this->m_proj_parm.xmf * b * cosb * sinlam;
- break;
- case N_POLE:
- case S_POLE:
- if (q >= 0.) {
- xy_x = (b = sqrt(q)) * sinlam;
- xy_y = coslam * (this->m_proj_parm.mode == S_POLE ? b : -b);
- } else
- xy_x = xy_y = 0.;
- break;
- }
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType cCe, sCe, q, rho, ab=0.0;
-
- switch (this->m_proj_parm.mode) {
- case EQUIT:
- case OBLIQ:
- if ((rho = boost::math::hypot(xy_x /= this->m_proj_parm.dd, xy_y *= this->m_proj_parm.dd)) < EPS10) {
- lp_lon = 0.;
- lp_lat = this->m_par.phi0;
- return;
- }
- cCe = cos(sCe = 2. * asin(.5 * rho / this->m_proj_parm.rq));
- xy_x *= (sCe = sin(sCe));
- if (this->m_proj_parm.mode == OBLIQ) {
- q = this->m_proj_parm.qp * (ab = cCe * this->m_proj_parm.sinb1 + xy_y * sCe * this->m_proj_parm.cosb1 / rho);
- xy_y = rho * this->m_proj_parm.cosb1 * cCe - xy_y * this->m_proj_parm.sinb1 * sCe;
- } else {
- q = this->m_proj_parm.qp * (ab = xy_y * sCe / rho);
- xy_y = rho * cCe;
- }
- break;
- case N_POLE:
- xy_y = -xy_y;
- BOOST_FALLTHROUGH;
- case S_POLE:
- if (!(q = (xy_x * xy_x + xy_y * xy_y)) ) {
- lp_lon = 0.;
- lp_lat = this->m_par.phi0;
- return;
- }
- /*
- q = this->m_proj_parm.qp - q;
- */
- ab = 1. - q / this->m_proj_parm.qp;
- if (this->m_proj_parm.mode == S_POLE)
- ab = - ab;
- break;
- }
- lp_lon = atan2(xy_x, xy_y);
- lp_lat = pj_authlat(asin(ab), this->m_proj_parm.apa);
- }
-
- static inline std::string get_name()
- {
- return "laea_ellipsoid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_laea_spheroid : public base_t_fi<base_laea_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_laea<CalculationType> m_proj_parm;
-
- inline base_laea_spheroid(const Parameters& par)
- : base_t_fi<base_laea_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
-
- CalculationType coslam, cosphi, sinphi;
-
- sinphi = sin(lp_lat);
- cosphi = cos(lp_lat);
- coslam = cos(lp_lon);
- switch (this->m_proj_parm.mode) {
- case EQUIT:
- xy_y = 1. + cosphi * coslam;
- goto oblcon;
- case OBLIQ:
- xy_y = 1. + this->m_proj_parm.sinb1 * sinphi + this->m_proj_parm.cosb1 * cosphi * coslam;
- oblcon:
- if (xy_y <= EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_x = (xy_y = sqrt(2. / xy_y)) * cosphi * sin(lp_lon);
- xy_y *= this->m_proj_parm.mode == EQUIT ? sinphi :
- this->m_proj_parm.cosb1 * sinphi - this->m_proj_parm.sinb1 * cosphi * coslam;
- break;
- case N_POLE:
- coslam = -coslam;
- BOOST_FALLTHROUGH;
- case S_POLE:
- if (fabs(lp_lat + this->m_par.phi0) < EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_y = FORTPI - lp_lat * .5;
- xy_y = 2. * (this->m_proj_parm.mode == S_POLE ? cos(xy_y) : sin(xy_y));
- xy_x = xy_y * sin(lp_lon);
- xy_y *= coslam;
- break;
- }
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType cosz=0.0, rh, sinz=0.0;
-
- rh = boost::math::hypot(xy_x, xy_y);
- if ((lp_lat = rh * .5 ) > 1.)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- lp_lat = 2. * asin(lp_lat);
- if (this->m_proj_parm.mode == OBLIQ || this->m_proj_parm.mode == EQUIT) {
- sinz = sin(lp_lat);
- cosz = cos(lp_lat);
- }
- switch (this->m_proj_parm.mode) {
- case EQUIT:
- lp_lat = fabs(rh) <= EPS10 ? 0. : asin(xy_y * sinz / rh);
- xy_x *= sinz;
- xy_y = cosz * rh;
- break;
- case OBLIQ:
- lp_lat = fabs(rh) <= EPS10 ? this->m_par.phi0 :
- asin(cosz * this->m_proj_parm.sinb1 + xy_y * sinz * this->m_proj_parm.cosb1 / rh);
- xy_x *= sinz * this->m_proj_parm.cosb1;
- xy_y = (cosz - sin(lp_lat) * this->m_proj_parm.sinb1) * rh;
- break;
- case N_POLE:
- xy_y = -xy_y;
- lp_lat = HALFPI - lp_lat;
- break;
- case S_POLE:
- lp_lat -= HALFPI;
- break;
- }
- lp_lon = (xy_y == 0. && (this->m_proj_parm.mode == EQUIT || this->m_proj_parm.mode == OBLIQ)) ?
- 0. : atan2(xy_x, xy_y);
- }
-
- static inline std::string get_name()
- {
- return "laea_spheroid";
- }
-
- };
-
- // Lambert Azimuthal Equal Area
- template <typename Parameters, typename T>
- inline void setup_laea(Parameters& par, par_laea<T>& proj_parm)
- {
- static const T HALFPI = detail::HALFPI<T>();
-
- T t;
-
- if (fabs((t = fabs(par.phi0)) - HALFPI) < EPS10)
- proj_parm.mode = par.phi0 < 0. ? S_POLE : N_POLE;
- else if (fabs(t) < EPS10)
- proj_parm.mode = EQUIT;
- else
- proj_parm.mode = OBLIQ;
- if (par.es) {
- double sinphi;
-
- par.e = sqrt(par.es);
- proj_parm.qp = pj_qsfn(1., par.e, par.one_es);
- proj_parm.mmf = .5 / (1. - par.es);
- pj_authset(par.es, proj_parm.apa);
- switch (proj_parm.mode) {
- case N_POLE:
- case S_POLE:
- proj_parm.dd = 1.;
- break;
- case EQUIT:
- proj_parm.dd = 1. / (proj_parm.rq = sqrt(.5 * proj_parm.qp));
- proj_parm.xmf = 1.;
- proj_parm.ymf = .5 * proj_parm.qp;
- break;
- case OBLIQ:
- proj_parm.rq = sqrt(.5 * proj_parm.qp);
- sinphi = sin(par.phi0);
- proj_parm.sinb1 = pj_qsfn(sinphi, par.e, par.one_es) / proj_parm.qp;
- proj_parm.cosb1 = sqrt(1. - proj_parm.sinb1 * proj_parm.sinb1);
- proj_parm.dd = cos(par.phi0) / (sqrt(1. - par.es * sinphi * sinphi) *
- proj_parm.rq * proj_parm.cosb1);
- proj_parm.ymf = (proj_parm.xmf = proj_parm.rq) / proj_parm.dd;
- proj_parm.xmf *= proj_parm.dd;
- break;
- }
- } else {
- if (proj_parm.mode == OBLIQ) {
- proj_parm.sinb1 = sin(par.phi0);
- proj_parm.cosb1 = cos(par.phi0);
- }
- }
- }
-
- }} // namespace laea
- #endif // doxygen
-
- /*!
- \brief Lambert Azimuthal Equal Area projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_laea.gif
- */
- template <typename CalculationType, typename Parameters>
- struct laea_ellipsoid : public detail::laea::base_laea_ellipsoid<CalculationType, Parameters>
- {
- inline laea_ellipsoid(const Parameters& par) : detail::laea::base_laea_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::laea::setup_laea(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Lambert Azimuthal Equal Area projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_laea.gif
- */
- template <typename CalculationType, typename Parameters>
- struct laea_spheroid : public detail::laea::base_laea_spheroid<CalculationType, Parameters>
- {
- inline laea_spheroid(const Parameters& par) : detail::laea::base_laea_spheroid<CalculationType, Parameters>(par)
- {
- detail::laea::setup_laea(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::laea, laea_spheroid, laea_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class laea_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<laea_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<laea_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void laea_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("laea", new laea_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_LAEA_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/lagrng.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/lagrng.hpp
deleted file mode 100644
index 8ed5c1389e4..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/lagrng.hpp
+++ /dev/null
@@ -1,195 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_LAGRNG_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_LAGRNG_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct lagrng {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace lagrng
- {
-
- static const double TOL = 1e-10;
-
- template <typename T>
- struct par_lagrng
- {
- T hrw;
- T rw;
- T a1;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_lagrng_spheroid : public base_t_f<base_lagrng_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_lagrng<CalculationType> m_proj_parm;
-
- inline base_lagrng_spheroid(const Parameters& par)
- : base_t_f<base_lagrng_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType v, c;
-
- if (fabs(fabs(lp_lat) - HALFPI) < TOL) {
- xy_x = 0;
- xy_y = lp_lat < 0 ? -2. : 2.;
- } else {
- lp_lat = sin(lp_lat);
- v = this->m_proj_parm.a1 * pow((1. + lp_lat)/(1. - lp_lat), this->m_proj_parm.hrw);
- if ((c = 0.5 * (v + 1./v) + cos(lp_lon *= this->m_proj_parm.rw)) < TOL)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_x = 2. * sin(lp_lon) / c;
- xy_y = (v - 1./v) / c;
- }
- }
-
- static inline std::string get_name()
- {
- return "lagrng_spheroid";
- }
-
- };
-
- // Lagrange
- template <typename Parameters, typename T>
- inline void setup_lagrng(Parameters& par, par_lagrng<T>& proj_parm)
- {
- T phi1;
-
- if ((proj_parm.rw = pj_param(par.params, "dW").f) <= 0)
- BOOST_THROW_EXCEPTION( projection_exception(-27) );
- proj_parm.hrw = 0.5 * (proj_parm.rw = 1. / proj_parm.rw);
- phi1 = pj_param(par.params, "rlat_1").f;
- if (fabs(fabs(phi1 = sin(phi1)) - 1.) < TOL)
- BOOST_THROW_EXCEPTION( projection_exception(-22) );
- proj_parm.a1 = pow((1. - phi1)/(1. + phi1), proj_parm.hrw);
- par.es = 0.;
- }
-
- }} // namespace detail::lagrng
- #endif // doxygen
-
- /*!
- \brief Lagrange projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Projection parameters
- - W (real)
- - lat_1: Latitude of first standard parallel (degrees)
- \par Example
- \image html ex_lagrng.gif
- */
- template <typename CalculationType, typename Parameters>
- struct lagrng_spheroid : public detail::lagrng::base_lagrng_spheroid<CalculationType, Parameters>
- {
- inline lagrng_spheroid(const Parameters& par) : detail::lagrng::base_lagrng_spheroid<CalculationType, Parameters>(par)
- {
- detail::lagrng::setup_lagrng(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::lagrng, lagrng_spheroid, lagrng_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class lagrng_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<lagrng_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void lagrng_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("lagrng", new lagrng_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_LAGRNG_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/larr.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/larr.hpp
deleted file mode 100644
index 2b2735c0dd9..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/larr.hpp
+++ /dev/null
@@ -1,164 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_LARR_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_LARR_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct larr {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace larr
- {
-
- //static const double SIXTH = .16666666666666666;
-
- template <typename T>
- inline T SIXTH() { return .16666666666666666666666666666666; }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_larr_spheroid : public base_t_f<base_larr_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_larr_spheroid(const Parameters& par)
- : base_t_f<base_larr_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) sphere
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType SIXTH = larr::SIXTH<CalculationType>();
-
- xy_x = 0.5 * lp_lon * (1. + sqrt(cos(lp_lat)));
- xy_y = lp_lat / (cos(0.5 * lp_lat) * cos(SIXTH * lp_lon));
- }
-
- static inline std::string get_name()
- {
- return "larr_spheroid";
- }
-
- };
-
- // Larrivee
- template <typename Parameters>
- inline void setup_larr(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::larr
- #endif // doxygen
-
- /*!
- \brief Larrivee projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Example
- \image html ex_larr.gif
- */
- template <typename CalculationType, typename Parameters>
- struct larr_spheroid : public detail::larr::base_larr_spheroid<CalculationType, Parameters>
- {
- inline larr_spheroid(const Parameters& par) : detail::larr::base_larr_spheroid<CalculationType, Parameters>(par)
- {
- detail::larr::setup_larr(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::larr, larr_spheroid, larr_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class larr_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<larr_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void larr_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("larr", new larr_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_LARR_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/lask.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/lask.hpp
deleted file mode 100644
index 9ee1a95efef..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/lask.hpp
+++ /dev/null
@@ -1,173 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_LASK_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_LASK_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct lask {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace lask
- {
-
- static const double a10 = 0.975534;
- static const double a12 = -0.119161;
- static const double a32 = -0.0143059;
- static const double a14 = -0.0547009;
- static const double b01 = 1.00384;
- static const double b21 = 0.0802894;
- static const double b03 = 0.0998909;
- static const double b41 = 0.000199025;
- static const double b23 = -0.0285500;
- static const double b05 = -0.0491032;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_lask_spheroid : public base_t_f<base_lask_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_lask_spheroid(const Parameters& par)
- : base_t_f<base_lask_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) sphere
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType l2, p2;
-
- l2 = lp_lon * lp_lon;
- p2 = lp_lat * lp_lat;
- xy_x = lp_lon * (a10 + p2 * (a12 + l2 * a32 + p2 * a14));
- xy_y = lp_lat * (b01 + l2 * (b21 + p2 * b23 + l2 * b41) +
- p2 * (b03 + p2 * b05));
- }
-
- static inline std::string get_name()
- {
- return "lask_spheroid";
- }
-
- };
-
- // Laskowski
- template <typename Parameters>
- inline void setup_lask(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::lask
- #endif // doxygen
-
- /*!
- \brief Laskowski projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Example
- \image html ex_lask.gif
- */
- template <typename CalculationType, typename Parameters>
- struct lask_spheroid : public detail::lask::base_lask_spheroid<CalculationType, Parameters>
- {
- inline lask_spheroid(const Parameters& par) : detail::lask::base_lask_spheroid<CalculationType, Parameters>(par)
- {
- detail::lask::setup_lask(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::lask, lask_spheroid, lask_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class lask_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<lask_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void lask_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("lask", new lask_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_LASK_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/latlong.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/latlong.hpp
deleted file mode 100644
index e806381f2db..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/latlong.hpp
+++ /dev/null
@@ -1,292 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_LATLONG_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_LATLONG_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Purpose: Stub projection implementation for lat/long coordinates. We
-// don't actually change the coordinates, but we want proj=latlong
-// to act sort of like a projection.
-// Author: Frank Warmerdam, warmerdam@pobox.com
-// Copyright (c) 2000, Frank Warmerdam
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct lonlat {};
- struct latlon {};
- struct latlong {};
- struct longlat {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace latlong
- {
-
- /* very loosely based upon DMA code by Bradford W. Drew */
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_latlong_other : public base_t_fi<base_latlong_other<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_latlong_other(const Parameters& par)
- : base_t_fi<base_latlong_other<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(forward)
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = lp_lon / this->m_par.a;
- xy_y = lp_lat / this->m_par.a;
- }
-
- // INVERSE(inverse)
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = xy_y * this->m_par.a;
- lp_lon = xy_x * this->m_par.a;
- }
-
- static inline std::string get_name()
- {
- return "latlong_other";
- }
-
- };
-
- // Lat/long (Geodetic)
- template <typename Parameters>
- inline void setup_lonlat(Parameters& par)
- {
- par.is_latlong = 1;
- par.x0 = 0.0;
- par.y0 = 0.0;
- }
-
- // Lat/long (Geodetic alias)
- template <typename Parameters>
- inline void setup_latlon(Parameters& par)
- {
- par.is_latlong = 1;
- par.x0 = 0.0;
- par.y0 = 0.0;
- }
-
- // Lat/long (Geodetic alias)
- template <typename Parameters>
- inline void setup_latlong(Parameters& par)
- {
- par.is_latlong = 1;
- par.x0 = 0.0;
- par.y0 = 0.0;
- }
-
- // Lat/long (Geodetic alias)
- template <typename Parameters>
- inline void setup_longlat(Parameters& par)
- {
- par.is_latlong = 1;
- par.x0 = 0.0;
- par.y0 = 0.0;
- }
-
- }} // namespace detail::latlong
- #endif // doxygen
-
- /*!
- \brief Lat/long (Geodetic) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Example
- \image html ex_lonlat.gif
- */
- template <typename CalculationType, typename Parameters>
- struct lonlat_other : public detail::latlong::base_latlong_other<CalculationType, Parameters>
- {
- inline lonlat_other(const Parameters& par) : detail::latlong::base_latlong_other<CalculationType, Parameters>(par)
- {
- detail::latlong::setup_lonlat(this->m_par);
- }
- };
-
- /*!
- \brief Lat/long (Geodetic alias) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Example
- \image html ex_latlon.gif
- */
- template <typename CalculationType, typename Parameters>
- struct latlon_other : public detail::latlong::base_latlong_other<CalculationType, Parameters>
- {
- inline latlon_other(const Parameters& par) : detail::latlong::base_latlong_other<CalculationType, Parameters>(par)
- {
- detail::latlong::setup_latlon(this->m_par);
- }
- };
-
- /*!
- \brief Lat/long (Geodetic alias) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Example
- \image html ex_latlong.gif
- */
- template <typename CalculationType, typename Parameters>
- struct latlong_other : public detail::latlong::base_latlong_other<CalculationType, Parameters>
- {
- inline latlong_other(const Parameters& par) : detail::latlong::base_latlong_other<CalculationType, Parameters>(par)
- {
- detail::latlong::setup_latlong(this->m_par);
- }
- };
-
- /*!
- \brief Lat/long (Geodetic alias) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Example
- \image html ex_longlat.gif
- */
- template <typename CalculationType, typename Parameters>
- struct longlat_other : public detail::latlong::base_latlong_other<CalculationType, Parameters>
- {
- inline longlat_other(const Parameters& par) : detail::latlong::base_latlong_other<CalculationType, Parameters>(par)
- {
- detail::latlong::setup_longlat(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::lonlat, lonlat_other, lonlat_other)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::latlon, latlon_other, latlon_other)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::latlong, latlong_other, latlong_other)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::longlat, longlat_other, longlat_other)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class lonlat_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<lonlat_other<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class latlon_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<latlon_other<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class latlong_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<latlong_other<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class longlat_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<longlat_other<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void latlong_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("lonlat", new lonlat_entry<CalculationType, Parameters>);
- factory.add_to_factory("latlon", new latlon_entry<CalculationType, Parameters>);
- factory.add_to_factory("latlong", new latlong_entry<CalculationType, Parameters>);
- factory.add_to_factory("longlat", new longlat_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_LATLONG_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/lcc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/lcc.hpp
deleted file mode 100644
index 609c08491c9..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/lcc.hpp
+++ /dev/null
@@ -1,282 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_LCC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_LCC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_msfn.hpp>
-#include <boost/geometry/srs/projections/impl/pj_phi2.hpp>
-#include <boost/geometry/srs/projections/impl/pj_tsfn.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct lcc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace lcc
- {
- static const double EPS10 = 1.e-10;
-
- template <typename T>
- struct par_lcc
- {
- T phi1;
- T phi2;
- T n;
- T rho0;
- T c;
- int ellips;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_lcc_ellipsoid : public base_t_fi<base_lcc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_lcc<CalculationType> m_proj_parm;
-
- inline base_lcc_ellipsoid(const Parameters& par)
- : base_t_fi<base_lcc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid & spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType rho;
- if (fabs(fabs(lp_lat) - HALFPI) < EPS10) {
- if ((lp_lat * this->m_proj_parm.n) <= 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- rho = 0.;
- } else
- rho = this->m_proj_parm.c * (this->m_proj_parm.ellips ? pow(pj_tsfn(lp_lat, sin(lp_lat),
- this->m_par.e), this->m_proj_parm.n) : pow(tan(FORTPI + .5 * lp_lat), -this->m_proj_parm.n));
- xy_x = this->m_par.k0 * (rho * sin( lp_lon *= this->m_proj_parm.n ) );
- xy_y = this->m_par.k0 * (this->m_proj_parm.rho0 - rho * cos(lp_lon) );
- }
-
- // INVERSE(e_inverse) ellipsoid & spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType rho;
- xy_x /= this->m_par.k0;
- xy_y /= this->m_par.k0;
- if( (rho = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.rho0 - xy_y)) != 0.0) {
- if (this->m_proj_parm.n < 0.) {
- rho = -rho;
- xy_x = -xy_x;
- xy_y = -xy_y;
- }
- if (this->m_proj_parm.ellips) {
- if ((lp_lat = pj_phi2(pow(rho / this->m_proj_parm.c, 1./this->m_proj_parm.n), this->m_par.e))
- == HUGE_VAL)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- } else
- lp_lat = 2. * atan(pow(this->m_proj_parm.c / rho, 1./this->m_proj_parm.n)) - HALFPI;
- lp_lon = atan2(xy_x, xy_y) / this->m_proj_parm.n;
- } else {
- lp_lon = 0.;
- lp_lat = this->m_proj_parm.n > 0. ? HALFPI : -HALFPI;
- }
- }
-
- // SPECIAL(fac)
- #ifdef SPECIAL_FACTORS_NOT_CONVERTED
- inline void fac(Geographic lp, Factors &fac) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType rho;
- if (fabs(fabs(lp_lat) - HALFPI) < EPS10) {
- if ((lp_lat * this->m_proj_parm.n) <= 0.) return;
- rho = 0.;
- } else
- rho = this->m_proj_parm.c * (this->m_proj_parm.ellips ? pow(pj_tsfn(lp_lat, sin(lp_lat),
- this->m_par.e), this->m_proj_parm.n) : pow(tan(FORTPI + .5 * lp_lat), -this->m_proj_parm.n));
- this->m_fac.code |= IS_ANAL_HK + IS_ANAL_CONV;
- this->m_fac.k = this->m_fac.h = this->m_par.k0 * this->m_proj_parm.n * rho /
- pj_msfn(sin(lp_lat), cos(lp_lat), this->m_par.es);
- this->m_fac.conv = - this->m_proj_parm.n * lp_lon;
- }
- #endif
-
- static inline std::string get_name()
- {
- return "lcc_ellipsoid";
- }
-
- };
-
- // Lambert Conformal Conic
- template <typename Parameters, typename T>
- inline void setup_lcc(Parameters& par, par_lcc<T>& proj_parm)
- {
- static const T FORTPI = detail::FORTPI<T>();
- static const T HALFPI = detail::HALFPI<T>();
-
- T cosphi, sinphi;
- int secant;
-
- proj_parm.phi1 = pj_param(par.params, "rlat_1").f;
- if (pj_param(par.params, "tlat_2").i)
- proj_parm.phi2 = pj_param(par.params, "rlat_2").f;
- else {
- proj_parm.phi2 = proj_parm.phi1;
- if (!pj_param(par.params, "tlat_0").i)
- par.phi0 = proj_parm.phi1;
- }
- if (fabs(proj_parm.phi1 + proj_parm.phi2) < EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-21) );
- proj_parm.n = sinphi = sin(proj_parm.phi1);
- cosphi = cos(proj_parm.phi1);
- secant = fabs(proj_parm.phi1 - proj_parm.phi2) >= EPS10;
- if( (proj_parm.ellips = (par.es != 0.)) ) {
- double ml1, m1;
-
- par.e = sqrt(par.es);
- m1 = pj_msfn(sinphi, cosphi, par.es);
- ml1 = pj_tsfn(proj_parm.phi1, sinphi, par.e);
- if (secant) { /* secant cone */
- proj_parm.n = log(m1 /
- pj_msfn(sinphi = sin(proj_parm.phi2), cos(proj_parm.phi2), par.es));
- proj_parm.n /= log(ml1 / pj_tsfn(proj_parm.phi2, sinphi, par.e));
- }
- proj_parm.c = (proj_parm.rho0 = m1 * pow(ml1, -proj_parm.n) / proj_parm.n);
- proj_parm.rho0 *= (fabs(fabs(par.phi0) - HALFPI) < EPS10) ? 0. :
- pow(pj_tsfn(par.phi0, sin(par.phi0), par.e), proj_parm.n);
- } else {
- if (secant)
- proj_parm.n = log(cosphi / cos(proj_parm.phi2)) /
- log(tan(FORTPI + .5 * proj_parm.phi2) /
- tan(FORTPI + .5 * proj_parm.phi1));
- proj_parm.c = cosphi * pow(tan(FORTPI + .5 * proj_parm.phi1), proj_parm.n) / proj_parm.n;
- proj_parm.rho0 = (fabs(fabs(par.phi0) - HALFPI) < EPS10) ? 0. :
- proj_parm.c * pow(tan(FORTPI + .5 * par.phi0), -proj_parm.n);
- }
- }
-
- }} // namespace detail::lcc
- #endif // doxygen
-
- /*!
- \brief Lambert Conformal Conic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel (degrees)
- - lat_2: Latitude of second standard parallel (degrees)
- - lat_0: Latitude of origin
- \par Example
- \image html ex_lcc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct lcc_ellipsoid : public detail::lcc::base_lcc_ellipsoid<CalculationType, Parameters>
- {
- inline lcc_ellipsoid(const Parameters& par) : detail::lcc::base_lcc_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::lcc::setup_lcc(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::lcc, lcc_ellipsoid, lcc_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class lcc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<lcc_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void lcc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("lcc", new lcc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_LCC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/lcca.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/lcca.hpp
deleted file mode 100644
index a1a2069d8f1..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/lcca.hpp
+++ /dev/null
@@ -1,231 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_LCCA_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_LCCA_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_mlfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct lcca {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace lcca
- {
-
- static const int MAX_ITER = 10;
- static const double DEL_TOL = 1e-12;
-
- template <typename T>
- struct par_lcca
- {
- T en[EN_SIZE];
- T r0, l, M0;
- T C;
- };
-
- template <typename T> /* func to compute dr */
- inline T fS(T const& S, T const& C)
- {
- return(S * ( 1. + S * S * C));
- }
-
- template <typename T> /* deriv of fs */
- inline T fSp(T const& S, T const& C)
- {
- return(1. + 3.* S * S * C);
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_lcca_ellipsoid : public base_t_fi<base_lcca_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_lcca<CalculationType> m_proj_parm;
-
- inline base_lcca_ellipsoid(const Parameters& par)
- : base_t_fi<base_lcca_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType S, r, dr;
-
- S = pj_mlfn(lp_lat, sin(lp_lat), cos(lp_lat), this->m_proj_parm.en) - this->m_proj_parm.M0;
- dr = fS(S, this->m_proj_parm.C);
- r = this->m_proj_parm.r0 - dr;
- xy_x = this->m_par.k0 * (r * sin( lp_lon *= this->m_proj_parm.l ) );
- xy_y = this->m_par.k0 * (this->m_proj_parm.r0 - r * cos(lp_lon) );
- }
-
- // INVERSE(e_inverse) ellipsoid & spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType theta, dr, S, dif;
- int i;
-
- xy_x /= this->m_par.k0;
- xy_y /= this->m_par.k0;
- theta = atan2(xy_x , this->m_proj_parm.r0 - xy_y);
- dr = xy_y - xy_x * tan(0.5 * theta);
- lp_lon = theta / this->m_proj_parm.l;
- S = dr;
- for (i = MAX_ITER; i ; --i) {
- S -= (dif = (fS(S, this->m_proj_parm.C) - dr) / fSp(S, this->m_proj_parm.C));
- if (fabs(dif) < DEL_TOL) break;
- }
- if (!i)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- lp_lat = pj_inv_mlfn(S + this->m_proj_parm.M0, this->m_par.es, this->m_proj_parm.en);
- }
-
- static inline std::string get_name()
- {
- return "lcca_ellipsoid";
- }
-
- };
-
- // Lambert Conformal Conic Alternative
- template <typename Parameters, typename T>
- inline void setup_lcca(Parameters& par, par_lcca<T>& proj_parm)
- {
- T s2p0, N0, R0, tan0, tan20;
-
- if (!pj_enfn(par.es, proj_parm.en))
- BOOST_THROW_EXCEPTION( projection_exception(0) );
- if (!pj_param(par.params, "tlat_0").i)
- BOOST_THROW_EXCEPTION( projection_exception(50) );
- if (par.phi0 == 0.)
- BOOST_THROW_EXCEPTION( projection_exception(51) );
- proj_parm.l = sin(par.phi0);
- proj_parm.M0 = pj_mlfn(par.phi0, proj_parm.l, cos(par.phi0), proj_parm.en);
- s2p0 = proj_parm.l * proj_parm.l;
- R0 = 1. / (1. - par.es * s2p0);
- N0 = sqrt(R0);
- R0 *= par.one_es * N0;
- tan0 = tan(par.phi0);
- tan20 = tan0 * tan0;
- proj_parm.r0 = N0 / tan0;
- proj_parm.C = 1. / (6. * R0 * N0);
- boost::ignore_unused(tan20);
- }
-
- }} // namespace detail::lcca
- #endif // doxygen
-
- /*!
- \brief Lambert Conformal Conic Alternative projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_0: Latitude of origin
- \par Example
- \image html ex_lcca.gif
- */
- template <typename CalculationType, typename Parameters>
- struct lcca_ellipsoid : public detail::lcca::base_lcca_ellipsoid<CalculationType, Parameters>
- {
- inline lcca_ellipsoid(const Parameters& par) : detail::lcca::base_lcca_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::lcca::setup_lcca(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::lcca, lcca_ellipsoid, lcca_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class lcca_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<lcca_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void lcca_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("lcca", new lcca_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_LCCA_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/loxim.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/loxim.hpp
deleted file mode 100644
index f88eb4ca6ed..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/loxim.hpp
+++ /dev/null
@@ -1,205 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_LOXIM_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_LOXIM_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct loxim {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace loxim
- {
- static const double EPS = 1e-8;
-
- template <typename T>
- struct par_loxim
- {
- T phi1;
- T cosphi1;
- T tanphi1;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_loxim_spheroid : public base_t_fi<base_loxim_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_loxim<CalculationType> m_proj_parm;
-
- inline base_loxim_spheroid(const Parameters& par)
- : base_t_fi<base_loxim_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- xy_y = lp_lat - this->m_proj_parm.phi1;
- if (fabs(xy_y) < EPS)
- xy_x = lp_lon * this->m_proj_parm.cosphi1;
- else {
- xy_x = FORTPI + 0.5 * lp_lat;
- if (fabs(xy_x) < EPS || fabs(fabs(xy_x) - HALFPI) < EPS)
- xy_x = 0.;
- else
- xy_x = lp_lon * xy_y / log( tan(xy_x) / this->m_proj_parm.tanphi1 );
- }
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- lp_lat = xy_y + this->m_proj_parm.phi1;
- if (fabs(xy_y) < EPS)
- lp_lon = xy_x / this->m_proj_parm.cosphi1;
- else
- if (fabs( lp_lon = FORTPI + 0.5 * lp_lat ) < EPS ||
- fabs(fabs(lp_lon) - HALFPI) < EPS)
- lp_lon = 0.;
- else
- lp_lon = xy_x * log( tan(lp_lon) / this->m_proj_parm.tanphi1 ) / xy_y ;
- }
-
- static inline std::string get_name()
- {
- return "loxim_spheroid";
- }
-
- };
-
- // Loximuthal
- template <typename Parameters, typename T>
- inline void setup_loxim(Parameters& par, par_loxim<T>& proj_parm)
- {
- static const T FORTPI = detail::FORTPI<T>();
-
- proj_parm.phi1 = pj_param(par.params, "rlat_1").f;
- if ((proj_parm.cosphi1 = cos(proj_parm.phi1)) < EPS)
- BOOST_THROW_EXCEPTION( projection_exception(-22) );
- proj_parm.tanphi1 = tan(FORTPI + 0.5 * proj_parm.phi1);
- par.es = 0.;
- }
-
- }} // namespace detail::loxim
- #endif // doxygen
-
- /*!
- \brief Loximuthal projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel (degrees)
- \par Example
- \image html ex_loxim.gif
- */
- template <typename CalculationType, typename Parameters>
- struct loxim_spheroid : public detail::loxim::base_loxim_spheroid<CalculationType, Parameters>
- {
- inline loxim_spheroid(const Parameters& par) : detail::loxim::base_loxim_spheroid<CalculationType, Parameters>(par)
- {
- detail::loxim::setup_loxim(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::loxim, loxim_spheroid, loxim_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class loxim_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<loxim_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void loxim_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("loxim", new loxim_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_LOXIM_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/lsat.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/lsat.hpp
deleted file mode 100644
index d305339d5b6..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/lsat.hpp
+++ /dev/null
@@ -1,341 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_LSAT_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_LSAT_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct lsat {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace lsat
- {
- static const double TOL = 1e-7;
- //static const double PI_HALFPI = 4.71238898038468985766;
- //static const double TWOPI_HALFPI = 7.85398163397448309610;
-
- template <typename T>
- struct par_lsat
- {
- T a2, a4, b, c1, c3;
- T q, t, u, w, p22, sa, ca, xj, rlm, rlm2;
- };
-
- /* based upon Snyder and Linck, USGS-NMD */
- template <typename T>
- inline void
- seraz0(T lam, T const& mult, par_lsat<T>& proj_parm)
- {
- T sdsq, h, s, fc, sd, sq, d__1;
-
- lam *= geometry::math::d2r<T>();
- sd = sin(lam);
- sdsq = sd * sd;
- s = proj_parm.p22 * proj_parm.sa * cos(lam) * sqrt((1. + proj_parm.t * sdsq) / ((
- 1. + proj_parm.w * sdsq) * (1. + proj_parm.q * sdsq)));
- d__1 = 1. + proj_parm.q * sdsq;
- h = sqrt((1. + proj_parm.q * sdsq) / (1. + proj_parm.w * sdsq)) * ((1. +
- proj_parm.w * sdsq) / (d__1 * d__1) - proj_parm.p22 * proj_parm.ca);
- sq = sqrt(proj_parm.xj * proj_parm.xj + s * s);
- proj_parm.b += fc = mult * (h * proj_parm.xj - s * s) / sq;
- proj_parm.a2 += fc * cos(lam + lam);
- proj_parm.a4 += fc * cos(lam * 4.);
- fc = mult * s * (h + proj_parm.xj) / sq;
- proj_parm.c1 += fc * cos(lam);
- proj_parm.c3 += fc * cos(lam * 3.);
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_lsat_ellipsoid : public base_t_fi<base_lsat_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_lsat<CalculationType> m_proj_parm;
-
- inline base_lsat_ellipsoid(const Parameters& par)
- : base_t_fi<base_lsat_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType PI_HALFPI = detail::PI_HALFPI<CalculationType>();
- static const CalculationType TWOPI_HALFPI = detail::TWOPI_HALFPI<CalculationType>();
-
- int l, nn;
- CalculationType lamt, xlam, sdsq, c, d, s, lamdp, phidp, lampp, tanph,
- lamtp, cl, sd, sp, fac, sav, tanphi;
-
- if (lp_lat > HALFPI)
- lp_lat = HALFPI;
- else if (lp_lat < -HALFPI)
- lp_lat = -HALFPI;
- lampp = lp_lat >= 0. ? HALFPI : PI_HALFPI;
- tanphi = tan(lp_lat);
- for (nn = 0;;) {
- sav = lampp;
- lamtp = lp_lon + this->m_proj_parm.p22 * lampp;
- cl = cos(lamtp);
- if (fabs(cl) < TOL)
- lamtp -= TOL;
- fac = lampp - sin(lampp) * (cl < 0. ? -HALFPI : HALFPI);
- for (l = 50; l; --l) {
- lamt = lp_lon + this->m_proj_parm.p22 * sav;
- if (fabs(c = cos(lamt)) < TOL)
- lamt -= TOL;
- xlam = (this->m_par.one_es * tanphi * this->m_proj_parm.sa + sin(lamt) * this->m_proj_parm.ca) / c;
- lamdp = atan(xlam) + fac;
- if (fabs(fabs(sav) - fabs(lamdp)) < TOL)
- break;
- sav = lamdp;
- }
- if (!l || ++nn >= 3 || (lamdp > this->m_proj_parm.rlm && lamdp < this->m_proj_parm.rlm2))
- break;
- if (lamdp <= this->m_proj_parm.rlm)
- lampp = TWOPI_HALFPI;
- else if (lamdp >= this->m_proj_parm.rlm2)
- lampp = HALFPI;
- }
- if (l) {
- sp = sin(lp_lat);
- phidp = aasin((this->m_par.one_es * this->m_proj_parm.ca * sp - this->m_proj_parm.sa * cos(lp_lat) *
- sin(lamt)) / sqrt(1. - this->m_par.es * sp * sp));
- tanph = log(tan(FORTPI + .5 * phidp));
- sd = sin(lamdp);
- sdsq = sd * sd;
- s = this->m_proj_parm.p22 * this->m_proj_parm.sa * cos(lamdp) * sqrt((1. + this->m_proj_parm.t * sdsq)
- / ((1. + this->m_proj_parm.w * sdsq) * (1. + this->m_proj_parm.q * sdsq)));
- d = sqrt(this->m_proj_parm.xj * this->m_proj_parm.xj + s * s);
- xy_x = this->m_proj_parm.b * lamdp + this->m_proj_parm.a2 * sin(2. * lamdp) + this->m_proj_parm.a4 *
- sin(lamdp * 4.) - tanph * s / d;
- xy_y = this->m_proj_parm.c1 * sd + this->m_proj_parm.c3 * sin(lamdp * 3.) + tanph * this->m_proj_parm.xj / d;
- } else
- xy_x = xy_y = HUGE_VAL;
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- int nn;
- CalculationType lamt, sdsq, s, lamdp, phidp, sppsq, dd, sd, sl, fac, scl, sav, spp;
-
- lamdp = xy_x / this->m_proj_parm.b;
- nn = 50;
- do {
- sav = lamdp;
- sd = sin(lamdp);
- sdsq = sd * sd;
- s = this->m_proj_parm.p22 * this->m_proj_parm.sa * cos(lamdp) * sqrt((1. + this->m_proj_parm.t * sdsq)
- / ((1. + this->m_proj_parm.w * sdsq) * (1. + this->m_proj_parm.q * sdsq)));
- lamdp = xy_x + xy_y * s / this->m_proj_parm.xj - this->m_proj_parm.a2 * sin(
- 2. * lamdp) - this->m_proj_parm.a4 * sin(lamdp * 4.) - s / this->m_proj_parm.xj * (
- this->m_proj_parm.c1 * sin(lamdp) + this->m_proj_parm.c3 * sin(lamdp * 3.));
- lamdp /= this->m_proj_parm.b;
- } while (fabs(lamdp - sav) >= TOL && --nn);
- sl = sin(lamdp);
- fac = exp(sqrt(1. + s * s / this->m_proj_parm.xj / this->m_proj_parm.xj) * (xy_y -
- this->m_proj_parm.c1 * sl - this->m_proj_parm.c3 * sin(lamdp * 3.)));
- phidp = 2. * (atan(fac) - FORTPI);
- dd = sl * sl;
- if (fabs(cos(lamdp)) < TOL)
- lamdp -= TOL;
- spp = sin(phidp);
- sppsq = spp * spp;
- lamt = atan(((1. - sppsq * this->m_par.rone_es) * tan(lamdp) *
- this->m_proj_parm.ca - spp * this->m_proj_parm.sa * sqrt((1. + this->m_proj_parm.q * dd) * (
- 1. - sppsq) - sppsq * this->m_proj_parm.u) / cos(lamdp)) / (1. - sppsq
- * (1. + this->m_proj_parm.u)));
- sl = lamt >= 0. ? 1. : -1.;
- scl = cos(lamdp) >= 0. ? 1. : -1;
- lamt -= HALFPI * (1. - scl) * sl;
- lp_lon = lamt - this->m_proj_parm.p22 * lamdp;
- if (fabs(this->m_proj_parm.sa) < TOL)
- lp_lat = aasin(spp / sqrt(this->m_par.one_es * this->m_par.one_es + this->m_par.es * sppsq));
- else
- lp_lat = atan((tan(lamdp) * cos(lamt) - this->m_proj_parm.ca * sin(lamt)) /
- (this->m_par.one_es * this->m_proj_parm.sa));
- }
-
- static inline std::string get_name()
- {
- return "lsat_ellipsoid";
- }
-
- };
-
- // Space oblique for LANDSAT
- template <typename Parameters, typename T>
- inline void setup_lsat(Parameters& par, par_lsat<T>& proj_parm)
- {
- int land, path;
- T lam, alf, esc, ess;
-
- land = pj_param(par.params, "ilsat").i;
- if (land <= 0 || land > 5)
- BOOST_THROW_EXCEPTION( projection_exception(-28) );
- path = pj_param(par.params, "ipath").i;
- if (path <= 0 || path > (land <= 3 ? 251 : 233))
- BOOST_THROW_EXCEPTION( projection_exception(-29) );
- if (land <= 3) {
- par.lam0 = geometry::math::d2r<T>() * 128.87 - geometry::math::two_pi<T>() / 251. * path;
- proj_parm.p22 = 103.2669323;
- alf = geometry::math::d2r<T>() * 99.092;
- } else {
- par.lam0 = geometry::math::d2r<T>() * 129.3 - geometry::math::two_pi<T>() / 233. * path;
- proj_parm.p22 = 98.8841202;
- alf = geometry::math::d2r<T>() * 98.2;
- }
- proj_parm.p22 /= 1440.;
- proj_parm.sa = sin(alf);
- proj_parm.ca = cos(alf);
- if (fabs(proj_parm.ca) < 1e-9)
- proj_parm.ca = 1e-9;
- esc = par.es * proj_parm.ca * proj_parm.ca;
- ess = par.es * proj_parm.sa * proj_parm.sa;
- proj_parm.w = (1. - esc) * par.rone_es;
- proj_parm.w = proj_parm.w * proj_parm.w - 1.;
- proj_parm.q = ess * par.rone_es;
- proj_parm.t = ess * (2. - par.es) * par.rone_es * par.rone_es;
- proj_parm.u = esc * par.rone_es;
- proj_parm.xj = par.one_es * par.one_es * par.one_es;
- proj_parm.rlm = geometry::math::pi<T>() * (1. / 248. + .5161290322580645);
- proj_parm.rlm2 = proj_parm.rlm + geometry::math::two_pi<T>();
- proj_parm.a2 = proj_parm.a4 = proj_parm.b = proj_parm.c1 = proj_parm.c3 = 0.;
- seraz0(0., 1., proj_parm);
- for (lam = 9.; lam <= 81.0001; lam += 18.)
- seraz0(lam, 4., proj_parm);
- for (lam = 18; lam <= 72.0001; lam += 18.)
- seraz0(lam, 2., proj_parm);
- seraz0(90., 1., proj_parm);
- proj_parm.a2 /= 30.;
- proj_parm.a4 /= 60.;
- proj_parm.b /= 30.;
- proj_parm.c1 /= 15.;
- proj_parm.c3 /= 45.;
- }
-
- }} // namespace detail::lsat
- #endif // doxygen
-
- /*!
- \brief Space oblique for LANDSAT projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lsat (integer)
- - path (integer)
- \par Example
- \image html ex_lsat.gif
- */
- template <typename CalculationType, typename Parameters>
- struct lsat_ellipsoid : public detail::lsat::base_lsat_ellipsoid<CalculationType, Parameters>
- {
- inline lsat_ellipsoid(const Parameters& par) : detail::lsat::base_lsat_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::lsat::setup_lsat(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::lsat, lsat_ellipsoid, lsat_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class lsat_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<lsat_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void lsat_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("lsat", new lsat_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_LSAT_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/mbt_fps.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/mbt_fps.hpp
deleted file mode 100644
index 3823725f1ce..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/mbt_fps.hpp
+++ /dev/null
@@ -1,194 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_MBT_FPS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_MBT_FPS_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct mbt_fps {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace mbt_fps
- {
-
- static const int MAX_ITER = 10;
- static const double LOOP_TOL = 1e-7;
- static const double C1 = 0.45503;
- static const double C2 = 1.36509;
- static const double C3 = 1.41546;
- static const double C_x = 0.22248;
- static const double C_y = 1.44492;
- //static const double C1_2 = 0.33333333333333333333333333;
-
- template <typename T>
- inline T C1_2() { return detail::THIRD<T>(); }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_mbt_fps_spheroid : public base_t_fi<base_mbt_fps_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_mbt_fps_spheroid(const Parameters& par)
- : base_t_fi<base_mbt_fps_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType C1_2 = mbt_fps::C1_2<CalculationType>();
-
- CalculationType k, V, t;
- int i;
-
- k = C3 * sin(lp_lat);
- for (i = MAX_ITER; i ; --i) {
- t = lp_lat / C2;
- lp_lat -= V = (C1 * sin(t) + sin(lp_lat) - k) /
- (C1_2 * cos(t) + cos(lp_lat));
- if (fabs(V) < LOOP_TOL)
- break;
- }
- t = lp_lat / C2;
- xy_x = C_x * lp_lon * (1. + 3. * cos(lp_lat)/cos(t) );
- xy_y = C_y * sin(t);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType t;
-
- lp_lat = C2 * (t = aasin(xy_y / C_y));
- lp_lon = xy_x / (C_x * (1. + 3. * cos(lp_lat)/cos(t)));
- lp_lat = aasin((C1 * sin(t) + sin(lp_lat)) / C3);
- }
-
- static inline std::string get_name()
- {
- return "mbt_fps_spheroid";
- }
-
- };
-
- // McBryde-Thomas Flat-Pole Sine (No. 2)
- template <typename Parameters>
- inline void setup_mbt_fps(Parameters& par)
- {
- par.es = 0;
- }
-
- }} // namespace detail::mbt_fps
- #endif // doxygen
-
- /*!
- \brief McBryde-Thomas Flat-Pole Sine (No. 2) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- \par Example
- \image html ex_mbt_fps.gif
- */
- template <typename CalculationType, typename Parameters>
- struct mbt_fps_spheroid : public detail::mbt_fps::base_mbt_fps_spheroid<CalculationType, Parameters>
- {
- inline mbt_fps_spheroid(const Parameters& par) : detail::mbt_fps::base_mbt_fps_spheroid<CalculationType, Parameters>(par)
- {
- detail::mbt_fps::setup_mbt_fps(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::mbt_fps, mbt_fps_spheroid, mbt_fps_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class mbt_fps_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<mbt_fps_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void mbt_fps_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("mbt_fps", new mbt_fps_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_MBT_FPS_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/mbtfpp.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/mbtfpp.hpp
deleted file mode 100644
index 123d1e4b026..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/mbtfpp.hpp
+++ /dev/null
@@ -1,199 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_MBTFPP_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_MBTFPP_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct mbtfpp {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace mbtfpp
- {
-
- static const double CS_ = .95257934441568037152;
- static const double FXC = .92582009977255146156;
- static const double FYC = 3.40168025708304504493;
- //static const double C23 = .66666666666666666666;
- //static const double C13 = .33333333333333333333;
- static const double ONEEPS = 1.0000001;
-
- template <typename T>
- inline T C23() { return detail::TWOTHIRD<T>(); }
- template <typename T>
- inline T C13() { return detail::THIRD<T>(); }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_mbtfpp_spheroid : public base_t_fi<base_mbtfpp_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_mbtfpp_spheroid(const Parameters& par)
- : base_t_fi<base_mbtfpp_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType C23 = mbtfpp::C23<CalculationType>();
- static const CalculationType C13 = mbtfpp::C13<CalculationType>();
-
- lp_lat = asin(CS_ * sin(lp_lat));
- xy_x = FXC * lp_lon * (2. * cos(C23 * lp_lat) - 1.);
- xy_y = FYC * sin(C13 * lp_lat);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType C23 = mbtfpp::C23<CalculationType>();
-
- lp_lat = xy_y / FYC;
- if (fabs(lp_lat) >= 1.) {
- if (fabs(lp_lat) > ONEEPS)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- else
- lp_lat = (lp_lat < 0.) ? -HALFPI : HALFPI;
- } else
- lp_lat = asin(lp_lat);
- lp_lon = xy_x / ( FXC * (2. * cos(C23 * (lp_lat *= 3.)) - 1.) );
- if (fabs(lp_lat = sin(lp_lat) / CS_) >= 1.) {
- if (fabs(lp_lat) > ONEEPS)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- else
- lp_lat = (lp_lat < 0.) ? -HALFPI : HALFPI;
- } else
- lp_lat = asin(lp_lat);
- }
-
- static inline std::string get_name()
- {
- return "mbtfpp_spheroid";
- }
-
- };
-
- // McBride-Thomas Flat-Polar Parabolic
- template <typename Parameters>
- inline void setup_mbtfpp(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::mbtfpp
- #endif // doxygen
-
- /*!
- \brief McBride-Thomas Flat-Polar Parabolic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- \par Example
- \image html ex_mbtfpp.gif
- */
- template <typename CalculationType, typename Parameters>
- struct mbtfpp_spheroid : public detail::mbtfpp::base_mbtfpp_spheroid<CalculationType, Parameters>
- {
- inline mbtfpp_spheroid(const Parameters& par) : detail::mbtfpp::base_mbtfpp_spheroid<CalculationType, Parameters>(par)
- {
- detail::mbtfpp::setup_mbtfpp(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::mbtfpp, mbtfpp_spheroid, mbtfpp_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class mbtfpp_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<mbtfpp_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void mbtfpp_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("mbtfpp", new mbtfpp_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_MBTFPP_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/mbtfpq.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/mbtfpq.hpp
deleted file mode 100644
index b4eeb34d5a0..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/mbtfpq.hpp
+++ /dev/null
@@ -1,208 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_MBTFPQ_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_MBTFPQ_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct mbtfpq {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace mbtfpq
- {
-
- static const int NITER = 20;
- static const double EPS = 1e-7;
- static const double ONETOL = 1.000001;
- static const double C = 1.70710678118654752440;
- static const double RC = 0.58578643762690495119;
- static const double FYC = 1.87475828462269495505;
- static const double RYC = 0.53340209679417701685;
- static const double FXC = 0.31245971410378249250;
- static const double RXC = 3.20041258076506210122;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_mbtfpq_spheroid : public base_t_fi<base_mbtfpq_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_mbtfpq_spheroid(const Parameters& par)
- : base_t_fi<base_mbtfpq_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType th1, c;
- int i;
-
- c = C * sin(lp_lat);
- for (i = NITER; i; --i) {
- lp_lat -= th1 = (sin(.5*lp_lat) + sin(lp_lat) - c) /
- (.5*cos(.5*lp_lat) + cos(lp_lat));
- if (fabs(th1) < EPS) break;
- }
- xy_x = FXC * lp_lon * (1.0 + 2. * cos(lp_lat)/cos(0.5 * lp_lat));
- xy_y = FYC * sin(0.5 * lp_lat);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType ONEPI = detail::ONEPI<CalculationType>();
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType t;
-
- lp_lat = RYC * xy_y;
- if (fabs(lp_lat) > 1.) {
- if (fabs(lp_lat) > ONETOL)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- else if (lp_lat < 0.) {
- t = -1.; lp_lat = -ONEPI;
- } else {
- t = 1.; lp_lat = ONEPI;
- }
- } else
- lp_lat = 2. * asin(t = lp_lat);
- lp_lon = RXC * xy_x / (1. + 2. * cos(lp_lat)/cos(0.5 * lp_lat));
- lp_lat = RC * (t + sin(lp_lat));
- if (fabs(lp_lat) > 1.)
- if (fabs(lp_lat) > ONETOL)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- else
- lp_lat = lp_lat < 0. ? -HALFPI : HALFPI;
- else
- lp_lat = asin(lp_lat);
- }
-
- static inline std::string get_name()
- {
- return "mbtfpq_spheroid";
- }
-
- };
-
- // McBryde-Thomas Flat-Polar Quartic
- template <typename Parameters>
- inline void setup_mbtfpq(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::mbtfpq
- #endif // doxygen
-
- /*!
- \brief McBryde-Thomas Flat-Polar Quartic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- \par Example
- \image html ex_mbtfpq.gif
- */
- template <typename CalculationType, typename Parameters>
- struct mbtfpq_spheroid : public detail::mbtfpq::base_mbtfpq_spheroid<CalculationType, Parameters>
- {
- inline mbtfpq_spheroid(const Parameters& par) : detail::mbtfpq::base_mbtfpq_spheroid<CalculationType, Parameters>(par)
- {
- detail::mbtfpq::setup_mbtfpq(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::mbtfpq, mbtfpq_spheroid, mbtfpq_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class mbtfpq_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<mbtfpq_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void mbtfpq_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("mbtfpq", new mbtfpq_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_MBTFPQ_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/merc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/merc.hpp
deleted file mode 100644
index ac34aee33e0..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/merc.hpp
+++ /dev/null
@@ -1,267 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_MERC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_MERC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_msfn.hpp>
-#include <boost/geometry/srs/projections/impl/pj_phi2.hpp>
-#include <boost/geometry/srs/projections/impl/pj_tsfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct merc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace merc
- {
-
- static const double EPS10 = 1.e-10;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_merc_ellipsoid : public base_t_fi<base_merc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_merc_ellipsoid(const Parameters& par)
- : base_t_fi<base_merc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- if (fabs(fabs(lp_lat) - HALFPI) <= EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_x = this->m_par.k0 * lp_lon;
- xy_y = - this->m_par.k0 * log(pj_tsfn(lp_lat, sin(lp_lat), this->m_par.e));
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- if ((lp_lat = pj_phi2(exp(- xy_y / this->m_par.k0), this->m_par.e)) == HUGE_VAL)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- lp_lon = xy_x / this->m_par.k0;
- }
-
- static inline std::string get_name()
- {
- return "merc_ellipsoid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_merc_spheroid : public base_t_fi<base_merc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_merc_spheroid(const Parameters& par)
- : base_t_fi<base_merc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
-
- if (fabs(fabs(lp_lat) - HALFPI) <= EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_x = this->m_par.k0 * lp_lon;
- xy_y = this->m_par.k0 * log(tan(FORTPI + .5 * lp_lat));
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- lp_lat = HALFPI - 2. * atan(exp(-xy_y / this->m_par.k0));
- lp_lon = xy_x / this->m_par.k0;
- }
-
- static inline std::string get_name()
- {
- return "merc_spheroid";
- }
-
- };
-
- // Mercator
- template <typename Parameters>
- inline void setup_merc(Parameters& par)
- {
- typedef typename Parameters::type calc_t;
- static const calc_t HALFPI = detail::HALFPI<calc_t>();
-
- calc_t phits=0.0;
- int is_phits;
-
- if( (is_phits = pj_param(par.params, "tlat_ts").i) ) {
- phits = fabs(pj_param(par.params, "rlat_ts").f);
- if (phits >= HALFPI)
- BOOST_THROW_EXCEPTION( projection_exception(-24) );
- }
- if (par.es) { /* ellipsoid */
- if (is_phits)
- par.k0 = pj_msfn(sin(phits), cos(phits), par.es);
- } else { /* sphere */
- if (is_phits)
- par.k0 = cos(phits);
- }
- }
-
- }} // namespace detail::merc
- #endif // doxygen
-
- /*!
- \brief Mercator projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_ts: Latitude of true scale (degrees)
- \par Example
- \image html ex_merc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct merc_ellipsoid : public detail::merc::base_merc_ellipsoid<CalculationType, Parameters>
- {
- inline merc_ellipsoid(const Parameters& par) : detail::merc::base_merc_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::merc::setup_merc(this->m_par);
- }
- };
-
- /*!
- \brief Mercator projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_ts: Latitude of true scale (degrees)
- \par Example
- \image html ex_merc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct merc_spheroid : public detail::merc::base_merc_spheroid<CalculationType, Parameters>
- {
- inline merc_spheroid(const Parameters& par) : detail::merc::base_merc_spheroid<CalculationType, Parameters>(par)
- {
- detail::merc::setup_merc(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::merc, merc_spheroid, merc_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class merc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<merc_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<merc_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void merc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("merc", new merc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_MERC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/mill.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/mill.hpp
deleted file mode 100644
index 1d3d4a01d28..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/mill.hpp
+++ /dev/null
@@ -1,167 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_MILL_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_MILL_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct mill {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace mill
- {
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_mill_spheroid : public base_t_fi<base_mill_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_mill_spheroid(const Parameters& par)
- : base_t_fi<base_mill_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
-
- xy_x = lp_lon;
- xy_y = log(tan(FORTPI + lp_lat * .4)) * 1.25;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
-
- lp_lon = xy_x;
- lp_lat = 2.5 * (atan(exp(.8 * xy_y)) - FORTPI);
- }
-
- static inline std::string get_name()
- {
- return "mill_spheroid";
- }
-
- };
-
- // Miller Cylindrical
- template <typename Parameters>
- inline void setup_mill(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::mill
- #endif // doxygen
-
- /*!
- \brief Miller Cylindrical projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- \par Example
- \image html ex_mill.gif
- */
- template <typename CalculationType, typename Parameters>
- struct mill_spheroid : public detail::mill::base_mill_spheroid<CalculationType, Parameters>
- {
- inline mill_spheroid(const Parameters& par) : detail::mill::base_mill_spheroid<CalculationType, Parameters>(par)
- {
- detail::mill::setup_mill(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::mill, mill_spheroid, mill_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class mill_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<mill_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void mill_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("mill", new mill_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_MILL_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/mod_ster.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/mod_ster.hpp
deleted file mode 100644
index 8a50a275f93..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/mod_ster.hpp
+++ /dev/null
@@ -1,522 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_MOD_STER_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_MOD_STER_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-#include <boost/geometry/srs/projections/impl/pj_zpoly1.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct mil_os {};
- struct lee_os {};
- struct gs48 {};
- struct alsk {};
- struct gs50 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace mod_ster
- {
-
- static const double EPSLN = 1e-10;
-
- template <typename T>
- struct par_mod_ster
- {
- COMPLEX<T> *zcoeff;
- T cchio, schio;
- int n;
- };
-
- /* based upon Snyder and Linck, USGS-NMD */
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_mod_ster_ellipsoid : public base_t_fi<base_mod_ster_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_mod_ster<CalculationType> m_proj_parm;
-
- inline base_mod_ster_ellipsoid(const Parameters& par)
- : base_t_fi<base_mod_ster_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType sinlon, coslon, esphi, chi, schi, cchi, s;
- COMPLEX<CalculationType> p;
-
- sinlon = sin(lp_lon);
- coslon = cos(lp_lon);
- esphi = this->m_par.e * sin(lp_lat);
- chi = 2. * atan(tan((HALFPI + lp_lat) * .5) *
- pow((1. - esphi) / (1. + esphi), this->m_par.e * .5)) - HALFPI;
- schi = sin(chi);
- cchi = cos(chi);
- s = 2. / (1. + this->m_proj_parm.schio * schi + this->m_proj_parm.cchio * cchi * coslon);
- p.r = s * cchi * sinlon;
- p.i = s * (this->m_proj_parm.cchio * schi - this->m_proj_parm.schio * cchi * coslon);
- p = pj_zpoly1(p, this->m_proj_parm.zcoeff, this->m_proj_parm.n);
- xy_x = p.r;
- xy_y = p.i;
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- int nn;
- COMPLEX<CalculationType> p, fxy, fpxy, dp;
- CalculationType den, rh = 0, z, sinz = 0, cosz = 0, chi, phi = 0, dphi, esphi;
-
- p.r = xy_x;
- p.i = xy_y;
- for (nn = 20; nn ;--nn) {
- fxy = pj_zpolyd1(p, this->m_proj_parm.zcoeff, this->m_proj_parm.n, &fpxy);
- fxy.r -= xy_x;
- fxy.i -= xy_y;
- den = fpxy.r * fpxy.r + fpxy.i * fpxy.i;
- dp.r = -(fxy.r * fpxy.r + fxy.i * fpxy.i) / den;
- dp.i = -(fxy.i * fpxy.r - fxy.r * fpxy.i) / den;
- p.r += dp.r;
- p.i += dp.i;
- if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN)
- break;
- }
- if (nn) {
- rh = boost::math::hypot(p.r, p.i);
- z = 2. * atan(.5 * rh);
- sinz = sin(z);
- cosz = cos(z);
- lp_lon = this->m_par.lam0;
- if (fabs(rh) <= EPSLN) {
- lp_lat = this->m_par.phi0;
- return;
- }
- chi = aasin(cosz * this->m_proj_parm.schio + p.i * sinz * this->m_proj_parm.cchio / rh);
- phi = chi;
- for (nn = 20; nn ;--nn) {
- esphi = this->m_par.e * sin(phi);
- dphi = 2. * atan(tan((HALFPI + chi) * .5) *
- pow((1. + esphi) / (1. - esphi), this->m_par.e * .5)) - HALFPI - phi;
- phi += dphi;
- if (fabs(dphi) <= EPSLN)
- break;
- }
- }
- if (nn) {
- lp_lat = phi;
- lp_lon = atan2(p.r * sinz, rh * this->m_proj_parm.cchio * cosz - p.i *
- this->m_proj_parm.schio * sinz);
- } else
- lp_lon = lp_lat = HUGE_VAL;
- }
-
- static inline std::string get_name()
- {
- return "mod_ster_ellipsoid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_mod_ster<T>& proj_parm) /* general initialization */
- {
- T esphi, chio;
-
- if (par.es) {
- esphi = par.e * sin(par.phi0);
- chio = 2. * atan(tan((geometry::math::half_pi<T>() + par.phi0) * .5) *
- pow((1. - esphi) / (1. + esphi), par.e * .5)) - geometry::math::half_pi<T>();
- } else
- chio = par.phi0;
- proj_parm.schio = sin(chio);
- proj_parm.cchio = cos(chio);
- }
-
-
- // Miller Oblated Stereographic
- template <typename Parameters, typename T>
- inline void setup_mil_os(Parameters& par, par_mod_ster<T>& proj_parm)
- {
- static COMPLEX<T> /* Miller Oblated Stereographic */
- AB[] = {
- {0.924500, 0.},
- {0., 0.},
- {0.019430, 0.}
- };
-
- proj_parm.n = 2;
- par.lam0 = geometry::math::d2r<T>() * 20.;
- par.phi0 = geometry::math::d2r<T>() * 18.;
- proj_parm.zcoeff = AB;
- par.es = 0.;
- setup(par, proj_parm);
- }
-
- // Lee Oblated Stereographic
- template <typename Parameters, typename T>
- inline void setup_lee_os(Parameters& par, par_mod_ster<T>& proj_parm)
- {
- static COMPLEX<T> /* Lee Oblated Stereographic */
- AB[] = {
- {0.721316, 0.},
- {0., 0.},
- {-0.0088162, -0.00617325}
- };
-
- proj_parm.n = 2;
- par.lam0 = geometry::math::d2r<T>() * -165.;
- par.phi0 = geometry::math::d2r<T>() * -10.;
- proj_parm.zcoeff = AB;
- par.es = 0.;
- setup(par, proj_parm);
- }
-
- // Mod. Stererographics of 48 U.S.
- template <typename Parameters, typename T>
- inline void setup_gs48(Parameters& par, par_mod_ster<T>& proj_parm)
- {
- static COMPLEX<T> /* 48 United States */
- AB[] = {
- {0.98879, 0.},
- {0., 0.},
- {-0.050909, 0.},
- {0., 0.},
- {0.075528, 0.}
- };
-
- proj_parm.n = 4;
- par.lam0 = geometry::math::d2r<T>() * -96.;
- par.phi0 = geometry::math::d2r<T>() * -39.;
- proj_parm.zcoeff = AB;
- par.es = 0.;
- par.a = 6370997.;
- setup(par, proj_parm);
- }
-
- // Mod. Stererographics of Alaska
- template <typename Parameters, typename T>
- inline void setup_alsk(Parameters& par, par_mod_ster<T>& proj_parm)
- {
- static COMPLEX<T>
- ABe[] = { /* Alaska ellipsoid */
- {.9945303, 0.},
- {.0052083, -.0027404},
- {.0072721, .0048181},
- {-.0151089, -.1932526},
- {.0642675, -.1381226},
- {.3582802, -.2884586}},
- ABs[] = { /* Alaska sphere */
- {.9972523, 0.},
- {.0052513, -.0041175},
- {.0074606, .0048125},
- {-.0153783, -.1968253},
- {.0636871, -.1408027},
- {.3660976, -.2937382}
- };
-
- proj_parm.n = 5;
- par.lam0 = geometry::math::d2r<T>() * -152.;
- par.phi0 = geometry::math::d2r<T>() * 64.;
- if (par.es) { /* fixed ellipsoid/sphere */
- proj_parm.zcoeff = ABe;
- par.a = 6378206.4;
- par.e = sqrt(par.es = 0.00676866);
- } else {
- proj_parm.zcoeff = ABs;
- par.a = 6370997.;
- }
- setup(par, proj_parm);
- }
-
- // Mod. Stererographics of 50 U.S.
- template <typename Parameters, typename T>
- inline void setup_gs50(Parameters& par, par_mod_ster<T>& proj_parm)
- {
- static COMPLEX<T>
- ABe[] = { /* GS50 ellipsoid */
- {.9827497, 0.},
- {.0210669, .0053804},
- {-.1031415, -.0571664},
- {-.0323337, -.0322847},
- {.0502303, .1211983},
- {.0251805, .0895678},
- {-.0012315, -.1416121},
- {.0072202, -.1317091},
- {-.0194029, .0759677},
- {-.0210072, .0834037}
- },
- ABs[] = { /* GS50 sphere */
- {.9842990, 0.},
- {.0211642, .0037608},
- {-.1036018, -.0575102},
- {-.0329095, -.0320119},
- {.0499471, .1223335},
- {.0260460, .0899805},
- {.0007388, -.1435792},
- {.0075848, -.1334108},
- {-.0216473, .0776645},
- {-.0225161, .0853673}
- };
-
- proj_parm.n = 9;
- par.lam0 = geometry::math::d2r<T>() * -120.;
- par.phi0 = geometry::math::d2r<T>() * 45.;
- if (par.es) { /* fixed ellipsoid/sphere */
- proj_parm.zcoeff = ABe;
- par.a = 6378206.4;
- par.e = sqrt(par.es = 0.00676866);
- } else {
- proj_parm.zcoeff = ABs;
- par.a = 6370997.;
- }
- setup(par, proj_parm);
- }
-
- }} // namespace detail::mod_ster
- #endif // doxygen
-
- /*!
- \brief Miller Oblated Stereographic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal (mod)
- \par Example
- \image html ex_mil_os.gif
- */
- template <typename CalculationType, typename Parameters>
- struct mil_os_ellipsoid : public detail::mod_ster::base_mod_ster_ellipsoid<CalculationType, Parameters>
- {
- inline mil_os_ellipsoid(const Parameters& par) : detail::mod_ster::base_mod_ster_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::mod_ster::setup_mil_os(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Lee Oblated Stereographic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal (mod)
- \par Example
- \image html ex_lee_os.gif
- */
- template <typename CalculationType, typename Parameters>
- struct lee_os_ellipsoid : public detail::mod_ster::base_mod_ster_ellipsoid<CalculationType, Parameters>
- {
- inline lee_os_ellipsoid(const Parameters& par) : detail::mod_ster::base_mod_ster_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::mod_ster::setup_lee_os(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Mod. Stererographics of 48 U.S. projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal (mod)
- \par Example
- \image html ex_gs48.gif
- */
- template <typename CalculationType, typename Parameters>
- struct gs48_ellipsoid : public detail::mod_ster::base_mod_ster_ellipsoid<CalculationType, Parameters>
- {
- inline gs48_ellipsoid(const Parameters& par) : detail::mod_ster::base_mod_ster_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::mod_ster::setup_gs48(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Mod. Stererographics of Alaska projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal (mod)
- \par Example
- \image html ex_alsk.gif
- */
- template <typename CalculationType, typename Parameters>
- struct alsk_ellipsoid : public detail::mod_ster::base_mod_ster_ellipsoid<CalculationType, Parameters>
- {
- inline alsk_ellipsoid(const Parameters& par) : detail::mod_ster::base_mod_ster_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::mod_ster::setup_alsk(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Mod. Stererographics of 50 U.S. projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal (mod)
- \par Example
- \image html ex_gs50.gif
- */
- template <typename CalculationType, typename Parameters>
- struct gs50_ellipsoid : public detail::mod_ster::base_mod_ster_ellipsoid<CalculationType, Parameters>
- {
- inline gs50_ellipsoid(const Parameters& par) : detail::mod_ster::base_mod_ster_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::mod_ster::setup_gs50(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::mil_os, mil_os_ellipsoid, mil_os_ellipsoid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::lee_os, lee_os_ellipsoid, lee_os_ellipsoid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::gs48, gs48_ellipsoid, gs48_ellipsoid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::alsk, alsk_ellipsoid, alsk_ellipsoid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::gs50, gs50_ellipsoid, gs50_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class mil_os_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<mil_os_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class lee_os_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<lee_os_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class gs48_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<gs48_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class alsk_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<alsk_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class gs50_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<gs50_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void mod_ster_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("mil_os", new mil_os_entry<CalculationType, Parameters>);
- factory.add_to_factory("lee_os", new lee_os_entry<CalculationType, Parameters>);
- factory.add_to_factory("gs48", new gs48_entry<CalculationType, Parameters>);
- factory.add_to_factory("alsk", new alsk_entry<CalculationType, Parameters>);
- factory.add_to_factory("gs50", new gs50_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_MOD_STER_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/moll.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/moll.hpp
deleted file mode 100644
index 6f02c7dea03..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/moll.hpp
+++ /dev/null
@@ -1,294 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_MOLL_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_MOLL_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct moll {};
- struct wag4 {};
- struct wag5 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace moll
- {
-
- static const int MAX_ITER = 10;
- static const double LOOP_TOL = 1e-7;
-
- template <typename T>
- struct par_moll
- {
- T C_x, C_y, C_p;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_moll_spheroid : public base_t_fi<base_moll_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_moll<CalculationType> m_proj_parm;
-
- inline base_moll_spheroid(const Parameters& par)
- : base_t_fi<base_moll_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType k, V;
- int i;
-
- k = this->m_proj_parm.C_p * sin(lp_lat);
- for (i = MAX_ITER; i ; --i) {
- lp_lat -= V = (lp_lat + sin(lp_lat) - k) /
- (1. + cos(lp_lat));
- if (fabs(V) < LOOP_TOL)
- break;
- }
- if (!i)
- lp_lat = (lp_lat < 0.) ? -HALFPI : HALFPI;
- else
- lp_lat *= 0.5;
- xy_x = this->m_proj_parm.C_x * lp_lon * cos(lp_lat);
- xy_y = this->m_proj_parm.C_y * sin(lp_lat);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = aasin(xy_y / this->m_proj_parm.C_y);
- lp_lon = xy_x / (this->m_proj_parm.C_x * cos(lp_lat));
- lp_lat += lp_lat;
- lp_lat = aasin((lp_lat + sin(lp_lat)) / this->m_proj_parm.C_p);
- }
-
- static inline std::string get_name()
- {
- return "moll_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_moll<T>& proj_parm, T const& p)
- {
- T r, sp, p2 = p + p;
-
- par.es = 0;
- sp = sin(p);
- r = sqrt(geometry::math::two_pi<T>() * sp / (p2 + sin(p2)));
- proj_parm.C_x = 2. * r / geometry::math::pi<T>();
- proj_parm.C_y = r / sp;
- proj_parm.C_p = p2 + sin(p2);
- }
-
-
- // Mollweide
- template <typename Parameters, typename T>
- inline void setup_moll(Parameters& par, par_moll<T>& proj_parm)
- {
- setup(par, proj_parm, geometry::math::half_pi<T>());
- }
-
- // Wagner IV
- template <typename Parameters, typename T>
- inline void setup_wag4(Parameters& par, par_moll<T>& proj_parm)
- {
- setup(par, proj_parm, geometry::math::pi<T>()/3.);
- }
-
- // Wagner V
- template <typename Parameters, typename T>
- inline void setup_wag5(Parameters& par, par_moll<T>& proj_parm)
- {
- par.es = 0;
- proj_parm.C_x = 0.90977;
- proj_parm.C_y = 1.65014;
- proj_parm.C_p = 3.00896;
- }
-
- }} // namespace detail::moll
- #endif // doxygen
-
- /*!
- \brief Mollweide projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_moll.gif
- */
- template <typename CalculationType, typename Parameters>
- struct moll_spheroid : public detail::moll::base_moll_spheroid<CalculationType, Parameters>
- {
- inline moll_spheroid(const Parameters& par) : detail::moll::base_moll_spheroid<CalculationType, Parameters>(par)
- {
- detail::moll::setup_moll(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Wagner IV projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_wag4.gif
- */
- template <typename CalculationType, typename Parameters>
- struct wag4_spheroid : public detail::moll::base_moll_spheroid<CalculationType, Parameters>
- {
- inline wag4_spheroid(const Parameters& par) : detail::moll::base_moll_spheroid<CalculationType, Parameters>(par)
- {
- detail::moll::setup_wag4(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Wagner V projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_wag5.gif
- */
- template <typename CalculationType, typename Parameters>
- struct wag5_spheroid : public detail::moll::base_moll_spheroid<CalculationType, Parameters>
- {
- inline wag5_spheroid(const Parameters& par) : detail::moll::base_moll_spheroid<CalculationType, Parameters>(par)
- {
- detail::moll::setup_wag5(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::moll, moll_spheroid, moll_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::wag4, wag4_spheroid, wag4_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::wag5, wag5_spheroid, wag5_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class moll_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<moll_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class wag4_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<wag4_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class wag5_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<wag5_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void moll_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("moll", new moll_entry<CalculationType, Parameters>);
- factory.add_to_factory("wag4", new wag4_entry<CalculationType, Parameters>);
- factory.add_to_factory("wag5", new wag5_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_MOLL_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/natearth.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/natearth.hpp
deleted file mode 100644
index dcd259d9d1e..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/natearth.hpp
+++ /dev/null
@@ -1,228 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_NATEARTH_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_NATEARTH_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// The Natural Earth projection was designed by Tom Patterson, US National Park
-// Service, in 2007, using Flex Projector. The shape of the original projection
-// was defined at every 5 degrees and piece-wise cubic spline interpolation was
-// used to compute the complete graticule.
-// The code here uses polynomial functions instead of cubic splines and
-// is therefore much simpler to program. The polynomial approximation was
-// developed by Bojan Savric, in collaboration with Tom Patterson and Bernhard
-// Jenny, Institute of Cartography, ETH Zurich. It slightly deviates from
-// Patterson's original projection by adding additional curvature to meridians
-// where they meet the horizontal pole line. This improvement is by intention
-// and designed in collaboration with Tom Patterson.
-// Port to PROJ.4 by Bernhard Jenny, 6 June 2011
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct natearth {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace natearth
- {
-
- static const double A0 = 0.8707;
- static const double A1 = -0.131979;
- static const double A2 = -0.013791;
- static const double A3 = 0.003971;
- static const double A4 = -0.001529;
- static const double B0 = 1.007226;
- static const double B1 = 0.015085;
- static const double B2 = -0.044475;
- static const double B3 = 0.028874;
- static const double B4 = -0.005916;
- static const double C0 = B0;
- static const double C1 = (3 * B1);
- static const double C2 = (7 * B2);
- static const double C3 = (9 * B3);
- static const double C4 = (11 * B4);
- static const double EPS = 1e-11;
- //static const double MAX_Y = (0.8707 * 0.52 * geometry::math::pi<double>());
-
- template <typename T>
- inline T MAX_Y() { return (0.8707 * 0.52 * detail::ONEPI<T>()); }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_natearth_spheroid : public base_t_fi<base_natearth_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_natearth_spheroid(const Parameters& par)
- : base_t_fi<base_natearth_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType phi2, phi4;
-
- phi2 = lp_lat * lp_lat;
- phi4 = phi2 * phi2;
- xy_x = lp_lon * (A0 + phi2 * (A1 + phi2 * (A2 + phi4 * phi2 * (A3 + phi2 * A4))));
- xy_y = lp_lat * (B0 + phi2 * (B1 + phi4 * (B2 + B3 * phi2 + B4 * phi4)));
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType MAX_Y = natearth::MAX_Y<CalculationType>();
-
- CalculationType yc, tol, y2, y4, f, fder;
-
- /* make sure y is inside valid range */
- if (xy_y > MAX_Y) {
- xy_y = MAX_Y;
- } else if (xy_y < -MAX_Y) {
- xy_y = -MAX_Y;
- }
-
- /* latitude */
- yc = xy_y;
- for (;;) { /* Newton-Raphson */
- y2 = yc * yc;
- y4 = y2 * y2;
- f = (yc * (B0 + y2 * (B1 + y4 * (B2 + B3 * y2 + B4 * y4)))) - xy_y;
- fder = C0 + y2 * (C1 + y4 * (C2 + C3 * y2 + C4 * y4));
- yc -= tol = f / fder;
- if (fabs(tol) < EPS) {
- break;
- }
- }
- lp_lat = yc;
-
- /* longitude */
- y2 = yc * yc;
- lp_lon = xy_x / (A0 + y2 * (A1 + y2 * (A2 + y2 * y2 * y2 * (A3 + y2 * A4))));
- }
-
- static inline std::string get_name()
- {
- return "natearth_spheroid";
- }
-
- };
-
- // Natural Earth
- template <typename Parameters>
- inline void setup_natearth(Parameters& par)
- {
- par.es = 0;
- }
-
- }} // namespace detail::natearth
- #endif // doxygen
-
- /*!
- \brief Natural Earth projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_natearth.gif
- */
- template <typename CalculationType, typename Parameters>
- struct natearth_spheroid : public detail::natearth::base_natearth_spheroid<CalculationType, Parameters>
- {
- inline natearth_spheroid(const Parameters& par) : detail::natearth::base_natearth_spheroid<CalculationType, Parameters>(par)
- {
- detail::natearth::setup_natearth(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::natearth, natearth_spheroid, natearth_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class natearth_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<natearth_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void natearth_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("natearth", new natearth_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_NATEARTH_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/nell.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/nell.hpp
deleted file mode 100644
index 351a4101f7b..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/nell.hpp
+++ /dev/null
@@ -1,180 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_NELL_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_NELL_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct nell {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace nell
- {
-
- static const int MAX_ITER = 10;
- static const double LOOP_TOL = 1e-7;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_nell_spheroid : public base_t_fi<base_nell_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_nell_spheroid(const Parameters& par)
- : base_t_fi<base_nell_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType k, V;
- int i;
-
- k = 2. * sin(lp_lat);
- V = lp_lat * lp_lat;
- lp_lat *= 1.00371 + V * (-0.0935382 + V * -0.011412);
- for (i = MAX_ITER; i ; --i) {
- lp_lat -= V = (lp_lat + sin(lp_lat) - k) /
- (1. + cos(lp_lat));
- if (fabs(V) < LOOP_TOL)
- break;
- }
- xy_x = 0.5 * lp_lon * (1. + cos(lp_lat));
- xy_y = lp_lat;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lon = 2. * xy_x / (1. + cos(xy_y));
- lp_lat = aasin(0.5 * (xy_y + sin(xy_y)));
- }
-
- static inline std::string get_name()
- {
- return "nell_spheroid";
- }
-
- };
-
- // Nell
- template <typename Parameters>
- inline void setup_nell(Parameters& par)
- {
- par.es = 0;
- }
-
- }} // namespace detail::nell
- #endif // doxygen
-
- /*!
- \brief Nell projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_nell.gif
- */
- template <typename CalculationType, typename Parameters>
- struct nell_spheroid : public detail::nell::base_nell_spheroid<CalculationType, Parameters>
- {
- inline nell_spheroid(const Parameters& par) : detail::nell::base_nell_spheroid<CalculationType, Parameters>(par)
- {
- detail::nell::setup_nell(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::nell, nell_spheroid, nell_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class nell_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<nell_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void nell_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("nell", new nell_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_NELL_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/nell_h.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/nell_h.hpp
deleted file mode 100644
index 05de9e263ec..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/nell_h.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_NELL_H_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_NELL_H_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct nell_h {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace nell_h
- {
-
- static const int NITER = 9;
- static const double EPS = 1e-7;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_nell_h_spheroid : public base_t_fi<base_nell_h_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_nell_h_spheroid(const Parameters& par)
- : base_t_fi<base_nell_h_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = 0.5 * lp_lon * (1. + cos(lp_lat));
- xy_y = 2.0 * (lp_lat - tan(0.5 *lp_lat));
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType V, c, p;
- int i;
-
- p = 0.5 * xy_y;
- for (i = NITER; i ; --i) {
- c = cos(0.5 * lp_lat);
- lp_lat -= V = (lp_lat - tan(lp_lat/2) - p)/(1. - 0.5/(c*c));
- if (fabs(V) < EPS)
- break;
- }
- if (!i) {
- lp_lat = p < 0. ? -HALFPI : HALFPI;
- lp_lon = 2. * xy_x;
- } else
- lp_lon = 2. * xy_x / (1. + cos(lp_lat));
- }
-
- static inline std::string get_name()
- {
- return "nell_h_spheroid";
- }
-
- };
-
- // Nell-Hammer
- template <typename Parameters>
- inline void setup_nell_h(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::nell_h
- #endif // doxygen
-
- /*!
- \brief Nell-Hammer projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_nell_h.gif
- */
- template <typename CalculationType, typename Parameters>
- struct nell_h_spheroid : public detail::nell_h::base_nell_h_spheroid<CalculationType, Parameters>
- {
- inline nell_h_spheroid(const Parameters& par) : detail::nell_h::base_nell_h_spheroid<CalculationType, Parameters>(par)
- {
- detail::nell_h::setup_nell_h(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::nell_h, nell_h_spheroid, nell_h_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class nell_h_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<nell_h_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void nell_h_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("nell_h", new nell_h_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_NELL_H_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/nocol.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/nocol.hpp
deleted file mode 100644
index ef2e95a8435..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/nocol.hpp
+++ /dev/null
@@ -1,190 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_NOCOL_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_NOCOL_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct nicol {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace nocol
- {
-
- static const double EPS = 1e-10;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_nocol_spheroid : public base_t_f<base_nocol_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_nocol_spheroid(const Parameters& par)
- : base_t_f<base_nocol_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- if (fabs(lp_lon) < EPS) {
- xy_x = 0;
- xy_y = lp_lat;
- } else if (fabs(lp_lat) < EPS) {
- xy_x = lp_lon;
- xy_y = 0.;
- } else if (fabs(fabs(lp_lon) - HALFPI) < EPS) {
- xy_x = lp_lon * cos(lp_lat);
- xy_y = HALFPI * sin(lp_lat);
- } else if (fabs(fabs(lp_lat) - HALFPI) < EPS) {
- xy_x = 0;
- xy_y = lp_lat;
- } else {
- CalculationType tb, c, d, m, n, r2, sp;
-
- tb = HALFPI / lp_lon - lp_lon / HALFPI;
- c = lp_lat / HALFPI;
- d = (1 - c * c)/((sp = sin(lp_lat)) - c);
- r2 = tb / d;
- r2 *= r2;
- m = (tb * sp / d - 0.5 * tb)/(1. + r2);
- n = (sp / r2 + 0.5 * d)/(1. + 1./r2);
- xy_x = cos(lp_lat);
- xy_x = sqrt(m * m + xy_x * xy_x / (1. + r2));
- xy_x = HALFPI * ( m + (lp_lon < 0. ? -xy_x : xy_x));
- xy_y = sqrt(n * n - (sp * sp / r2 + d * sp - 1.) /
- (1. + 1./r2));
- xy_y = HALFPI * ( n + (lp_lat < 0. ? xy_y : -xy_y ));
- }
- }
-
- static inline std::string get_name()
- {
- return "nocol_spheroid";
- }
-
- };
-
- // Nicolosi Globular
- template <typename Parameters>
- inline void setup_nicol(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::nocol
- #endif // doxygen
-
- /*!
- \brief Nicolosi Globular projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Example
- \image html ex_nicol.gif
- */
- template <typename CalculationType, typename Parameters>
- struct nicol_spheroid : public detail::nocol::base_nocol_spheroid<CalculationType, Parameters>
- {
- inline nicol_spheroid(const Parameters& par) : detail::nocol::base_nocol_spheroid<CalculationType, Parameters>(par)
- {
- detail::nocol::setup_nicol(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::nicol, nicol_spheroid, nicol_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class nicol_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<nicol_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void nocol_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("nicol", new nicol_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_NOCOL_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/nsper.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/nsper.hpp
deleted file mode 100644
index 85576bf9639..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/nsper.hpp
+++ /dev/null
@@ -1,355 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_NSPER_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_NSPER_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/config.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct nsper {};
- struct tpers {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace nsper
- {
-
- static const double EPS10 = 1.e-10;
- static const int N_POLE = 0;
- static const int S_POLE = 1;
- static const int EQUIT = 2;
- static const int OBLIQ = 3;
-
- template <typename T>
- struct par_nsper
- {
- T height;
- T sinph0;
- T cosph0;
- T p;
- T rp;
- T pn1;
- T pfact;
- T h;
- T cg;
- T sg;
- T sw;
- T cw;
- int mode;
- int tilt;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_nsper_spheroid : public base_t_fi<base_nsper_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_nsper<CalculationType> m_proj_parm;
-
- inline base_nsper_spheroid(const Parameters& par)
- : base_t_fi<base_nsper_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType coslam, cosphi, sinphi;
-
- sinphi = sin(lp_lat);
- cosphi = cos(lp_lat);
- coslam = cos(lp_lon);
- switch (this->m_proj_parm.mode) {
- case OBLIQ:
- xy_y = this->m_proj_parm.sinph0 * sinphi + this->m_proj_parm.cosph0 * cosphi * coslam;
- break;
- case EQUIT:
- xy_y = cosphi * coslam;
- break;
- case S_POLE:
- xy_y = - sinphi;
- break;
- case N_POLE:
- xy_y = sinphi;
- break;
- }
- if (xy_y < this->m_proj_parm.rp)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_y = this->m_proj_parm.pn1 / (this->m_proj_parm.p - xy_y);
- xy_x = xy_y * cosphi * sin(lp_lon);
- switch (this->m_proj_parm.mode) {
- case OBLIQ:
- xy_y *= (this->m_proj_parm.cosph0 * sinphi -
- this->m_proj_parm.sinph0 * cosphi * coslam);
- break;
- case EQUIT:
- xy_y *= sinphi;
- break;
- case N_POLE:
- coslam = - coslam;
- BOOST_FALLTHROUGH;
- case S_POLE:
- xy_y *= cosphi * coslam;
- break;
- }
- if (this->m_proj_parm.tilt) {
- CalculationType yt, ba;
-
- yt = xy_y * this->m_proj_parm.cg + xy_x * this->m_proj_parm.sg;
- ba = 1. / (yt * this->m_proj_parm.sw * this->m_proj_parm.h + this->m_proj_parm.cw);
- xy_x = (xy_x * this->m_proj_parm.cg - xy_y * this->m_proj_parm.sg) * this->m_proj_parm.cw * ba;
- xy_y = yt * ba;
- }
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType rh, cosz, sinz;
-
- if (this->m_proj_parm.tilt) {
- CalculationType bm, bq, yt;
-
- yt = 1./(this->m_proj_parm.pn1 - xy_y * this->m_proj_parm.sw);
- bm = this->m_proj_parm.pn1 * xy_x * yt;
- bq = this->m_proj_parm.pn1 * xy_y * this->m_proj_parm.cw * yt;
- xy_x = bm * this->m_proj_parm.cg + bq * this->m_proj_parm.sg;
- xy_y = bq * this->m_proj_parm.cg - bm * this->m_proj_parm.sg;
- }
- rh = boost::math::hypot(xy_x, xy_y);
- if ((sinz = 1. - rh * rh * this->m_proj_parm.pfact) < 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- sinz = (this->m_proj_parm.p - sqrt(sinz)) / (this->m_proj_parm.pn1 / rh + rh / this->m_proj_parm.pn1);
- cosz = sqrt(1. - sinz * sinz);
- if (fabs(rh) <= EPS10) {
- lp_lon = 0.;
- lp_lat = this->m_par.phi0;
- } else {
- switch (this->m_proj_parm.mode) {
- case OBLIQ:
- lp_lat = asin(cosz * this->m_proj_parm.sinph0 + xy_y * sinz * this->m_proj_parm.cosph0 / rh);
- xy_y = (cosz - this->m_proj_parm.sinph0 * sin(lp_lat)) * rh;
- xy_x *= sinz * this->m_proj_parm.cosph0;
- break;
- case EQUIT:
- lp_lat = asin(xy_y * sinz / rh);
- xy_y = cosz * rh;
- xy_x *= sinz;
- break;
- case N_POLE:
- lp_lat = asin(cosz);
- xy_y = -xy_y;
- break;
- case S_POLE:
- lp_lat = - asin(cosz);
- break;
- }
- lp_lon = atan2(xy_x, xy_y);
- }
- }
-
- static inline std::string get_name()
- {
- return "nsper_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_nsper<T>& proj_parm)
- {
- if ((proj_parm.height = pj_param(par.params, "dh").f) <= 0.)
- BOOST_THROW_EXCEPTION( projection_exception(-30) );
- if (fabs(fabs(par.phi0) - geometry::math::half_pi<T>()) < EPS10)
- proj_parm.mode = par.phi0 < 0. ? S_POLE : N_POLE;
- else if (fabs(par.phi0) < EPS10)
- proj_parm.mode = EQUIT;
- else {
- proj_parm.mode = OBLIQ;
- proj_parm.sinph0 = sin(par.phi0);
- proj_parm.cosph0 = cos(par.phi0);
- }
- proj_parm.pn1 = proj_parm.height / par.a; /* normalize by radius */
- proj_parm.p = 1. + proj_parm.pn1;
- proj_parm.rp = 1. / proj_parm.p;
- proj_parm.h = 1. / proj_parm.pn1;
- proj_parm.pfact = (proj_parm.p + 1.) * proj_parm.h;
- par.es = 0.;
- }
-
-
- // Near-sided perspective
- template <typename Parameters, typename T>
- inline void setup_nsper(Parameters& par, par_nsper<T>& proj_parm)
- {
- proj_parm.tilt = 0;
- setup(par, proj_parm);
- }
-
- // Tilted perspective
- template <typename Parameters, typename T>
- inline void setup_tpers(Parameters& par, par_nsper<T>& proj_parm)
- {
- T omega, gamma;
-
- omega = pj_param(par.params, "dtilt").f * geometry::math::d2r<T>();
- gamma = pj_param(par.params, "dazi").f * geometry::math::d2r<T>();
- proj_parm.tilt = 1;
- proj_parm.cg = cos(gamma); proj_parm.sg = sin(gamma);
- proj_parm.cw = cos(omega); proj_parm.sw = sin(omega);
- setup(par, proj_parm);
- }
-
- }} // namespace detail::nsper
- #endif // doxygen
-
- /*!
- \brief Near-sided perspective projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- \par Projection parameters
- - h: Height
- \par Example
- \image html ex_nsper.gif
- */
- template <typename CalculationType, typename Parameters>
- struct nsper_spheroid : public detail::nsper::base_nsper_spheroid<CalculationType, Parameters>
- {
- inline nsper_spheroid(const Parameters& par) : detail::nsper::base_nsper_spheroid<CalculationType, Parameters>(par)
- {
- detail::nsper::setup_nsper(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Tilted perspective projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- \par Projection parameters
- - tilt: Tilt, or Omega (real)
- - azi: Azimuth (or Gamma) (real)
- - h: Height
- \par Example
- \image html ex_tpers.gif
- */
- template <typename CalculationType, typename Parameters>
- struct tpers_spheroid : public detail::nsper::base_nsper_spheroid<CalculationType, Parameters>
- {
- inline tpers_spheroid(const Parameters& par) : detail::nsper::base_nsper_spheroid<CalculationType, Parameters>(par)
- {
- detail::nsper::setup_tpers(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::nsper, nsper_spheroid, nsper_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::tpers, tpers_spheroid, tpers_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class nsper_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<nsper_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class tpers_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<tpers_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void nsper_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("nsper", new nsper_entry<CalculationType, Parameters>);
- factory.add_to_factory("tpers", new tpers_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_NSPER_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/nzmg.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/nzmg.hpp
deleted file mode 100644
index 067eece27ae..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/nzmg.hpp
+++ /dev/null
@@ -1,255 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_NZMG_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_NZMG_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Purpose: Implementation of the nzmg (New Zealand Map Grid) projection.
-// Very loosely based upon DMA code by Bradford W. Drew
-// Author: Gerald Evenden
-// Copyright (c) 1995, Gerald Evenden
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_zpoly1.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct nzmg {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace nzmg
- {
-
- static const double EPSLN = 1e-10;
- //static const double SEC5_TO_RAD = 0.4848136811095359935899141023;
- //static const double RAD_TO_SEC5 = 2.062648062470963551564733573;
- static const int Nbf = 5;
- static const int Ntpsi = 9;
- static const int Ntphi = 8;
-
- template <typename T>
- inline T SEC5_TO_RAD() { return 0.4848136811095359935899141023; }
- template <typename T>
- inline T RAD_TO_SEC5() { return 2.062648062470963551564733573; }
-
- template <typename T>
- inline const COMPLEX<T> * bf()
- {
- static const COMPLEX<T> result[] = {
- {.7557853228, 0.0},
- {.249204646, .003371507},
- {-.001541739, .041058560},
- {-.10162907, .01727609},
- {-.26623489, -.36249218},
- {-.6870983, -1.1651967}
- };
- return result;
- }
-
- template <typename T>
- inline const T * tphi()
- {
- static const T result[] = { 1.5627014243, .5185406398, -.03333098, -.1052906, -.0368594,
- .007317, .01220, .00394, -.0013 };
- return result;
- }
- template <typename T>
- inline const T * tpsi()
- {
- static const T result[] = { .6399175073, -.1358797613, .063294409, -.02526853, .0117879,
- -.0055161, .0026906, -.001333, .00067, -.00034 };
- return result;
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_nzmg_ellipsoid : public base_t_fi<base_nzmg_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_nzmg_ellipsoid(const Parameters& par)
- : base_t_fi<base_nzmg_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType RAD_TO_SEC5 = nzmg::RAD_TO_SEC5<CalculationType>();
-
- COMPLEX<CalculationType> p;
- const CalculationType * C;
- int i;
-
- lp_lat = (lp_lat - this->m_par.phi0) * RAD_TO_SEC5;
- for (p.r = *(C = tpsi<CalculationType>() + (i = Ntpsi)); i ; --i)
- p.r = *--C + lp_lat * p.r;
- p.r *= lp_lat;
- p.i = lp_lon;
- p = pj_zpoly1(p, bf<CalculationType>(), Nbf);
- xy_x = p.i;
- xy_y = p.r;
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType SEC5_TO_RAD = nzmg::SEC5_TO_RAD<CalculationType>();
-
- int nn, i;
- COMPLEX<CalculationType> p, f, fp, dp;
- CalculationType den;
- const CalculationType* C;
-
- p.r = xy_y;
- p.i = xy_x;
- for (nn = 20; nn ;--nn) {
- f = pj_zpolyd1(p, bf<CalculationType>(), Nbf, &fp);
- f.r -= xy_y;
- f.i -= xy_x;
- den = fp.r * fp.r + fp.i * fp.i;
- p.r += dp.r = -(f.r * fp.r + f.i * fp.i) / den;
- p.i += dp.i = -(f.i * fp.r - f.r * fp.i) / den;
- if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN)
- break;
- }
- if (nn) {
- lp_lon = p.i;
- for (lp_lat = *(C = tphi<CalculationType>() + (i = Ntphi)); i ; --i)
- lp_lat = *--C + p.r * lp_lat;
- lp_lat = this->m_par.phi0 + p.r * lp_lat * SEC5_TO_RAD;
- } else
- lp_lon = lp_lat = HUGE_VAL;
- }
-
- static inline std::string get_name()
- {
- return "nzmg_ellipsoid";
- }
-
- };
-
- // New Zealand Map Grid
- template <typename Parameters>
- inline void setup_nzmg(Parameters& par)
- {
- typedef typename Parameters::type calc_t;
-
- /* force to International major axis */
- par.ra = 1. / (par.a = 6378388.0);
- par.lam0 = geometry::math::d2r<calc_t>() * 173.;
- par.phi0 = geometry::math::d2r<calc_t>() * -41.;
- par.x0 = 2510000.;
- par.y0 = 6023150.;
- }
-
- }} // namespace detail::nzmg
- #endif // doxygen
-
- /*!
- \brief New Zealand Map Grid projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Fixed Earth
- \par Example
- \image html ex_nzmg.gif
- */
- template <typename CalculationType, typename Parameters>
- struct nzmg_ellipsoid : public detail::nzmg::base_nzmg_ellipsoid<CalculationType, Parameters>
- {
- inline nzmg_ellipsoid(const Parameters& par) : detail::nzmg::base_nzmg_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::nzmg::setup_nzmg(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::nzmg, nzmg_ellipsoid, nzmg_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class nzmg_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<nzmg_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void nzmg_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("nzmg", new nzmg_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_NZMG_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/ob_tran.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/ob_tran.hpp
deleted file mode 100644
index ae74cc27d20..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/ob_tran.hpp
+++ /dev/null
@@ -1,575 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_OB_TRAN_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_OB_TRAN_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- //struct ob_tran_oblique {};
- //struct ob_tran_transverse {};
- struct ob_tran {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail {
-
- // fwd declaration needed below
- template <typename CalculationType>
- inline detail::base_v<CalculationType, parameters<CalculationType> >*
- create_new(parameters<CalculationType> const& parameters);
-
- } // namespace detail
-
- namespace detail { namespace ob_tran
- {
-
- static const double TOL = 1e-10;
-
- template <typename Parameters>
- inline Parameters o_proj_parameters(Parameters const& par)
- {
- Parameters pj;
-
- /* get name of projection to be translated */
- pj.name = pj_param(par.params, "so_proj").s;
- /* copy existing header into new */
- pj.params = par.params;
- pj.over = par.over;
- pj.geoc = par.geoc;
- pj.a = par.a;
- pj.es = par.es;
- pj.ra = par.ra;
- pj.lam0 = par.lam0;
- pj.phi0 = par.phi0;
- pj.x0 = par.x0;
- pj.y0 = par.y0;
- pj.k0 = par.k0;
- /* force spherical earth */
- pj.one_es = pj.rone_es = 1.;
- pj.es = pj.e = 0.;
-
- return pj;
- }
-
- template <typename CalculationType, typename Parameters>
- struct par_ob_tran
- {
- par_ob_tran(Parameters const& par)
- : link(projections::detail::create_new(o_proj_parameters(par)))
- {
- if (! link.get())
- BOOST_THROW_EXCEPTION( projection_exception(-26) );
- }
-
- template <typename T>
- inline void fwd(T& lp_lon, T& lp_lat, T& xy_x, T& xy_y) const
- {
- link->fwd(lp_lon, lp_lat, xy_x, xy_y);
- }
-
- template <typename T>
- inline void inv(T& xy_x, T& xy_y, T& lp_lon, T& lp_lat) const
- {
- link->inv(xy_x, xy_y, lp_lon, lp_lat);
- }
-
- boost::shared_ptr<base_v<CalculationType, Parameters> > link;
- CalculationType lamp;
- CalculationType cphip, sphip;
- };
-
- template <typename StaticParameters, typename CalculationType, typename Parameters>
- struct par_ob_tran_static
- {
- typedef typename srs::par4::detail::pick_o_proj_tag
- <
- StaticParameters
- >::type o_proj_tag;
-
- typedef typename projections::detail::static_projection_type
- <
- o_proj_tag,
- srs_sphere_tag, // force spherical
- StaticParameters,
- CalculationType,
- Parameters
- >::type projection_type;
-
- par_ob_tran_static(Parameters const& par)
- : link(o_proj_parameters(par))
- {}
-
- template <typename T>
- inline void fwd(T& lp_lon, T& lp_lat, T& xy_x, T& xy_y) const
- {
- link.fwd(lp_lon, lp_lat, xy_x, xy_y);
- }
-
- template <typename T>
- inline void inv(T& xy_x, T& xy_y, T& lp_lon, T& lp_lat) const
- {
- link.inv(xy_x, xy_y, lp_lon, lp_lat);
- }
-
- projection_type link;
- CalculationType lamp;
- CalculationType cphip, sphip;
- };
-
- template <typename T, typename Par>
- inline void o_forward(T& lp_lon, T& lp_lat, T& xy_x, T& xy_y, Par const& proj_parm)
- {
- T coslam, sinphi, cosphi;
-
- coslam = cos(lp_lon);
- sinphi = sin(lp_lat);
- cosphi = cos(lp_lat);
- lp_lon = adjlon(aatan2(cosphi * sin(lp_lon), proj_parm.sphip * cosphi * coslam +
- proj_parm.cphip * sinphi) + proj_parm.lamp);
- lp_lat = aasin(proj_parm.sphip * sinphi - proj_parm.cphip * cosphi * coslam);
-
- proj_parm.fwd(lp_lon, lp_lat, xy_x, xy_y);
- }
-
- template <typename T, typename Par>
- inline void o_inverse(T& xy_x, T& xy_y, T& lp_lon, T& lp_lat, Par const& proj_parm)
- {
- T coslam, sinphi, cosphi;
-
- proj_parm.inv(xy_x, xy_y, lp_lon, lp_lat);
- if (lp_lon != HUGE_VAL) {
- coslam = cos(lp_lon -= proj_parm.lamp);
- sinphi = sin(lp_lat);
- cosphi = cos(lp_lat);
- lp_lat = aasin(proj_parm.sphip * sinphi + proj_parm.cphip * cosphi * coslam);
- lp_lon = aatan2(cosphi * sin(lp_lon), proj_parm.sphip * cosphi * coslam -
- proj_parm.cphip * sinphi);
- }
- }
-
- template <typename T, typename Par>
- inline void t_forward(T& lp_lon, T& lp_lat, T& xy_x, T& xy_y, Par const& proj_parm)
- {
- T cosphi, coslam;
-
- cosphi = cos(lp_lat);
- coslam = cos(lp_lon);
- lp_lon = adjlon(aatan2(cosphi * sin(lp_lon), sin(lp_lat)) + proj_parm.lamp);
- lp_lat = aasin(- cosphi * coslam);
- proj_parm.fwd(lp_lon, lp_lat, xy_x, xy_y);
- }
-
- template <typename T, typename Par>
- inline void t_inverse(T& xy_x, T& xy_y, T& lp_lon, T& lp_lat, Par const& proj_parm)
- {
- T cosphi, t;
-
- proj_parm.inv(xy_x, xy_y, lp_lon, lp_lat);
- if (lp_lon != HUGE_VAL) {
- cosphi = cos(lp_lat);
- t = lp_lon - proj_parm.lamp;
- lp_lon = aatan2(cosphi * sin(t), - sin(lp_lat));
- lp_lat = aasin(cosphi * cos(t));
- }
- }
-
- // General Oblique Transformation
- template <typename CalculationType, typename Parameters, typename ProjParameters>
- inline CalculationType setup_ob_tran(Parameters & par, ProjParameters& proj_parm)
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType phip;
-
- par.es = 0.; /* force to spherical */
-
- // proj_parm.link should be created at this point
-
- if (pj_param(par.params, "to_alpha").i) {
- CalculationType lamc, phic, alpha;
-
- lamc = pj_param(par.params, "ro_lon_c").f;
- phic = pj_param(par.params, "ro_lat_c").f;
- alpha = pj_param(par.params, "ro_alpha").f;
- /*
- if (fabs(phic) <= TOL ||
- fabs(fabs(phic) - HALFPI) <= TOL ||
- fabs(fabs(alpha) - HALFPI) <= TOL)
- */
- if (fabs(fabs(phic) - HALFPI) <= TOL)
- BOOST_THROW_EXCEPTION( projection_exception(-32) );
- proj_parm.lamp = lamc + aatan2(-cos(alpha), -sin(alpha) * sin(phic));
- phip = aasin(cos(phic) * sin(alpha));
- } else if (pj_param(par.params, "to_lat_p").i) { /* specified new pole */
- proj_parm.lamp = pj_param(par.params, "ro_lon_p").f;
- phip = pj_param(par.params, "ro_lat_p").f;
- } else { /* specified new "equator" points */
- CalculationType lam1, lam2, phi1, phi2, con;
-
- lam1 = pj_param(par.params, "ro_lon_1").f;
- phi1 = pj_param(par.params, "ro_lat_1").f;
- lam2 = pj_param(par.params, "ro_lon_2").f;
- phi2 = pj_param(par.params, "ro_lat_2").f;
- if (fabs(phi1 - phi2) <= TOL ||
- (con = fabs(phi1)) <= TOL ||
- fabs(con - HALFPI) <= TOL ||
- fabs(fabs(phi2) - HALFPI) <= TOL)
- BOOST_THROW_EXCEPTION( projection_exception(-33) );
- proj_parm.lamp = atan2(cos(phi1) * sin(phi2) * cos(lam1) -
- sin(phi1) * cos(phi2) * cos(lam2),
- sin(phi1) * cos(phi2) * sin(lam2) -
- cos(phi1) * sin(phi2) * sin(lam1));
- phip = atan(-cos(proj_parm.lamp - lam1) / tan(phi1));
- }
- if (fabs(phip) > TOL) { /* oblique */
- proj_parm.cphip = cos(phip);
- proj_parm.sphip = sin(phip);
- } else { /* transverse */
- }
- // return phip to choose model
- return phip;
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_ob_tran_oblique : public base_t_fi<base_ob_tran_oblique<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_ob_tran<CalculationType, Parameters> m_proj_parm;
-
- inline base_ob_tran_oblique(Parameters const& par,
- par_ob_tran<CalculationType, Parameters> const& proj_parm)
- : base_t_fi
- <
- base_ob_tran_oblique<CalculationType, Parameters>, CalculationType, Parameters
- >(*this, par)
- , m_proj_parm(proj_parm)
- {}
-
- // FORWARD(o_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- o_forward(lp_lon, lp_lat, xy_x, xy_y, this->m_proj_parm);
- }
-
- // INVERSE(o_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- o_inverse(xy_x, xy_y, lp_lon, lp_lat, this->m_proj_parm);
- }
-
- static inline std::string get_name()
- {
- return "ob_tran_oblique";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_ob_tran_transverse : public base_t_fi<base_ob_tran_transverse<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_ob_tran<CalculationType, Parameters> m_proj_parm;
-
- inline base_ob_tran_transverse(Parameters const& par,
- par_ob_tran<CalculationType, Parameters> const& proj_parm)
- : base_t_fi
- <
- base_ob_tran_transverse<CalculationType, Parameters>, CalculationType, Parameters
- >(*this, par)
- , m_proj_parm(proj_parm)
- {}
-
- // FORWARD(t_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- t_forward(lp_lon, lp_lat, xy_x, xy_y, this->m_proj_parm);
- }
-
- // INVERSE(t_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- t_inverse(xy_x, xy_y, lp_lon, lp_lat, this->m_proj_parm);
- }
-
- static inline std::string get_name()
- {
- return "ob_tran_transverse";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename StaticParameters, typename CalculationType, typename Parameters>
- struct base_ob_tran_static : public base_t_fi<base_ob_tran_static<StaticParameters, CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_ob_tran_static<StaticParameters, CalculationType, Parameters> m_proj_parm;
- bool m_is_oblique;
-
- inline base_ob_tran_static(Parameters const& par)
- : base_t_fi<base_ob_tran_static<StaticParameters, CalculationType, Parameters>, CalculationType, Parameters>(*this, par)
- , m_proj_parm(par)
- {}
-
- // FORWARD(o_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- if (m_is_oblique) {
- o_forward(lp_lon, lp_lat, xy_x, xy_y, this->m_proj_parm);
- } else {
- t_forward(lp_lon, lp_lat, xy_x, xy_y, this->m_proj_parm);
- }
- }
-
- // INVERSE(o_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- if (m_is_oblique) {
- o_inverse(xy_x, xy_y, lp_lon, lp_lat, this->m_proj_parm);
- } else {
- t_inverse(xy_x, xy_y, lp_lon, lp_lat, this->m_proj_parm);
- }
- }
-
- static inline std::string get_name()
- {
- return "ob_tran";
- }
-
- };
-
- }} // namespace detail::ob_tran
- #endif // doxygen
-
- /*!
- \brief General Oblique Transformation projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- \par Projection parameters
- - o_proj (string)
- - Plus projection parameters
- - o_lat_p (degrees)
- - o_lon_p (degrees)
- - New pole
- - o_alpha: Alpha (degrees)
- - o_lon_c (degrees)
- - o_lat_c (degrees)
- - o_lon_1 (degrees)
- - o_lat_1: Latitude of first standard parallel (degrees)
- - o_lon_2 (degrees)
- - o_lat_2: Latitude of second standard parallel (degrees)
- \par Example
- \image html ex_ob_tran.gif
- */
- template <typename CalculationType, typename Parameters>
- struct ob_tran_oblique : public detail::ob_tran::base_ob_tran_oblique<CalculationType, Parameters>
- {
- inline ob_tran_oblique(Parameters const& par,
- detail::ob_tran::par_ob_tran<CalculationType, Parameters> const& proj_parm)
- : detail::ob_tran::base_ob_tran_oblique<CalculationType, Parameters>(par, proj_parm)
- {
- // already done
- //detail::ob_tran::setup_ob_tran(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief General Oblique Transformation projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- \par Projection parameters
- - o_proj (string)
- - Plus projection parameters
- - o_lat_p (degrees)
- - o_lon_p (degrees)
- - New pole
- - o_alpha: Alpha (degrees)
- - o_lon_c (degrees)
- - o_lat_c (degrees)
- - o_lon_1 (degrees)
- - o_lat_1: Latitude of first standard parallel (degrees)
- - o_lon_2 (degrees)
- - o_lat_2: Latitude of second standard parallel (degrees)
- \par Example
- \image html ex_ob_tran.gif
- */
- template <typename CalculationType, typename Parameters>
- struct ob_tran_transverse : public detail::ob_tran::base_ob_tran_transverse<CalculationType, Parameters>
- {
- inline ob_tran_transverse(Parameters const& par,
- detail::ob_tran::par_ob_tran<CalculationType, Parameters> const& proj_parm)
- : detail::ob_tran::base_ob_tran_transverse<CalculationType, Parameters>(par, proj_parm)
- {
- // already done
- //detail::ob_tran::setup_ob_tran(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief General Oblique Transformation projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- \par Projection parameters
- - o_proj (string)
- - Plus projection parameters
- - o_lat_p (degrees)
- - o_lon_p (degrees)
- - New pole
- - o_alpha: Alpha (degrees)
- - o_lon_c (degrees)
- - o_lat_c (degrees)
- - o_lon_1 (degrees)
- - o_lat_1: Latitude of first standard parallel (degrees)
- - o_lon_2 (degrees)
- - o_lat_2: Latitude of second standard parallel (degrees)
- \par Example
- \image html ex_ob_tran.gif
- */
- template <typename StaticParameters, typename CalculationType, typename Parameters>
- struct ob_tran_static : public detail::ob_tran::base_ob_tran_static<StaticParameters, CalculationType, Parameters>
- {
- inline ob_tran_static(const Parameters& par)
- : detail::ob_tran::base_ob_tran_static<StaticParameters, CalculationType, Parameters>(par)
- {
- CalculationType phip = detail::ob_tran::setup_ob_tran<CalculationType>(this->m_par, this->m_proj_parm);
- this->m_is_oblique = fabs(phip) > detail::ob_tran::TOL;
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- template <typename BGP, typename CT, typename P>
- struct static_projection_type<srs::par4::ob_tran, srs_sphere_tag, BGP, CT, P>
- {
- typedef ob_tran_static<BGP, CT, P> type;
- };
- template <typename BGP, typename CT, typename P>
- struct static_projection_type<srs::par4::ob_tran, srs_spheroid_tag, BGP, CT, P>
- {
- typedef ob_tran_static<BGP, CT, P> type;
- };
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class ob_tran_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- Parameters params = par;
- detail::ob_tran::par_ob_tran<CalculationType, Parameters> proj_parm(params);
- CalculationType phip = detail::ob_tran::setup_ob_tran<CalculationType>(params, proj_parm);
-
- if (fabs(phip) > detail::ob_tran::TOL)
- return new base_v_fi<ob_tran_oblique<CalculationType, Parameters>, CalculationType, Parameters>(params, proj_parm);
- else
- return new base_v_fi<ob_tran_transverse<CalculationType, Parameters>, CalculationType, Parameters>(params, proj_parm);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void ob_tran_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("ob_tran", new ob_tran_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_OB_TRAN_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/ocea.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/ocea.hpp
deleted file mode 100644
index 4b8da5be6e5..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/ocea.hpp
+++ /dev/null
@@ -1,231 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_OCEA_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_OCEA_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct ocea {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace ocea
- {
- template <typename T>
- struct par_ocea
- {
- T rok;
- T rtk;
- T sinphi;
- T cosphi;
- T singam;
- T cosgam;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_ocea_spheroid : public base_t_fi<base_ocea_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_ocea<CalculationType> m_proj_parm;
-
- inline base_ocea_spheroid(const Parameters& par)
- : base_t_fi<base_ocea_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType ONEPI = detail::ONEPI<CalculationType>();
-
- CalculationType t;
-
- xy_y = sin(lp_lon);
- /*
- xy_x = atan2((tan(lp_lat) * this->m_proj_parm.cosphi + this->m_proj_parm.sinphi * xy_y) , cos(lp_lon));
- */
- t = cos(lp_lon);
- xy_x = atan((tan(lp_lat) * this->m_proj_parm.cosphi + this->m_proj_parm.sinphi * xy_y) / t);
- if (t < 0.)
- xy_x += ONEPI;
- xy_x *= this->m_proj_parm.rtk;
- xy_y = this->m_proj_parm.rok * (this->m_proj_parm.sinphi * sin(lp_lat) - this->m_proj_parm.cosphi * cos(lp_lat) * xy_y);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType t, s;
-
- xy_y /= this->m_proj_parm.rok;
- xy_x /= this->m_proj_parm.rtk;
- t = sqrt(1. - xy_y * xy_y);
- lp_lat = asin(xy_y * this->m_proj_parm.sinphi + t * this->m_proj_parm.cosphi * (s = sin(xy_x)));
- lp_lon = atan2(t * this->m_proj_parm.sinphi * s - xy_y * this->m_proj_parm.cosphi,
- t * cos(xy_x));
- }
-
- static inline std::string get_name()
- {
- return "ocea_spheroid";
- }
-
- };
-
- // Oblique Cylindrical Equal Area
- template <typename Parameters, typename T>
- inline void setup_ocea(Parameters& par, par_ocea<T>& proj_parm)
- {
- static const T HALFPI = detail::HALFPI<T>();
-
- T phi_0=0.0, phi_1, phi_2, lam_1, lam_2, lonz, alpha;
-
- proj_parm.rok = 1. / par.k0;
- proj_parm.rtk = par.k0;
- if ( pj_param(par.params, "talpha").i) {
- alpha = pj_param(par.params, "ralpha").f;
- lonz = pj_param(par.params, "rlonc").f;
- proj_parm.singam = atan(-cos(alpha)/(-sin(phi_0) * sin(alpha))) + lonz;
- proj_parm.sinphi = asin(cos(phi_0) * sin(alpha));
- } else {
- phi_1 = pj_param(par.params, "rlat_1").f;
- phi_2 = pj_param(par.params, "rlat_2").f;
- lam_1 = pj_param(par.params, "rlon_1").f;
- lam_2 = pj_param(par.params, "rlon_2").f;
- proj_parm.singam = atan2(cos(phi_1) * sin(phi_2) * cos(lam_1) -
- sin(phi_1) * cos(phi_2) * cos(lam_2),
- sin(phi_1) * cos(phi_2) * sin(lam_2) -
- cos(phi_1) * sin(phi_2) * sin(lam_1) );
- if (lam_1 == -HALFPI)
- proj_parm.singam = -proj_parm.singam;
- proj_parm.sinphi = atan(-cos(proj_parm.singam - lam_1) / tan(phi_1));
- }
- par.lam0 = proj_parm.singam + HALFPI;
- proj_parm.cosphi = cos(proj_parm.sinphi);
- proj_parm.sinphi = sin(proj_parm.sinphi);
- proj_parm.cosgam = cos(proj_parm.singam);
- proj_parm.singam = sin(proj_parm.singam);
- par.es = 0.;
- }
-
- }} // namespace detail::ocea
- #endif // doxygen
-
- /*!
- \brief Oblique Cylindrical Equal Area projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- \par Projection parameters
- - lonc: Longitude (only used if alpha (or gamma) is specified) (degrees)
- - alpha: Alpha (degrees)
- - lat_1: Latitude of first standard parallel (degrees)
- - lat_2: Latitude of second standard parallel (degrees)
- - lon_1 (degrees)
- - lon_2 (degrees)
- \par Example
- \image html ex_ocea.gif
- */
- template <typename CalculationType, typename Parameters>
- struct ocea_spheroid : public detail::ocea::base_ocea_spheroid<CalculationType, Parameters>
- {
- inline ocea_spheroid(const Parameters& par) : detail::ocea::base_ocea_spheroid<CalculationType, Parameters>(par)
- {
- detail::ocea::setup_ocea(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::ocea, ocea_spheroid, ocea_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class ocea_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<ocea_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void ocea_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("ocea", new ocea_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_OCEA_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/oea.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/oea.hpp
deleted file mode 100644
index 469a41a2d55..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/oea.hpp
+++ /dev/null
@@ -1,214 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_OEA_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_OEA_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct oea {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace oea
- {
- template <typename T>
- struct par_oea
- {
- T theta;
- T m, n;
- T two_r_m, two_r_n, rm, rn, hm, hn;
- T cp0, sp0;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_oea_spheroid : public base_t_fi<base_oea_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_oea<CalculationType> m_proj_parm;
-
- inline base_oea_spheroid(const Parameters& par)
- : base_t_fi<base_oea_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) sphere
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType Az, M, N, cp, sp, cl, shz;
-
- cp = cos(lp_lat);
- sp = sin(lp_lat);
- cl = cos(lp_lon);
- Az = aatan2(cp * sin(lp_lon), this->m_proj_parm.cp0 * sp - this->m_proj_parm.sp0 * cp * cl) + this->m_proj_parm.theta;
- shz = sin(0.5 * aacos(this->m_proj_parm.sp0 * sp + this->m_proj_parm.cp0 * cp * cl));
- M = aasin(shz * sin(Az));
- N = aasin(shz * cos(Az) * cos(M) / cos(M * this->m_proj_parm.two_r_m));
- xy_y = this->m_proj_parm.n * sin(N * this->m_proj_parm.two_r_n);
- xy_x = this->m_proj_parm.m * sin(M * this->m_proj_parm.two_r_m) * cos(N) / cos(N * this->m_proj_parm.two_r_n);
- }
-
- // INVERSE(s_inverse) sphere
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType N, M, xp, yp, z, Az, cz, sz, cAz;
-
- N = this->m_proj_parm.hn * aasin(xy_y * this->m_proj_parm.rn);
- M = this->m_proj_parm.hm * aasin(xy_x * this->m_proj_parm.rm * cos(N * this->m_proj_parm.two_r_n) / cos(N));
- xp = 2. * sin(M);
- yp = 2. * sin(N) * cos(M * this->m_proj_parm.two_r_m) / cos(M);
- cAz = cos(Az = aatan2(xp, yp) - this->m_proj_parm.theta);
- z = 2. * aasin(0.5 * boost::math::hypot(xp, yp));
- sz = sin(z);
- cz = cos(z);
- lp_lat = aasin(this->m_proj_parm.sp0 * cz + this->m_proj_parm.cp0 * sz * cAz);
- lp_lon = aatan2(sz * sin(Az),
- this->m_proj_parm.cp0 * cz - this->m_proj_parm.sp0 * sz * cAz);
- }
-
- static inline std::string get_name()
- {
- return "oea_spheroid";
- }
-
- };
-
- // Oblated Equal Area
- template <typename Parameters, typename T>
- inline void setup_oea(Parameters& par, par_oea<T>& proj_parm)
- {
- if (((proj_parm.n = pj_param(par.params, "dn").f) <= 0.) ||
- ((proj_parm.m = pj_param(par.params, "dm").f) <= 0.))
- BOOST_THROW_EXCEPTION( projection_exception(-39) );
- else {
- proj_parm.theta = pj_param(par.params, "rtheta").f;
- proj_parm.sp0 = sin(par.phi0);
- proj_parm.cp0 = cos(par.phi0);
- proj_parm.rn = 1./ proj_parm.n;
- proj_parm.rm = 1./ proj_parm.m;
- proj_parm.two_r_n = 2. * proj_parm.rn;
- proj_parm.two_r_m = 2. * proj_parm.rm;
- proj_parm.hm = 0.5 * proj_parm.m;
- proj_parm.hn = 0.5 * proj_parm.n;
- par.es = 0.;
- }
- }
-
- }} // namespace detail::oea
- #endif // doxygen
-
- /*!
- \brief Oblated Equal Area projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- \par Projection parameters
- - n (real)
- - m (real)
- - theta: Theta (degrees)
- \par Example
- \image html ex_oea.gif
- */
- template <typename CalculationType, typename Parameters>
- struct oea_spheroid : public detail::oea::base_oea_spheroid<CalculationType, Parameters>
- {
- inline oea_spheroid(const Parameters& par) : detail::oea::base_oea_spheroid<CalculationType, Parameters>(par)
- {
- detail::oea::setup_oea(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::oea, oea_spheroid, oea_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class oea_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<oea_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void oea_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("oea", new oea_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_OEA_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/omerc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/omerc.hpp
deleted file mode 100644
index 4da6871d13b..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/omerc.hpp
+++ /dev/null
@@ -1,354 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_OMERC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_OMERC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Copyright (c) 2003, 2006 Gerald I. Evenden
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_phi2.hpp>
-#include <boost/geometry/srs/projections/impl/pj_tsfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct omerc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace omerc
- {
- static const double TOL = 1.e-7;
- static const double EPS = 1.e-10;
-
- template <typename T>
- struct par_omerc
- {
- T A, B, E, AB, ArB, BrA, rB, singam, cosgam, sinrot, cosrot;
- T v_pole_n, v_pole_s, u_0;
- int no_rot;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_omerc_ellipsoid : public base_t_fi<base_omerc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_omerc<CalculationType> m_proj_parm;
-
- inline base_omerc_ellipsoid(const Parameters& par)
- : base_t_fi<base_omerc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType Q, S, T, U, V, temp, u, v;
-
- if (fabs(fabs(lp_lat) - HALFPI) > EPS) {
- Q = this->m_proj_parm.E / pow(pj_tsfn(lp_lat, sin(lp_lat), this->m_par.e), this->m_proj_parm.B);
- temp = 1. / Q;
- S = .5 * (Q - temp);
- T = .5 * (Q + temp);
- V = sin(this->m_proj_parm.B * lp_lon);
- U = (S * this->m_proj_parm.singam - V * this->m_proj_parm.cosgam) / T;
- if (fabs(fabs(U) - 1.0) < EPS)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- v = 0.5 * this->m_proj_parm.ArB * log((1. - U)/(1. + U));
- temp = cos(this->m_proj_parm.B * lp_lon);
- if(fabs(temp) < TOL) {
- u = this->m_proj_parm.A * lp_lon;
- } else {
- u = this->m_proj_parm.ArB * atan2((S * this->m_proj_parm.cosgam + V * this->m_proj_parm.singam), temp);
- }
- } else {
- v = lp_lat > 0 ? this->m_proj_parm.v_pole_n : this->m_proj_parm.v_pole_s;
- u = this->m_proj_parm.ArB * lp_lat;
- }
- if (this->m_proj_parm.no_rot) {
- xy_x = u;
- xy_y = v;
- } else {
- u -= this->m_proj_parm.u_0;
- xy_x = v * this->m_proj_parm.cosrot + u * this->m_proj_parm.sinrot;
- xy_y = u * this->m_proj_parm.cosrot - v * this->m_proj_parm.sinrot;
- }
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType u, v, Qp, Sp, Tp, Vp, Up;
-
- if (this->m_proj_parm.no_rot) {
- v = xy_y;
- u = xy_x;
- } else {
- v = xy_x * this->m_proj_parm.cosrot - xy_y * this->m_proj_parm.sinrot;
- u = xy_y * this->m_proj_parm.cosrot + xy_x * this->m_proj_parm.sinrot + this->m_proj_parm.u_0;
- }
- Qp = exp(- this->m_proj_parm.BrA * v);
- Sp = .5 * (Qp - 1. / Qp);
- Tp = .5 * (Qp + 1. / Qp);
- Vp = sin(this->m_proj_parm.BrA * u);
- Up = (Vp * this->m_proj_parm.cosgam + Sp * this->m_proj_parm.singam) / Tp;
- if (fabs(fabs(Up) - 1.) < EPS) {
- lp_lon = 0.;
- lp_lat = Up < 0. ? -HALFPI : HALFPI;
- } else {
- lp_lat = this->m_proj_parm.E / sqrt((1. + Up) / (1. - Up));
- if ((lp_lat = pj_phi2(pow(lp_lat, 1. / this->m_proj_parm.B), this->m_par.e)) == HUGE_VAL)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- lp_lon = - this->m_proj_parm.rB * atan2((Sp * this->m_proj_parm.cosgam -
- Vp * this->m_proj_parm.singam), cos(this->m_proj_parm.BrA * u));
- }
- }
-
- static inline std::string get_name()
- {
- return "omerc_ellipsoid";
- }
-
- };
-
- // Oblique Mercator
- template <typename Parameters, typename T>
- inline void setup_omerc(Parameters& par, par_omerc<T>& proj_parm)
- {
- static const T FORTPI = detail::FORTPI<T>();
- static const T HALFPI = detail::HALFPI<T>();
- static const T ONEPI = detail::ONEPI<T>();
- static const T TWOPI = detail::TWOPI<T>();
-
- T con, com, cosph0, D, F, H, L, sinph0, p, J, gamma=0,
- gamma0, lamc=0, lam1=0, lam2=0, phi1=0, phi2=0, alpha_c=0.0;
- int alp, gam, no_off = 0;
-
- proj_parm.no_rot = pj_param(par.params, "tno_rot").i;
- if ((alp = pj_param(par.params, "talpha").i) != 0)
- alpha_c = pj_param(par.params, "ralpha").f;
- if ((gam = pj_param(par.params, "tgamma").i) != 0)
- gamma = pj_param(par.params, "rgamma").f;
- if (alp || gam) {
- lamc = pj_param(par.params, "rlonc").f;
- no_off =
- /* For libproj4 compatability */
- pj_param(par.params, "tno_off").i
- /* for backward compatibility */
- || pj_param(par.params, "tno_uoff").i;
- if( no_off )
- {
- /* Mark the parameter as used, so that the pj_get_def() return them */
- pj_param(par.params, "sno_uoff");
- pj_param(par.params, "sno_off");
- }
- } else {
- lam1 = pj_param(par.params, "rlon_1").f;
- phi1 = pj_param(par.params, "rlat_1").f;
- lam2 = pj_param(par.params, "rlon_2").f;
- phi2 = pj_param(par.params, "rlat_2").f;
- if (fabs(phi1 - phi2) <= TOL ||
- (con = fabs(phi1)) <= TOL ||
- fabs(con - HALFPI) <= TOL ||
- fabs(fabs(par.phi0) - HALFPI) <= TOL ||
- fabs(fabs(phi2) - HALFPI) <= TOL)
- BOOST_THROW_EXCEPTION( projection_exception(-33) );
- }
- com = sqrt(par.one_es);
- if (fabs(par.phi0) > EPS) {
- sinph0 = sin(par.phi0);
- cosph0 = cos(par.phi0);
- con = 1. - par.es * sinph0 * sinph0;
- proj_parm.B = cosph0 * cosph0;
- proj_parm.B = sqrt(1. + par.es * proj_parm.B * proj_parm.B / par.one_es);
- proj_parm.A = proj_parm.B * par.k0 * com / con;
- D = proj_parm.B * com / (cosph0 * sqrt(con));
- if ((F = D * D - 1.) <= 0.)
- F = 0.;
- else {
- F = sqrt(F);
- if (par.phi0 < 0.)
- F = -F;
- }
- proj_parm.E = F += D;
- proj_parm.E *= pow(pj_tsfn(par.phi0, sinph0, par.e), proj_parm.B);
- } else {
- proj_parm.B = 1. / com;
- proj_parm.A = par.k0;
- proj_parm.E = D = F = 1.;
- }
- if (alp || gam) {
- if (alp) {
- gamma0 = asin(sin(alpha_c) / D);
- if (!gam)
- gamma = alpha_c;
- } else
- alpha_c = asin(D*sin(gamma0 = gamma));
- if ((con = fabs(alpha_c)) <= TOL ||
- fabs(con - ONEPI) <= TOL ||
- fabs(fabs(par.phi0) - HALFPI) <= TOL)
- BOOST_THROW_EXCEPTION( projection_exception(-32) );
- par.lam0 = lamc - asin(.5 * (F - 1. / F) *
- tan(gamma0)) / proj_parm.B;
- } else {
- H = pow(pj_tsfn(phi1, sin(phi1), par.e), proj_parm.B);
- L = pow(pj_tsfn(phi2, sin(phi2), par.e), proj_parm.B);
- F = proj_parm.E / H;
- p = (L - H) / (L + H);
- J = proj_parm.E * proj_parm.E;
- J = (J - L * H) / (J + L * H);
- if ((con = lam1 - lam2) < -ONEPI)
- lam2 -= TWOPI;
- else if (con > ONEPI)
- lam2 += TWOPI;
- par.lam0 = adjlon(.5 * (lam1 + lam2) - atan(
- J * tan(.5 * proj_parm.B * (lam1 - lam2)) / p) / proj_parm.B);
- gamma0 = atan(2. * sin(proj_parm.B * adjlon(lam1 - par.lam0)) /
- (F - 1. / F));
- gamma = alpha_c = asin(D * sin(gamma0));
- }
- proj_parm.singam = sin(gamma0);
- proj_parm.cosgam = cos(gamma0);
- proj_parm.sinrot = sin(gamma);
- proj_parm.cosrot = cos(gamma);
- proj_parm.BrA = 1. / (proj_parm.ArB = proj_parm.A * (proj_parm.rB = 1. / proj_parm.B));
- proj_parm.AB = proj_parm.A * proj_parm.B;
- if (no_off)
- proj_parm.u_0 = 0;
- else {
- proj_parm.u_0 = fabs(proj_parm.ArB * atan2(sqrt(D * D - 1.), cos(alpha_c)));
- if (par.phi0 < 0.)
- proj_parm.u_0 = - proj_parm.u_0;
- }
- F = 0.5 * gamma0;
- proj_parm.v_pole_n = proj_parm.ArB * log(tan(FORTPI - F));
- proj_parm.v_pole_s = proj_parm.ArB * log(tan(FORTPI + F));
- }
-
- }} // namespace detail::omerc
- #endif // doxygen
-
- /*!
- \brief Oblique Mercator projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - no_rot: No rotation
- - alpha: Alpha (degrees)
- - gamma: Gamma (degrees)
- - no_off: Only for compatibility with libproj, proj4 (string)
- - lonc: Longitude (only used if alpha (or gamma) is specified) (degrees)
- - lon_1 (degrees)
- - lat_1: Latitude of first standard parallel (degrees)
- - lon_2 (degrees)
- - lat_2: Latitude of second standard parallel (degrees)
- - no_uoff (string)
- \par Example
- \image html ex_omerc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct omerc_ellipsoid : public detail::omerc::base_omerc_ellipsoid<CalculationType, Parameters>
- {
- inline omerc_ellipsoid(const Parameters& par) : detail::omerc::base_omerc_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::omerc::setup_omerc(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::omerc, omerc_ellipsoid, omerc_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class omerc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<omerc_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void omerc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("omerc", new omerc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_OMERC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/ortho.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/ortho.hpp
deleted file mode 100644
index 4510f9dab93..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/ortho.hpp
+++ /dev/null
@@ -1,257 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_ORTHO_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ORTHO_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/config.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct ortho {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace ortho
- {
-
- static const double EPS10 = 1.e-10;
- static const int N_POLE = 0;
- static const int S_POLE = 1;
- static const int EQUIT = 2;
- static const int OBLIQ = 3;
-
- template <typename T>
- struct par_ortho
- {
- T sinph0;
- T cosph0;
- int mode;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_ortho_spheroid : public base_t_fi<base_ortho_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_ortho<CalculationType> m_proj_parm;
-
- inline base_ortho_spheroid(const Parameters& par)
- : base_t_fi<base_ortho_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType coslam, cosphi, sinphi;
-
- cosphi = cos(lp_lat);
- coslam = cos(lp_lon);
- switch (this->m_proj_parm.mode) {
- case EQUIT:
- if (cosphi * coslam < - EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_y = sin(lp_lat);
- break;
- case OBLIQ:
- if (this->m_proj_parm.sinph0 * (sinphi = sin(lp_lat)) +
- this->m_proj_parm.cosph0 * cosphi * coslam < - EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_y = this->m_proj_parm.cosph0 * sinphi - this->m_proj_parm.sinph0 * cosphi * coslam;
- break;
- case N_POLE:
- coslam = - coslam;
- BOOST_FALLTHROUGH;
- case S_POLE:
- if (fabs(lp_lat - this->m_par.phi0) - EPS10 > HALFPI)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_y = cosphi * coslam;
- break;
- }
- xy_x = cosphi * sin(lp_lon);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType rh, cosc, sinc;
-
- if ((sinc = (rh = boost::math::hypot(xy_x, xy_y))) > 1.) {
- if ((sinc - 1.) > EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- sinc = 1.;
- }
- cosc = sqrt(1. - sinc * sinc); /* in this range OK */
- if (fabs(rh) <= EPS10) {
- lp_lat = this->m_par.phi0;
- lp_lon = 0.0;
- } else {
- switch (this->m_proj_parm.mode) {
- case N_POLE:
- xy_y = -xy_y;
- lp_lat = acos(sinc);
- break;
- case S_POLE:
- lp_lat = - acos(sinc);
- break;
- case EQUIT:
- lp_lat = xy_y * sinc / rh;
- xy_x *= sinc;
- xy_y = cosc * rh;
- goto sinchk;
- case OBLIQ:
- lp_lat = cosc * this->m_proj_parm.sinph0 + xy_y * sinc * this->m_proj_parm.cosph0 /rh;
- xy_y = (cosc - this->m_proj_parm.sinph0 * lp_lat) * rh;
- xy_x *= sinc * this->m_proj_parm.cosph0;
- sinchk:
- if (fabs(lp_lat) >= 1.)
- lp_lat = lp_lat < 0. ? -HALFPI : HALFPI;
- else
- lp_lat = asin(lp_lat);
- break;
- }
- lp_lon = (xy_y == 0. && (this->m_proj_parm.mode == OBLIQ || this->m_proj_parm.mode == EQUIT))
- ? (xy_x == 0. ? 0. : xy_x < 0. ? -HALFPI : HALFPI)
- : atan2(xy_x, xy_y);
- }
- }
-
- static inline std::string get_name()
- {
- return "ortho_spheroid";
- }
-
- };
-
- // Orthographic
- template <typename Parameters, typename T>
- inline void setup_ortho(Parameters& par, par_ortho<T>& proj_parm)
- {
- if (fabs(fabs(par.phi0) - geometry::math::half_pi<T>()) <= EPS10)
- proj_parm.mode = par.phi0 < 0. ? S_POLE : N_POLE;
- else if (fabs(par.phi0) > EPS10) {
- proj_parm.mode = OBLIQ;
- proj_parm.sinph0 = sin(par.phi0);
- proj_parm.cosph0 = cos(par.phi0);
- } else
- proj_parm.mode = EQUIT;
- par.es = 0.;
- }
-
- }} // namespace detail::ortho
- #endif // doxygen
-
- /*!
- \brief Orthographic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- \par Example
- \image html ex_ortho.gif
- */
- template <typename CalculationType, typename Parameters>
- struct ortho_spheroid : public detail::ortho::base_ortho_spheroid<CalculationType, Parameters>
- {
- inline ortho_spheroid(const Parameters& par) : detail::ortho::base_ortho_spheroid<CalculationType, Parameters>(par)
- {
- detail::ortho::setup_ortho(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::ortho, ortho_spheroid, ortho_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class ortho_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<ortho_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void ortho_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("ortho", new ortho_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_ORTHO_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/poly.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/poly.hpp
deleted file mode 100644
index ff97ecadec4..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/poly.hpp
+++ /dev/null
@@ -1,311 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_POLY_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_POLY_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_mlfn.hpp>
-#include <boost/geometry/srs/projections/impl/pj_msfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct poly {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace poly
- {
-
- static const double TOL = 1e-10;
- static const double CONV = 1e-10;
- static const int N_ITER = 10;
- static const int I_ITER = 20;
- static const double ITOL = 1.e-12;
-
- template <typename T>
- struct par_poly
- {
- T ml0;
- T en[EN_SIZE];
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_poly_ellipsoid : public base_t_fi<base_poly_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_poly<CalculationType> m_proj_parm;
-
- inline base_poly_ellipsoid(const Parameters& par)
- : base_t_fi<base_poly_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType ms, sp, cp;
-
- if (fabs(lp_lat) <= TOL) { xy_x = lp_lon; xy_y = -this->m_proj_parm.ml0; }
- else {
- sp = sin(lp_lat);
- ms = fabs(cp = cos(lp_lat)) > TOL ? pj_msfn(sp, cp, this->m_par.es) / sp : 0.;
- xy_x = ms * sin(lp_lon *= sp);
- xy_y = (pj_mlfn(lp_lat, sp, cp, this->m_proj_parm.en) - this->m_proj_parm.ml0) + ms * (1. - cos(lp_lon));
- }
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- xy_y += this->m_proj_parm.ml0;
- if (fabs(xy_y) <= TOL) {
- lp_lon = xy_x;
- lp_lat = 0.;
- } else {
- CalculationType r, c, sp, cp, s2ph, ml, mlb, mlp, dPhi;
- int i;
-
- r = xy_y * xy_y + xy_x * xy_x;
- for (lp_lat = xy_y, i = I_ITER; i ; --i) {
- sp = sin(lp_lat);
- s2ph = sp * ( cp = cos(lp_lat));
- if (fabs(cp) < ITOL)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- c = sp * (mlp = sqrt(1. - this->m_par.es * sp * sp)) / cp;
- ml = pj_mlfn(lp_lat, sp, cp, this->m_proj_parm.en);
- mlb = ml * ml + r;
- mlp = this->m_par.one_es / (mlp * mlp * mlp);
- lp_lat += ( dPhi =
- ( ml + ml + c * mlb - 2. * xy_y * (c * ml + 1.) ) / (
- this->m_par.es * s2ph * (mlb - 2. * xy_y * ml) / c +
- 2.* (xy_y - ml) * (c * mlp - 1. / s2ph) - mlp - mlp ));
- if (fabs(dPhi) <= ITOL)
- break;
- }
- if (!i)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- c = sin(lp_lat);
- lp_lon = asin(xy_x * tan(lp_lat) * sqrt(1. - this->m_par.es * c * c)) / sin(lp_lat);
- }
- }
-
- static inline std::string get_name()
- {
- return "poly_ellipsoid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_poly_spheroid : public base_t_fi<base_poly_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_poly<CalculationType> m_proj_parm;
-
- inline base_poly_spheroid(const Parameters& par)
- : base_t_fi<base_poly_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType cot, E;
-
- if (fabs(lp_lat) <= TOL) {
- xy_x = lp_lon;
- xy_y = this->m_proj_parm.ml0;
- } else {
- cot = 1. / tan(lp_lat);
- xy_x = sin(E = lp_lon * sin(lp_lat)) * cot;
- xy_y = lp_lat - this->m_par.phi0 + cot * (1. - cos(E));
- }
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType B, dphi, tp;
- int i;
-
- if (fabs(xy_y = this->m_par.phi0 + xy_y) <= TOL) {
- lp_lon = xy_x;
- lp_lat = 0.;
- } else {
- lp_lat = xy_y;
- B = xy_x * xy_x + xy_y * xy_y;
- i = N_ITER;
- do {
- tp = tan(lp_lat);
- lp_lat -= (dphi = (xy_y * (lp_lat * tp + 1.) - lp_lat -
- .5 * ( lp_lat * lp_lat + B) * tp) /
- ((lp_lat - xy_y) / tp - 1.));
- } while (fabs(dphi) > CONV && --i);
- if (! i)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- lp_lon = asin(xy_x * tan(lp_lat)) / sin(lp_lat);
- }
- }
-
- static inline std::string get_name()
- {
- return "poly_spheroid";
- }
-
- };
-
- // Polyconic (American)
- template <typename Parameters, typename T>
- inline void setup_poly(Parameters& par, par_poly<T>& proj_parm)
- {
- if (par.es) {
- if (!pj_enfn(par.es, proj_parm.en))
- BOOST_THROW_EXCEPTION( projection_exception(0) );
- proj_parm.ml0 = pj_mlfn(par.phi0, sin(par.phi0), cos(par.phi0), proj_parm.en);
- } else {
- proj_parm.ml0 = -par.phi0;
- }
- }
-
- }} // namespace detail::poly
- #endif // doxygen
-
- /*!
- \brief Polyconic (American) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_poly.gif
- */
- template <typename CalculationType, typename Parameters>
- struct poly_ellipsoid : public detail::poly::base_poly_ellipsoid<CalculationType, Parameters>
- {
- inline poly_ellipsoid(const Parameters& par) : detail::poly::base_poly_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::poly::setup_poly(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Polyconic (American) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_poly.gif
- */
- template <typename CalculationType, typename Parameters>
- struct poly_spheroid : public detail::poly::base_poly_spheroid<CalculationType, Parameters>
- {
- inline poly_spheroid(const Parameters& par) : detail::poly::base_poly_spheroid<CalculationType, Parameters>(par)
- {
- detail::poly::setup_poly(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::poly, poly_spheroid, poly_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class poly_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<poly_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<poly_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void poly_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("poly", new poly_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_POLY_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp2.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp2.hpp
deleted file mode 100644
index 458ee81aa3c..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp2.hpp
+++ /dev/null
@@ -1,193 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PUTP2_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PUTP2_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct putp2 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace putp2
- {
-
- static const double C_x = 1.89490;
- static const double C_y = 1.71848;
- static const double C_p = 0.6141848493043784;
- static const double EPS = 1e-10;
- static const int NITER = 10;
- //static const double PI_DIV_3 = 1.0471975511965977;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_putp2_spheroid : public base_t_fi<base_putp2_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_putp2_spheroid(const Parameters& par)
- : base_t_fi<base_putp2_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType PI_DIV_3 = detail::PI_DIV_3<CalculationType>();
-
- CalculationType p, c, s, V;
- int i;
-
- p = C_p * sin(lp_lat);
- s = lp_lat * lp_lat;
- lp_lat *= 0.615709 + s * ( 0.00909953 + s * 0.0046292 );
- for (i = NITER; i ; --i) {
- c = cos(lp_lat);
- s = sin(lp_lat);
- lp_lat -= V = (lp_lat + s * (c - 1.) - p) /
- (1. + c * (c - 1.) - s * s);
- if (fabs(V) < EPS)
- break;
- }
- if (!i)
- lp_lat = lp_lat < 0 ? - PI_DIV_3 : PI_DIV_3;
- xy_x = C_x * lp_lon * (cos(lp_lat) - 0.5);
- xy_y = C_y * sin(lp_lat);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType c;
-
- lp_lat = aasin(xy_y / C_y);
- lp_lon = xy_x / (C_x * ((c = cos(lp_lat)) - 0.5));
- lp_lat = aasin((lp_lat + sin(lp_lat) * (c - 1.)) / C_p);
- }
-
- static inline std::string get_name()
- {
- return "putp2_spheroid";
- }
-
- };
-
- // Putnins P2
- template <typename Parameters>
- inline void setup_putp2(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::putp2
- #endif // doxygen
-
- /*!
- \brief Putnins P2 projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_putp2.gif
- */
- template <typename CalculationType, typename Parameters>
- struct putp2_spheroid : public detail::putp2::base_putp2_spheroid<CalculationType, Parameters>
- {
- inline putp2_spheroid(const Parameters& par) : detail::putp2::base_putp2_spheroid<CalculationType, Parameters>(par)
- {
- detail::putp2::setup_putp2(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::putp2, putp2_spheroid, putp2_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class putp2_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<putp2_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void putp2_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("putp2", new putp2_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_PUTP2_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp3.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp3.hpp
deleted file mode 100644
index 91150082b8b..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp3.hpp
+++ /dev/null
@@ -1,227 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PUTP3_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PUTP3_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct putp3 {};
- struct putp3p {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace putp3
- {
-
- static const double C = 0.79788456;
- static const double RPISQ = 0.1013211836;
-
- template <typename T>
- struct par_putp3
- {
- T A;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_putp3_spheroid : public base_t_fi<base_putp3_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_putp3<CalculationType> m_proj_parm;
-
- inline base_putp3_spheroid(const Parameters& par)
- : base_t_fi<base_putp3_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = C * lp_lon * (1. - this->m_proj_parm.A * lp_lat * lp_lat);
- xy_y = C * lp_lat;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = xy_y / C;
- lp_lon = xy_x / (C * (1. - this->m_proj_parm.A * lp_lat * lp_lat));
- }
-
- static inline std::string get_name()
- {
- return "putp3_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_putp3<T>& proj_parm)
- {
- boost::ignore_unused(proj_parm);
- par.es = 0.;
- }
-
-
- // Putnins P3
- template <typename Parameters, typename T>
- inline void setup_putp3(Parameters& par, par_putp3<T>& proj_parm)
- {
- proj_parm.A = 4. * RPISQ;
- setup(par, proj_parm);
- }
-
- // Putnins P3'
- template <typename Parameters, typename T>
- inline void setup_putp3p(Parameters& par, par_putp3<T>& proj_parm)
- {
- proj_parm.A = 2. * RPISQ;
- setup(par, proj_parm);
- }
-
- }} // namespace detail::putp3
- #endif // doxygen
-
- /*!
- \brief Putnins P3 projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_putp3.gif
- */
- template <typename CalculationType, typename Parameters>
- struct putp3_spheroid : public detail::putp3::base_putp3_spheroid<CalculationType, Parameters>
- {
- inline putp3_spheroid(const Parameters& par) : detail::putp3::base_putp3_spheroid<CalculationType, Parameters>(par)
- {
- detail::putp3::setup_putp3(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Putnins P3' projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_putp3p.gif
- */
- template <typename CalculationType, typename Parameters>
- struct putp3p_spheroid : public detail::putp3::base_putp3_spheroid<CalculationType, Parameters>
- {
- inline putp3p_spheroid(const Parameters& par) : detail::putp3::base_putp3_spheroid<CalculationType, Parameters>(par)
- {
- detail::putp3::setup_putp3p(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::putp3, putp3_spheroid, putp3_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::putp3p, putp3p_spheroid, putp3p_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class putp3_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<putp3_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class putp3p_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<putp3p_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void putp3_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("putp3", new putp3_entry<CalculationType, Parameters>);
- factory.add_to_factory("putp3p", new putp3p_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_PUTP3_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp4p.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp4p.hpp
deleted file mode 100644
index 4252b37141e..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp4p.hpp
+++ /dev/null
@@ -1,231 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PUTP4P_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PUTP4P_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct putp4p {};
- struct weren {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace putp4p
- {
- template <typename T>
- struct par_putp4p
- {
- T C_x, C_y;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_putp4p_spheroid : public base_t_fi<base_putp4p_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_putp4p<CalculationType> m_proj_parm;
-
- inline base_putp4p_spheroid(const Parameters& par)
- : base_t_fi<base_putp4p_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- lp_lat = aasin(0.883883476 * sin(lp_lat));
- xy_x = this->m_proj_parm.C_x * lp_lon * cos(lp_lat);
- xy_x /= cos(lp_lat *= 0.333333333333333);
- xy_y = this->m_proj_parm.C_y * sin(lp_lat);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = aasin(xy_y / this->m_proj_parm.C_y);
- lp_lon = xy_x * cos(lp_lat) / this->m_proj_parm.C_x;
- lp_lat *= 3.;
- lp_lon /= cos(lp_lat);
- lp_lat = aasin(1.13137085 * sin(lp_lat));
- }
-
- static inline std::string get_name()
- {
- return "putp4p_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_putp4p<T>& proj_parm)
- {
- boost::ignore_unused(proj_parm);
- par.es = 0.;
- }
-
-
- // Putnins P4'
- template <typename Parameters, typename T>
- inline void setup_putp4p(Parameters& par, par_putp4p<T>& proj_parm)
- {
- proj_parm.C_x = 0.874038744;
- proj_parm.C_y = 3.883251825;
- setup(par, proj_parm);
- }
-
- // Werenskiold I
- template <typename Parameters, typename T>
- inline void setup_weren(Parameters& par, par_putp4p<T>& proj_parm)
- {
- proj_parm.C_x = 1.;
- proj_parm.C_y = 4.442882938;
- setup(par, proj_parm);
- }
-
- }} // namespace detail::putp4p
- #endif // doxygen
-
- /*!
- \brief Putnins P4' projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_putp4p.gif
- */
- template <typename CalculationType, typename Parameters>
- struct putp4p_spheroid : public detail::putp4p::base_putp4p_spheroid<CalculationType, Parameters>
- {
- inline putp4p_spheroid(const Parameters& par) : detail::putp4p::base_putp4p_spheroid<CalculationType, Parameters>(par)
- {
- detail::putp4p::setup_putp4p(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Werenskiold I projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_weren.gif
- */
- template <typename CalculationType, typename Parameters>
- struct weren_spheroid : public detail::putp4p::base_putp4p_spheroid<CalculationType, Parameters>
- {
- inline weren_spheroid(const Parameters& par) : detail::putp4p::base_putp4p_spheroid<CalculationType, Parameters>(par)
- {
- detail::putp4p::setup_weren(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::putp4p, putp4p_spheroid, putp4p_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::weren, weren_spheroid, weren_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class putp4p_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<putp4p_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class weren_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<weren_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void putp4p_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("putp4p", new putp4p_entry<CalculationType, Parameters>);
- factory.add_to_factory("weren", new weren_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_PUTP4P_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp5.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp5.hpp
deleted file mode 100644
index 652dca52310..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp5.hpp
+++ /dev/null
@@ -1,229 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PUTP5_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PUTP5_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct putp5 {};
- struct putp5p {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace putp5
- {
-
- static const double C = 1.01346;
- static const double D = 1.2158542;
-
- template <typename T>
- struct par_putp5
- {
- T A, B;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_putp5_spheroid : public base_t_fi<base_putp5_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_putp5<CalculationType> m_proj_parm;
-
- inline base_putp5_spheroid(const Parameters& par)
- : base_t_fi<base_putp5_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = C * lp_lon * (this->m_proj_parm.A - this->m_proj_parm.B * sqrt(1. + D * lp_lat * lp_lat));
- xy_y = C * lp_lat;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = xy_y / C;
- lp_lon = xy_x / (C * (this->m_proj_parm.A - this->m_proj_parm.B * sqrt(1. + D * lp_lat * lp_lat)));
- }
-
- static inline std::string get_name()
- {
- return "putp5_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_putp5<T>& proj_parm)
- {
- boost::ignore_unused(proj_parm);
- par.es = 0.;
- }
-
-
- // Putnins P5
- template <typename Parameters, typename T>
- inline void setup_putp5(Parameters& par, par_putp5<T>& proj_parm)
- {
- proj_parm.A = 2.;
- proj_parm.B = 1.;
- setup(par, proj_parm);
- }
-
- // Putnins P5'
- template <typename Parameters, typename T>
- inline void setup_putp5p(Parameters& par, par_putp5<T>& proj_parm)
- {
- proj_parm.A = 1.5;
- proj_parm.B = 0.5;
- setup(par, proj_parm);
- }
-
- }} // namespace detail::putp5
- #endif // doxygen
-
- /*!
- \brief Putnins P5 projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_putp5.gif
- */
- template <typename CalculationType, typename Parameters>
- struct putp5_spheroid : public detail::putp5::base_putp5_spheroid<CalculationType, Parameters>
- {
- inline putp5_spheroid(const Parameters& par) : detail::putp5::base_putp5_spheroid<CalculationType, Parameters>(par)
- {
- detail::putp5::setup_putp5(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Putnins P5' projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_putp5p.gif
- */
- template <typename CalculationType, typename Parameters>
- struct putp5p_spheroid : public detail::putp5::base_putp5_spheroid<CalculationType, Parameters>
- {
- inline putp5p_spheroid(const Parameters& par) : detail::putp5::base_putp5_spheroid<CalculationType, Parameters>(par)
- {
- detail::putp5::setup_putp5p(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::putp5, putp5_spheroid, putp5_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::putp5p, putp5p_spheroid, putp5p_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class putp5_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<putp5_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class putp5p_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<putp5p_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void putp5_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("putp5", new putp5_entry<CalculationType, Parameters>);
- factory.add_to_factory("putp5p", new putp5p_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_PUTP5_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp6.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp6.hpp
deleted file mode 100644
index 2dff6417172..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/putp6.hpp
+++ /dev/null
@@ -1,255 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_PUTP6_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_PUTP6_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct putp6 {};
- struct putp6p {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace putp6
- {
-
- static const double EPS = 1e-10;
- static const int NITER = 10;
- static const double CON_POLE = 1.732050807568877;
-
- template <typename T>
- struct par_putp6
- {
- T C_x, C_y, A, B, D;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_putp6_spheroid : public base_t_fi<base_putp6_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_putp6<CalculationType> m_proj_parm;
-
- inline base_putp6_spheroid(const Parameters& par)
- : base_t_fi<base_putp6_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType p, r, V;
- int i;
-
- p = this->m_proj_parm.B * sin(lp_lat);
- lp_lat *= 1.10265779;
- for (i = NITER; i ; --i) {
- r = sqrt(1. + lp_lat * lp_lat);
- lp_lat -= V = ( (this->m_proj_parm.A - r) * lp_lat - log(lp_lat + r) - p ) /
- (this->m_proj_parm.A - 2. * r);
- if (fabs(V) < EPS)
- break;
- }
- if (!i)
- lp_lat = p < 0. ? -CON_POLE : CON_POLE;
- xy_x = this->m_proj_parm.C_x * lp_lon * (this->m_proj_parm.D - sqrt(1. + lp_lat * lp_lat));
- xy_y = this->m_proj_parm.C_y * lp_lat;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType r;
-
- lp_lat = xy_y / this->m_proj_parm.C_y;
- r = sqrt(1. + lp_lat * lp_lat);
- lp_lon = xy_x / (this->m_proj_parm.C_x * (this->m_proj_parm.D - r));
- lp_lat = aasin(( (this->m_proj_parm.A - r) * lp_lat - log(lp_lat + r) ) / this->m_proj_parm.B);
- }
-
- static inline std::string get_name()
- {
- return "putp6_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_putp6<T>& proj_parm)
- {
- boost::ignore_unused(proj_parm);
- par.es = 0.;
- }
-
-
- // Putnins P6
- template <typename Parameters, typename T>
- inline void setup_putp6(Parameters& par, par_putp6<T>& proj_parm)
- {
- proj_parm.C_x = 1.01346;
- proj_parm.C_y = 0.91910;
- proj_parm.A = 4.;
- proj_parm.B = 2.1471437182129378784;
- proj_parm.D = 2.;
- setup(par, proj_parm);
- }
-
- // Putnins P6'
- template <typename Parameters, typename T>
- inline void setup_putp6p(Parameters& par, par_putp6<T>& proj_parm)
- {
- proj_parm.C_x = 0.44329;
- proj_parm.C_y = 0.80404;
- proj_parm.A = 6.;
- proj_parm.B = 5.61125;
- proj_parm.D = 3.;
- setup(par, proj_parm);
- }
-
- }} // namespace detail::putp6
- #endif // doxygen
-
- /*!
- \brief Putnins P6 projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_putp6.gif
- */
- template <typename CalculationType, typename Parameters>
- struct putp6_spheroid : public detail::putp6::base_putp6_spheroid<CalculationType, Parameters>
- {
- inline putp6_spheroid(const Parameters& par) : detail::putp6::base_putp6_spheroid<CalculationType, Parameters>(par)
- {
- detail::putp6::setup_putp6(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Putnins P6' projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_putp6p.gif
- */
- template <typename CalculationType, typename Parameters>
- struct putp6p_spheroid : public detail::putp6::base_putp6_spheroid<CalculationType, Parameters>
- {
- inline putp6p_spheroid(const Parameters& par) : detail::putp6::base_putp6_spheroid<CalculationType, Parameters>(par)
- {
- detail::putp6::setup_putp6p(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::putp6, putp6_spheroid, putp6_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::putp6p, putp6p_spheroid, putp6p_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class putp6_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<putp6_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class putp6p_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<putp6p_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void putp6_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("putp6", new putp6_entry<CalculationType, Parameters>);
- factory.add_to_factory("putp6p", new putp6p_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_PUTP6_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/qsc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/qsc.hpp
deleted file mode 100644
index 4cccc29f8b0..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/qsc.hpp
+++ /dev/null
@@ -1,539 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_QSC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_QSC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// This implements the Quadrilateralized Spherical Cube (QSC) projection.
-// Copyright (c) 2011, 2012 Martin Lambers <marlam@marlam.de>
-// The QSC projection was introduced in:
-// [OL76]
-// E.M. O'Neill and R.E. Laubscher, "Extended Studies of a Quadrilateralized
-// Spherical Cube Earth Data Base", Naval Environmental Prediction Research
-// Facility Tech. Report NEPRF 3-76 (CSC), May 1976.
-// The preceding shift from an ellipsoid to a sphere, which allows to apply
-// this projection to ellipsoids as used in the Ellipsoidal Cube Map model,
-// is described in
-// [LK12]
-// M. Lambers and A. Kolb, "Ellipsoidal Cube Maps for Accurate Rendering of
-// Planetary-Scale Terrain Data", Proc. Pacfic Graphics (Short Papers), Sep.
-// 2012
-// You have to choose one of the following projection centers,
-// corresponding to the centers of the six cube faces:
-// phi0 = 0.0, lam0 = 0.0 ("front" face)
-// phi0 = 0.0, lam0 = 90.0 ("right" face)
-// phi0 = 0.0, lam0 = 180.0 ("back" face)
-// phi0 = 0.0, lam0 = -90.0 ("left" face)
-// phi0 = 90.0 ("top" face)
-// phi0 = -90.0 ("bottom" face)
-// Other projection centers will not work!
-// In the projection code below, each cube face is handled differently.
-// See the computation of the face parameter in the ENTRY0(qsc) function
-// and the handling of different face values (FACE_*) in the forward and
-// inverse projections.
-// Furthermore, the projection is originally only defined for theta angles
-// between (-1/4 * PI) and (+1/4 * PI) on the current cube face. This area
-// of definition is named AREA_0 in the projection code below. The other
-// three areas of a cube face are handled by rotation of AREA_0.
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct qsc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace qsc
- {
- static const double EPS10 = 1.e-10;
- static const int FACE_FRONT = 0;
- static const int FACE_RIGHT = 1;
- static const int FACE_BACK = 2;
- static const int FACE_LEFT = 3;
- static const int FACE_TOP = 4;
- static const int FACE_BOTTOM = 5;
- static const int AREA_0 = 0;
- static const int AREA_1 = 1;
- static const int AREA_2 = 2;
- static const int AREA_3 = 3;
-
- template <typename T>
- struct par_qsc
- {
- int face;
- T a_squared;
- T b;
- T one_minus_f;
- T one_minus_f_squared;
- };
-
- /* The six cube faces. */
-
- /* The four areas on a cube face. AREA_0 is the area of definition,
- * the other three areas are counted counterclockwise. */
-
- /* Helper function for forward projection: compute the theta angle
- * and determine the area number. */
- template <typename T>
- inline T qsc_fwd_equat_face_theta(T const& phi, T const& y, T const& x, int *area)
- {
- static const T FORTPI = detail::FORTPI<T>();
- static const T HALFPI = detail::HALFPI<T>();
- static const T ONEPI = detail::ONEPI<T>();
-
- T theta;
- if (phi < EPS10) {
- *area = AREA_0;
- theta = 0.0;
- } else {
- theta = atan2(y, x);
- if (fabs(theta) <= FORTPI) {
- *area = AREA_0;
- } else if (theta > FORTPI && theta <= HALFPI + FORTPI) {
- *area = AREA_1;
- theta -= HALFPI;
- } else if (theta > HALFPI + FORTPI || theta <= -(HALFPI + FORTPI)) {
- *area = AREA_2;
- theta = (theta >= 0.0 ? theta - ONEPI : theta + ONEPI);
- } else {
- *area = AREA_3;
- theta += HALFPI;
- }
- }
- return (theta);
- }
-
- /* Helper function: shift the longitude. */
- template <typename T>
- inline T qsc_shift_lon_origin(T const& lon, T const& offset)
- {
- static const T ONEPI = detail::ONEPI<T>();
- static const T TWOPI = detail::TWOPI<T>();
-
- T slon = lon + offset;
- if (slon < -ONEPI) {
- slon += TWOPI;
- } else if (slon > +ONEPI) {
- slon -= TWOPI;
- }
- return slon;
- }
-
- /* Forward projection, ellipsoid */
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_qsc_ellipsoid : public base_t_fi<base_qsc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_qsc<CalculationType> m_proj_parm;
-
- inline base_qsc_ellipsoid(const Parameters& par)
- : base_t_fi<base_qsc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward)
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType ONEPI = detail::ONEPI<CalculationType>();
-
- CalculationType lat, lon;
- CalculationType sinlat, coslat;
- CalculationType sinlon, coslon;
- CalculationType q = 0.0, r = 0.0, s = 0.0;
- CalculationType theta, phi;
- CalculationType t, mu, nu;
- int area;
-
- /* Convert the geodetic latitude to a geocentric latitude.
- * This corresponds to the shift from the ellipsoid to the sphere
- * described in [LK12]. */
- if (this->m_par.es) {
- lat = atan(this->m_proj_parm.one_minus_f_squared * tan(lp_lat));
- } else {
- lat = lp_lat;
- }
-
- /* Convert the input lat, lon into theta, phi as used by QSC.
- * This depends on the cube face and the area on it.
- * For the top and bottom face, we can compute theta and phi
- * directly from phi, lam. For the other faces, we must use
- * unit sphere cartesian coordinates as an intermediate step. */
- lon = lp_lon;
- if (this->m_proj_parm.face != FACE_TOP && this->m_proj_parm.face != FACE_BOTTOM) {
- if (this->m_proj_parm.face == FACE_RIGHT) {
- lon = qsc_shift_lon_origin(lon, +HALFPI);
- } else if (this->m_proj_parm.face == FACE_BACK) {
- lon = qsc_shift_lon_origin(lon, +ONEPI);
- } else if (this->m_proj_parm.face == FACE_LEFT) {
- lon = qsc_shift_lon_origin(lon, -HALFPI);
- }
- sinlat = sin(lat);
- coslat = cos(lat);
- sinlon = sin(lon);
- coslon = cos(lon);
- q = coslat * coslon;
- r = coslat * sinlon;
- s = sinlat;
- }
- if (this->m_proj_parm.face == FACE_FRONT) {
- phi = acos(q);
- theta = qsc_fwd_equat_face_theta(phi, s, r, &area);
- } else if (this->m_proj_parm.face == FACE_RIGHT) {
- phi = acos(r);
- theta = qsc_fwd_equat_face_theta(phi, s, -q, &area);
- } else if (this->m_proj_parm.face == FACE_BACK) {
- phi = acos(-q);
- theta = qsc_fwd_equat_face_theta(phi, s, -r, &area);
- } else if (this->m_proj_parm.face == FACE_LEFT) {
- phi = acos(-r);
- theta = qsc_fwd_equat_face_theta(phi, s, q, &area);
- } else if (this->m_proj_parm.face == FACE_TOP) {
- phi = HALFPI - lat;
- if (lon >= FORTPI && lon <= HALFPI + FORTPI) {
- area = AREA_0;
- theta = lon - HALFPI;
- } else if (lon > HALFPI + FORTPI || lon <= -(HALFPI + FORTPI)) {
- area = AREA_1;
- theta = (lon > 0.0 ? lon - ONEPI : lon + ONEPI);
- } else if (lon > -(HALFPI + FORTPI) && lon <= -FORTPI) {
- area = AREA_2;
- theta = lon + HALFPI;
- } else {
- area = AREA_3;
- theta = lon;
- }
- } else /* this->m_proj_parm.face == FACE_BOTTOM */ {
- phi = HALFPI + lat;
- if (lon >= FORTPI && lon <= HALFPI + FORTPI) {
- area = AREA_0;
- theta = -lon + HALFPI;
- } else if (lon < FORTPI && lon >= -FORTPI) {
- area = AREA_1;
- theta = -lon;
- } else if (lon < -FORTPI && lon >= -(HALFPI + FORTPI)) {
- area = AREA_2;
- theta = -lon - HALFPI;
- } else {
- area = AREA_3;
- theta = (lon > 0.0 ? -lon + ONEPI : -lon - ONEPI);
- }
- }
-
- /* Compute mu and nu for the area of definition.
- * For mu, see Eq. (3-21) in [OL76], but note the typos:
- * compare with Eq. (3-14). For nu, see Eq. (3-38). */
- mu = atan((12.0 / ONEPI) * (theta + acos(sin(theta) * cos(FORTPI)) - HALFPI));
- t = sqrt((1.0 - cos(phi)) / (cos(mu) * cos(mu)) / (1.0 - cos(atan(1.0 / cos(theta)))));
- /* nu = atan(t); We don't really need nu, just t, see below. */
-
- /* Apply the result to the real area. */
- if (area == AREA_1) {
- mu += HALFPI;
- } else if (area == AREA_2) {
- mu += ONEPI;
- } else if (area == AREA_3) {
- mu += HALFPI + ONEPI;
- }
-
- /* Now compute x, y from mu and nu */
- /* t = tan(nu); */
- xy_x = t * cos(mu);
- xy_y = t * sin(mu);
- boost::ignore_unused(nu);
- }
- /* Inverse projection, ellipsoid */
-
- // INVERSE(e_inverse)
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType ONEPI = detail::ONEPI<CalculationType>();
-
- CalculationType mu, nu, cosmu, tannu;
- CalculationType tantheta, theta, cosphi, phi;
- CalculationType t;
- int area;
-
- /* Convert the input x, y to the mu and nu angles as used by QSC.
- * This depends on the area of the cube face. */
- nu = atan(sqrt(xy_x * xy_x + xy_y * xy_y));
- mu = atan2(xy_y, xy_x);
- if (xy_x >= 0.0 && xy_x >= fabs(xy_y)) {
- area = AREA_0;
- } else if (xy_y >= 0.0 && xy_y >= fabs(xy_x)) {
- area = AREA_1;
- mu -= HALFPI;
- } else if (xy_x < 0.0 && -xy_x >= fabs(xy_y)) {
- area = AREA_2;
- mu = (mu < 0.0 ? mu + ONEPI : mu - ONEPI);
- } else {
- area = AREA_3;
- mu += HALFPI;
- }
-
- /* Compute phi and theta for the area of definition.
- * The inverse projection is not described in the original paper, but some
- * good hints can be found here (as of 2011-12-14):
- * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302
- * (search for "Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>") */
- t = (ONEPI / 12.0) * tan(mu);
- tantheta = sin(t) / (cos(t) - (1.0 / sqrt(2.0)));
- theta = atan(tantheta);
- cosmu = cos(mu);
- tannu = tan(nu);
- cosphi = 1.0 - cosmu * cosmu * tannu * tannu * (1.0 - cos(atan(1.0 / cos(theta))));
- if (cosphi < -1.0) {
- cosphi = -1.0;
- } else if (cosphi > +1.0) {
- cosphi = +1.0;
- }
-
- /* Apply the result to the real area on the cube face.
- * For the top and bottom face, we can compute phi and lam directly.
- * For the other faces, we must use unit sphere cartesian coordinates
- * as an intermediate step. */
- if (this->m_proj_parm.face == FACE_TOP) {
- phi = acos(cosphi);
- lp_lat = HALFPI - phi;
- if (area == AREA_0) {
- lp_lon = theta + HALFPI;
- } else if (area == AREA_1) {
- lp_lon = (theta < 0.0 ? theta + ONEPI : theta - ONEPI);
- } else if (area == AREA_2) {
- lp_lon = theta - HALFPI;
- } else /* area == AREA_3 */ {
- lp_lon = theta;
- }
- } else if (this->m_proj_parm.face == FACE_BOTTOM) {
- phi = acos(cosphi);
- lp_lat = phi - HALFPI;
- if (area == AREA_0) {
- lp_lon = -theta + HALFPI;
- } else if (area == AREA_1) {
- lp_lon = -theta;
- } else if (area == AREA_2) {
- lp_lon = -theta - HALFPI;
- } else /* area == AREA_3 */ {
- lp_lon = (theta < 0.0 ? -theta - ONEPI : -theta + ONEPI);
- }
- } else {
- /* Compute phi and lam via cartesian unit sphere coordinates. */
- CalculationType q, r, s, t;
- q = cosphi;
- t = q * q;
- if (t >= 1.0) {
- s = 0.0;
- } else {
- s = sqrt(1.0 - t) * sin(theta);
- }
- t += s * s;
- if (t >= 1.0) {
- r = 0.0;
- } else {
- r = sqrt(1.0 - t);
- }
- /* Rotate q,r,s into the correct area. */
- if (area == AREA_1) {
- t = r;
- r = -s;
- s = t;
- } else if (area == AREA_2) {
- r = -r;
- s = -s;
- } else if (area == AREA_3) {
- t = r;
- r = s;
- s = -t;
- }
- /* Rotate q,r,s into the correct cube face. */
- if (this->m_proj_parm.face == FACE_RIGHT) {
- t = q;
- q = -r;
- r = t;
- } else if (this->m_proj_parm.face == FACE_BACK) {
- q = -q;
- r = -r;
- } else if (this->m_proj_parm.face == FACE_LEFT) {
- t = q;
- q = r;
- r = -t;
- }
- /* Now compute phi and lam from the unit sphere coordinates. */
- lp_lat = acos(-s) - HALFPI;
- lp_lon = atan2(r, q);
- if (this->m_proj_parm.face == FACE_RIGHT) {
- lp_lon = qsc_shift_lon_origin(lp_lon, -HALFPI);
- } else if (this->m_proj_parm.face == FACE_BACK) {
- lp_lon = qsc_shift_lon_origin(lp_lon, -ONEPI);
- } else if (this->m_proj_parm.face == FACE_LEFT) {
- lp_lon = qsc_shift_lon_origin(lp_lon, +HALFPI);
- }
- }
-
- /* Apply the shift from the sphere to the ellipsoid as described
- * in [LK12]. */
- if (this->m_par.es) {
- int invert_sign;
- CalculationType tanphi, xa;
- invert_sign = (lp_lat < 0.0 ? 1 : 0);
- tanphi = tan(lp_lat);
- xa = this->m_proj_parm.b / sqrt(tanphi * tanphi + this->m_proj_parm.one_minus_f_squared);
- lp_lat = atan(sqrt(this->m_par.a * this->m_par.a - xa * xa) / (this->m_proj_parm.one_minus_f * xa));
- if (invert_sign) {
- lp_lat = -lp_lat;
- }
- }
- }
-
- static inline std::string get_name()
- {
- return "qsc_ellipsoid";
- }
-
- };
-
- // Quadrilateralized Spherical Cube
- template <typename Parameters, typename T>
- inline void setup_qsc(Parameters& par, par_qsc<T>& proj_parm)
- {
- static const T FORTPI = detail::FORTPI<T>();
- static const T HALFPI = detail::HALFPI<T>();
-
- /* Determine the cube face from the center of projection. */
- if (par.phi0 >= HALFPI - FORTPI / 2.0) {
- proj_parm.face = FACE_TOP;
- } else if (par.phi0 <= -(HALFPI - FORTPI / 2.0)) {
- proj_parm.face = FACE_BOTTOM;
- } else if (fabs(par.lam0) <= FORTPI) {
- proj_parm.face = FACE_FRONT;
- } else if (fabs(par.lam0) <= HALFPI + FORTPI) {
- proj_parm.face = (par.lam0 > 0.0 ? FACE_RIGHT : FACE_LEFT);
- } else {
- proj_parm.face = FACE_BACK;
- }
- /* Fill in useful values for the ellipsoid <-> sphere shift
- * described in [LK12]. */
- if (par.es) {
- proj_parm.a_squared = par.a * par.a;
- proj_parm.b = par.a * sqrt(1.0 - par.es);
- proj_parm.one_minus_f = 1.0 - (par.a - proj_parm.b) / par.a;
- proj_parm.one_minus_f_squared = proj_parm.one_minus_f * proj_parm.one_minus_f;
- }
- }
-
- }} // namespace detail::qsc
- #endif // doxygen
-
- /*!
- \brief Quadrilateralized Spherical Cube projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- \par Example
- \image html ex_qsc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct qsc_ellipsoid : public detail::qsc::base_qsc_ellipsoid<CalculationType, Parameters>
- {
- inline qsc_ellipsoid(const Parameters& par) : detail::qsc::base_qsc_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::qsc::setup_qsc(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::qsc, qsc_ellipsoid, qsc_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class qsc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<qsc_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void qsc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("qsc", new qsc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_QSC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/robin.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/robin.hpp
deleted file mode 100644
index 52acb58e413..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/robin.hpp
+++ /dev/null
@@ -1,298 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_ROBIN_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ROBIN_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/function_overloads.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct robin {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace robin
- {
-
- static const double FXC = 0.8487;
- static const double FYC = 1.3523;
- static const double C1 = 11.45915590261646417544;
- static const double RC1 = 0.08726646259971647884;
- static const int NODES = 18;
- static const double ONEEPS = 1.000001;
- static const double EPS = 1e-8;
-
- /*
- note: following terms based upon 5 deg. intervals in degrees.
-
- Some background on these coefficients is available at:
-
- http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039
- http://trac.osgeo.org/proj/ticket/113
- */
-
- template <typename T>
- struct COEFS {
- T c0, c1, c2, c3;
- };
-
- template <typename T>
- inline const COEFS<T> * X()
- {
- static const COEFS<T> result[] = {
- {1.0, 2.2199e-17, -7.15515e-05, 3.1103e-06},
- {0.9986, -0.000482243, -2.4897e-05, -1.3309e-06},
- {0.9954, -0.00083103, -4.48605e-05, -9.86701e-07},
- {0.99, -0.00135364, -5.9661e-05, 3.6777e-06},
- {0.9822, -0.00167442, -4.49547e-06, -5.72411e-06},
- {0.973, -0.00214868, -9.03571e-05, 1.8736e-08},
- {0.96, -0.00305085, -9.00761e-05, 1.64917e-06},
- {0.9427, -0.00382792, -6.53386e-05, -2.6154e-06},
- {0.9216, -0.00467746, -0.00010457, 4.81243e-06},
- {0.8962, -0.00536223, -3.23831e-05, -5.43432e-06},
- {0.8679, -0.00609363, -0.000113898, 3.32484e-06},
- {0.835, -0.00698325, -6.40253e-05, 9.34959e-07},
- {0.7986, -0.00755338, -5.00009e-05, 9.35324e-07},
- {0.7597, -0.00798324, -3.5971e-05, -2.27626e-06},
- {0.7186, -0.00851367, -7.01149e-05, -8.6303e-06},
- {0.6732, -0.00986209, -0.000199569, 1.91974e-05},
- {0.6213, -0.010418, 8.83923e-05, 6.24051e-06},
- {0.5722, -0.00906601, 0.000182, 6.24051e-06},
- {0.5322, -0.00677797, 0.000275608, 6.24051e-06}
- };
- return result;
- }
-
- template <typename T>
- inline const COEFS<T> * Y()
- {
- static const COEFS<T> result[] = {
- {-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11},
- {0.062, 0.0124, -1.26793e-09, 4.22642e-10},
- {0.124, 0.0124, 5.07171e-09, -1.60604e-09},
- {0.186, 0.0123999, -1.90189e-08, 6.00152e-09},
- {0.248, 0.0124002, 7.10039e-08, -2.24e-08},
- {0.31, 0.0123992, -2.64997e-07, 8.35986e-08},
- {0.372, 0.0124029, 9.88983e-07, -3.11994e-07},
- {0.434, 0.0123893, -3.69093e-06, -4.35621e-07},
- {0.4958, 0.0123198, -1.02252e-05, -3.45523e-07},
- {0.5571, 0.0121916, -1.54081e-05, -5.82288e-07},
- {0.6176, 0.0119938, -2.41424e-05, -5.25327e-07},
- {0.6769, 0.011713, -3.20223e-05, -5.16405e-07},
- {0.7346, 0.0113541, -3.97684e-05, -6.09052e-07},
- {0.7903, 0.0109107, -4.89042e-05, -1.04739e-06},
- {0.8435, 0.0103431, -6.4615e-05, -1.40374e-09},
- {0.8936, 0.00969686, -6.4636e-05, -8.547e-06},
- {0.9394, 0.00840947, -0.000192841, -4.2106e-06},
- {0.9761, 0.00616527, -0.000256, -4.2106e-06},
- {1.0, 0.00328947, -0.000319159, -4.2106e-06}
- };
- return result;
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_robin_spheroid : public base_t_fi<base_robin_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_robin_spheroid(const Parameters& par)
- : base_t_fi<base_robin_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- template <typename T>
- inline T V(COEFS<T> const& C, T const& z) const
- { return (C.c0 + z * (C.c1 + z * (C.c2 + z * C.c3))); }
- template <typename T>
- inline T DV(COEFS<T> const& C, T const& z) const
- { return (C.c1 + z * (C.c2 + C.c2 + z * 3. * C.c3)); }
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- int i;
- CalculationType dphi;
-
- i = int_floor((dphi = fabs(lp_lat)) * C1);
- if (i < 0)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- if (i >= NODES) i = NODES - 1;
- dphi = geometry::math::r2d<CalculationType>() * (dphi - RC1 * i);
- xy_x = V(X<CalculationType>()[i], dphi) * FXC * lp_lon;
- xy_y = V(Y<CalculationType>()[i], dphi) * FYC;
- if (lp_lat < 0.) xy_y = -xy_y;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- const COEFS<CalculationType> * X = robin::X<CalculationType>();
- const COEFS<CalculationType> * Y = robin::Y<CalculationType>();
-
- int i;
- CalculationType t, t1;
- COEFS<CalculationType> T;
-
- lp_lon = xy_x / FXC;
- lp_lat = fabs(xy_y / FYC);
- if (lp_lat >= 1.) { /* simple pathologic cases */
- if (lp_lat > ONEEPS)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- else {
- lp_lat = xy_y < 0. ? -HALFPI : HALFPI;
- lp_lon /= X[NODES].c0;
- }
- } else { /* general problem */
- /* in Y space, reduce to table interval */
- i = int_floor(lp_lat * NODES);
- if( i < 0 || i >= NODES )
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- for (;;) {
- if (Y[i].c0 > lp_lat) --i;
- else if (Y[i+1].c0 <= lp_lat) ++i;
- else break;
- }
- T = Y[i];
- /* first guess, linear interp */
- t = 5. * (lp_lat - T.c0)/(Y[i+1].c0 - T.c0);
- /* make into root */
- T.c0 -= lp_lat;
- for (;;) { /* Newton-Raphson reduction */
- t -= t1 = V(T,t) / DV(T,t);
- if (fabs(t1) < EPS)
- break;
- }
- lp_lat = (5 * i + t) * geometry::math::d2r<CalculationType>();
- if (xy_y < 0.) lp_lat = -lp_lat;
- lp_lon /= V(X[i], t);
- }
- }
-
- static inline std::string get_name()
- {
- return "robin_spheroid";
- }
-
- };
-
- // Robinson
- template <typename Parameters>
- inline void setup_robin(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::robin
- #endif // doxygen
-
- /*!
- \brief Robinson projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_robin.gif
- */
- template <typename CalculationType, typename Parameters>
- struct robin_spheroid : public detail::robin::base_robin_spheroid<CalculationType, Parameters>
- {
- inline robin_spheroid(const Parameters& par) : detail::robin::base_robin_spheroid<CalculationType, Parameters>(par)
- {
- detail::robin::setup_robin(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::robin, robin_spheroid, robin_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class robin_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<robin_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void robin_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("robin", new robin_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_ROBIN_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/rouss.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/rouss.hpp
deleted file mode 100644
index edad9047992..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/rouss.hpp
+++ /dev/null
@@ -1,241 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_ROUSS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_ROUSS_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Copyright (c) 2003, 2006 Gerald I. Evenden
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/proj_mdist.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct rouss {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace rouss
- {
- template <typename T>
- struct par_rouss
- {
- T s0;
- T A1, A2, A3, A4, A5, A6;
- T B1, B2, B3, B4, B5, B6, B7, B8;
- T C1, C2, C3, C4, C5, C6, C7, C8;
- T D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11;
- MDIST<T> en;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_rouss_ellipsoid : public base_t_fi<base_rouss_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_rouss<CalculationType> m_proj_parm;
-
- inline base_rouss_ellipsoid(const Parameters& par)
- : base_t_fi<base_rouss_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType s, al, cp, sp, al2, s2;
-
- cp = cos(lp_lat);
- sp = sin(lp_lat);
- s = proj_mdist(lp_lat, sp, cp, this->m_proj_parm.en) - this->m_proj_parm.s0;
- s2 = s * s;
- al = lp_lon * cp / sqrt(1. - this->m_par.es * sp * sp);
- al2 = al * al;
- xy_x = this->m_par.k0 * al*(1.+s2*(this->m_proj_parm.A1+s2*this->m_proj_parm.A4)-al2*(this->m_proj_parm.A2+s*this->m_proj_parm.A3+s2*this->m_proj_parm.A5
- +al2*this->m_proj_parm.A6));
- xy_y = this->m_par.k0 * (al2*(this->m_proj_parm.B1+al2*this->m_proj_parm.B4)+
- s*(1.+al2*(this->m_proj_parm.B3-al2*this->m_proj_parm.B6)+s2*(this->m_proj_parm.B2+s2*this->m_proj_parm.B8)+
- s*al2*(this->m_proj_parm.B5+s*this->m_proj_parm.B7)));
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType s, al, x = xy_x / this->m_par.k0, y = xy_y / this->m_par.k0, x2, y2;;
-
- x2 = x * x;
- y2 = y * y;
- al = x*(1.-this->m_proj_parm.C1*y2+x2*(this->m_proj_parm.C2+this->m_proj_parm.C3*y-this->m_proj_parm.C4*x2+this->m_proj_parm.C5*y2-this->m_proj_parm.C7*x2*y)
- +y2*(this->m_proj_parm.C6*y2-this->m_proj_parm.C8*x2*y));
- s = this->m_proj_parm.s0 + y*(1.+y2*(-this->m_proj_parm.D2+this->m_proj_parm.D8*y2))+
- x2*(-this->m_proj_parm.D1+y*(-this->m_proj_parm.D3+y*(-this->m_proj_parm.D5+y*(-this->m_proj_parm.D7+y*this->m_proj_parm.D11)))+
- x2*(this->m_proj_parm.D4+y*(this->m_proj_parm.D6+y*this->m_proj_parm.D10)-x2*this->m_proj_parm.D9));
- lp_lat=proj_inv_mdist(s, this->m_proj_parm.en);
- s = sin(lp_lat);
- lp_lon=al * sqrt(1. - this->m_par.es * s * s)/cos(lp_lat);
- }
-
- static inline std::string get_name()
- {
- return "rouss_ellipsoid";
- }
-
- };
-
- // Roussilhe Stereographic
- template <typename Parameters, typename T>
- inline void setup_rouss(Parameters& par, par_rouss<T>& proj_parm)
- {
- T N0, es2, t, t2, R_R0_2, R_R0_4;
-
- if (!proj_mdist_ini(par.es, proj_parm.en))
- BOOST_THROW_EXCEPTION( projection_exception(0) );
- es2 = sin(par.phi0);
- proj_parm.s0 = proj_mdist(par.phi0, es2, cos(par.phi0), proj_parm.en);
- t = 1. - (es2 = par.es * es2 * es2);
- N0 = 1./sqrt(t);
- R_R0_2 = t * t / par.one_es;
- R_R0_4 = R_R0_2 * R_R0_2;
- t = tan(par.phi0);
- t2 = t * t;
- proj_parm.C1 = proj_parm.A1 = R_R0_2 / 4.;
- proj_parm.C2 = proj_parm.A2 = R_R0_2 * (2 * t2 - 1. - 2. * es2) / 12.;
- proj_parm.A3 = R_R0_2 * t * (1. + 4. * t2)/ ( 12. * N0);
- proj_parm.A4 = R_R0_4 / 24.;
- proj_parm.A5 = R_R0_4 * ( -1. + t2 * (11. + 12. * t2))/24.;
- proj_parm.A6 = R_R0_4 * ( -2. + t2 * (11. - 2. * t2))/240.;
- proj_parm.B1 = t / (2. * N0);
- proj_parm.B2 = R_R0_2 / 12.;
- proj_parm.B3 = R_R0_2 * (1. + 2. * t2 - 2. * es2)/4.;
- proj_parm.B4 = R_R0_2 * t * (2. - t2)/(24. * N0);
- proj_parm.B5 = R_R0_2 * t * (5. + 4.* t2)/(8. * N0);
- proj_parm.B6 = R_R0_4 * (-2. + t2 * (-5. + 6. * t2))/48.;
- proj_parm.B7 = R_R0_4 * (5. + t2 * (19. + 12. * t2))/24.;
- proj_parm.B8 = R_R0_4 / 120.;
- proj_parm.C3 = R_R0_2 * t * (1. + t2)/(3. * N0);
- proj_parm.C4 = R_R0_4 * (-3. + t2 * (34. + 22. * t2))/240.;
- proj_parm.C5 = R_R0_4 * (4. + t2 * (13. + 12. * t2))/24.;
- proj_parm.C6 = R_R0_4 / 16.;
- proj_parm.C7 = R_R0_4 * t * (11. + t2 * (33. + t2 * 16.))/(48. * N0);
- proj_parm.C8 = R_R0_4 * t * (1. + t2 * 4.)/(36. * N0);
- proj_parm.D1 = t / (2. * N0);
- proj_parm.D2 = R_R0_2 / 12.;
- proj_parm.D3 = R_R0_2 * (2 * t2 + 1. - 2. * es2) / 4.;
- proj_parm.D4 = R_R0_2 * t * (1. + t2)/(8. * N0);
- proj_parm.D5 = R_R0_2 * t * (1. + t2 * 2.)/(4. * N0);
- proj_parm.D6 = R_R0_4 * (1. + t2 * (6. + t2 * 6.))/16.;
- proj_parm.D7 = R_R0_4 * t2 * (3. + t2 * 4.)/8.;
- proj_parm.D8 = R_R0_4 / 80.;
- proj_parm.D9 = R_R0_4 * t * (-21. + t2 * (178. - t2 * 26.))/720.;
- proj_parm.D10 = R_R0_4 * t * (29. + t2 * (86. + t2 * 48.))/(96. * N0);
- proj_parm.D11 = R_R0_4 * t * (37. + t2 * 44.)/(96. * N0);
- }
-
- }} // namespace detail::rouss
- #endif // doxygen
-
- /*!
- \brief Roussilhe Stereographic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Ellipsoid
- \par Example
- \image html ex_rouss.gif
- */
- template <typename CalculationType, typename Parameters>
- struct rouss_ellipsoid : public detail::rouss::base_rouss_ellipsoid<CalculationType, Parameters>
- {
- inline rouss_ellipsoid(const Parameters& par) : detail::rouss::base_rouss_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::rouss::setup_rouss(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::rouss, rouss_ellipsoid, rouss_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class rouss_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<rouss_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void rouss_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("rouss", new rouss_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_ROUSS_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/rpoly.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/rpoly.hpp
deleted file mode 100644
index fcb9f1043be..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/rpoly.hpp
+++ /dev/null
@@ -1,187 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_RPOLY_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_RPOLY_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct rpoly {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace rpoly
- {
-
- static const double EPS = 1e-9;
-
- template <typename T>
- struct par_rpoly
- {
- T phi1;
- T fxa;
- T fxb;
- int mode;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_rpoly_spheroid : public base_t_f<base_rpoly_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_rpoly<CalculationType> m_proj_parm;
-
- inline base_rpoly_spheroid(const Parameters& par)
- : base_t_f<base_rpoly_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType fa;
-
- if (this->m_proj_parm.mode)
- fa = tan(lp_lon * this->m_proj_parm.fxb) * this->m_proj_parm.fxa;
- else
- fa = 0.5 * lp_lon;
- if (fabs(lp_lat) < EPS) {
- xy_x = fa + fa;
- xy_y = - this->m_par.phi0;
- } else {
- xy_y = 1. / tan(lp_lat);
- xy_x = sin(fa = 2. * atan(fa * sin(lp_lat))) * xy_y;
- xy_y = lp_lat - this->m_par.phi0 + (1. - cos(fa)) * xy_y;
- }
- }
-
- static inline std::string get_name()
- {
- return "rpoly_spheroid";
- }
-
- };
-
- // Rectangular Polyconic
- template <typename Parameters, typename T>
- inline void setup_rpoly(Parameters& par, par_rpoly<T>& proj_parm)
- {
- if ((proj_parm.mode = (proj_parm.phi1 = fabs(pj_param(par.params, "rlat_ts").f)) > EPS)) {
- proj_parm.fxb = 0.5 * sin(proj_parm.phi1);
- proj_parm.fxa = 0.5 / proj_parm.fxb;
- }
- par.es = 0.;
- }
-
- }} // namespace detail::rpoly
- #endif // doxygen
-
- /*!
- \brief Rectangular Polyconic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- - no inverse
- \par Projection parameters
- - lat_ts: Latitude of true scale (degrees)
- \par Example
- \image html ex_rpoly.gif
- */
- template <typename CalculationType, typename Parameters>
- struct rpoly_spheroid : public detail::rpoly::base_rpoly_spheroid<CalculationType, Parameters>
- {
- inline rpoly_spheroid(const Parameters& par) : detail::rpoly::base_rpoly_spheroid<CalculationType, Parameters>(par)
- {
- detail::rpoly::setup_rpoly(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::rpoly, rpoly_spheroid, rpoly_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class rpoly_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<rpoly_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void rpoly_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("rpoly", new rpoly_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_RPOLY_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/sconics.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/sconics.hpp
deleted file mode 100644
index b5f97fa5421..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/sconics.hpp
+++ /dev/null
@@ -1,570 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_SCONICS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_SCONICS_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct euler {};
- struct murd1 {};
- struct murd2 {};
- struct murd3 {};
- struct pconic {};
- struct tissot {};
- struct vitk1 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace sconics
- {
-
- static const int EULER = 0;
- static const int MURD1 = 1;
- static const int MURD2 = 2;
- static const int MURD3 = 3;
- static const int PCONIC = 4;
- static const int TISSOT = 5;
- static const int VITK1 = 6;
- static const double EPS10 = 1.e-10;
- static const double EPS = 1e-10;
-
- template <typename T>
- struct par_sconics
- {
- T n;
- T rho_c;
- T rho_0;
- T sig;
- T c1, c2;
- int type;
- };
-
- /* get common factors for simple conics */
- template <typename Parameters, typename T>
- inline int phi12(Parameters& par, par_sconics<T>& proj_parm, T *del)
- {
- T p1, p2;
- int err = 0;
-
- if (!pj_param(par.params, "tlat_1").i ||
- !pj_param(par.params, "tlat_2").i) {
- err = -41;
- } else {
- p1 = pj_param(par.params, "rlat_1").f;
- p2 = pj_param(par.params, "rlat_2").f;
- *del = 0.5 * (p2 - p1);
- proj_parm.sig = 0.5 * (p2 + p1);
- err = (fabs(*del) < EPS || fabs(proj_parm.sig) < EPS) ? -42 : 0;
- *del = *del;
- }
- return err;
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_sconics_spheroid : public base_t_fi<base_sconics_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_sconics<CalculationType> m_proj_parm;
-
- inline base_sconics_spheroid(const Parameters& par)
- : base_t_fi<base_sconics_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType rho;
-
- switch (this->m_proj_parm.type) {
- case MURD2:
- rho = this->m_proj_parm.rho_c + tan(this->m_proj_parm.sig - lp_lat);
- break;
- case PCONIC:
- rho = this->m_proj_parm.c2 * (this->m_proj_parm.c1 - tan(lp_lat - this->m_proj_parm.sig));
- break;
- default:
- rho = this->m_proj_parm.rho_c - lp_lat;
- break;
- }
- xy_x = rho * sin( lp_lon *= this->m_proj_parm.n );
- xy_y = this->m_proj_parm.rho_0 - rho * cos(lp_lon);
- }
-
- // INVERSE(s_inverse) ellipsoid & spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType rho;
-
- rho = boost::math::hypot(xy_x, xy_y = this->m_proj_parm.rho_0 - xy_y);
- if (this->m_proj_parm.n < 0.) {
- rho = - rho;
- xy_x = - xy_x;
- xy_y = - xy_y;
- }
- lp_lon = atan2(xy_x, xy_y) / this->m_proj_parm.n;
- switch (this->m_proj_parm.type) {
- case PCONIC:
- lp_lat = atan(this->m_proj_parm.c1 - rho / this->m_proj_parm.c2) + this->m_proj_parm.sig;
- break;
- case MURD2:
- lp_lat = this->m_proj_parm.sig - atan(rho - this->m_proj_parm.rho_c);
- break;
- default:
- lp_lat = this->m_proj_parm.rho_c - rho;
- }
- }
-
- static inline std::string get_name()
- {
- return "sconics_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_sconics<T>& proj_parm)
- {
- static const T HALFPI = detail::HALFPI<T>();
-
- T del, cs;
- int i;
-
- if( (i = phi12(par, proj_parm, &del)) )
- BOOST_THROW_EXCEPTION( projection_exception(i) );
- switch (proj_parm.type) {
- case TISSOT:
- proj_parm.n = sin(proj_parm.sig);
- cs = cos(del);
- proj_parm.rho_c = proj_parm.n / cs + cs / proj_parm.n;
- proj_parm.rho_0 = sqrt((proj_parm.rho_c - 2 * sin(par.phi0))/proj_parm.n);
- break;
- case MURD1:
- proj_parm.rho_c = sin(del)/(del * tan(proj_parm.sig)) + proj_parm.sig;
- proj_parm.rho_0 = proj_parm.rho_c - par.phi0;
- proj_parm.n = sin(proj_parm.sig);
- break;
- case MURD2:
- proj_parm.rho_c = (cs = sqrt(cos(del))) / tan(proj_parm.sig);
- proj_parm.rho_0 = proj_parm.rho_c + tan(proj_parm.sig - par.phi0);
- proj_parm.n = sin(proj_parm.sig) * cs;
- break;
- case MURD3:
- proj_parm.rho_c = del / (tan(proj_parm.sig) * tan(del)) + proj_parm.sig;
- proj_parm.rho_0 = proj_parm.rho_c - par.phi0;
- proj_parm.n = sin(proj_parm.sig) * sin(del) * tan(del) / (del * del);
- break;
- case EULER:
- proj_parm.n = sin(proj_parm.sig) * sin(del) / del;
- del *= 0.5;
- proj_parm.rho_c = del / (tan(del) * tan(proj_parm.sig)) + proj_parm.sig;
- proj_parm.rho_0 = proj_parm.rho_c - par.phi0;
- break;
- case PCONIC:
- proj_parm.n = sin(proj_parm.sig);
- proj_parm.c2 = cos(del);
- proj_parm.c1 = 1./tan(proj_parm.sig);
- if (fabs(del = par.phi0 - proj_parm.sig) - EPS10 >= HALFPI)
- BOOST_THROW_EXCEPTION( projection_exception(-43) );
- proj_parm.rho_0 = proj_parm.c2 * (proj_parm.c1 - tan(del));
- break;
- case VITK1:
- proj_parm.n = (cs = tan(del)) * sin(proj_parm.sig) / del;
- proj_parm.rho_c = del / (cs * tan(proj_parm.sig)) + proj_parm.sig;
- proj_parm.rho_0 = proj_parm.rho_c - par.phi0;
- break;
- }
- par.es = 0;
- }
-
-
- // Tissot
- template <typename Parameters, typename T>
- inline void setup_tissot(Parameters& par, par_sconics<T>& proj_parm)
- {
- proj_parm.type = TISSOT;
- setup(par, proj_parm);
- }
-
- // Murdoch I
- template <typename Parameters, typename T>
- inline void setup_murd1(Parameters& par, par_sconics<T>& proj_parm)
- {
- proj_parm.type = MURD1;
- setup(par, proj_parm);
- }
-
- // Murdoch II
- template <typename Parameters, typename T>
- inline void setup_murd2(Parameters& par, par_sconics<T>& proj_parm)
- {
- proj_parm.type = MURD2;
- setup(par, proj_parm);
- }
-
- // Murdoch III
- template <typename Parameters, typename T>
- inline void setup_murd3(Parameters& par, par_sconics<T>& proj_parm)
- {
- proj_parm.type = MURD3;
- setup(par, proj_parm);
- }
-
- // Euler
- template <typename Parameters, typename T>
- inline void setup_euler(Parameters& par, par_sconics<T>& proj_parm)
- {
- proj_parm.type = EULER;
- setup(par, proj_parm);
- }
-
- // Perspective Conic
- template <typename Parameters, typename T>
- inline void setup_pconic(Parameters& par, par_sconics<T>& proj_parm)
- {
- proj_parm.type = PCONIC;
- setup(par, proj_parm);
- }
-
- // Vitkovsky I
- template <typename Parameters, typename T>
- inline void setup_vitk1(Parameters& par, par_sconics<T>& proj_parm)
- {
- proj_parm.type = VITK1;
- setup(par, proj_parm);
- }
-
- }} // namespace detail::sconics
- #endif // doxygen
-
- /*!
- \brief Tissot projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel
- - lat_2: Latitude of second standard parallel
- \par Example
- \image html ex_tissot.gif
- */
- template <typename CalculationType, typename Parameters>
- struct tissot_spheroid : public detail::sconics::base_sconics_spheroid<CalculationType, Parameters>
- {
- inline tissot_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<CalculationType, Parameters>(par)
- {
- detail::sconics::setup_tissot(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Murdoch I projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel
- - lat_2: Latitude of second standard parallel
- \par Example
- \image html ex_murd1.gif
- */
- template <typename CalculationType, typename Parameters>
- struct murd1_spheroid : public detail::sconics::base_sconics_spheroid<CalculationType, Parameters>
- {
- inline murd1_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<CalculationType, Parameters>(par)
- {
- detail::sconics::setup_murd1(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Murdoch II projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel
- - lat_2: Latitude of second standard parallel
- \par Example
- \image html ex_murd2.gif
- */
- template <typename CalculationType, typename Parameters>
- struct murd2_spheroid : public detail::sconics::base_sconics_spheroid<CalculationType, Parameters>
- {
- inline murd2_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<CalculationType, Parameters>(par)
- {
- detail::sconics::setup_murd2(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Murdoch III projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel
- - lat_2: Latitude of second standard parallel
- \par Example
- \image html ex_murd3.gif
- */
- template <typename CalculationType, typename Parameters>
- struct murd3_spheroid : public detail::sconics::base_sconics_spheroid<CalculationType, Parameters>
- {
- inline murd3_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<CalculationType, Parameters>(par)
- {
- detail::sconics::setup_murd3(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Euler projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel
- - lat_2: Latitude of second standard parallel
- \par Example
- \image html ex_euler.gif
- */
- template <typename CalculationType, typename Parameters>
- struct euler_spheroid : public detail::sconics::base_sconics_spheroid<CalculationType, Parameters>
- {
- inline euler_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<CalculationType, Parameters>(par)
- {
- detail::sconics::setup_euler(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Perspective Conic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel
- - lat_2: Latitude of second standard parallel
- \par Example
- \image html ex_pconic.gif
- */
- template <typename CalculationType, typename Parameters>
- struct pconic_spheroid : public detail::sconics::base_sconics_spheroid<CalculationType, Parameters>
- {
- inline pconic_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<CalculationType, Parameters>(par)
- {
- detail::sconics::setup_pconic(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Vitkovsky I projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Conic
- - Spheroid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel
- - lat_2: Latitude of second standard parallel
- \par Example
- \image html ex_vitk1.gif
- */
- template <typename CalculationType, typename Parameters>
- struct vitk1_spheroid : public detail::sconics::base_sconics_spheroid<CalculationType, Parameters>
- {
- inline vitk1_spheroid(const Parameters& par) : detail::sconics::base_sconics_spheroid<CalculationType, Parameters>(par)
- {
- detail::sconics::setup_vitk1(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::euler, euler_spheroid, euler_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::murd1, murd1_spheroid, murd1_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::murd2, murd2_spheroid, murd2_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::murd3, murd3_spheroid, murd3_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::pconic, pconic_spheroid, pconic_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::tissot, tissot_spheroid, tissot_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::vitk1, vitk1_spheroid, vitk1_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class tissot_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<tissot_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class murd1_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<murd1_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class murd2_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<murd2_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class murd3_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<murd3_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class euler_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<euler_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class pconic_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<pconic_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class vitk1_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<vitk1_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void sconics_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("tissot", new tissot_entry<CalculationType, Parameters>);
- factory.add_to_factory("murd1", new murd1_entry<CalculationType, Parameters>);
- factory.add_to_factory("murd2", new murd2_entry<CalculationType, Parameters>);
- factory.add_to_factory("murd3", new murd3_entry<CalculationType, Parameters>);
- factory.add_to_factory("euler", new euler_entry<CalculationType, Parameters>);
- factory.add_to_factory("pconic", new pconic_entry<CalculationType, Parameters>);
- factory.add_to_factory("vitk1", new vitk1_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_SCONICS_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/somerc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/somerc.hpp
deleted file mode 100644
index e67d09719e8..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/somerc.hpp
+++ /dev/null
@@ -1,227 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_SOMERC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_SOMERC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct somerc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace somerc
- {
- static const double EPS = 1.e-10;
- static const int NITER = 6;
-
- template <typename T>
- struct par_somerc
- {
- T K, c, hlf_e, kR, cosp0, sinp0;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_somerc_ellipsoid : public base_t_fi<base_somerc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_somerc<CalculationType> m_proj_parm;
-
- inline base_somerc_ellipsoid(const Parameters& par)
- : base_t_fi<base_somerc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward)
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType phip, lamp, phipp, lampp, sp, cp;
-
- sp = this->m_par.e * sin(lp_lat);
- phip = 2.* atan( exp( this->m_proj_parm.c * (
- log(tan(FORTPI + 0.5 * lp_lat)) - this->m_proj_parm.hlf_e * log((1. + sp)/(1. - sp)))
- + this->m_proj_parm.K)) - HALFPI;
- lamp = this->m_proj_parm.c * lp_lon;
- cp = cos(phip);
- phipp = aasin(this->m_proj_parm.cosp0 * sin(phip) - this->m_proj_parm.sinp0 * cp * cos(lamp));
- lampp = aasin(cp * sin(lamp) / cos(phipp));
- xy_x = this->m_proj_parm.kR * lampp;
- xy_y = this->m_proj_parm.kR * log(tan(FORTPI + 0.5 * phipp));
- }
-
- // INVERSE(e_inverse) ellipsoid & spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
-
- CalculationType phip, lamp, phipp, lampp, cp, esp, con, delp;
- int i;
-
- phipp = 2. * (atan(exp(xy_y / this->m_proj_parm.kR)) - FORTPI);
- lampp = xy_x / this->m_proj_parm.kR;
- cp = cos(phipp);
- phip = aasin(this->m_proj_parm.cosp0 * sin(phipp) + this->m_proj_parm.sinp0 * cp * cos(lampp));
- lamp = aasin(cp * sin(lampp) / cos(phip));
- con = (this->m_proj_parm.K - log(tan(FORTPI + 0.5 * phip)))/this->m_proj_parm.c;
- for (i = NITER; i ; --i) {
- esp = this->m_par.e * sin(phip);
- delp = (con + log(tan(FORTPI + 0.5 * phip)) - this->m_proj_parm.hlf_e *
- log((1. + esp)/(1. - esp)) ) *
- (1. - esp * esp) * cos(phip) * this->m_par.rone_es;
- phip -= delp;
- if (fabs(delp) < EPS)
- break;
- }
- if (i) {
- lp_lat = phip;
- lp_lon = lamp / this->m_proj_parm.c;
- } else
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- }
-
- static inline std::string get_name()
- {
- return "somerc_ellipsoid";
- }
-
- };
-
- // Swiss. Obl. Mercator
- template <typename Parameters, typename T>
- inline void setup_somerc(Parameters& par, par_somerc<T>& proj_parm)
- {
- static const T FORTPI = detail::FORTPI<T>();
-
- T cp, phip0, sp;
-
- proj_parm.hlf_e = 0.5 * par.e;
- cp = cos(par.phi0);
- cp *= cp;
- proj_parm.c = sqrt(1 + par.es * cp * cp * par.rone_es);
- sp = sin(par.phi0);
- proj_parm.cosp0 = cos( phip0 = aasin(proj_parm.sinp0 = sp / proj_parm.c) );
- sp *= par.e;
- proj_parm.K = log(tan(FORTPI + 0.5 * phip0)) - proj_parm.c * (
- log(tan(FORTPI + 0.5 * par.phi0)) - proj_parm.hlf_e *
- log((1. + sp) / (1. - sp)));
- proj_parm.kR = par.k0 * sqrt(par.one_es) / (1. - sp * sp);
- }
-
- }} // namespace detail::somerc
- #endif // doxygen
-
- /*!
- \brief Swiss. Obl. Mercator projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Ellipsoid
- - For CH1903
- \par Example
- \image html ex_somerc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct somerc_ellipsoid : public detail::somerc::base_somerc_ellipsoid<CalculationType, Parameters>
- {
- inline somerc_ellipsoid(const Parameters& par) : detail::somerc::base_somerc_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::somerc::setup_somerc(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::somerc, somerc_ellipsoid, somerc_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class somerc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<somerc_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void somerc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("somerc", new somerc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_SOMERC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/stere.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/stere.hpp
deleted file mode 100644
index 9278902e34d..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/stere.hpp
+++ /dev/null
@@ -1,545 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_STERE_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_STERE_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/config.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_tsfn.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct stere {};
- struct ups {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace stere
- {
- static const double EPS10 = 1.e-10;
- static const double TOL = 1.e-8;
- static const int NITER = 8;
- static const double CONV = 1.e-10;
- static const int S_POLE = 0;
- static const int N_POLE = 1;
- static const int OBLIQ = 2;
- static const int EQUIT = 3;
-
- template <typename T>
- struct par_stere
- {
- T phits;
- T sinX1;
- T cosX1;
- T akm1;
- int mode;
- };
-
- template <typename T>
- inline T ssfn_(T const& phit, T sinphi, T const& eccen)
- {
- sinphi *= eccen;
- return (tan (.5 * (geometry::math::half_pi<T>() + phit)) *
- pow((1. - sinphi) / (1. + sinphi), .5 * eccen));
- }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_stere_ellipsoid : public base_t_fi<base_stere_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_stere<CalculationType> m_proj_parm;
-
- inline base_stere_ellipsoid(const Parameters& par)
- : base_t_fi<base_stere_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType coslam, sinlam, sinX=0.0, cosX=0.0, X, A, sinphi;
-
- coslam = cos(lp_lon);
- sinlam = sin(lp_lon);
- sinphi = sin(lp_lat);
- if (this->m_proj_parm.mode == OBLIQ || this->m_proj_parm.mode == EQUIT) {
- sinX = sin(X = 2. * atan(ssfn_(lp_lat, sinphi, this->m_par.e)) - HALFPI);
- cosX = cos(X);
- }
- switch (this->m_proj_parm.mode) {
- case OBLIQ:
- A = this->m_proj_parm.akm1 / (this->m_proj_parm.cosX1 * (1. + this->m_proj_parm.sinX1 * sinX +
- this->m_proj_parm.cosX1 * cosX * coslam));
- xy_y = A * (this->m_proj_parm.cosX1 * sinX - this->m_proj_parm.sinX1 * cosX * coslam);
- goto xmul;
- case EQUIT:
- A = this->m_proj_parm.akm1 / (1. + cosX * coslam);
- xy_y = A * sinX;
- xmul:
- xy_x = A * cosX;
- break;
- case S_POLE:
- lp_lat = -lp_lat;
- coslam = - coslam;
- sinphi = -sinphi;
- BOOST_FALLTHROUGH;
- case N_POLE:
- xy_x = this->m_proj_parm.akm1 * pj_tsfn(lp_lat, sinphi, this->m_par.e);
- xy_y = - xy_x * coslam;
- break;
- }
- xy_x = xy_x * sinlam;
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType cosphi, sinphi, tp=0.0, phi_l=0.0, rho, halfe=0.0, halfpi=0.0;
- int i;
-
- rho = boost::math::hypot(xy_x, xy_y);
- switch (this->m_proj_parm.mode) {
- case OBLIQ:
- case EQUIT:
- cosphi = cos( tp = 2. * atan2(rho * this->m_proj_parm.cosX1 , this->m_proj_parm.akm1) );
- sinphi = sin(tp);
- if( rho == 0.0 )
- phi_l = asin(cosphi * this->m_proj_parm.sinX1);
- else
- phi_l = asin(cosphi * this->m_proj_parm.sinX1 + (xy_y * sinphi * this->m_proj_parm.cosX1 / rho));
-
- tp = tan(.5 * (HALFPI + phi_l));
- xy_x *= sinphi;
- xy_y = rho * this->m_proj_parm.cosX1 * cosphi - xy_y * this->m_proj_parm.sinX1* sinphi;
- halfpi = HALFPI;
- halfe = .5 * this->m_par.e;
- break;
- case N_POLE:
- xy_y = -xy_y;
- BOOST_FALLTHROUGH;
- case S_POLE:
- phi_l = HALFPI - 2. * atan(tp = - rho / this->m_proj_parm.akm1);
- halfpi = -HALFPI;
- halfe = -.5 * this->m_par.e;
- break;
- }
- for (i = NITER; i--; phi_l = lp_lat) {
- sinphi = this->m_par.e * sin(phi_l);
- lp_lat = 2. * atan(tp * pow((1.+sinphi)/(1.-sinphi), halfe)) - halfpi;
- if (fabs(phi_l - lp_lat) < CONV) {
- if (this->m_proj_parm.mode == S_POLE)
- lp_lat = -lp_lat;
- lp_lon = (xy_x == 0. && xy_y == 0.) ? 0. : atan2(xy_x, xy_y);
- return;
- }
- }
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- }
-
- static inline std::string get_name()
- {
- return "stere_ellipsoid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_stere_spheroid : public base_t_fi<base_stere_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_stere<CalculationType> m_proj_parm;
-
- inline base_stere_spheroid(const Parameters& par)
- : base_t_fi<base_stere_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType sinphi, cosphi, coslam, sinlam;
-
- sinphi = sin(lp_lat);
- cosphi = cos(lp_lat);
- coslam = cos(lp_lon);
- sinlam = sin(lp_lon);
- switch (this->m_proj_parm.mode) {
- case EQUIT:
- xy_y = 1. + cosphi * coslam;
- goto oblcon;
- case OBLIQ:
- xy_y = 1. + this->m_proj_parm.sinX1 * sinphi + this->m_proj_parm.cosX1 * cosphi * coslam;
- oblcon:
- if (xy_y <= EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_x = (xy_y = this->m_proj_parm.akm1 / xy_y) * cosphi * sinlam;
- xy_y *= (this->m_proj_parm.mode == EQUIT) ? sinphi :
- this->m_proj_parm.cosX1 * sinphi - this->m_proj_parm.sinX1 * cosphi * coslam;
- break;
- case N_POLE:
- coslam = - coslam;
- lp_lat = - lp_lat;
- BOOST_FALLTHROUGH;
- case S_POLE:
- if (fabs(lp_lat - HALFPI) < TOL)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_x = sinlam * ( xy_y = this->m_proj_parm.akm1 * tan(FORTPI + .5 * lp_lat) );
- xy_y *= coslam;
- break;
- }
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType c, rh, sinc, cosc;
-
- sinc = sin(c = 2. * atan((rh = boost::math::hypot(xy_x, xy_y)) / this->m_proj_parm.akm1));
- cosc = cos(c);
- lp_lon = 0.;
- switch (this->m_proj_parm.mode) {
- case EQUIT:
- if (fabs(rh) <= EPS10)
- lp_lat = 0.;
- else
- lp_lat = asin(xy_y * sinc / rh);
- if (cosc != 0. || xy_x != 0.)
- lp_lon = atan2(xy_x * sinc, cosc * rh);
- break;
- case OBLIQ:
- if (fabs(rh) <= EPS10)
- lp_lat = this->m_par.phi0;
- else
- lp_lat = asin(cosc * this->m_proj_parm.sinX1 + xy_y * sinc * this->m_proj_parm.cosX1 / rh);
- if ((c = cosc - this->m_proj_parm.sinX1 * sin(lp_lat)) != 0. || xy_x != 0.)
- lp_lon = atan2(xy_x * sinc * this->m_proj_parm.cosX1, c * rh);
- break;
- case N_POLE:
- xy_y = -xy_y;
- BOOST_FALLTHROUGH;
- case S_POLE:
- if (fabs(rh) <= EPS10)
- lp_lat = this->m_par.phi0;
- else
- lp_lat = asin(this->m_proj_parm.mode == S_POLE ? - cosc : cosc);
- lp_lon = (xy_x == 0. && xy_y == 0.) ? 0. : atan2(xy_x, xy_y);
- break;
- }
- }
-
- static inline std::string get_name()
- {
- return "stere_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_stere<T>& proj_parm) /* general initialization */
- {
- static const T FORTPI = detail::FORTPI<T>();
- static const T HALFPI = detail::HALFPI<T>();
-
- T t;
-
- if (fabs((t = fabs(par.phi0)) - HALFPI) < EPS10)
- proj_parm.mode = par.phi0 < 0. ? S_POLE : N_POLE;
- else
- proj_parm.mode = t > EPS10 ? OBLIQ : EQUIT;
- proj_parm.phits = fabs(proj_parm.phits);
- if (par.es != 0.0) {
- T X;
-
- switch (proj_parm.mode) {
- case N_POLE:
- case S_POLE:
- if (fabs(proj_parm.phits - HALFPI) < EPS10)
- proj_parm.akm1 = 2. * par.k0 /
- sqrt(pow(1+par.e,1+par.e)*pow(1-par.e,1-par.e));
- else {
- proj_parm.akm1 = cos(proj_parm.phits) /
- pj_tsfn(proj_parm.phits, t = sin(proj_parm.phits), par.e);
- t *= par.e;
- proj_parm.akm1 /= sqrt(1. - t * t);
- }
- break;
- case EQUIT:
- //proj_parm.akm1 = 2. * par.k0;
- //break;
- case OBLIQ:
- t = sin(par.phi0);
- X = 2. * atan(ssfn_(par.phi0, t, par.e)) - HALFPI;
- t *= par.e;
- proj_parm.akm1 = 2. * par.k0 * cos(par.phi0) / sqrt(1. - t * t);
- proj_parm.sinX1 = sin(X);
- proj_parm.cosX1 = cos(X);
- break;
- }
- } else {
- switch (proj_parm.mode) {
- case OBLIQ:
- proj_parm.sinX1 = sin(par.phi0);
- proj_parm.cosX1 = cos(par.phi0);
- BOOST_FALLTHROUGH;
- case EQUIT:
- proj_parm.akm1 = 2. * par.k0;
- break;
- case S_POLE:
- case N_POLE:
- proj_parm.akm1 = fabs(proj_parm.phits - HALFPI) >= EPS10 ?
- cos(proj_parm.phits) / tan(FORTPI - .5 * proj_parm.phits) :
- 2. * par.k0 ;
- break;
- }
- }
- }
-
-
- // Stereographic
- template <typename Parameters, typename T>
- inline void setup_stere(Parameters& par, par_stere<T>& proj_parm)
- {
- static const T HALFPI = detail::HALFPI<T>();
-
- proj_parm.phits = pj_param(par.params, "tlat_ts").i ?
- pj_param(par.params, "rlat_ts").f : HALFPI;
- setup(par, proj_parm);
- }
-
- // Universal Polar Stereographic
- template <typename Parameters, typename T>
- inline void setup_ups(Parameters& par, par_stere<T>& proj_parm)
- {
- static const T HALFPI = detail::HALFPI<T>();
-
- /* International Ellipsoid */
- par.phi0 = pj_param(par.params, "bsouth").i ? -HALFPI: HALFPI;
- if (!par.es)
- BOOST_THROW_EXCEPTION( projection_exception(-34) );
- par.k0 = .994;
- par.x0 = 2000000.;
- par.y0 = 2000000.;
- proj_parm.phits = HALFPI;
- par.lam0 = 0.;
- setup(par, proj_parm);
- }
-
- }} // namespace detail::stere
- #endif // doxygen
-
- /*!
- \brief Stereographic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_ts: Latitude of true scale (degrees)
- \par Example
- \image html ex_stere.gif
- */
- template <typename CalculationType, typename Parameters>
- struct stere_ellipsoid : public detail::stere::base_stere_ellipsoid<CalculationType, Parameters>
- {
- inline stere_ellipsoid(const Parameters& par) : detail::stere::base_stere_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::stere::setup_stere(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Stereographic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - lat_ts: Latitude of true scale (degrees)
- \par Example
- \image html ex_stere.gif
- */
- template <typename CalculationType, typename Parameters>
- struct stere_spheroid : public detail::stere::base_stere_spheroid<CalculationType, Parameters>
- {
- inline stere_spheroid(const Parameters& par) : detail::stere::base_stere_spheroid<CalculationType, Parameters>(par)
- {
- detail::stere::setup_stere(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Universal Polar Stereographic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - south: Denotes southern hemisphere UTM zone (boolean)
- \par Example
- \image html ex_ups.gif
- */
- template <typename CalculationType, typename Parameters>
- struct ups_ellipsoid : public detail::stere::base_stere_ellipsoid<CalculationType, Parameters>
- {
- inline ups_ellipsoid(const Parameters& par) : detail::stere::base_stere_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::stere::setup_ups(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Universal Polar Stereographic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Projection parameters
- - south: Denotes southern hemisphere UTM zone (boolean)
- \par Example
- \image html ex_ups.gif
- */
- template <typename CalculationType, typename Parameters>
- struct ups_spheroid : public detail::stere::base_stere_spheroid<CalculationType, Parameters>
- {
- inline ups_spheroid(const Parameters& par) : detail::stere::base_stere_spheroid<CalculationType, Parameters>(par)
- {
- detail::stere::setup_ups(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::stere, stere_spheroid, stere_ellipsoid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::ups, ups_spheroid, ups_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class stere_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<stere_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<stere_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class ups_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<ups_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<ups_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void stere_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("stere", new stere_entry<CalculationType, Parameters>);
- factory.add_to_factory("ups", new ups_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_STERE_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/sterea.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/sterea.hpp
deleted file mode 100644
index f9de2c68964..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/sterea.hpp
+++ /dev/null
@@ -1,210 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_STEREA_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_STEREA_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Copyright (c) 2003 Gerald I. Evenden
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/pj_gauss.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct sterea {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace sterea
- {
-
- static const double DEL_TOL = 1.e-14;
- static const int MAX_ITER = 10;
-
- template <typename T>
- struct par_sterea
- {
- T phic0;
- T cosc0, sinc0;
- T R2;
- gauss::GAUSS<T> en;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_sterea_ellipsoid : public base_t_fi<base_sterea_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_sterea<CalculationType> m_proj_parm;
-
- inline base_sterea_ellipsoid(const Parameters& par)
- : base_t_fi<base_sterea_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipsoid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType cosc, sinc, cosl_, k;
-
- detail::gauss::gauss(m_proj_parm.en, lp_lon, lp_lat);
- sinc = sin(lp_lat);
- cosc = cos(lp_lat);
- cosl_ = cos(lp_lon);
- k = this->m_par.k0 * this->m_proj_parm.R2 / (1. + this->m_proj_parm.sinc0 * sinc + this->m_proj_parm.cosc0 * cosc * cosl_);
- xy_x = k * cosc * sin(lp_lon);
- xy_y = k * (this->m_proj_parm.cosc0 * sinc - this->m_proj_parm.sinc0 * cosc * cosl_);
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType rho, c, sinc, cosc;
-
- xy_x /= this->m_par.k0;
- xy_y /= this->m_par.k0;
- if((rho = boost::math::hypot(xy_x, xy_y))) {
- c = 2. * atan2(rho, this->m_proj_parm.R2);
- sinc = sin(c);
- cosc = cos(c);
- lp_lat = asin(cosc * this->m_proj_parm.sinc0 + xy_y * sinc * this->m_proj_parm.cosc0 / rho);
- lp_lon = atan2(xy_x * sinc, rho * this->m_proj_parm.cosc0 * cosc -
- xy_y * this->m_proj_parm.sinc0 * sinc);
- } else {
- lp_lat = this->m_proj_parm.phic0;
- lp_lon = 0.;
- }
- detail::gauss::inv_gauss(m_proj_parm.en, lp_lon, lp_lat);
- }
-
- static inline std::string get_name()
- {
- return "sterea_ellipsoid";
- }
-
- };
-
- // Oblique Stereographic Alternative
- template <typename Parameters, typename T>
- inline void setup_sterea(Parameters& par, par_sterea<T>& proj_parm)
- {
- T R;
-
- proj_parm.en = detail::gauss::gauss_ini(par.e, par.phi0, proj_parm.phic0, R);
- proj_parm.sinc0 = sin(proj_parm.phic0);
- proj_parm.cosc0 = cos(proj_parm.phic0);
- proj_parm.R2 = 2. * R;
- }
-
- }} // namespace detail::sterea
- #endif // doxygen
-
- /*!
- \brief Oblique Stereographic Alternative projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Azimuthal
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_sterea.gif
- */
- template <typename CalculationType, typename Parameters>
- struct sterea_ellipsoid : public detail::sterea::base_sterea_ellipsoid<CalculationType, Parameters>
- {
- inline sterea_ellipsoid(const Parameters& par) : detail::sterea::base_sterea_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::sterea::setup_sterea(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::sterea, sterea_ellipsoid, sterea_ellipsoid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class sterea_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<sterea_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void sterea_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("sterea", new sterea_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_STEREA_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/sts.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/sts.hpp
deleted file mode 100644
index ca0d3f0cd18..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/sts.hpp
+++ /dev/null
@@ -1,325 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_STS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_STS_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct kav5 {};
- struct qua_aut {};
- struct mbt_s {};
- struct fouc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace sts
- {
- template <typename T>
- struct par_sts
- {
- T C_x, C_y, C_p;
- int tan_mode;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_sts_spheroid : public base_t_fi<base_sts_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_sts<CalculationType> m_proj_parm;
-
- inline base_sts_spheroid(const Parameters& par)
- : base_t_fi<base_sts_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType c;
-
- xy_x = this->m_proj_parm.C_x * lp_lon * cos(lp_lat);
- xy_y = this->m_proj_parm.C_y;
- lp_lat *= this->m_proj_parm.C_p;
- c = cos(lp_lat);
- if (this->m_proj_parm.tan_mode) {
- xy_x *= c * c;
- xy_y *= tan(lp_lat);
- } else {
- xy_x /= c;
- xy_y *= sin(lp_lat);
- }
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType c;
-
- xy_y /= this->m_proj_parm.C_y;
- c = cos(lp_lat = this->m_proj_parm.tan_mode ? atan(xy_y) : aasin(xy_y));
- lp_lat /= this->m_proj_parm.C_p;
- lp_lon = xy_x / (this->m_proj_parm.C_x * cos(lp_lat));
- if (this->m_proj_parm.tan_mode)
- lp_lon /= c * c;
- else
- lp_lon *= c;
- }
-
- static inline std::string get_name()
- {
- return "sts_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_sts<T>& proj_parm, T const& p, T const& q, int mode)
- {
- par.es = 0.;
- proj_parm.C_x = q / p;
- proj_parm.C_y = p;
- proj_parm.C_p = 1/ q;
- proj_parm.tan_mode = mode;
- }
-
-
- // Kavraisky V
- template <typename Parameters, typename T>
- inline void setup_kav5(Parameters& par, par_sts<T>& proj_parm)
- {
- setup(par, proj_parm, 1.50488, 1.35439, 0);
- }
-
- // Quartic Authalic
- template <typename Parameters, typename T>
- inline void setup_qua_aut(Parameters& par, par_sts<T>& proj_parm)
- {
- setup(par, proj_parm, 2., 2., 0);
- }
-
- // McBryde-Thomas Flat-Polar Sine (No. 1)
- template <typename Parameters, typename T>
- inline void setup_mbt_s(Parameters& par, par_sts<T>& proj_parm)
- {
- setup(par, proj_parm, 1.48875, 1.36509, 0);
- }
-
- // Foucaut
- template <typename Parameters, typename T>
- inline void setup_fouc(Parameters& par, par_sts<T>& proj_parm)
- {
- setup(par, proj_parm, 2., 2., 1);
- }
-
- }} // namespace detail::sts
- #endif // doxygen
-
- /*!
- \brief Kavraisky V projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_kav5.gif
- */
- template <typename CalculationType, typename Parameters>
- struct kav5_spheroid : public detail::sts::base_sts_spheroid<CalculationType, Parameters>
- {
- inline kav5_spheroid(const Parameters& par) : detail::sts::base_sts_spheroid<CalculationType, Parameters>(par)
- {
- detail::sts::setup_kav5(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Quartic Authalic projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_qua_aut.gif
- */
- template <typename CalculationType, typename Parameters>
- struct qua_aut_spheroid : public detail::sts::base_sts_spheroid<CalculationType, Parameters>
- {
- inline qua_aut_spheroid(const Parameters& par) : detail::sts::base_sts_spheroid<CalculationType, Parameters>(par)
- {
- detail::sts::setup_qua_aut(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief McBryde-Thomas Flat-Polar Sine (No. 1) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_mbt_s.gif
- */
- template <typename CalculationType, typename Parameters>
- struct mbt_s_spheroid : public detail::sts::base_sts_spheroid<CalculationType, Parameters>
- {
- inline mbt_s_spheroid(const Parameters& par) : detail::sts::base_sts_spheroid<CalculationType, Parameters>(par)
- {
- detail::sts::setup_mbt_s(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Foucaut projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_fouc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct fouc_spheroid : public detail::sts::base_sts_spheroid<CalculationType, Parameters>
- {
- inline fouc_spheroid(const Parameters& par) : detail::sts::base_sts_spheroid<CalculationType, Parameters>(par)
- {
- detail::sts::setup_fouc(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::kav5, kav5_spheroid, kav5_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::qua_aut, qua_aut_spheroid, qua_aut_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::mbt_s, mbt_s_spheroid, mbt_s_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::fouc, fouc_spheroid, fouc_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class kav5_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<kav5_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class qua_aut_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<qua_aut_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class mbt_s_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<mbt_s_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class fouc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<fouc_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void sts_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("kav5", new kav5_entry<CalculationType, Parameters>);
- factory.add_to_factory("qua_aut", new qua_aut_entry<CalculationType, Parameters>);
- factory.add_to_factory("mbt_s", new mbt_s_entry<CalculationType, Parameters>);
- factory.add_to_factory("fouc", new fouc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_STS_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/tcc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/tcc.hpp
deleted file mode 100644
index 26cb62b3e89..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/tcc.hpp
+++ /dev/null
@@ -1,163 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_TCC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_TCC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct tcc {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace tcc
- {
-
- static const double EPS10 = 1.e-10;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_tcc_spheroid : public base_t_f<base_tcc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- inline base_tcc_spheroid(const Parameters& par)
- : base_t_f<base_tcc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType b, bt;
-
- b = cos(lp_lat) * sin(lp_lon);
- if ((bt = 1. - b * b) < EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- xy_x = b / sqrt(bt);
- xy_y = atan2(tan(lp_lat) , cos(lp_lon));
- }
-
- static inline std::string get_name()
- {
- return "tcc_spheroid";
- }
-
- };
-
- // Transverse Central Cylindrical
- template <typename Parameters>
- inline void setup_tcc(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::tcc
- #endif // doxygen
-
- /*!
- \brief Transverse Central Cylindrical projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - no inverse
- \par Example
- \image html ex_tcc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct tcc_spheroid : public detail::tcc::base_tcc_spheroid<CalculationType, Parameters>
- {
- inline tcc_spheroid(const Parameters& par) : detail::tcc::base_tcc_spheroid<CalculationType, Parameters>(par)
- {
- detail::tcc::setup_tcc(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::tcc, tcc_spheroid, tcc_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class tcc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<tcc_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void tcc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("tcc", new tcc_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_TCC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/tcea.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/tcea.hpp
deleted file mode 100644
index b87574e9478..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/tcea.hpp
+++ /dev/null
@@ -1,176 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_TCEA_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_TCEA_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct tcea {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace tcea
- {
- template <typename T>
- struct par_tcea
- {
- T rk0;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_tcea_spheroid : public base_t_fi<base_tcea_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_tcea<CalculationType> m_proj_parm;
-
- inline base_tcea_spheroid(const Parameters& par)
- : base_t_fi<base_tcea_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = this->m_proj_parm.rk0 * cos(lp_lat) * sin(lp_lon);
- xy_y = this->m_par.k0 * (atan2(tan(lp_lat), cos(lp_lon)) - this->m_par.phi0);
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType t;
-
- xy_y = xy_y * this->m_proj_parm.rk0 + this->m_par.phi0;
- xy_x *= this->m_par.k0;
- t = sqrt(1. - xy_x * xy_x);
- lp_lat = asin(t * sin(xy_y));
- lp_lon = atan2(xy_x, t * cos(xy_y));
- }
-
- static inline std::string get_name()
- {
- return "tcea_spheroid";
- }
-
- };
-
- // Transverse Cylindrical Equal Area
- template <typename Parameters, typename T>
- inline void setup_tcea(Parameters& par, par_tcea<T>& proj_parm)
- {
- proj_parm.rk0 = 1 / par.k0;
- par.es = 0.;
- }
-
- }} // namespace detail::tcea
- #endif // doxygen
-
- /*!
- \brief Transverse Cylindrical Equal Area projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- \par Example
- \image html ex_tcea.gif
- */
- template <typename CalculationType, typename Parameters>
- struct tcea_spheroid : public detail::tcea::base_tcea_spheroid<CalculationType, Parameters>
- {
- inline tcea_spheroid(const Parameters& par) : detail::tcea::base_tcea_spheroid<CalculationType, Parameters>(par)
- {
- detail::tcea::setup_tcea(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::tcea, tcea_spheroid, tcea_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class tcea_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<tcea_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void tcea_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("tcea", new tcea_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_TCEA_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/tmerc.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/tmerc.hpp
deleted file mode 100644
index 6ed2902142c..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/tmerc.hpp
+++ /dev/null
@@ -1,495 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_TMERC_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_TMERC_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/function_overloads.hpp>
-#include <boost/geometry/srs/projections/impl/pj_mlfn.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct tmerc {};
- struct utm {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace tmerc
- {
-
- static const double EPS10 = 1.e-10;
- //static const double FC1 = 1.;
- //static const double FC2 = .5;
- //static const double FC3 = .16666666666666666666;
- //static const double FC4 = .08333333333333333333;
- //static const double FC5 = .05;
- //static const double FC6 = .03333333333333333333;
- //static const double FC7 = .02380952380952380952;
- //static const double FC8 = .01785714285714285714;
-
- template <typename T>
- inline T FC1() { return 1.; }
- template <typename T>
- inline T FC2() { return .5; }
- template <typename T>
- inline T FC3() { return .16666666666666666666666666666666666666; }
- template <typename T>
- inline T FC4() { return .08333333333333333333333333333333333333; }
- template <typename T>
- inline T FC5() { return .05; }
- template <typename T>
- inline T FC6() { return .03333333333333333333333333333333333333; }
- template <typename T>
- inline T FC7() { return .02380952380952380952380952380952380952; }
- template <typename T>
- inline T FC8() { return .01785714285714285714285714285714285714; }
-
- template <typename T>
- struct par_tmerc
- {
- T esp;
- T ml0;
- T en[EN_SIZE];
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_tmerc_ellipsoid : public base_t_fi<base_tmerc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_tmerc<CalculationType> m_proj_parm;
-
- inline base_tmerc_ellipsoid(const Parameters& par)
- : base_t_fi<base_tmerc_ellipsoid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(e_forward) ellipse
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType FC1 = tmerc::FC1<CalculationType>();
- static const CalculationType FC2 = tmerc::FC2<CalculationType>();
- static const CalculationType FC3 = tmerc::FC3<CalculationType>();
- static const CalculationType FC4 = tmerc::FC4<CalculationType>();
- static const CalculationType FC5 = tmerc::FC5<CalculationType>();
- static const CalculationType FC6 = tmerc::FC6<CalculationType>();
- static const CalculationType FC7 = tmerc::FC7<CalculationType>();
- static const CalculationType FC8 = tmerc::FC8<CalculationType>();
-
- CalculationType al, als, n, cosphi, sinphi, t;
-
- /*
- * Fail if our longitude is more than 90 degrees from the
- * central meridian since the results are essentially garbage.
- * Is error -20 really an appropriate return value?
- *
- * http://trac.osgeo.org/proj/ticket/5
- */
- if( lp_lon < -HALFPI || lp_lon > HALFPI )
- {
- xy_x = HUGE_VAL;
- xy_y = HUGE_VAL;
- BOOST_THROW_EXCEPTION( projection_exception(-14) );
- return;
- }
-
- sinphi = sin(lp_lat);
- cosphi = cos(lp_lat);
- t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.;
- t *= t;
- al = cosphi * lp_lon;
- als = al * al;
- al /= sqrt(1. - this->m_par.es * sinphi * sinphi);
- n = this->m_proj_parm.esp * cosphi * cosphi;
- xy_x = this->m_par.k0 * al * (FC1 +
- FC3 * als * (1. - t + n +
- FC5 * als * (5. + t * (t - 18.) + n * (14. - 58. * t)
- + FC7 * als * (61. + t * ( t * (179. - t) - 479. ) )
- )));
- xy_y = this->m_par.k0 * (pj_mlfn(lp_lat, sinphi, cosphi, this->m_proj_parm.en) - this->m_proj_parm.ml0 +
- sinphi * al * lp_lon * FC2 * ( 1. +
- FC4 * als * (5. - t + n * (9. + 4. * n) +
- FC6 * als * (61. + t * (t - 58.) + n * (270. - 330 * t)
- + FC8 * als * (1385. + t * ( t * (543. - t) - 3111.) )
- ))));
- }
-
- // INVERSE(e_inverse) ellipsoid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType FC1 = tmerc::FC1<CalculationType>();
- static const CalculationType FC2 = tmerc::FC2<CalculationType>();
- static const CalculationType FC3 = tmerc::FC3<CalculationType>();
- static const CalculationType FC4 = tmerc::FC4<CalculationType>();
- static const CalculationType FC5 = tmerc::FC5<CalculationType>();
- static const CalculationType FC6 = tmerc::FC6<CalculationType>();
- static const CalculationType FC7 = tmerc::FC7<CalculationType>();
- static const CalculationType FC8 = tmerc::FC8<CalculationType>();
-
- CalculationType n, con, cosphi, d, ds, sinphi, t;
-
- lp_lat = pj_inv_mlfn(this->m_proj_parm.ml0 + xy_y / this->m_par.k0, this->m_par.es, this->m_proj_parm.en);
- if (fabs(lp_lat) >= HALFPI) {
- lp_lat = xy_y < 0. ? -HALFPI : HALFPI;
- lp_lon = 0.;
- } else {
- sinphi = sin(lp_lat);
- cosphi = cos(lp_lat);
- t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.;
- n = this->m_proj_parm.esp * cosphi * cosphi;
- d = xy_x * sqrt(con = 1. - this->m_par.es * sinphi * sinphi) / this->m_par.k0;
- con *= t;
- t *= t;
- ds = d * d;
- lp_lat -= (con * ds / (1.-this->m_par.es)) * FC2 * (1. -
- ds * FC4 * (5. + t * (3. - 9. * n) + n * (1. - 4 * n) -
- ds * FC6 * (61. + t * (90. - 252. * n +
- 45. * t) + 46. * n
- - ds * FC8 * (1385. + t * (3633. + t * (4095. + 1574. * t)) )
- )));
- lp_lon = d*(FC1 -
- ds*FC3*( 1. + 2.*t + n -
- ds*FC5*(5. + t*(28. + 24.*t + 8.*n) + 6.*n
- - ds * FC7 * (61. + t * (662. + t * (1320. + 720. * t)) )
- ))) / cosphi;
- }
- }
-
- static inline std::string get_name()
- {
- return "tmerc_ellipsoid";
- }
-
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_tmerc_spheroid : public base_t_fi<base_tmerc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_tmerc<CalculationType> m_proj_parm;
-
- inline base_tmerc_spheroid(const Parameters& par)
- : base_t_fi<base_tmerc_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) sphere
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
-
- CalculationType b, cosphi;
-
- /*
- * Fail if our longitude is more than 90 degrees from the
- * central meridian since the results are essentially garbage.
- * Is error -20 really an appropriate return value?
- *
- * http://trac.osgeo.org/proj/ticket/5
- */
- if( lp_lon < -HALFPI || lp_lon > HALFPI )
- {
- xy_x = HUGE_VAL;
- xy_y = HUGE_VAL;
- BOOST_THROW_EXCEPTION( projection_exception(-14) );
- return;
- }
-
- cosphi = cos(lp_lat);
- b = cosphi * sin(lp_lon);
- if (fabs(fabs(b) - 1.) <= EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
-
- xy_x = this->m_proj_parm.ml0 * log((1. + b) / (1. - b));
- xy_y = cosphi * cos(lp_lon) / sqrt(1. - b * b);
-
- b = fabs( xy_y );
- if (b >= 1.) {
- if ((b - 1.) > EPS10)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- else xy_y = 0.;
- } else
- xy_y = acos(xy_y);
-
- if (lp_lat < 0.)
- xy_y = -xy_y;
- xy_y = this->m_proj_parm.esp * (xy_y - this->m_par.phi0);
- }
-
- // INVERSE(s_inverse) sphere
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType h, g;
-
- h = exp(xy_x / this->m_proj_parm.esp);
- g = .5 * (h - 1. / h);
- h = cos(this->m_par.phi0 + xy_y / this->m_proj_parm.esp);
- lp_lat = asin(sqrt((1. - h * h) / (1. + g * g)));
- if (xy_y < 0.) lp_lat = -lp_lat;
- lp_lon = (g || h) ? atan2(g, h) : 0.;
- }
-
- static inline std::string get_name()
- {
- return "tmerc_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_tmerc<T>& proj_parm) /* general initialization */
- {
- if (par.es) {
- if (!pj_enfn(par.es, proj_parm.en))
- BOOST_THROW_EXCEPTION( projection_exception(0) );
- proj_parm.ml0 = pj_mlfn(par.phi0, sin(par.phi0), cos(par.phi0), proj_parm.en);
- proj_parm.esp = par.es / (1. - par.es);
- } else {
- proj_parm.esp = par.k0;
- proj_parm.ml0 = .5 * proj_parm.esp;
- }
- }
-
-
- // Transverse Mercator
- template <typename Parameters, typename T>
- inline void setup_tmerc(Parameters& par, par_tmerc<T>& proj_parm)
- {
- setup(par, proj_parm);
- }
-
- // Universal Transverse Mercator (UTM)
- template <typename Parameters, typename T>
- inline void setup_utm(Parameters& par, par_tmerc<T>& proj_parm)
- {
- static const T ONEPI = detail::ONEPI<T>();
-
- int zone;
-
- par.y0 = pj_param(par.params, "bsouth").i ? 10000000. : 0.;
- par.x0 = 500000.;
- if (pj_param(par.params, "tzone").i) /* zone input ? */
- if ((zone = pj_param(par.params, "izone").i) > 0 && zone <= 60)
- --zone;
- else
- BOOST_THROW_EXCEPTION( projection_exception(-35) );
- else /* nearest central meridian input */
- if ((zone = int_floor((adjlon(par.lam0) + ONEPI) * 30. / ONEPI)) < 0)
- zone = 0;
- else if (zone >= 60)
- zone = 59;
- par.lam0 = (zone + .5) * ONEPI / 30. - ONEPI;
- par.k0 = 0.9996;
- par.phi0 = 0.;
- setup(par, proj_parm);
- }
-
- }} // namespace detail::tmerc
- #endif // doxygen
-
- /*!
- \brief Transverse Mercator projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_tmerc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct tmerc_ellipsoid : public detail::tmerc::base_tmerc_ellipsoid<CalculationType, Parameters>
- {
- inline tmerc_ellipsoid(const Parameters& par) : detail::tmerc::base_tmerc_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::tmerc::setup_tmerc(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Transverse Mercator projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- - Ellipsoid
- \par Example
- \image html ex_tmerc.gif
- */
- template <typename CalculationType, typename Parameters>
- struct tmerc_spheroid : public detail::tmerc::base_tmerc_spheroid<CalculationType, Parameters>
- {
- inline tmerc_spheroid(const Parameters& par) : detail::tmerc::base_tmerc_spheroid<CalculationType, Parameters>(par)
- {
- detail::tmerc::setup_tmerc(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Universal Transverse Mercator (UTM) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- \par Projection parameters
- - zone: UTM Zone (integer)
- - south: Denotes southern hemisphere UTM zone (boolean)
- \par Example
- \image html ex_utm.gif
- */
- template <typename CalculationType, typename Parameters>
- struct utm_ellipsoid : public detail::tmerc::base_tmerc_ellipsoid<CalculationType, Parameters>
- {
- inline utm_ellipsoid(const Parameters& par) : detail::tmerc::base_tmerc_ellipsoid<CalculationType, Parameters>(par)
- {
- detail::tmerc::setup_utm(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Universal Transverse Mercator (UTM) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Cylindrical
- - Spheroid
- \par Projection parameters
- - zone: UTM Zone (integer)
- - south: Denotes southern hemisphere UTM zone (boolean)
- \par Example
- \image html ex_utm.gif
- */
- template <typename CalculationType, typename Parameters>
- struct utm_spheroid : public detail::tmerc::base_tmerc_spheroid<CalculationType, Parameters>
- {
- inline utm_spheroid(const Parameters& par) : detail::tmerc::base_tmerc_spheroid<CalculationType, Parameters>(par)
- {
- detail::tmerc::setup_utm(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::tmerc, tmerc_spheroid, tmerc_ellipsoid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::utm, utm_spheroid, utm_ellipsoid)
-
- // Factory entry(s) - dynamic projection
- template <typename CalculationType, typename Parameters>
- class tmerc_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<tmerc_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<tmerc_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class utm_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- if (par.es)
- return new base_v_fi<utm_ellipsoid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- else
- return new base_v_fi<utm_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void tmerc_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("tmerc", new tmerc_entry<CalculationType, Parameters>);
- factory.add_to_factory("utm", new utm_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_TMERC_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/tpeqd.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/tpeqd.hpp
deleted file mode 100644
index 2d08d49bde0..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/tpeqd.hpp
+++ /dev/null
@@ -1,235 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_TPEQD_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_TPEQD_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/math/special_functions/hypot.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct tpeqd {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace tpeqd
- {
- template <typename T>
- struct par_tpeqd
- {
- T cp1, sp1, cp2, sp2, ccs, cs, sc, r2z0, z02, dlam2;
- T hz0, thz0, rhshz0, ca, sa, lp, lamc;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_tpeqd_spheroid : public base_t_fi<base_tpeqd_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_tpeqd<CalculationType> m_proj_parm;
-
- inline base_tpeqd_spheroid(const Parameters& par)
- : base_t_fi<base_tpeqd_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) sphere
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType t, z1, z2, dl1, dl2, sp, cp;
-
- sp = sin(lp_lat);
- cp = cos(lp_lat);
- z1 = aacos(this->m_proj_parm.sp1 * sp + this->m_proj_parm.cp1 * cp * cos(dl1 = lp_lon + this->m_proj_parm.dlam2));
- z2 = aacos(this->m_proj_parm.sp2 * sp + this->m_proj_parm.cp2 * cp * cos(dl2 = lp_lon - this->m_proj_parm.dlam2));
- z1 *= z1;
- z2 *= z2;
- xy_x = this->m_proj_parm.r2z0 * (t = z1 - z2);
- t = this->m_proj_parm.z02 - t;
- xy_y = this->m_proj_parm.r2z0 * asqrt(4. * this->m_proj_parm.z02 * z2 - t * t);
- if ((this->m_proj_parm.ccs * sp - cp * (this->m_proj_parm.cs * sin(dl1) - this->m_proj_parm.sc * sin(dl2))) < 0.)
- xy_y = -xy_y;
- }
-
- // INVERSE(s_inverse) sphere
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- CalculationType cz1, cz2, s, d, cp, sp;
-
- cz1 = cos(boost::math::hypot(xy_y, xy_x + this->m_proj_parm.hz0));
- cz2 = cos(boost::math::hypot(xy_y, xy_x - this->m_proj_parm.hz0));
- s = cz1 + cz2;
- d = cz1 - cz2;
- lp_lon = - atan2(d, (s * this->m_proj_parm.thz0));
- lp_lat = aacos(boost::math::hypot(this->m_proj_parm.thz0 * s, d) * this->m_proj_parm.rhshz0);
- if ( xy_y < 0. )
- lp_lat = - lp_lat;
- /* lam--phi now in system relative to P1--P2 base equator */
- sp = sin(lp_lat);
- cp = cos(lp_lat);
- lp_lat = aasin(this->m_proj_parm.sa * sp + this->m_proj_parm.ca * cp * (s = cos(lp_lon -= this->m_proj_parm.lp)));
- lp_lon = atan2(cp * sin(lp_lon), this->m_proj_parm.sa * cp * s - this->m_proj_parm.ca * sp) + this->m_proj_parm.lamc;
- }
-
- static inline std::string get_name()
- {
- return "tpeqd_spheroid";
- }
-
- };
-
- // Two Point Equidistant
- template <typename Parameters, typename T>
- inline void setup_tpeqd(Parameters& par, par_tpeqd<T>& proj_parm)
- {
- T lam_1, lam_2, phi_1, phi_2, A12, pp;
-
- /* get control point locations */
- phi_1 = pj_param(par.params, "rlat_1").f;
- lam_1 = pj_param(par.params, "rlon_1").f;
- phi_2 = pj_param(par.params, "rlat_2").f;
- lam_2 = pj_param(par.params, "rlon_2").f;
- if (phi_1 == phi_2 && lam_1 == lam_2)
- BOOST_THROW_EXCEPTION( projection_exception(-25) );
- par.lam0 = adjlon(0.5 * (lam_1 + lam_2));
- proj_parm.dlam2 = adjlon(lam_2 - lam_1);
- proj_parm.cp1 = cos(phi_1);
- proj_parm.cp2 = cos(phi_2);
- proj_parm.sp1 = sin(phi_1);
- proj_parm.sp2 = sin(phi_2);
- proj_parm.cs = proj_parm.cp1 * proj_parm.sp2;
- proj_parm.sc = proj_parm.sp1 * proj_parm.cp2;
- proj_parm.ccs = proj_parm.cp1 * proj_parm.cp2 * sin(proj_parm.dlam2);
- proj_parm.z02 = aacos(proj_parm.sp1 * proj_parm.sp2 + proj_parm.cp1 * proj_parm.cp2 * cos(proj_parm.dlam2));
- proj_parm.hz0 = .5 * proj_parm.z02;
- A12 = atan2(proj_parm.cp2 * sin(proj_parm.dlam2),
- proj_parm.cp1 * proj_parm.sp2 - proj_parm.sp1 * proj_parm.cp2 * cos(proj_parm.dlam2));
- proj_parm.ca = cos(pp = aasin(proj_parm.cp1 * sin(A12)));
- proj_parm.sa = sin(pp);
- proj_parm.lp = adjlon(atan2(proj_parm.cp1 * cos(A12), proj_parm.sp1) - proj_parm.hz0);
- proj_parm.dlam2 *= .5;
- proj_parm.lamc = geometry::math::half_pi<T>() - atan2(sin(A12) * proj_parm.sp1, cos(A12)) - proj_parm.dlam2;
- proj_parm.thz0 = tan(proj_parm.hz0);
- proj_parm.rhshz0 = .5 / sin(proj_parm.hz0);
- proj_parm.r2z0 = 0.5 / proj_parm.z02;
- proj_parm.z02 *= proj_parm.z02;
- par.es = 0.;
- }
-
- }} // namespace detail::tpeqd
- #endif // doxygen
-
- /*!
- \brief Two Point Equidistant projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- \par Projection parameters
- - lat_1: Latitude of first standard parallel (degrees)
- - lon_1 (degrees)
- - lat_2: Latitude of second standard parallel (degrees)
- - lon_2 (degrees)
- \par Example
- \image html ex_tpeqd.gif
- */
- template <typename CalculationType, typename Parameters>
- struct tpeqd_spheroid : public detail::tpeqd::base_tpeqd_spheroid<CalculationType, Parameters>
- {
- inline tpeqd_spheroid(const Parameters& par) : detail::tpeqd::base_tpeqd_spheroid<CalculationType, Parameters>(par)
- {
- detail::tpeqd::setup_tpeqd(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::tpeqd, tpeqd_spheroid, tpeqd_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class tpeqd_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<tpeqd_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void tpeqd_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("tpeqd", new tpeqd_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_TPEQD_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/urm5.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/urm5.hpp
deleted file mode 100644
index 96b541f4ea8..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/urm5.hpp
+++ /dev/null
@@ -1,185 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_URM5_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_URM5_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct urm5 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace urm5
- {
- template <typename T>
- struct par_urm5
- {
- T m, rmn, q3, n;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_urm5_spheroid : public base_t_f<base_urm5_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_urm5<CalculationType> m_proj_parm;
-
- inline base_urm5_spheroid(const Parameters& par)
- : base_t_f<base_urm5_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType t;
-
- t = lp_lat = aasin(this->m_proj_parm.n * sin(lp_lat));
- xy_x = this->m_proj_parm.m * lp_lon * cos(lp_lat);
- t *= t;
- xy_y = lp_lat * (1. + t * this->m_proj_parm.q3) * this->m_proj_parm.rmn;
- }
-
- static inline std::string get_name()
- {
- return "urm5_spheroid";
- }
-
- };
-
- // Urmaev V
- template <typename Parameters, typename T>
- inline void setup_urm5(Parameters& par, par_urm5<T>& proj_parm)
- {
- T alpha, t;
-
- if (pj_param(par.params, "tn").i) {
- proj_parm.n = pj_param(par.params, "dn").f;
- if (proj_parm.n <= 0. || proj_parm.n > 1.)
- BOOST_THROW_EXCEPTION( projection_exception(-40) );
- } else
- BOOST_THROW_EXCEPTION( projection_exception(-40) );
- proj_parm.q3 = pj_param(par.params, "dq").f / 3.;
- alpha = pj_param(par.params, "ralpha").f;
- t = proj_parm.n * sin(alpha);
- proj_parm.m = cos(alpha) / sqrt(1. - t * t);
- proj_parm.rmn = 1. / (proj_parm.m * proj_parm.n);
- par.es = 0.;
- }
-
- }} // namespace detail::urm5
- #endif // doxygen
-
- /*!
- \brief Urmaev V projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- - no inverse
- \par Projection parameters
- - n (real)
- - q (real)
- - alpha: Alpha (degrees)
- \par Example
- \image html ex_urm5.gif
- */
- template <typename CalculationType, typename Parameters>
- struct urm5_spheroid : public detail::urm5::base_urm5_spheroid<CalculationType, Parameters>
- {
- inline urm5_spheroid(const Parameters& par) : detail::urm5::base_urm5_spheroid<CalculationType, Parameters>(par)
- {
- detail::urm5::setup_urm5(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::urm5, urm5_spheroid, urm5_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class urm5_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<urm5_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void urm5_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("urm5", new urm5_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_URM5_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/urmfps.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/urmfps.hpp
deleted file mode 100644
index 14840057dc2..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/urmfps.hpp
+++ /dev/null
@@ -1,235 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_URMFPS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_URMFPS_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct urmfps {};
- struct wag1 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace urmfps
- {
-
- static const double C_x = 0.8773826753;
- static const double Cy = 1.139753528477;
-
- template <typename T>
- struct par_urmfps
- {
- T n, C_y;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_urmfps_spheroid : public base_t_fi<base_urmfps_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_urmfps<CalculationType> m_proj_parm;
-
- inline base_urmfps_spheroid(const Parameters& par)
- : base_t_fi<base_urmfps_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) sphere
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- lp_lat = aasin(this->m_proj_parm.n * sin(lp_lat));
- xy_x = C_x * lp_lon * cos(lp_lat);
- xy_y = this->m_proj_parm.C_y * lp_lat;
- }
-
- // INVERSE(s_inverse) sphere
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- xy_y /= this->m_proj_parm.C_y;
- lp_lat = aasin(sin(xy_y) / this->m_proj_parm.n);
- lp_lon = xy_x / (C_x * cos(xy_y));
- }
-
- static inline std::string get_name()
- {
- return "urmfps_spheroid";
- }
-
- };
-
- template <typename Parameters, typename T>
- inline void setup(Parameters& par, par_urmfps<T>& proj_parm)
- {
- proj_parm.C_y = Cy / proj_parm.n;
- par.es = 0.;
- }
-
-
- // Urmaev Flat-Polar Sinusoidal
- template <typename Parameters, typename T>
- inline void setup_urmfps(Parameters& par, par_urmfps<T>& proj_parm)
- {
- if (pj_param(par.params, "tn").i) {
- proj_parm.n = pj_param(par.params, "dn").f;
- if (proj_parm.n <= 0. || proj_parm.n > 1.)
- BOOST_THROW_EXCEPTION( projection_exception(-40) );
- } else
- BOOST_THROW_EXCEPTION( projection_exception(-40) );
- setup(par, proj_parm);
- }
-
- // Wagner I (Kavraisky VI)
- template <typename Parameters, typename T>
- inline void setup_wag1(Parameters& par, par_urmfps<T>& proj_parm)
- {
- proj_parm.n = 0.8660254037844386467637231707;
- setup(par, proj_parm);
- }
-
- }} // namespace detail::urmfps
- #endif // doxygen
-
- /*!
- \brief Urmaev Flat-Polar Sinusoidal projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Projection parameters
- - n (real)
- \par Example
- \image html ex_urmfps.gif
- */
- template <typename CalculationType, typename Parameters>
- struct urmfps_spheroid : public detail::urmfps::base_urmfps_spheroid<CalculationType, Parameters>
- {
- inline urmfps_spheroid(const Parameters& par) : detail::urmfps::base_urmfps_spheroid<CalculationType, Parameters>(par)
- {
- detail::urmfps::setup_urmfps(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief Wagner I (Kavraisky VI) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_wag1.gif
- */
- template <typename CalculationType, typename Parameters>
- struct wag1_spheroid : public detail::urmfps::base_urmfps_spheroid<CalculationType, Parameters>
- {
- inline wag1_spheroid(const Parameters& par) : detail::urmfps::base_urmfps_spheroid<CalculationType, Parameters>(par)
- {
- detail::urmfps::setup_wag1(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::urmfps, urmfps_spheroid, urmfps_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::wag1, wag1_spheroid, wag1_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class urmfps_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<urmfps_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class wag1_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<wag1_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void urmfps_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("urmfps", new urmfps_entry<CalculationType, Parameters>);
- factory.add_to_factory("wag1", new wag1_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_URMFPS_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/vandg.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/vandg.hpp
deleted file mode 100644
index 1fd95285ea4..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/vandg.hpp
+++ /dev/null
@@ -1,257 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_VANDG_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_VANDG_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct vandg {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace vandg
- {
-
- static const double TOL = 1.e-10;
- //static const double THIRD = .33333333333333333333;
- //static const double TWO_THRD = .66666666666666666666;
- //static const double C2_27 = .07407407407407407407;
- //static const double PI4_3 = 4.18879020478639098458;
- //static const double PISQ = 9.86960440108935861869;
- //static const double TPISQ = 19.73920880217871723738;
- //static const double HPISQ = 4.93480220054467930934;
-
- template <typename T>
- inline T C2_27() { return .07407407407407407407407407407407; }
- template <typename T>
- inline T PI4_3() { return boost::math::constants::four_thirds_pi<T>(); }
- template <typename T>
- inline T TPISQ() { return 19.739208802178717237668981999752; }
- template <typename T>
- inline T HPISQ() { return 4.9348022005446793094172454999381; }
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_vandg_spheroid : public base_t_fi<base_vandg_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_vandg_spheroid(const Parameters& par)
- : base_t_fi<base_vandg_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType ONEPI = detail::ONEPI<CalculationType>();
-
- CalculationType al, al2, g, g2, p2;
-
- p2 = fabs(lp_lat / HALFPI);
- if ((p2 - TOL) > 1.)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- if (p2 > 1.)
- p2 = 1.;
- if (fabs(lp_lat) <= TOL) {
- xy_x = lp_lon;
- xy_y = 0.;
- } else if (fabs(lp_lon) <= TOL || fabs(p2 - 1.) < TOL) {
- xy_x = 0.;
- xy_y = ONEPI * tan(.5 * asin(p2));
- if (lp_lat < 0.) xy_y = -xy_y;
- } else {
- al = .5 * fabs(ONEPI / lp_lon - lp_lon / ONEPI);
- al2 = al * al;
- g = sqrt(1. - p2 * p2);
- g = g / (p2 + g - 1.);
- g2 = g * g;
- p2 = g * (2. / p2 - 1.);
- p2 = p2 * p2;
- xy_x = g - p2; g = p2 + al2;
- xy_x = ONEPI * (al * xy_x + sqrt(al2 * xy_x * xy_x - g * (g2 - p2))) / g;
- if (lp_lon < 0.) xy_x = -xy_x;
- xy_y = fabs(xy_x / ONEPI);
- xy_y = 1. - xy_y * (xy_y + 2. * al);
- if (xy_y < -TOL)
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- if (xy_y < 0.)
- xy_y = 0.;
- else
- xy_y = sqrt(xy_y) * (lp_lat < 0. ? -ONEPI : ONEPI);
- }
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType ONEPI = detail::ONEPI<CalculationType>();
- static const CalculationType PISQ = detail::PI_SQR<CalculationType>();
- static const CalculationType THIRD = detail::THIRD<CalculationType>();
- static const CalculationType TWOPI = detail::TWOPI<CalculationType>();
-
- static const CalculationType C2_27 = vandg::C2_27<CalculationType>();
- static const CalculationType PI4_3 = vandg::PI4_3<CalculationType>();
- static const CalculationType TPISQ = vandg::TPISQ<CalculationType>();
- static const CalculationType HPISQ = vandg::HPISQ<CalculationType>();
-
- CalculationType t, c0, c1, c2, c3, al, r2, r, m, d, ay, x2, y2;
-
- x2 = xy_x * xy_x;
- if ((ay = fabs(xy_y)) < TOL) {
- lp_lat = 0.;
- t = x2 * x2 + TPISQ * (x2 + HPISQ);
- lp_lon = fabs(xy_x) <= TOL ? 0. :
- .5 * (x2 - PISQ + sqrt(t)) / xy_x;
- return;
- }
- y2 = xy_y * xy_y;
- r = x2 + y2; r2 = r * r;
- c1 = - ONEPI * ay * (r + PISQ);
- c3 = r2 + TWOPI * (ay * r + ONEPI * (y2 + ONEPI * (ay + HALFPI)));
- c2 = c1 + PISQ * (r - 3. * y2);
- c0 = ONEPI * ay;
- c2 /= c3;
- al = c1 / c3 - THIRD * c2 * c2;
- m = 2. * sqrt(-THIRD * al);
- d = C2_27 * c2 * c2 * c2 + (c0 * c0 - THIRD * c2 * c1) / c3;
- if (((t = fabs(d = 3. * d / (al * m))) - TOL) <= 1.) {
- d = t > 1. ? (d > 0. ? 0. : ONEPI) : acos(d);
- lp_lat = ONEPI * (m * cos(d * THIRD + PI4_3) - THIRD * c2);
- if (xy_y < 0.) lp_lat = -lp_lat;
- t = r2 + TPISQ * (x2 - y2 + HPISQ);
- lp_lon = fabs(xy_x) <= TOL ? 0. :
- .5 * (r - PISQ + (t <= 0. ? 0. : sqrt(t))) / xy_x;
- } else
- BOOST_THROW_EXCEPTION( projection_exception(-20) );
- }
-
- static inline std::string get_name()
- {
- return "vandg_spheroid";
- }
-
- };
-
- // van der Grinten (I)
- template <typename Parameters>
- inline void setup_vandg(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::vandg
- #endif // doxygen
-
- /*!
- \brief van der Grinten (I) projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- \par Example
- \image html ex_vandg.gif
- */
- template <typename CalculationType, typename Parameters>
- struct vandg_spheroid : public detail::vandg::base_vandg_spheroid<CalculationType, Parameters>
- {
- inline vandg_spheroid(const Parameters& par) : detail::vandg::base_vandg_spheroid<CalculationType, Parameters>(par)
- {
- detail::vandg::setup_vandg(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::vandg, vandg_spheroid, vandg_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class vandg_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<vandg_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void vandg_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("vandg", new vandg_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_VANDG_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/vandg2.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/vandg2.hpp
deleted file mode 100644
index 650a64f432c..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/vandg2.hpp
+++ /dev/null
@@ -1,237 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_VANDG2_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_VANDG2_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct vandg2 {};
- struct vandg3 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace vandg2
- {
-
- static const double TOL = 1e-10;
- //static const double TWORPI = 0.63661977236758134308;
-
- struct par_vandg2
- {
- int vdg3;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_vandg2_spheroid : public base_t_f<base_vandg2_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_vandg2 m_proj_parm;
-
- inline base_vandg2_spheroid(const Parameters& par)
- : base_t_f<base_vandg2_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType ONEPI = detail::ONEPI<CalculationType>();
- static const CalculationType TWORPI = detail::TWO_D_PI<CalculationType>();
-
- CalculationType x1, at, bt, ct;
-
- bt = fabs(TWORPI * lp_lat);
- if ((ct = 1. - bt * bt) < 0.)
- ct = 0.;
- else
- ct = sqrt(ct);
- if (fabs(lp_lon) < TOL) {
- xy_x = 0.;
- xy_y = ONEPI * (lp_lat < 0. ? -bt : bt) / (1. + ct);
- } else {
- at = 0.5 * fabs(ONEPI / lp_lon - lp_lon / ONEPI);
- if (this->m_proj_parm.vdg3) {
- x1 = bt / (1. + ct);
- xy_x = ONEPI * (sqrt(at * at + 1. - x1 * x1) - at);
- xy_y = ONEPI * x1;
- } else {
- x1 = (ct * sqrt(1. + at * at) - at * ct * ct) /
- (1. + at * at * bt * bt);
- xy_x = ONEPI * x1;
- xy_y = ONEPI * sqrt(1. - x1 * (x1 + 2. * at) + TOL);
- }
- if ( lp_lon < 0.) xy_x = -xy_x;
- if ( lp_lat < 0.) xy_y = -xy_y;
- }
- }
-
- static inline std::string get_name()
- {
- return "vandg2_spheroid";
- }
-
- };
-
- // van der Grinten II
- template <typename Parameters>
- inline void setup_vandg2(Parameters& /*par*/, par_vandg2& proj_parm)
- {
- proj_parm.vdg3 = 0;
- }
-
- // van der Grinten III
- template <typename Parameters>
- inline void setup_vandg3(Parameters& par, par_vandg2& proj_parm)
- {
- proj_parm.vdg3 = 1;
- par.es = 0.;
- }
-
- }} // namespace detail::vandg2
- #endif // doxygen
-
- /*!
- \brief van der Grinten II projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Example
- \image html ex_vandg2.gif
- */
- template <typename CalculationType, typename Parameters>
- struct vandg2_spheroid : public detail::vandg2::base_vandg2_spheroid<CalculationType, Parameters>
- {
- inline vandg2_spheroid(const Parameters& par) : detail::vandg2::base_vandg2_spheroid<CalculationType, Parameters>(par)
- {
- detail::vandg2::setup_vandg2(this->m_par, this->m_proj_parm);
- }
- };
-
- /*!
- \brief van der Grinten III projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Example
- \image html ex_vandg3.gif
- */
- template <typename CalculationType, typename Parameters>
- struct vandg3_spheroid : public detail::vandg2::base_vandg2_spheroid<CalculationType, Parameters>
- {
- inline vandg3_spheroid(const Parameters& par) : detail::vandg2::base_vandg2_spheroid<CalculationType, Parameters>(par)
- {
- detail::vandg2::setup_vandg3(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::vandg2, vandg2_spheroid, vandg2_spheroid)
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::vandg3, vandg3_spheroid, vandg3_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class vandg2_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<vandg2_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- class vandg3_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<vandg3_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void vandg2_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("vandg2", new vandg2_entry<CalculationType, Parameters>);
- factory.add_to_factory("vandg3", new vandg3_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_VANDG2_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/vandg4.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/vandg4.hpp
deleted file mode 100644
index 0b85fedef43..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/vandg4.hpp
+++ /dev/null
@@ -1,194 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_VANDG4_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_VANDG4_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct vandg4 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace vandg4
- {
-
- static const double TOL = 1e-10;
- //static const double TWORPI = 0.63661977236758134308;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_vandg4_spheroid : public base_t_f<base_vandg4_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_vandg4_spheroid(const Parameters& par)
- : base_t_f<base_vandg4_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType TWORPI = detail::TWO_D_PI<CalculationType>();
-
- CalculationType x1, t, bt, ct, ft, bt2, ct2, dt, dt2;
-
- if (fabs(lp_lat) < TOL) {
- xy_x = lp_lon;
- xy_y = 0.;
- } else if (fabs(lp_lon) < TOL || fabs(fabs(lp_lat) - HALFPI) < TOL) {
- xy_x = 0.;
- xy_y = lp_lat;
- } else {
- bt = fabs(TWORPI * lp_lat);
- bt2 = bt * bt;
- ct = 0.5 * (bt * (8. - bt * (2. + bt2)) - 5.)
- / (bt2 * (bt - 1.));
- ct2 = ct * ct;
- dt = TWORPI * lp_lon;
- dt = dt + 1. / dt;
- dt = sqrt(dt * dt - 4.);
- if ((fabs(lp_lon) - HALFPI) < 0.) dt = -dt;
- dt2 = dt * dt;
- x1 = bt + ct; x1 *= x1;
- t = bt + 3.*ct;
- ft = x1 * (bt2 + ct2 * dt2 - 1.) + (1.-bt2) * (
- bt2 * (t * t + 4. * ct2) +
- ct2 * (12. * bt * ct + 4. * ct2) );
- x1 = (dt*(x1 + ct2 - 1.) + 2.*sqrt(ft)) /
- (4.* x1 + dt2);
- xy_x = HALFPI * x1;
- xy_y = HALFPI * sqrt(1. + dt * fabs(x1) - x1 * x1);
- if (lp_lon < 0.) xy_x = -xy_x;
- if (lp_lat < 0.) xy_y = -xy_y;
- }
- }
-
- static inline std::string get_name()
- {
- return "vandg4_spheroid";
- }
-
- };
-
- // van der Grinten IV
- template <typename Parameters>
- inline void setup_vandg4(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::vandg4
- #endif // doxygen
-
- /*!
- \brief van der Grinten IV projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Example
- \image html ex_vandg4.gif
- */
- template <typename CalculationType, typename Parameters>
- struct vandg4_spheroid : public detail::vandg4::base_vandg4_spheroid<CalculationType, Parameters>
- {
- inline vandg4_spheroid(const Parameters& par) : detail::vandg4::base_vandg4_spheroid<CalculationType, Parameters>(par)
- {
- detail::vandg4::setup_vandg4(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::vandg4, vandg4_spheroid, vandg4_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class vandg4_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<vandg4_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void vandg4_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("vandg4", new vandg4_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_VANDG4_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/wag2.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/wag2.hpp
deleted file mode 100644
index 2d16892a9d0..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/wag2.hpp
+++ /dev/null
@@ -1,172 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_WAG2_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_WAG2_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-#include <boost/geometry/srs/projections/impl/aasincos.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct wag2 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace wag2
- {
-
- static const double C_x = 0.92483;
- static const double C_y = 1.38725;
- static const double C_p1 = 0.88022;
- static const double C_p2 = 0.88550;
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_wag2_spheroid : public base_t_fi<base_wag2_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_wag2_spheroid(const Parameters& par)
- : base_t_fi<base_wag2_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- lp_lat = aasin(C_p1 * sin(C_p2 * lp_lat));
- xy_x = C_x * lp_lon * cos(lp_lat);
- xy_y = C_y * lp_lat;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = xy_y / C_y;
- lp_lon = xy_x / (C_x * cos(lp_lat));
- lp_lat = aasin(sin(lp_lat) / C_p1) / C_p2;
- }
-
- static inline std::string get_name()
- {
- return "wag2_spheroid";
- }
-
- };
-
- // Wagner II
- template <typename Parameters>
- inline void setup_wag2(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::wag2
- #endif // doxygen
-
- /*!
- \brief Wagner II projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Example
- \image html ex_wag2.gif
- */
- template <typename CalculationType, typename Parameters>
- struct wag2_spheroid : public detail::wag2::base_wag2_spheroid<CalculationType, Parameters>
- {
- inline wag2_spheroid(const Parameters& par) : detail::wag2::base_wag2_spheroid<CalculationType, Parameters>(par)
- {
- detail::wag2::setup_wag2(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::wag2, wag2_spheroid, wag2_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class wag2_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<wag2_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void wag2_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("wag2", new wag2_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_WAG2_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/wag3.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/wag3.hpp
deleted file mode 100644
index 3ddbfe82586..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/wag3.hpp
+++ /dev/null
@@ -1,180 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_WAG3_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_WAG3_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct wag3 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace wag3
- {
- template <typename T>
- struct par_wag3
- {
- T C_x;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_wag3_spheroid : public base_t_fi<base_wag3_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_wag3<CalculationType> m_proj_parm;
-
- inline base_wag3_spheroid(const Parameters& par)
- : base_t_fi<base_wag3_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType TWOTHIRD = detail::TWOTHIRD<CalculationType>();
-
- xy_x = this->m_proj_parm.C_x * lp_lon * cos(TWOTHIRD * lp_lat);
- xy_y = lp_lat;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- static const CalculationType TWOTHIRD = detail::TWOTHIRD<CalculationType>();
-
- lp_lat = xy_y;
- lp_lon = xy_x / (this->m_proj_parm.C_x * cos(TWOTHIRD * lp_lat));
- }
-
- static inline std::string get_name()
- {
- return "wag3_spheroid";
- }
-
- };
-
- // Wagner III
- template <typename Parameters, typename T>
- inline void setup_wag3(Parameters& par, par_wag3<T>& proj_parm)
- {
- T ts;
-
- ts = pj_param(par.params, "rlat_ts").f;
- proj_parm.C_x = cos(ts) / cos(2.*ts/3.);
- par.es = 0.;
- }
-
- }} // namespace detail::wag3
- #endif // doxygen
-
- /*!
- \brief Wagner III projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Projection parameters
- - lat_ts: Latitude of true scale (degrees)
- \par Example
- \image html ex_wag3.gif
- */
- template <typename CalculationType, typename Parameters>
- struct wag3_spheroid : public detail::wag3::base_wag3_spheroid<CalculationType, Parameters>
- {
- inline wag3_spheroid(const Parameters& par) : detail::wag3::base_wag3_spheroid<CalculationType, Parameters>(par)
- {
- detail::wag3::setup_wag3(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::wag3, wag3_spheroid, wag3_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class wag3_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<wag3_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void wag3_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("wag3", new wag3_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_WAG3_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/wag7.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/wag7.hpp
deleted file mode 100644
index c752ff33ee4..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/wag7.hpp
+++ /dev/null
@@ -1,161 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_WAG7_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_WAG7_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct wag7 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace wag7
- {
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_wag7_spheroid : public base_t_f<base_wag7_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
-
- inline base_wag7_spheroid(const Parameters& par)
- : base_t_f<base_wag7_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) sphere
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- CalculationType theta, ct, D;
-
- theta = asin(xy_y = 0.90630778703664996 * sin(lp_lat));
- xy_x = 2.66723 * (ct = cos(theta)) * sin(lp_lon /= 3.);
- xy_y *= 1.24104 * (D = 1/(sqrt(0.5 * (1 + ct * cos(lp_lon)))));
- xy_x *= D;
- }
-
- static inline std::string get_name()
- {
- return "wag7_spheroid";
- }
-
- };
-
- // Wagner VII
- template <typename Parameters>
- inline void setup_wag7(Parameters& par)
- {
- par.es = 0.;
- }
-
- }} // namespace detail::wag7
- #endif // doxygen
-
- /*!
- \brief Wagner VII projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Miscellaneous
- - Spheroid
- - no inverse
- \par Example
- \image html ex_wag7.gif
- */
- template <typename CalculationType, typename Parameters>
- struct wag7_spheroid : public detail::wag7::base_wag7_spheroid<CalculationType, Parameters>
- {
- inline wag7_spheroid(const Parameters& par) : detail::wag7::base_wag7_spheroid<CalculationType, Parameters>(par)
- {
- detail::wag7::setup_wag7(this->m_par);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::wag7, wag7_spheroid, wag7_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class wag7_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<wag7_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void wag7_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("wag7", new wag7_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_WAG7_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/wink1.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/wink1.hpp
deleted file mode 100644
index 36ecc95500f..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/wink1.hpp
+++ /dev/null
@@ -1,174 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_WINK1_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_WINK1_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct wink1 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace wink1
- {
-
- template <typename T>
- struct par_wink1
- {
- T cosphi1;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_wink1_spheroid : public base_t_fi<base_wink1_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_wink1<CalculationType> m_proj_parm;
-
- inline base_wink1_spheroid(const Parameters& par)
- : base_t_fi<base_wink1_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- xy_x = .5 * lp_lon * (this->m_proj_parm.cosphi1 + cos(lp_lat));
- xy_y = lp_lat;
- }
-
- // INVERSE(s_inverse) spheroid
- // Project coordinates from cartesian (x, y) to geographic (lon, lat)
- inline void inv(cartesian_type& xy_x, cartesian_type& xy_y, geographic_type& lp_lon, geographic_type& lp_lat) const
- {
- lp_lat = xy_y;
- lp_lon = 2. * xy_x / (this->m_proj_parm.cosphi1 + cos(lp_lat));
- }
-
- static inline std::string get_name()
- {
- return "wink1_spheroid";
- }
-
- };
-
- // Winkel I
- template <typename Parameters, typename T>
- inline void setup_wink1(Parameters& par, par_wink1<T>& proj_parm)
- {
- proj_parm.cosphi1 = cos(pj_param(par.params, "rlat_ts").f);
- par.es = 0.;
- }
-
- }} // namespace detail::wink1
- #endif // doxygen
-
- /*!
- \brief Winkel I projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- \par Projection parameters
- - lat_ts: Latitude of true scale (degrees)
- \par Example
- \image html ex_wink1.gif
- */
- template <typename CalculationType, typename Parameters>
- struct wink1_spheroid : public detail::wink1::base_wink1_spheroid<CalculationType, Parameters>
- {
- inline wink1_spheroid(const Parameters& par) : detail::wink1::base_wink1_spheroid<CalculationType, Parameters>(par)
- {
- detail::wink1::setup_wink1(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::wink1, wink1_spheroid, wink1_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class wink1_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_fi<wink1_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void wink1_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("wink1", new wink1_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_WINK1_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj/wink2.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj/wink2.hpp
deleted file mode 100644
index 9c90d42481f..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj/wink2.hpp
+++ /dev/null
@@ -1,195 +0,0 @@
-#ifndef BOOST_GEOMETRY_PROJECTIONS_WINK2_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_WINK2_HPP
-
-// Boost.Geometry - extensions-gis-projections (based on PROJ4)
-// This file is automatically generated. DO NOT EDIT.
-
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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)
-
-// This file is converted from PROJ4, http://trac.osgeo.org/proj
-// PROJ4 is originally written by Gerald Evenden (then of the USGS)
-// PROJ4 is maintained by Frank Warmerdam
-// PROJ4 is converted to Boost.Geometry by Barend Gehrels
-
-// Last updated version of proj: 4.9.1
-
-// Original copyright notice:
-
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/srs/projections/impl/base_static.hpp>
-#include <boost/geometry/srs/projections/impl/base_dynamic.hpp>
-#include <boost/geometry/srs/projections/impl/projects.hpp>
-#include <boost/geometry/srs/projections/impl/factory_entry.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace srs { namespace par4
-{
- struct wink2 {};
-
-}} //namespace srs::par4
-
-namespace projections
-{
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace wink2
- {
-
- static const int MAX_ITER = 10;
-
- static const double LOOP_TOL = 1e-7;
- //static const double TWO_D_PI = 0.636619772367581343;
-
- template <typename T>
- struct par_wink2
- {
- T cosphi1;
- };
-
- // template class, using CRTP to implement forward/inverse
- template <typename CalculationType, typename Parameters>
- struct base_wink2_spheroid : public base_t_f<base_wink2_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>
- {
-
- typedef CalculationType geographic_type;
- typedef CalculationType cartesian_type;
-
- par_wink2<CalculationType> m_proj_parm;
-
- inline base_wink2_spheroid(const Parameters& par)
- : base_t_f<base_wink2_spheroid<CalculationType, Parameters>,
- CalculationType, Parameters>(*this, par) {}
-
- // FORWARD(s_forward) spheroid
- // Project coordinates from geographic (lon, lat) to cartesian (x, y)
- inline void fwd(geographic_type& lp_lon, geographic_type& lp_lat, cartesian_type& xy_x, cartesian_type& xy_y) const
- {
- static const CalculationType ONEPI = detail::ONEPI<CalculationType>();
- static const CalculationType HALFPI = detail::HALFPI<CalculationType>();
- static const CalculationType FORTPI = detail::FORTPI<CalculationType>();
- static const CalculationType TWO_D_PI = detail::TWO_D_PI<CalculationType>();
-
- CalculationType k, V;
- int i;
-
- xy_y = lp_lat * TWO_D_PI;
- k = ONEPI * sin(lp_lat);
- lp_lat *= 1.8;
- for (i = MAX_ITER; i ; --i) {
- lp_lat -= V = (lp_lat + sin(lp_lat) - k) /
- (1. + cos(lp_lat));
- if (fabs(V) < LOOP_TOL)
- break;
- }
- if (!i)
- lp_lat = (lp_lat < 0.) ? -HALFPI : HALFPI;
- else
- lp_lat *= 0.5;
- xy_x = 0.5 * lp_lon * (cos(lp_lat) + this->m_proj_parm.cosphi1);
- xy_y = FORTPI * (sin(lp_lat) + xy_y);
- }
-
- static inline std::string get_name()
- {
- return "wink2_spheroid";
- }
-
- };
-
- // Winkel II
- template <typename Parameters, typename T>
- inline void setup_wink2(Parameters& par, par_wink2<T>& proj_parm)
- {
- proj_parm.cosphi1 = cos(pj_param(par.params, "rlat_1").f);
- par.es = 0.;
- }
-
- }} // namespace detail::wink2
- #endif // doxygen
-
- /*!
- \brief Winkel II projection
- \ingroup projections
- \tparam Geographic latlong point type
- \tparam Cartesian xy point type
- \tparam Parameters parameter type
- \par Projection characteristics
- - Pseudocylindrical
- - Spheroid
- - no inverse
- \par Projection parameters
- - lat_1: Latitude of first standard parallel (degrees)
- \par Example
- \image html ex_wink2.gif
- */
- template <typename CalculationType, typename Parameters>
- struct wink2_spheroid : public detail::wink2::base_wink2_spheroid<CalculationType, Parameters>
- {
- inline wink2_spheroid(const Parameters& par) : detail::wink2::base_wink2_spheroid<CalculationType, Parameters>(par)
- {
- detail::wink2::setup_wink2(this->m_par, this->m_proj_parm);
- }
- };
-
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail
- {
-
- // Static projection
- BOOST_GEOMETRY_PROJECTIONS_DETAIL_STATIC_PROJECTION(srs::par4::wink2, wink2_spheroid, wink2_spheroid)
-
- // Factory entry(s)
- template <typename CalculationType, typename Parameters>
- class wink2_entry : public detail::factory_entry<CalculationType, Parameters>
- {
- public :
- virtual base_v<CalculationType, Parameters>* create_new(const Parameters& par) const
- {
- return new base_v_f<wink2_spheroid<CalculationType, Parameters>, CalculationType, Parameters>(par);
- }
- };
-
- template <typename CalculationType, typename Parameters>
- inline void wink2_init(detail::base_factory<CalculationType, Parameters>& factory)
- {
- factory.add_to_factory("wink2", new wink2_entry<CalculationType, Parameters>);
- }
-
- } // namespace detail
- #endif // doxygen
-
-} // namespace projections
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_WINK2_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/proj4.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/proj4.hpp
deleted file mode 100644
index 7b44679f318..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/proj4.hpp
+++ /dev/null
@@ -1,123 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_SRS_PROJECTIONS_PROJ4_HPP
-#define BOOST_GEOMETRY_SRS_PROJECTIONS_PROJ4_HPP
-
-
-#include <string>
-
-#include <boost/tuple/tuple.hpp>
-
-
-namespace boost { namespace geometry { namespace srs
-{
-
-
-struct dynamic {};
-
-
-struct proj4
-{
- explicit proj4(const char* s)
- : str(s)
- {}
-
- explicit proj4(std::string const& s)
- : str(s)
- {}
-
- std::string str;
-};
-
-
-template
-<
- // null_type -> void?
- typename P0 = boost::tuples::null_type,
- typename P1 = boost::tuples::null_type,
- typename P2 = boost::tuples::null_type,
- typename P3 = boost::tuples::null_type,
- typename P4 = boost::tuples::null_type,
- typename P5 = boost::tuples::null_type,
- typename P6 = boost::tuples::null_type,
- typename P7 = boost::tuples::null_type,
- typename P8 = boost::tuples::null_type,
- typename P9 = boost::tuples::null_type
->
-struct static_proj4
- : boost::tuple<P0, P1, P2, P3, P4, P5, P6, P7, P8, P9>
-{
- typedef boost::tuple<P0, P1, P2, P3, P4, P5, P6, P7, P8, P9> base_type;
-
- static_proj4()
- {}
-
- explicit static_proj4(P0 const& p0)
- : base_type(p0)
- {}
-
- static_proj4(P0 const& p0, P1 const& p1)
- : base_type(p0, p1)
- {}
-
- static_proj4(P0 const& p0, P1 const& p1, P2 const& p2)
- : base_type(p0, p1, p2)
- {}
-
- static_proj4(P0 const& p0, P1 const& p1, P2 const& p2, P3 const& p3)
- : base_type(p0, p1, p2, p3)
- {}
-
- static_proj4(P0 const& p0, P1 const& p1, P2 const& p2, P3 const& p3, P4 const& p4)
- : base_type(p0, p1, p2, p3, p4)
- {}
-
- static_proj4(P0 const& p0, P1 const& p1, P2 const& p2, P3 const& p3, P4 const& p4, P5 const& p5)
- : base_type(p0, p1, p2, p3, p4, p5)
- {}
-
- static_proj4(P0 const& p0, P1 const& p1, P2 const& p2, P3 const& p3, P4 const& p4, P5 const& p5, P6 const& p6)
- : base_type(p0, p1, p2, p3, p4, p5, p6)
- {}
-
- static_proj4(P0 const& p0, P1 const& p1, P2 const& p2, P3 const& p3, P4 const& p4, P5 const& p5, P6 const& p6, P7 const& p7)
- : base_type(p0, p1, p2, p3, p4, p5, p6, p7)
- {}
-
- static_proj4(P0 const& p0, P1 const& p1, P2 const& p2, P3 const& p3, P4 const& p4, P5 const& p5, P6 const& p6, P7 const& p7, P8 const& p8)
- : base_type(p0, p1, p2, p3, p4, p5, p6, p7, p8)
- {}
-
- static_proj4(P0 const& p0, P1 const& p1, P2 const& p2, P3 const& p3, P4 const& p4, P5 const& p5, P6 const& p6, P7 const& p7, P8 const& p8, P9 const& p9)
- : base_type(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)
- {}
-};
-
-#define BOOST_GEOMETRY_PROJECTIONS_DETAIL_TYPENAME_PX \
-typename P0, typename P1, typename P2, typename P3, typename P4, \
-typename P5, typename P6, typename P7, typename P8, typename P9
-
-#define BOOST_GEOMETRY_PROJECTIONS_DETAIL_PX \
-P0, P1, P2, P3, P4, P5, P6, P7, P8, P9
-
-
-}}} // namespace boost::geometry::srs
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace boost { namespace geometry { namespace projections { namespace detail
-{
-
-template<typename R> struct function_argument_type;
-template<typename R, typename A> struct function_argument_type<R(A)> { typedef A type; };
-
-}}}} // namespace boost::geometry::projections::detail
-#endif // DOXYGEN_NO_DETAIL
-
-#endif // BOOST_GEOMETRY_SRS_PROJECTIONS_PROJ4_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/projections/srid_traits.hpp b/contrib/restricted/boost/boost/geometry/srs/projections/srid_traits.hpp
deleted file mode 100644
index c2270f2542c..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/projections/srid_traits.hpp
+++ /dev/null
@@ -1,101 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_PROJECTIONS_SRID_TRAITS_HPP
-#define BOOST_GEOMETRY_PROJECTIONS_SRID_TRAITS_HPP
-
-
-#include <boost/geometry/srs/projections/par4.hpp>
-#include <boost/geometry/srs/projections/proj4.hpp>
-#include <boost/geometry/srs/sphere.hpp>
-#include <boost/geometry/srs/spheroid.hpp>
-
-
-#define BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_ED(AUTH, CODE, PROJ, ELLPS, DATUM, PROJ4_STR) \
-template<> \
-struct AUTH##_traits<CODE> \
-{ \
- typedef srs::static_proj4 \
- < \
- srs::par4::proj<srs::par4::PROJ>, \
- srs::par4::ellps<srs::par4::ELLPS>, \
- srs::par4::datum<srs::par4::DATUM> \
- > static_parameters_type; \
- static inline static_parameters_type s_par() \
- { \
- return static_parameters_type(); \
- } \
- static inline srs::proj4 par() \
- { \
- return srs::proj4(PROJ4_STR); \
- } \
-}; \
-
-#define BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_E(AUTH, CODE, PROJ, ELLPS, PROJ4_STR) \
-template<> \
-struct AUTH##_traits<CODE> \
-{ \
- typedef srs::static_proj4 \
- < \
- srs::par4::proj<srs::par4::PROJ>, \
- srs::par4::ellps<srs::par4::ELLPS> \
- > static_parameters_type; \
- static inline static_parameters_type s_par() \
- { \
- return static_parameters_type(); \
- } \
- static inline srs::proj4 par() \
- { \
- return srs::proj4(PROJ4_STR); \
- } \
-}; \
-
-#define BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_AB(AUTH, CODE, PROJ, A, B, PROJ4_STR) \
-template<> \
-struct AUTH##_traits<CODE> \
-{ \
- typedef srs::static_proj4 \
- < \
- srs::par4::proj<srs::par4::PROJ>, \
- srs::par4::ellps<srs::spheroid<double> > \
- > static_parameters_type; \
- static inline static_parameters_type s_par() \
- { \
- return static_parameters_type(srs::par4::proj<srs::par4::PROJ>(), \
- srs::par4::ellps<srs::spheroid<double> >(srs::spheroid<double>(A, B))); \
- } \
- static inline srs::proj4 par() \
- { \
- return srs::proj4(PROJ4_STR); \
- } \
-}; \
-
-#define BOOST_GEOMETRY_PROJECTIONS_DETAIL_SRID_TRAITS_S(AUTH, CODE, PROJ, R, PROJ4_STR) \
-template<> \
-struct AUTH##_traits<CODE> \
-{ \
- typedef srs::static_proj4 \
- < \
- srs::par4::proj<srs::par4::PROJ>, \
- srs::par4::ellps<srs::sphere<double> > \
- > static_parameters_type; \
- static inline static_parameters_type s_par() \
- { \
- return static_parameters_type(srs::par4::proj<srs::par4::PROJ>(), \
- srs::par4::ellps<srs::sphere<double> >(srs::sphere<double>(R))); \
- } \
- static inline srs::proj4 par() \
- { \
- return srs::proj4(PROJ4_STR); \
- } \
-}; \
-
-
-#endif // BOOST_GEOMETRY_PROJECTIONS_SRID_TRAITS_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/srs/sphere.hpp b/contrib/restricted/boost/boost/geometry/srs/sphere.hpp
deleted file mode 100644
index 9be5abf7ac1..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/sphere.hpp
+++ /dev/null
@@ -1,117 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014, 2016, 2018.
-// Modifications copyright (c) 2014-2018 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_SRS_SPHERE_HPP
-#define BOOST_GEOMETRY_SRS_SPHERE_HPP
-
-
-#include <cstddef>
-
-#include <boost/static_assert.hpp>
-
-#include <boost/geometry/core/radius.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace srs
-{
-
-/*!
- \brief Defines sphere radius value for use in spherical CS calculations
- \ingroup srs
- \tparam RadiusType tparam_radius
-*/
-template <typename RadiusType>
-class sphere
-{
-public:
- explicit sphere(RadiusType const& r)
- : m_r(r)
- {}
-
- sphere()
- : m_r(RadiusType((2.0 * 6378137.0 + 6356752.3142451793) / 3.0))
- {}
-
- template <std::size_t I>
- RadiusType get_radius() const
- {
- BOOST_STATIC_ASSERT(I < 3);
-
- return m_r;
- }
-
- template <std::size_t I>
- void set_radius(RadiusType const& radius)
- {
- BOOST_STATIC_ASSERT(I < 3);
-
- m_r = radius;
- }
-
-private:
- RadiusType m_r; // radius
-};
-
-} // namespace srs
-
-// Traits specializations for sphere
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename RadiusType>
-struct tag< srs::sphere<RadiusType> >
-{
- typedef srs_sphere_tag type;
-};
-
-template <typename RadiusType>
-struct radius_type< srs::sphere<RadiusType> >
-{
- typedef RadiusType type;
-};
-
-template <typename RadiusType, std::size_t Dimension>
-struct radius_access<srs::sphere<RadiusType>, Dimension>
-{
- typedef srs::sphere<RadiusType> sphere_type;
-
- static inline RadiusType get(sphere_type const& s)
- {
- return s.template get_radius<Dimension>();
- }
-
- static inline void set(sphere_type& s, RadiusType const& value)
- {
- s.template set_radius<Dimension>(value);
- }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_SRS_SPHERE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/spheroid.hpp b/contrib/restricted/boost/boost/geometry/srs/spheroid.hpp
deleted file mode 100644
index 5481d73f043..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/spheroid.hpp
+++ /dev/null
@@ -1,121 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014, 2016, 2017, 2018.
-// Modifications copyright (c) 2014-2018 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_SRS_SPHEROID_HPP
-#define BOOST_GEOMETRY_SRS_SPHEROID_HPP
-
-
-#include <cstddef>
-
-#include <boost/static_assert.hpp>
-
-#include <boost/geometry/core/radius.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace srs
-{
-
-/*!
- \brief Defines spheroid radius values for use in geographical CS calculations
- \ingroup srs
- \note See http://en.wikipedia.org/wiki/Figure_of_the_Earth
- and http://en.wikipedia.org/wiki/World_Geodetic_System#A_new_World_Geodetic_System:_WGS84
- \tparam RadiusType tparam_radius
-*/
-template <typename RadiusType>
-class spheroid
-{
-public:
- spheroid(RadiusType const& a, RadiusType const& b)
- : m_a(a)
- , m_b(b)
- {}
-
- spheroid()
- : m_a(RadiusType(6378137.0))
- , m_b(RadiusType(6356752.3142451793))
- {}
-
- template <std::size_t I>
- RadiusType get_radius() const
- {
- BOOST_STATIC_ASSERT(I < 3);
-
- return I < 2 ? m_a : m_b;
- }
-
- template <std::size_t I>
- void set_radius(RadiusType const& radius)
- {
- BOOST_STATIC_ASSERT(I < 3);
-
- (I < 2 ? m_a : m_b) = radius;
- }
-
-private:
- RadiusType m_a, m_b; // equatorial radius, polar radius
-};
-
-} // namespace srs
-
-// Traits specializations for spheroid
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename RadiusType>
-struct tag< srs::spheroid<RadiusType> >
-{
- typedef srs_spheroid_tag type;
-};
-
-template <typename RadiusType>
-struct radius_type< srs::spheroid<RadiusType> >
-{
- typedef RadiusType type;
-};
-
-template <typename RadiusType, std::size_t Dimension>
-struct radius_access<srs::spheroid<RadiusType>, Dimension>
-{
- typedef srs::spheroid<RadiusType> spheroid_type;
-
- static inline RadiusType get(spheroid_type const& s)
- {
- return s.template get_radius<Dimension>();
- }
-
- static inline void set(spheroid_type& s, RadiusType const& value)
- {
- s.template set_radius<Dimension>(value);
- }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_SRS_SPHEROID_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/srs.hpp b/contrib/restricted/boost/boost/geometry/srs/srs.hpp
deleted file mode 100644
index 9a0a843fe01..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/srs.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014, 2016, 2017, 2018.
-// Modifications copyright (c) 2014-2018 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_SRS_SRS_HPP
-#define BOOST_GEOMETRY_SRS_SRS_HPP
-
-
-//#include <boost/geometry/srs/projection.hpp>
-#include <boost/geometry/srs/sphere.hpp>
-#include <boost/geometry/srs/spheroid.hpp>
-//#include <boost/geometry/srs/transformation.hpp>
-
-
-#endif // BOOST_GEOMETRY_SRS_SRS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/srs/transformation.hpp b/contrib/restricted/boost/boost/geometry/srs/transformation.hpp
deleted file mode 100644
index c726d09ac47..00000000000
--- a/contrib/restricted/boost/boost/geometry/srs/transformation.hpp
+++ /dev/null
@@ -1,627 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_SRS_TRANSFORMATION_HPP
-#define BOOST_GEOMETRY_SRS_TRANSFORMATION_HPP
-
-
-#include <string>
-
-#include <boost/geometry/algorithms/convert.hpp>
-
-#include <boost/geometry/core/coordinate_dimension.hpp>
-
-#include <boost/geometry/geometries/point.hpp>
-#include <boost/geometry/geometries/multi_point.hpp>
-#include <boost/geometry/geometries/linestring.hpp>
-#include <boost/geometry/geometries/ring.hpp>
-#include <boost/geometry/geometries/segment.hpp>
-
-#include <boost/geometry/srs/projection.hpp>
-#include <boost/geometry/srs/projections/impl/pj_transform.hpp>
-
-#include <boost/geometry/views/detail/indexed_point_view.hpp>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/smart_ptr/shared_ptr.hpp>
-#include <boost/throw_exception.hpp>
-#include <boost/type_traits/is_integral.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace projections { namespace detail
-{
-
-template <typename T1, typename T2>
-inline bool same_object(T1 const& , T2 const& )
-{
- return false;
-}
-
-template <typename T>
-inline bool same_object(T const& o1, T const& o2)
-{
- return boost::addressof(o1) == boost::addressof(o2);
-}
-
-template
-<
- typename PtIn,
- typename PtOut,
- bool SameUnits = geometry::is_radian
- <
- typename geometry::coordinate_system<PtIn>::type
- >::type::value
- ==
- geometry::is_radian
- <
- typename geometry::coordinate_system<PtOut>::type
- >::type::value
->
-struct transform_geometry_point_coordinates
-{
- static inline void apply(PtIn const& in, PtOut & out, bool /*enable_angles*/)
- {
- geometry::set<0>(out, geometry::get<0>(in));
- geometry::set<1>(out, geometry::get<1>(in));
- }
-};
-
-template <typename PtIn, typename PtOut>
-struct transform_geometry_point_coordinates<PtIn, PtOut, false>
-{
- static inline void apply(PtIn const& in, PtOut & out, bool enable_angles)
- {
- if (enable_angles)
- {
- geometry::set_from_radian<0>(out, geometry::get_as_radian<0>(in));
- geometry::set_from_radian<1>(out, geometry::get_as_radian<1>(in));
- }
- else
- {
- geometry::set<0>(out, geometry::get<0>(in));
- geometry::set<1>(out, geometry::get<1>(in));
- }
- }
-};
-
-template <typename Geometry, typename CT>
-struct transform_geometry_point
-{
- typedef typename geometry::point_type<Geometry>::type point_type;
-
- typedef geometry::model::point
- <
- typename select_most_precise
- <
- typename geometry::coordinate_type<point_type>::type,
- CT
- >::type,
- geometry::dimension<point_type>::type::value,
- typename geometry::coordinate_system<point_type>::type
- > type;
-
- template <typename PtIn, typename PtOut>
- static inline void apply(PtIn const& in, PtOut & out, bool enable_angles)
- {
- transform_geometry_point_coordinates<PtIn, PtOut>::apply(in, out, enable_angles);
- projections::detail::copy_higher_dimensions<2>(in, out);
- }
-};
-
-template <typename Geometry, typename CT>
-struct transform_geometry_range_base
-{
- struct convert_strategy
- {
- convert_strategy(bool enable_angles)
- : m_enable_angles(enable_angles)
- {}
-
- template <typename PtIn, typename PtOut>
- void apply(PtIn const& in, PtOut & out)
- {
- transform_geometry_point<Geometry, CT>::apply(in, out, m_enable_angles);
- }
-
- bool m_enable_angles;
- };
-
- template <typename In, typename Out>
- static inline void apply(In const& in, Out & out, bool enable_angles)
- {
- // Change the order and/or closure if needed
- // In - arbitrary geometry
- // Out - either Geometry or std::vector
- // So the order and closure of In and Geometry shoudl be compared
- // std::vector's order is assumed to be the same as of Geometry
- geometry::detail::conversion::range_to_range
- <
- In,
- Out,
- geometry::point_order<In>::value != geometry::point_order<Out>::value
- >::apply(in, out, convert_strategy(enable_angles));
- }
-};
-
-template
-<
- typename Geometry,
- typename CT,
- typename Tag = typename geometry::tag<Geometry>::type
->
-struct transform_geometry
-{};
-
-template <typename Point, typename CT>
-struct transform_geometry<Point, CT, point_tag>
- : transform_geometry_point<Point, CT>
-{};
-
-template <typename Segment, typename CT>
-struct transform_geometry<Segment, CT, segment_tag>
-{
- typedef geometry::model::segment
- <
- typename transform_geometry_point<Segment, CT>::type
- > type;
-
- template <typename In, typename Out>
- static inline void apply(In const& in, Out & out, bool enable_angles)
- {
- apply<0>(in, out, enable_angles);
- apply<1>(in, out, enable_angles);
- }
-
-private:
- template <std::size_t Index, typename In, typename Out>
- static inline void apply(In const& in, Out & out, bool enable_angles)
- {
- geometry::detail::indexed_point_view<In const, Index> in_pt(in);
- geometry::detail::indexed_point_view<Out, Index> out_pt(out);
- transform_geometry_point<Segment, CT>::apply(in_pt, out_pt, enable_angles);
- }
-};
-
-template <typename MultiPoint, typename CT>
-struct transform_geometry<MultiPoint, CT, multi_point_tag>
- : transform_geometry_range_base<MultiPoint, CT>
-{
- typedef model::multi_point
- <
- typename transform_geometry_point<MultiPoint, CT>::type
- > type;
-};
-
-template <typename LineString, typename CT>
-struct transform_geometry<LineString, CT, linestring_tag>
- : transform_geometry_range_base<LineString, CT>
-{
- typedef model::linestring
- <
- typename transform_geometry_point<LineString, CT>::type
- > type;
-};
-
-template <typename Ring, typename CT>
-struct transform_geometry<Ring, CT, ring_tag>
- : transform_geometry_range_base<Ring, CT>
-{
- typedef model::ring
- <
- typename transform_geometry_point<Ring, CT>::type,
- geometry::point_order<Ring>::value == clockwise,
- geometry::closure<Ring>::value == closed
- > type;
-};
-
-
-template
-<
- typename OutGeometry,
- typename CT,
- bool EnableTemporary = ! boost::is_same
- <
- typename select_most_precise
- <
- typename geometry::coordinate_type<OutGeometry>::type,
- CT
- >::type,
- typename geometry::coordinate_type<OutGeometry>::type
- >::type::value
->
-struct transform_geometry_wrapper
-{
- typedef transform_geometry<OutGeometry, CT> transform;
- typedef typename transform::type type;
-
- template <typename InGeometry>
- transform_geometry_wrapper(InGeometry const& in, OutGeometry & out, bool input_angles)
- : m_out(out)
- {
- transform::apply(in, m_temp, input_angles);
- }
-
- type & get() { return m_temp; }
- void finish() { geometry::convert(m_temp, m_out); } // this is always copy 1:1 without changing the order or closure
-
-private:
- type m_temp;
- OutGeometry & m_out;
-};
-
-template
-<
- typename OutGeometry,
- typename CT
->
-struct transform_geometry_wrapper<OutGeometry, CT, false>
-{
- typedef transform_geometry<OutGeometry, CT> transform;
- typedef OutGeometry type;
-
- transform_geometry_wrapper(OutGeometry const& in, OutGeometry & out, bool input_angles)
- : m_out(out)
- {
- if (! same_object(in, out))
- transform::apply(in, out, input_angles);
- }
-
- template <typename InGeometry>
- transform_geometry_wrapper(InGeometry const& in, OutGeometry & out, bool input_angles)
- : m_out(out)
- {
- transform::apply(in, out, input_angles);
- }
-
- OutGeometry & get() { return m_out; }
- void finish() {}
-
-private:
- OutGeometry & m_out;
-};
-
-template <typename CT>
-struct transform_range
-{
- template
- <
- typename Proj1, typename Par1,
- typename Proj2, typename Par2,
- typename RangeIn, typename RangeOut
- >
- static inline bool apply(Proj1 const& proj1, Par1 const& par1,
- Proj2 const& proj2, Par2 const& par2,
- RangeIn const& in, RangeOut & out)
- {
- // NOTE: this has to be consistent with pj_transform()
- bool const input_angles = !par1.is_geocent && par1.is_latlong;
-
- transform_geometry_wrapper<RangeOut, CT> wrapper(in, out, input_angles);
-
- bool res = true;
- try
- {
- res = pj_transform(proj1, par1, proj2, par2, wrapper.get());
- }
- catch (projection_exception)
- {
- res = false;
- }
- catch(...)
- {
- BOOST_RETHROW
- }
-
- wrapper.finish();
-
- return res;
- }
-};
-
-template <typename Policy>
-struct transform_multi
-{
- template
- <
- typename Proj1, typename Par1,
- typename Proj2, typename Par2,
- typename MultiIn, typename MultiOut
- >
- static inline bool apply(Proj1 const& proj1, Par1 const& par1,
- Proj2 const& proj2, Par2 const& par2,
- MultiIn const& in, MultiOut & out)
- {
- if (! same_object(in, out))
- range::resize(out, boost::size(in));
-
- return apply(proj1, par1, proj2, par2,
- boost::begin(in), boost::end(in),
- boost::begin(out));
- }
-
-private:
- template
- <
- typename Proj1, typename Par1,
- typename Proj2, typename Par2,
- typename InIt, typename OutIt
- >
- static inline bool apply(Proj1 const& proj1, Par1 const& par1,
- Proj2 const& proj2, Par2 const& par2,
- InIt in_first, InIt in_last, OutIt out_first)
- {
- bool res = true;
- for ( ; in_first != in_last ; ++in_first, ++out_first )
- {
- if ( ! Policy::apply(proj1, par1, proj2, par2, *in_first, *out_first) )
- {
- res = false;
- }
- }
- return res;
- }
-};
-
-template
-<
- typename Geometry,
- typename CT,
- typename Tag = typename geometry::tag<Geometry>::type
->
-struct transform
- : not_implemented<Tag>
-{};
-
-template <typename Point, typename CT>
-struct transform<Point, CT, point_tag>
-{
- template
- <
- typename Proj1, typename Par1,
- typename Proj2, typename Par2,
- typename PointIn, typename PointOut
- >
- static inline bool apply(Proj1 const& proj1, Par1 const& par1,
- Proj2 const& proj2, Par2 const& par2,
- PointIn const& in, PointOut & out)
- {
- // NOTE: this has to be consistent with pj_transform()
- bool const input_angles = !par1.is_geocent && par1.is_latlong;
-
- transform_geometry_wrapper<PointOut, CT> wrapper(in, out, input_angles);
-
- typedef typename transform_geometry_wrapper<PointOut, CT>::type point_type;
- point_type * ptr = boost::addressof(wrapper.get());
-
- std::pair<point_type *, point_type *> range = std::make_pair(ptr, ptr + 1);
-
- bool res = true;
- try
- {
- res = pj_transform(proj1, par1, proj2, par2, range);
- }
- catch (projection_exception)
- {
- res = false;
- }
- catch(...)
- {
- BOOST_RETHROW
- }
-
- wrapper.finish();
-
- return res;
- }
-};
-
-template <typename MultiPoint, typename CT>
-struct transform<MultiPoint, CT, multi_point_tag>
- : transform_range<CT>
-{};
-
-template <typename Segment, typename CT>
-struct transform<Segment, CT, segment_tag>
-{
- template
- <
- typename Proj1, typename Par1,
- typename Proj2, typename Par2,
- typename SegmentIn, typename SegmentOut
- >
- static inline bool apply(Proj1 const& proj1, Par1 const& par1,
- Proj2 const& proj2, Par2 const& par2,
- SegmentIn const& in, SegmentOut & out)
- {
- // NOTE: this has to be consistent with pj_transform()
- bool const input_angles = !par1.is_geocent && par1.is_latlong;
-
- transform_geometry_wrapper<SegmentOut, CT> wrapper(in, out, input_angles);
-
- typedef typename geometry::point_type
- <
- typename transform_geometry_wrapper<SegmentOut, CT>::type
- >::type point_type;
-
- point_type points[2];
-
- geometry::detail::assign_point_from_index<0>(wrapper.get(), points[0]);
- geometry::detail::assign_point_from_index<1>(wrapper.get(), points[1]);
-
- std::pair<point_type*, point_type*> range = std::make_pair(points, points + 2);
-
- bool res = true;
- try
- {
- res = pj_transform(proj1, par1, proj2, par2, range);
- }
- catch (projection_exception)
- {
- res = false;
- }
- catch(...)
- {
- BOOST_RETHROW
- }
-
- geometry::detail::assign_point_to_index<0>(points[0], wrapper.get());
- geometry::detail::assign_point_to_index<1>(points[1], wrapper.get());
-
- wrapper.finish();
-
- return res;
- }
-};
-
-template <typename Linestring, typename CT>
-struct transform<Linestring, CT, linestring_tag>
- : transform_range<CT>
-{};
-
-template <typename MultiLinestring, typename CT>
-struct transform<MultiLinestring, CT, multi_linestring_tag>
- : transform_multi<transform_range<CT> >
-{};
-
-template <typename Ring, typename CT>
-struct transform<Ring, CT, ring_tag>
- : transform_range<CT>
-{};
-
-template <typename Polygon, typename CT>
-struct transform<Polygon, CT, polygon_tag>
-{
- template
- <
- typename Proj1, typename Par1,
- typename Proj2, typename Par2,
- typename PolygonIn, typename PolygonOut
- >
- static inline bool apply(Proj1 const& proj1, Par1 const& par1,
- Proj2 const& proj2, Par2 const& par2,
- PolygonIn const& in, PolygonOut & out)
- {
- bool r1 = transform_range
- <
- CT
- >::apply(proj1, par1, proj2, par2,
- geometry::exterior_ring(in),
- geometry::exterior_ring(out));
- bool r2 = transform_multi
- <
- transform_range<CT>
- >::apply(proj1, par1, proj2, par2,
- geometry::interior_rings(in),
- geometry::interior_rings(out));
- return r1 && r2;
- }
-};
-
-template <typename MultiPolygon, typename CT>
-struct transform<MultiPolygon, CT, multi_polygon_tag>
- : transform_multi
- <
- transform
- <
- typename boost::range_value<MultiPolygon>::type,
- CT,
- polygon_tag
- >
- >
-{};
-
-
-}} // namespace projections::detail
-
-namespace srs
-{
-
-
-/*!
- \brief Representation of projection
- \details Either dynamic or static projection representation
- \ingroup projection
- \tparam Proj1 default_dynamic or static projection parameters
- \tparam Proj2 default_dynamic or static projection parameters
- \tparam CT calculation type used internally
-*/
-template
-<
- typename Proj1 = srs::dynamic,
- typename Proj2 = srs::dynamic,
- typename CT = double
->
-class transformation
-{
- typedef typename projections::detail::promote_to_double<CT>::type calc_t;
-
-public:
- transformation()
- {}
-
- template <typename Parameters1>
- explicit transformation(Parameters1 const& parameters1)
- : m_proj1(parameters1)
- {}
-
- template <typename Parameters1, typename Parameters2>
- transformation(Parameters1 const& parameters1, Parameters2 const& parameters2)
- : m_proj1(parameters1)
- , m_proj2(parameters2)
- {}
-
- template <typename GeometryIn, typename GeometryOut>
- bool forward(GeometryIn const& in, GeometryOut & out) const
- {
- BOOST_MPL_ASSERT_MSG((projections::detail::same_tags<GeometryIn, GeometryOut>::value),
- NOT_SUPPORTED_COMBINATION_OF_GEOMETRIES,
- (GeometryIn, GeometryOut));
-
- return projections::detail::transform
- <
- GeometryOut,
- calc_t
- >::apply(m_proj1.proj(), m_proj1.proj().params(),
- m_proj2.proj(), m_proj2.proj().params(),
- in, out);
- }
-
- template <typename GeometryIn, typename GeometryOut>
- bool inverse(GeometryIn const& in, GeometryOut & out) const
- {
- BOOST_MPL_ASSERT_MSG((projections::detail::same_tags<GeometryIn, GeometryOut>::value),
- NOT_SUPPORTED_COMBINATION_OF_GEOMETRIES,
- (GeometryIn, GeometryOut));
-
- return projections::detail::transform
- <
- GeometryOut,
- calc_t
- >::apply(m_proj2.proj(), m_proj2.proj().params(),
- m_proj1.proj(), m_proj1.proj().params(),
- in, out);
- }
-
-private:
- projections::proj_wrapper<Proj1, CT> m_proj1;
- projections::proj_wrapper<Proj2, CT> m_proj2;
-};
-
-} // namespace srs
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_SRS_TRANSFORMATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp b/contrib/restricted/boost/boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp
deleted file mode 100644
index 446d2f02cd1..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp
+++ /dev/null
@@ -1,114 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, 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 BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_BUFFER_DISTANCE_ASYMMETRIC_HPP
-#define BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_BUFFER_DISTANCE_ASYMMETRIC_HPP
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/strategies/buffer.hpp>
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace buffer
-{
-
-
-/*!
-\brief Let the buffer for linestrings be asymmetric
-\ingroup strategies
-\tparam NumericType \tparam_numeric
-\details This strategy can be used as DistanceStrategy for the buffer algorithm.
- It can be applied for (multi)linestrings. It uses a (potentially) different
- distances for left and for right. This means the (multi)linestrings are
- interpreted having a direction.
-
-\qbk{
-[heading Example]
-[buffer_distance_asymmetric]
-[heading Output]
-[$img/strategies/buffer_distance_asymmetric.png]
-[heading See also]
-\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
-\* [link geometry.reference.strategies.strategy_buffer_distance_symmetric distance_symmetric]
-}
- */
-template<typename NumericType>
-class distance_asymmetric
-{
-public :
- //! \brief Constructs the strategy, two distances must be specified
- //! \param left The distance (or radius) of the buffer on the left side
- //! \param right The distance on the right side
- distance_asymmetric(NumericType const& left,
- NumericType const& right)
- : m_left(left)
- , m_right(right)
- {}
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
- //! Returns the distance-value for the specified side
- template <typename Point>
- inline NumericType apply(Point const& , Point const& ,
- buffer_side_selector side) const
- {
- NumericType result = side == buffer_side_left ? m_left : m_right;
- return negative() ? math::abs(result) : result;
- }
-
- //! Used internally, returns -1 for deflate, 1 for inflate
- inline int factor() const
- {
- return negative() ? -1 : 1;
- }
-
- //! Returns true if both distances are negative
- inline bool negative() const
- {
- return m_left < 0 && m_right < 0;
- }
-
- //! Returns the max distance distance up to the buffer will reach
- template <typename JoinStrategy, typename EndStrategy>
- inline NumericType max_distance(JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy) const
- {
- boost::ignore_unused(join_strategy, end_strategy);
-
- NumericType const left = geometry::math::abs(m_left);
- NumericType const right = geometry::math::abs(m_right);
- NumericType const dist = (std::max)(left, right);
- return (std::max)(join_strategy.max_distance(dist),
- end_strategy.max_distance(dist));
- }
-
- //! Returns the distance at which the input is simplified before the buffer process
- inline NumericType simplify_distance() const
- {
- NumericType const left = geometry::math::abs(m_left);
- NumericType const right = geometry::math::abs(m_right);
- return (std::min)(left, right) / 1000.0;
- }
-
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
-private :
- NumericType m_left;
- NumericType m_right;
-};
-
-
-}} // namespace strategy::buffer
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_BUFFER_DISTANCE_ASYMMETRIC_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp b/contrib/restricted/boost/boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp
deleted file mode 100644
index fe973e3f383..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp
+++ /dev/null
@@ -1,107 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, 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 BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_BUFFER_DISTANCE_SYMMETRIC_HPP
-#define BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_BUFFER_DISTANCE_SYMMETRIC_HPP
-
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/strategies/buffer.hpp>
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace buffer
-{
-
-
-/*!
-\brief Let the buffer algorithm create buffers with same distances
-\ingroup strategies
-\tparam NumericType \tparam_numeric
-\details This strategy can be used as DistanceStrategy for the buffer algorithm.
- It can be applied for all geometries. It uses one distance for left and
- for right.
- If the distance is negative and used with a (multi)polygon or ring, the
- geometry will shrink (deflate) instead of expand (inflate).
-
-\qbk{
-[heading Example]
-[buffer_distance_symmetric]
-[heading Output]
-[$img/strategies/buffer_distance_symmetric.png]
-[heading See also]
-\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
-\* [link geometry.reference.strategies.strategy_buffer_distance_asymmetric distance_asymmetric]
-}
- */
-template<typename NumericType>
-class distance_symmetric
-{
-public :
- //! \brief Constructs the strategy, a distance must be specified
- //! \param distance The distance (or radius) of the buffer
- explicit inline distance_symmetric(NumericType const& distance)
- : m_distance(distance)
- {}
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
- //! Returns the distance-value
- template <typename Point>
- inline NumericType apply(Point const& , Point const& ,
- buffer_side_selector ) const
- {
- return negative() ? geometry::math::abs(m_distance) : m_distance;
- }
-
- //! Used internally, returns -1 for deflate, 1 for inflate
- inline int factor() const
- {
- return negative() ? -1 : 1;
- }
-
- //! Returns true if distance is negative (aka deflate)
- inline bool negative() const
- {
- return m_distance < 0;
- }
-
- //! Returns the max distance distance up to the buffer will reach
- template <typename JoinStrategy, typename EndStrategy>
- inline NumericType max_distance(JoinStrategy const& join_strategy,
- EndStrategy const& end_strategy) const
- {
- boost::ignore_unused(join_strategy, end_strategy);
-
- NumericType const dist = geometry::math::abs(m_distance);
- return (std::max)(join_strategy.max_distance(dist),
- end_strategy.max_distance(dist));
- }
-
-
- //! Returns the distance at which the input is simplified before the buffer process
- inline NumericType simplify_distance() const
- {
- return geometry::math::abs(m_distance) / 1000.0;
- }
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
-private :
- NumericType m_distance;
-};
-
-
-}} // namespace strategy::buffer
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_BUFFER_DISTANCE_SYMMETRIC_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp b/contrib/restricted/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp
deleted file mode 100644
index 0cd0cdc4dbd..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp
+++ /dev/null
@@ -1,390 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_CONVEX_GRAHAM_ANDREW_HPP
-#define BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_CONVEX_GRAHAM_ANDREW_HPP
-
-
-#include <cstddef>
-#include <algorithm>
-#include <vector>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/strategies/convex_hull.hpp>
-
-#include <boost/geometry/views/detail/range_type.hpp>
-
-#include <boost/geometry/policies/compare.hpp>
-
-#include <boost/geometry/algorithms/detail/for_each_range.hpp>
-#include <boost/geometry/views/reversible_view.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace convex_hull
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-template
-<
- typename InputRange,
- typename RangeIterator,
- typename StrategyLess,
- typename StrategyGreater
->
-struct get_extremes
-{
- typedef typename point_type<InputRange>::type point_type;
-
- point_type left, right;
-
- bool first;
-
- StrategyLess less;
- StrategyGreater greater;
-
- inline get_extremes()
- : first(true)
- {}
-
- inline void apply(InputRange const& range)
- {
- if (boost::size(range) == 0)
- {
- return;
- }
-
- // First iterate through this range
- // (this two-stage approach avoids many point copies,
- // because iterators are kept in memory. Because iterators are
- // not persistent (in MSVC) this approach is not applicable
- // for more ranges together)
-
- RangeIterator left_it = boost::begin(range);
- RangeIterator right_it = boost::begin(range);
-
- for (RangeIterator it = boost::begin(range) + 1;
- it != boost::end(range);
- ++it)
- {
- if (less(*it, *left_it))
- {
- left_it = it;
- }
-
- if (greater(*it, *right_it))
- {
- right_it = it;
- }
- }
-
- // Then compare with earlier
- if (first)
- {
- // First time, assign left/right
- left = *left_it;
- right = *right_it;
- first = false;
- }
- else
- {
- // Next time, check if this range was left/right from
- // the extremes already collected
- if (less(*left_it, left))
- {
- left = *left_it;
- }
-
- if (greater(*right_it, right))
- {
- right = *right_it;
- }
- }
- }
-};
-
-
-template
-<
- typename InputRange,
- typename RangeIterator,
- typename Container,
- typename SideStrategy
->
-struct assign_range
-{
- Container lower_points, upper_points;
-
- typedef typename point_type<InputRange>::type point_type;
-
- point_type const& most_left;
- point_type const& most_right;
-
- inline assign_range(point_type const& left, point_type const& right)
- : most_left(left)
- , most_right(right)
- {}
-
- inline void apply(InputRange const& range)
- {
- typedef SideStrategy side;
-
- // Put points in one of the two output sequences
- for (RangeIterator it = boost::begin(range);
- it != boost::end(range);
- ++it)
- {
- // check if it is lying most_left or most_right from the line
-
- int dir = side::apply(most_left, most_right, *it);
- switch(dir)
- {
- case 1 : // left side
- upper_points.push_back(*it);
- break;
- case -1 : // right side
- lower_points.push_back(*it);
- break;
-
- // 0: on line most_left-most_right,
- // or most_left, or most_right,
- // -> all never part of hull
- }
- }
- }
-};
-
-template <typename Range>
-static inline void sort(Range& range)
-{
- typedef typename boost::range_value<Range>::type point_type;
- typedef geometry::less<point_type> comparator;
-
- std::sort(boost::begin(range), boost::end(range), comparator());
-}
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief Graham scan strategy to calculate convex hull
-\ingroup strategies
-\note Completely reworked version inspired on the sources listed below
-\see http://www.ddj.com/architect/201806315
-\see http://marknelson.us/2007/08/22/convex
- */
-template <typename InputGeometry, typename OutputPoint>
-class graham_andrew
-{
-public :
- typedef OutputPoint point_type;
- typedef InputGeometry geometry_type;
-
-private:
-
- typedef typename cs_tag<point_type>::type cs_tag;
-
- typedef typename std::vector<point_type> container_type;
- typedef typename std::vector<point_type>::const_iterator iterator;
- typedef typename std::vector<point_type>::const_reverse_iterator rev_iterator;
-
-
- class partitions
- {
- friend class graham_andrew;
-
- container_type m_lower_hull;
- container_type m_upper_hull;
- container_type m_copied_input;
- };
-
-
-public:
- typedef partitions state_type;
-
-
- inline void apply(InputGeometry const& geometry, partitions& state) const
- {
- // First pass.
- // Get min/max (in most cases left / right) points
- // This makes use of the geometry::less/greater predicates
-
- // For the left boundary it is important that multiple points
- // are sorted from bottom to top. Therefore the less predicate
- // does not take the x-only template parameter (this fixes ticket #6019.
- // For the right boundary it is not necessary (though also not harmful),
- // because points are sorted from bottom to top in a later stage.
- // For symmetry and to get often more balanced lower/upper halves
- // we keep it.
-
- typedef typename geometry::detail::range_type<InputGeometry>::type range_type;
-
- typedef typename boost::range_iterator
- <
- range_type const
- >::type range_iterator;
-
- detail::get_extremes
- <
- range_type,
- range_iterator,
- geometry::less<point_type>,
- geometry::greater<point_type>
- > extremes;
- geometry::detail::for_each_range(geometry, extremes);
-
- // Bounding left/right points
- // Second pass, now that extremes are found, assign all points
- // in either lower, either upper
- detail::assign_range
- <
- range_type,
- range_iterator,
- container_type,
- typename strategy::side::services::default_strategy<cs_tag>::type
- > assigner(extremes.left, extremes.right);
-
- geometry::detail::for_each_range(geometry, assigner);
-
-
- // Sort both collections, first on x(, then on y)
- detail::sort(assigner.lower_points);
- detail::sort(assigner.upper_points);
-
- //std::cout << boost::size(assigner.lower_points) << std::endl;
- //std::cout << boost::size(assigner.upper_points) << std::endl;
-
- // And decide which point should be in the final hull
- build_half_hull<-1>(assigner.lower_points, state.m_lower_hull,
- extremes.left, extremes.right);
- build_half_hull<1>(assigner.upper_points, state.m_upper_hull,
- extremes.left, extremes.right);
- }
-
-
- template <typename OutputIterator>
- inline void result(partitions const& state,
- OutputIterator out,
- bool clockwise,
- bool closed) const
- {
- if (clockwise)
- {
- output_ranges(state.m_upper_hull, state.m_lower_hull, out, closed);
- }
- else
- {
- output_ranges(state.m_lower_hull, state.m_upper_hull, out, closed);
- }
- }
-
-
-private:
-
- template <int Factor>
- static inline void build_half_hull(container_type const& input,
- container_type& output,
- point_type const& left, point_type const& right)
- {
- output.push_back(left);
- for(iterator it = input.begin(); it != input.end(); ++it)
- {
- add_to_hull<Factor>(*it, output);
- }
- add_to_hull<Factor>(right, output);
- }
-
-
- template <int Factor>
- static inline void add_to_hull(point_type const& p, container_type& output)
- {
- typedef typename strategy::side::services::default_strategy<cs_tag>::type side;
-
- output.push_back(p);
- std::size_t output_size = output.size();
- while (output_size >= 3)
- {
- rev_iterator rit = output.rbegin();
- point_type const last = *rit++;
- point_type const& last2 = *rit++;
-
- if (Factor * side::apply(*rit, last, last2) <= 0)
- {
- // Remove last two points from stack, and add last again
- // This is much faster then erasing the one but last.
- output.pop_back();
- output.pop_back();
- output.push_back(last);
- output_size--;
- }
- else
- {
- return;
- }
- }
- }
-
-
- template <typename OutputIterator>
- static inline void output_ranges(container_type const& first, container_type const& second,
- OutputIterator out, bool closed)
- {
- std::copy(boost::begin(first), boost::end(first), out);
-
- BOOST_GEOMETRY_ASSERT(closed ? !boost::empty(second) : boost::size(second) > 1);
- std::copy(++boost::rbegin(second), // skip the first Point
- closed ? boost::rend(second) : --boost::rend(second), // skip the last Point if open
- out);
-
- typedef typename boost::range_size<container_type>::type size_type;
- size_type const count = boost::size(first) + boost::size(second) - 1;
- // count describes a closed case but comparison with min size of closed
- // gives the result compatible also with open
- // here core_detail::closure::minimum_ring_size<closed> could be used
- if (count < 4)
- {
- // there should be only one missing
- *out++ = *boost::begin(first);
- }
- }
-};
-
-}} // namespace strategy::convex_hull
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template <typename InputGeometry, typename OutputPoint>
-struct strategy_convex_hull<InputGeometry, OutputPoint, cartesian_tag>
-{
- typedef strategy::convex_hull::graham_andrew<InputGeometry, OutputPoint> type;
-};
-#endif
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_CONVEX_GRAHAM_ANDREW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp b/contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp
deleted file mode 100644
index 6740b519e21..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_POINT_IN_BOX_BY_SIDE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_POINT_IN_BOX_BY_SIDE_HPP
-
-#include <boost/array.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/strategies/covered_by.hpp>
-#include <boost/geometry/strategies/within.hpp>
-
-
-namespace boost { namespace geometry { namespace strategy
-{
-
-namespace within
-{
-
-struct decide_within
-{
- static inline bool apply(int side, bool& result)
- {
- if (side != 1)
- {
- result = false;
- return false;
- }
- return true; // continue
- }
-};
-
-struct decide_covered_by
-{
- static inline bool apply(int side, bool& result)
- {
- if (side != 1)
- {
- result = side >= 0;
- return false;
- }
- return true; // continue
- }
-};
-
-
-// WARNING
-// This strategy is not suitable for boxes in non-cartesian CSes having edges
-// longer than 180deg because e.g. the SSF formula picks the side of the closer
-// longitude, so for long edges the side is the opposite.
-template <typename Point, typename Box, typename Decide = decide_within>
-struct point_in_box_by_side
-{
- typedef typename strategy::side::services::default_strategy
- <
- typename cs_tag<Box>::type
- >::type side_strategy_type;
-
- static inline bool apply(Point const& point, Box const& box)
- {
- // Create (counterclockwise) array of points, the fifth one closes it
- // Every point should be on the LEFT side (=1), or ON the border (=0),
- // So >= 1 or >= 0
- boost::array<typename point_type<Box>::type, 5> bp;
- geometry::detail::assign_box_corners_oriented<true>(box, bp);
- bp[4] = bp[0];
-
- bool result = true;
- side_strategy_type strategy;
- boost::ignore_unused_variable_warning(strategy);
-
- for (int i = 1; i < 5; i++)
- {
- int const side = strategy.apply(point, bp[i - 1], bp[i]);
- if (! Decide::apply(side, result))
- {
- return result;
- }
- }
-
- return result;
- }
-};
-
-
-} // namespace within
-
-
-}}} // namespace boost::geometry::strategy
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_AGNOSTIC_POINT_IN_BOX_BY_SIDE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_point.hpp b/contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_point.hpp
deleted file mode 100644
index d4692766c58..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_point.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POINT_HPP
-#define BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POINT_HPP
-
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-
-#include <boost/geometry/strategies/covered_by.hpp>
-#include <boost/geometry/strategies/within.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace within
-{
-
-template
-<
- typename Point1, typename Point2
->
-struct point_in_point
-{
- static inline bool apply(Point1 const& point1, Point2 const& point2)
- {
- return geometry::detail::equals::equals_point_point(point1, point2);
- }
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-template <typename PointLike1, typename PointLike2, typename Tag1, typename Tag2, typename AnyCS1, typename AnyCS2>
-struct default_strategy<PointLike1, PointLike2, Tag1, Tag2, pointlike_tag, pointlike_tag, AnyCS1, AnyCS2>
-{
- typedef strategy::within::point_in_point
- <
- typename point_type<PointLike1>::type,
- typename point_type<PointLike2>::type
- > type;
-};
-
-
-} // namespace services
-
-#endif
-
-
-}} // namespace strategy::within
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace strategy { namespace covered_by { namespace services
-{
-
-template <typename PointLike1, typename PointLike2, typename Tag1, typename Tag2, typename AnyCS1, typename AnyCS2>
-struct default_strategy<PointLike1, PointLike2, Tag1, Tag2, pointlike_tag, pointlike_tag, AnyCS1, AnyCS2>
-{
- typedef strategy::within::point_in_point
- <
- typename point_type<PointLike1>::type,
- typename point_type<PointLike2>::type
- > type;
-};
-
-}}} // namespace strategy::covered_by::services
-#endif
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp b/contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp
deleted file mode 100644
index 423948fff32..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp
+++ /dev/null
@@ -1,208 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_ORIENTED_WINDING_HPP
-#define BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_ORIENTED_WINDING_HPP
-
-
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/strategies/within.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace within
-{
-
-/*!
-\brief Within detection using winding rule, but checking if enclosing ring is
- counter clockwise and, if so, reverses the result
-\ingroup strategies
-\tparam Point \tparam_point
-\tparam Reverse True if parameter should be reversed
-\tparam PointOfSegment \tparam_segment_point
-\tparam CalculationType \tparam_calculation
-\author Barend Gehrels
-\note The implementation is inspired by terralib http://www.terralib.org (LGPL)
-\note but totally revised afterwards, especially for cases on segments
-\note Only dependant on "side", -> agnostic, suitable for spherical/latlong
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)]
-}
- */
-template
-<
- bool Reverse,
- typename Point,
- typename PointOfSegment = Point,
- typename CalculationType = void
->
-class oriented_winding
-{
- typedef typename select_calculation_type
- <
- Point,
- PointOfSegment,
- CalculationType
- >::type calculation_type;
-
-
- typedef typename strategy::side::services::default_strategy
- <
- typename cs_tag<Point>::type
- >::type strategy_side_type;
-
-
- /*! subclass to keep state */
- class counter
- {
- int m_count;
- bool m_touches;
- calculation_type m_sum_area;
-
- inline int code() const
- {
- return m_touches ? 0 : m_count == 0 ? -1 : 1;
- }
- inline int clockwise_oriented_code() const
- {
- return (m_sum_area > 0) ? code() : -code();
- }
- inline int oriented_code() const
- {
- return Reverse
- ? -clockwise_oriented_code()
- : clockwise_oriented_code();
- }
-
- public :
- friend class oriented_winding;
-
- inline counter()
- : m_count(0)
- , m_touches(false)
- , m_sum_area(0)
- {}
-
- inline void add_to_area(calculation_type triangle)
- {
- m_sum_area += triangle;
- }
-
- };
-
-
- template <size_t D>
- static inline int check_touch(Point const& point,
- PointOfSegment const& seg1, PointOfSegment const& seg2,
- counter& state)
- {
- calculation_type const p = get<D>(point);
- calculation_type const s1 = get<D>(seg1);
- calculation_type const s2 = get<D>(seg2);
- if ((s1 <= p && s2 >= p) || (s2 <= p && s1 >= p))
- {
- state.m_touches = true;
- }
- return 0;
- }
-
-
- template <size_t D>
- static inline int check_segment(Point const& point,
- PointOfSegment const& seg1, PointOfSegment const& seg2,
- counter& state)
- {
- calculation_type const p = get<D>(point);
- calculation_type const s1 = get<D>(seg1);
- calculation_type const s2 = get<D>(seg2);
-
-
- // Check if one of segment endpoints is at same level of point
- bool eq1 = math::equals(s1, p);
- bool eq2 = math::equals(s2, p);
-
- if (eq1 && eq2)
- {
- // Both equal p -> segment is horizontal (or vertical for D=0)
- // The only thing which has to be done is check if point is ON segment
- return check_touch<1 - D>(point, seg1, seg2, state);
- }
-
- return
- eq1 ? (s2 > p ? 1 : -1) // Point on level s1, UP/DOWN depending on s2
- : eq2 ? (s1 > p ? -1 : 1) // idem
- : s1 < p && s2 > p ? 2 // Point between s1 -> s2 --> UP
- : s2 < p && s1 > p ? -2 // Point between s2 -> s1 --> DOWN
- : 0;
- }
-
-
-
-
-public :
-
- // Typedefs and static methods to fulfill the concept
- typedef Point point_type;
- typedef PointOfSegment segment_point_type;
- typedef counter state_type;
-
- static inline bool apply(Point const& point,
- PointOfSegment const& s1, PointOfSegment const& s2,
- counter& state)
- {
- state.add_to_area(get<0>(s2) * get<1>(s1) - get<0>(s1) * get<1>(s2));
-
- int count = check_segment<1>(point, s1, s2, state);
- if (count != 0)
- {
- int side = strategy_side_type::apply(s1, s2, point);
- if (side == 0)
- {
- // Point is lying on segment
- state.m_touches = true;
- state.m_count = 0;
- return false;
- }
-
- // Side is NEG for right, POS for left.
- // The count is -2 for down, 2 for up (or -1/1)
- // Side positive thus means UP and LEFTSIDE or DOWN and RIGHTSIDE
- // See accompagnying figure (TODO)
- if (side * count > 0)
- {
- state.m_count += count;
- }
- }
- return ! state.m_touches;
- }
-
- static inline int result(counter const& state)
- {
- return state.oriented_code();
- }
-};
-
-
-}} // namespace strategy::within
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_ORIENTED_WINDING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp b/contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp
deleted file mode 100644
index 774294b57ec..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp
+++ /dev/null
@@ -1,134 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014, 2016, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_WINDING_HPP
-#define BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_WINDING_HPP
-
-
-#include <boost/mpl/assert.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/cartesian/point_in_poly_winding.hpp>
-#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/strategies/spherical/point_in_poly_winding.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace within
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-template
-<
- typename Point,
- typename PointOfSegment,
- typename CalculationType,
- typename CSTag = typename tag_cast
- <
- typename cs_tag<Point>::type,
- spherical_tag
- >::type
->
-struct winding_base_type
-{
- BOOST_MPL_ASSERT_MSG(false,
- NOT_IMPLEMENTED_FOR_THIS_COORDINATE_SYSTEM,
- (CSTag));
-};
-
-template <typename Point, typename PointOfSegment, typename CalculationType>
-struct winding_base_type<Point, PointOfSegment, CalculationType, cartesian_tag>
-{
- typedef within::cartesian_winding<Point, PointOfSegment, CalculationType> type;
-};
-
-template <typename Point, typename PointOfSegment, typename CalculationType>
-struct winding_base_type<Point, PointOfSegment, CalculationType, spherical_tag>
-{
- typedef within::detail::spherical_winding_base
- <
- Point,
- PointOfSegment,
- typename strategy::side::services::default_strategy
- <
- typename cs_tag<Point>::type
- >::type,
- CalculationType
- > type;
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief Within detection using winding rule. Side strategy used internally is
- choosen based on Point's coordinate system.
-\ingroup strategies
-\tparam Point \tparam_point
-\tparam PointOfSegment \tparam_segment_point
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)]
-}
- */
-template
-<
- typename Point,
- typename PointOfSegment = Point,
- typename CalculationType = void
->
-class winding
- : public within::detail::winding_base_type
- <
- Point, PointOfSegment, CalculationType
- >::type
-{
- typedef typename within::detail::winding_base_type
- <
- Point, PointOfSegment, CalculationType
- >::type base_t;
-
-public:
- winding() {}
-
- template <typename Model>
- explicit winding(Model const& model)
- : base_t(model)
- {}
-};
-
-
-}} // namespace strategy::within
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGY_AGNOSTIC_POINT_IN_POLY_WINDING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp b/contrib/restricted/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp
deleted file mode 100644
index 053723e4ccf..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp
+++ /dev/null
@@ -1,321 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 1995, 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 1995 Maarten Hilferink, Amsterdam, the Netherlands
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGY_AGNOSTIC_SIMPLIFY_DOUGLAS_PEUCKER_HPP
-#define BOOST_GEOMETRY_STRATEGY_AGNOSTIC_SIMPLIFY_DOUGLAS_PEUCKER_HPP
-
-
-#include <cstddef>
-#ifdef BOOST_GEOMETRY_DEBUG_DOUGLAS_PEUCKER
-#include <iostream>
-#endif
-#include <vector>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-
-
-#ifdef BOOST_GEOMETRY_DEBUG_DOUGLAS_PEUCKER
-#include <boost/geometry/io/dsv/write.hpp>
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace simplify
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
- /*!
- \brief Small wrapper around a point, with an extra member "included"
- \details
- It has a const-reference to the original point (so no copy here)
- \tparam the enclosed point type
- */
- template<typename Point>
- struct douglas_peucker_point
- {
- Point const& p;
- bool included;
-
- inline douglas_peucker_point(Point const& ap)
- : p(ap)
- , included(false)
- {}
-
- // Necessary for proper compilation
- inline douglas_peucker_point<Point> operator=(douglas_peucker_point<Point> const& )
- {
- return douglas_peucker_point<Point>(*this);
- }
- };
-
- template
- <
- typename Point,
- typename PointDistanceStrategy,
- typename LessCompare
- = std::less
- <
- typename strategy::distance::services::return_type
- <
- PointDistanceStrategy,
- Point, Point
- >::type
- >
- >
- class douglas_peucker
- : LessCompare // for empty base optimization
- {
- public :
-
- // See also ticket 5954 https://svn.boost.org/trac/boost/ticket/5954
- // Comparable is currently not possible here because it has to be compared to the squared of max_distance, and more.
- // For now we have to take the real distance.
- typedef PointDistanceStrategy distance_strategy_type;
- // typedef typename strategy::distance::services::comparable_type<PointDistanceStrategy>::type distance_strategy_type;
-
- typedef typename strategy::distance::services::return_type
- <
- distance_strategy_type,
- Point, Point
- >::type distance_type;
-
- douglas_peucker()
- {}
-
- douglas_peucker(LessCompare const& less_compare)
- : LessCompare(less_compare)
- {}
-
- private :
- typedef detail::douglas_peucker_point<Point> dp_point_type;
- typedef typename std::vector<dp_point_type>::iterator iterator_type;
-
-
- LessCompare const& less() const
- {
- return *this;
- }
-
- inline void consider(iterator_type begin,
- iterator_type end,
- distance_type const& max_dist,
- int& n,
- distance_strategy_type const& ps_distance_strategy) const
- {
- std::size_t size = end - begin;
-
- // size must be at least 3
- // because we want to consider a candidate point in between
- if (size <= 2)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_DOUGLAS_PEUCKER
- if (begin != end)
- {
- std::cout << "ignore between " << dsv(begin->p)
- << " and " << dsv((end - 1)->p)
- << " size=" << size << std::endl;
- }
- std::cout << "return because size=" << size << std::endl;
-#endif
- return;
- }
-
- iterator_type last = end - 1;
-
-#ifdef BOOST_GEOMETRY_DEBUG_DOUGLAS_PEUCKER
- std::cout << "find between " << dsv(begin->p)
- << " and " << dsv(last->p)
- << " size=" << size << std::endl;
-#endif
-
-
- // Find most far point, compare to the current segment
- //geometry::segment<Point const> s(begin->p, last->p);
- distance_type md(-1.0); // any value < 0
- iterator_type candidate;
- for(iterator_type it = begin + 1; it != last; ++it)
- {
- distance_type dist = ps_distance_strategy.apply(it->p, begin->p, last->p);
-
-#ifdef BOOST_GEOMETRY_DEBUG_DOUGLAS_PEUCKER
- std::cout << "consider " << dsv(it->p)
- << " at " << double(dist)
- << ((dist > max_dist) ? " maybe" : " no")
- << std::endl;
-
-#endif
- if ( less()(md, dist) )
- {
- md = dist;
- candidate = it;
- }
- }
-
- // If a point is found, set the include flag
- // and handle segments in between recursively
- if ( less()(max_dist, md) )
- {
-#ifdef BOOST_GEOMETRY_DEBUG_DOUGLAS_PEUCKER
- std::cout << "use " << dsv(candidate->p) << std::endl;
-#endif
-
- candidate->included = true;
- n++;
-
- consider(begin, candidate + 1, max_dist, n, ps_distance_strategy);
- consider(candidate, end, max_dist, n, ps_distance_strategy);
- }
- }
-
-
- public :
-
- template <typename Range, typename OutputIterator>
- inline OutputIterator apply(Range const& range,
- OutputIterator out,
- distance_type max_distance) const
- {
-#ifdef BOOST_GEOMETRY_DEBUG_DOUGLAS_PEUCKER
- std::cout << "max distance: " << max_distance
- << std::endl << std::endl;
-#endif
- distance_strategy_type strategy;
-
- // Copy coordinates, a vector of references to all points
- std::vector<dp_point_type> ref_candidates(boost::begin(range),
- boost::end(range));
-
- // Include first and last point of line,
- // they are always part of the line
- int n = 2;
- ref_candidates.front().included = true;
- ref_candidates.back().included = true;
-
- // Get points, recursively, including them if they are further away
- // than the specified distance
- consider(boost::begin(ref_candidates), boost::end(ref_candidates), max_distance, n, strategy);
-
- // Copy included elements to the output
- for(typename std::vector<dp_point_type>::const_iterator it
- = boost::begin(ref_candidates);
- it != boost::end(ref_candidates);
- ++it)
- {
- if (it->included)
- {
- // copy-coordinates does not work because OutputIterator
- // does not model Point (??)
- //geometry::convert(it->p, *out);
- *out = it->p;
- out++;
- }
- }
- return out;
- }
-
- };
-}
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief Implements the simplify algorithm.
-\ingroup strategies
-\details The douglas_peucker strategy simplifies a linestring, ring or
- vector of points using the well-known Douglas-Peucker algorithm.
-\tparam Point the point type
-\tparam PointDistanceStrategy point-segment distance strategy to be used
-\note This strategy uses itself a point-segment-distance strategy which
- can be specified
-\author Barend and Maarten, 1995/1996
-\author Barend, revised for Generic Geometry Library, 2008
-*/
-
-/*
-For the algorithm, see for example:
- - http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
- - http://www2.dcs.hull.ac.uk/CISRG/projects/Royal-Inst/demos/dp.html
-*/
-template
-<
- typename Point,
- typename PointDistanceStrategy
->
-class douglas_peucker
-{
-public :
-
- typedef PointDistanceStrategy distance_strategy_type;
-
- typedef typename detail::douglas_peucker
- <
- Point,
- PointDistanceStrategy
- >::distance_type distance_type;
-
- template <typename Range, typename OutputIterator>
- static inline OutputIterator apply(Range const& range,
- OutputIterator out,
- distance_type const& max_distance)
- {
- namespace services = strategy::distance::services;
-
- typedef typename services::comparable_type
- <
- PointDistanceStrategy
- >::type comparable_distance_strategy_type;
-
- return detail::douglas_peucker
- <
- Point, comparable_distance_strategy_type
- >().apply(range, out,
- services::result_from_distance
- <
- comparable_distance_strategy_type, Point, Point
- >::apply(comparable_distance_strategy_type(),
- max_distance)
- );
- }
-
-};
-
-}} // namespace strategy::simplify
-
-
-namespace traits {
-
-template <typename P>
-struct point_type<geometry::strategy::simplify::detail::douglas_peucker_point<P> >
-{
- typedef P type;
-};
-
-} // namespace traits
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGY_AGNOSTIC_SIMPLIFY_DOUGLAS_PEUCKER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/area.hpp b/contrib/restricted/boost/boost/geometry/strategies/area.hpp
deleted file mode 100644
index 866f37e8467..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/area.hpp
+++ /dev/null
@@ -1,92 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_AREA_HPP
-#define BOOST_GEOMETRY_STRATEGIES_AREA_HPP
-
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-#include <boost/mpl/assert.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace area
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-// If user specified a CalculationType, use that type, whatever it is
-// and whatever the Geometry is.
-// Else, use Geometry's coordinate-type promoted to double if needed.
-template
-<
- typename Geometry,
- typename CalculationType
->
-struct result_type
-{
- typedef CalculationType type;
-};
-
-template
-<
- typename Geometry
->
-struct result_type<Geometry, void>
- : select_most_precise
- <
- typename coordinate_type<Geometry>::type,
- double
- >
-{};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-namespace services
-{
-
-/*!
- \brief Traits class binding a default area strategy to a coordinate system
- \ingroup area
- \tparam Tag tag of coordinate system
-*/
-template <typename Tag>
-struct default_strategy
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_COORDINATE_SYSTEM
- , (types<Tag>)
- );
-};
-
-
-} // namespace services
-
-}} // namespace strategy::area
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_AREA_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/area_result.hpp b/contrib/restricted/boost/boost/geometry/strategies/area_result.hpp
deleted file mode 100644
index b8a6c4c85e9..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/area_result.hpp
+++ /dev/null
@@ -1,116 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// 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 BOOST_GEOMETRY_STRATEGIES_AREA_RESULT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_AREA_RESULT_HPP
-
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/cs.hpp>
-
-#include <boost/geometry/strategies/area.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-
-#include <boost/geometry/util/select_most_precise.hpp>
-#include <boost/geometry/util/select_sequence_element.hpp>
-
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
-\brief Meta-function defining return type of area function
-\ingroup area
-\note The return-type is defined by Geometry and Strategy
- */
-template
-<
- typename Geometry,
- typename Strategy = default_strategy
->
-struct area_result
- : Strategy::template result_type<Geometry>
-{};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Strategy>
-struct area_result<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Strategy>
- : geometry::area_result
- <
- typename geometry::util::select_sequence_element
- <
- typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types
- >::type,
- Strategy
- >
-{};
-
-template <typename Geometry>
-struct area_result<Geometry, default_strategy>
- : geometry::area_result
- <
- Geometry,
- typename geometry::strategy::area::services::default_strategy
- <
- typename cs_tag<Geometry>::type
- >::type
- >
-{};
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace area
-{
-
-template <typename Curr, typename Next>
-struct pred_more_precise_default_area_result
-{
- typedef typename geometry::area_result<Curr, default_strategy>::type curr_result_t;
- typedef typename geometry::area_result<Next, default_strategy>::type next_result_t;
-
- typedef typename boost::mpl::if_c
- <
- boost::is_same
- <
- curr_result_t,
- typename geometry::select_most_precise
- <
- curr_result_t,
- next_result_t
- >::type
- >::value,
- Curr,
- Next
- >::type type;
-};
-
-}} // namespace detail::area
-#endif //DOXYGEN_NO_DETAIL
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct area_result<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, default_strategy>
- : geometry::area_result
- <
- typename geometry::util::select_sequence_element
- <
- typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
- geometry::detail::area::pred_more_precise_default_area_result
- >::type,
- default_strategy
- >
-{};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_AREA_RESULT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/azimuth.hpp b/contrib/restricted/boost/boost/geometry/strategies/azimuth.hpp
deleted file mode 100644
index 8044d3933bb..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/azimuth.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2016-2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_AZIMUTH_HPP
-#define BOOST_GEOMETRY_STRATEGIES_AZIMUTH_HPP
-
-#include <boost/mpl/assert.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace azimuth { namespace services
-{
-
-/*!
-\brief Traits class binding a default azimuth strategy to a coordinate system
-\ingroup util
-\tparam CSTag tag of coordinate system
-\tparam CalculationType \tparam_calculation
-*/
-template <typename CSTag, typename CalculationType = void>
-struct default_strategy
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_TYPE
- , (types<CSTag>)
- );
-};
-
-}}} // namespace strategy::azimuth::services
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_AZIMUTH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/buffer.hpp b/contrib/restricted/boost/boost/geometry/strategies/buffer.hpp
deleted file mode 100644
index 86bdcc37bf1..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/buffer.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_HPP
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace buffer
-{
-
-/*
-
- A Buffer-join strategy gets 4 input points.
- On the two consecutive segments s1 and s2 (joining at vertex v):
-
- The lines from parallel at s1, s2 (at buffer-distance) end/start
- in two points perpendicular to the segments: p1 and p2.
- These parallel lines interesct in point ip
-
- (s2)
- |
- |
- ^
- |
- (p2) |(v)
- * +----<--- (s1)
-
- x(ip) *(p1)
-
-
- So, in clockwise order:
- v : vertex point
- p1: perpendicular on left side of segment1<1> (perp1)
- ip: intersection point
- p2: perpendicular on left side of segment2<0> (perp2)
-*/
-
-
-
-/*!
-\brief Enumerates options for side of buffer (left/right w.r.t. directed
- segment)
-\ingroup enum
-\details Around a linestring, a buffer can be defined left or right.
- Around a polygon, assumed clockwise internally,
- a buffer is either on the left side (inflates the polygon), or on the
- right side (deflates the polygon)
-*/
-enum buffer_side_selector { buffer_side_left, buffer_side_right };
-
-/*!
-\brief Enumerates types of pieces (parts of buffer) around geometries
-\ingroup enum
-*/
-enum piece_type
-{
- buffered_segment,
- buffered_join,
- buffered_round_end,
- buffered_flat_end,
- buffered_point,
- buffered_concave, // always on the inside
- piece_type_unknown
-};
-
-
-/*!
-\brief Enumerates types of joins
-\ingroup enum
-*/
-enum join_selector
-{
- join_convex,
- join_concave,
- join_continue, // collinear, next segment touches previous segment
- join_spike // collinear, with overlap, next segment goes back
-};
-
-/*!
-\brief Enumerates types of result codes from buffer strategies
-\ingroup enum
-*/
-enum result_code
-{
- result_normal,
- result_error_numerical,
- result_no_output
-};
-
-
-}} // namespace strategy::buffer
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/area.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/area.hpp
deleted file mode 100644
index 27708424c24..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/area.hpp
+++ /dev/null
@@ -1,146 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2016, 2017.
-// Modifications copyright (c) 2016-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_AREA_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_AREA_HPP
-
-
-#include <boost/mpl/if.hpp>
-
-//#include <boost/geometry/arithmetic/determinant.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/strategies/area.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace area
-{
-
-/*!
-\brief Cartesian area calculation
-\ingroup strategies
-\details Calculates cartesian area using the trapezoidal rule
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.area.area_2_with_strategy area (with strategy)]
-}
-
-*/
-template
-<
- typename CalculationType = void
->
-class cartesian
-{
-public :
- template <typename Geometry>
- struct result_type
- : strategy::area::detail::result_type
- <
- Geometry,
- CalculationType
- >
- {};
-
- template <typename Geometry>
- class state
- {
- friend class cartesian;
-
- typedef typename result_type<Geometry>::type return_type;
-
- public:
- inline state()
- : sum(0)
- {
- // Strategy supports only 2D areas
- assert_dimension<Geometry, 2>();
- }
-
- private:
- inline return_type area() const
- {
- return_type const two = 2;
- return sum / two;
- }
-
- return_type sum;
- };
-
- template <typename PointOfSegment, typename Geometry>
- static inline void apply(PointOfSegment const& p1,
- PointOfSegment const& p2,
- state<Geometry>& st)
- {
- typedef typename state<Geometry>::return_type return_type;
-
- // Below formulas are equivalent, however the two lower ones
- // suffer less from accuracy loss for great values of coordinates.
- // See: https://svn.boost.org/trac/boost/ticket/11928
-
- // SUM += x2 * y1 - x1 * y2;
- // state.sum += detail::determinant<return_type>(p2, p1);
-
- // SUM += (x2 - x1) * (y2 + y1)
- //state.sum += (return_type(get<0>(p2)) - return_type(get<0>(p1)))
- // * (return_type(get<1>(p2)) + return_type(get<1>(p1)));
-
- // SUM += (x1 + x2) * (y1 - y2)
- st.sum += (return_type(get<0>(p1)) + return_type(get<0>(p2)))
- * (return_type(get<1>(p1)) - return_type(get<1>(p2)));
- }
-
- template <typename Geometry>
- static inline typename result_type<Geometry>::type
- result(state<Geometry>& st)
- {
- return st.area();
- }
-
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
- template <>
- struct default_strategy<cartesian_tag>
- {
- typedef strategy::area::cartesian<> type;
- };
-
-} // namespace services
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::area
-
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_AREA_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/area_surveyor.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/area_surveyor.hpp
deleted file mode 100644
index 91df31745a2..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/area_surveyor.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2016, 2017.
-// Modifications copyright (c) 2016-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_AREA_SURVEYOR_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_AREA_SURVEYOR_HPP
-
-
-// keep this file for now, for backward compatibility
-// functionality-wise, make it equivalent to boost/geometry/strategies/cartesian/area.hpp
-#include <boost/geometry/strategies/cartesian/area.hpp>
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_AREA_SURVEYOR_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/azimuth.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/azimuth.hpp
deleted file mode 100644
index 62f804e8f50..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/azimuth.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2016-2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_AZIMUTH_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_AZIMUTH_HPP
-
-#include <boost/geometry/core/tags.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace azimuth
-{
-
-template
-<
- typename CalculationType = void
->
-class cartesian
-{};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-template <typename CalculationType>
-struct default_strategy<cartesian_tag, CalculationType>
-{
- typedef strategy::azimuth::cartesian<CalculationType> type;
-};
-
-}
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-}} // namespace strategy::azimuth
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_AZIMUTH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/box_in_box.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/box_in_box.hpp
deleted file mode 100644
index 4641aafcb18..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/box_in_box.hpp
+++ /dev/null
@@ -1,311 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2015, 2016, 2017.
-// Modifications copyright (c) 2016-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BOX_IN_BOX_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BOX_IN_BOX_HPP
-
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/strategies/covered_by.hpp>
-#include <boost/geometry/strategies/within.hpp>
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-
-
-namespace boost { namespace geometry { namespace strategy
-{
-
-
-namespace within
-{
-
-
-struct box_within_coord
-{
- template <typename BoxContainedValue, typename BoxContainingValue>
- static inline bool apply(BoxContainedValue const& bed_min,
- BoxContainedValue const& bed_max,
- BoxContainingValue const& bing_min,
- BoxContainingValue const& bing_max)
- {
- return bing_min <= bed_min && bed_max <= bing_max // contained in containing
- && bed_min < bed_max; // interiors overlap
- }
-};
-
-
-struct box_covered_by_coord
-{
- template <typename BoxContainedValue, typename BoxContainingValue>
- static inline bool apply(BoxContainedValue const& bed_min,
- BoxContainedValue const& bed_max,
- BoxContainingValue const& bing_min,
- BoxContainingValue const& bing_max)
- {
- return bed_min >= bing_min && bed_max <= bing_max;
- }
-};
-
-
-template <typename Geometry, std::size_t Dimension, typename CSTag>
-struct box_within_range
- : box_within_coord
-{};
-
-
-template <typename Geometry, std::size_t Dimension, typename CSTag>
-struct box_covered_by_range
- : box_covered_by_coord
-{};
-
-
-struct box_within_longitude_diff
-{
- template <typename CalcT>
- static inline bool apply(CalcT const& diff_ed)
- {
- return diff_ed > CalcT(0);
- }
-};
-
-struct box_covered_by_longitude_diff
-{
- template <typename CalcT>
- static inline bool apply(CalcT const&)
- {
- return true;
- }
-};
-
-template <typename Geometry,
- typename CoordCheck,
- typename InteriorCheck>
-struct box_longitude_range
-{
- template <typename BoxContainedValue, typename BoxContainingValue>
- static inline bool apply(BoxContainedValue const& bed_min,
- BoxContainedValue const& bed_max,
- BoxContainingValue const& bing_min,
- BoxContainingValue const& bing_max)
- {
- typedef typename select_most_precise
- <
- BoxContainedValue,
- BoxContainingValue
- >::type calc_t;
- typedef typename coordinate_system<Geometry>::type::units units_t;
- typedef math::detail::constants_on_spheroid<calc_t, units_t> constants;
-
- if (CoordCheck::apply(bed_min, bed_max, bing_min, bing_max))
- {
- return true;
- }
-
- // min <= max <=> diff >= 0
- calc_t const diff_ed = bed_max - bed_min;
- calc_t const diff_ing = bing_max - bing_min;
-
- // if containing covers the whole globe it contains all
- if (diff_ing >= constants::period())
- {
- return true;
- }
-
- // if containing is smaller it cannot contain
- // and check interior (within vs covered_by)
- if (diff_ing < diff_ed || ! InteriorCheck::apply(diff_ed))
- {
- return false;
- }
-
- // calculate positive longitude translation with bing_min as origin
- calc_t const diff_min = math::longitude_distance_unsigned<units_t>(bing_min, bed_min);
-
- // max of contained translated into the containing origin must be lesser than max of containing
- return bing_min + diff_min + diff_ed <= bing_max
- /*|| bing_max - diff_min - diff_ed >= bing_min*/;
- }
-};
-
-
-// spherical_equatorial_tag, spherical_polar_tag and geographic_cat are casted to spherical_tag
-template <typename Geometry>
-struct box_within_range<Geometry, 0, spherical_tag>
- : box_longitude_range<Geometry, box_within_coord, box_within_longitude_diff>
-{};
-
-
-template <typename Geometry>
-struct box_covered_by_range<Geometry, 0, spherical_tag>
- : box_longitude_range<Geometry, box_covered_by_coord, box_covered_by_longitude_diff>
-{};
-
-
-template
-<
- template <typename, std::size_t, typename> class SubStrategy,
- typename Box1,
- typename Box2,
- std::size_t Dimension,
- std::size_t DimensionCount
->
-struct relate_box_box_loop
-{
- static inline bool apply(Box1 const& b_contained, Box2 const& b_containing)
- {
- assert_dimension_equal<Box1, Box2>();
- typedef typename tag_cast<typename cs_tag<Box1>::type, spherical_tag>::type cs_tag_t;
-
- if (! SubStrategy<Box1, Dimension, cs_tag_t>::apply(
- get<min_corner, Dimension>(b_contained),
- get<max_corner, Dimension>(b_contained),
- get<min_corner, Dimension>(b_containing),
- get<max_corner, Dimension>(b_containing)
- )
- )
- {
- return false;
- }
-
- return relate_box_box_loop
- <
- SubStrategy,
- Box1, Box2,
- Dimension + 1, DimensionCount
- >::apply(b_contained, b_containing);
- }
-};
-
-template
-<
- template <typename, std::size_t, typename> class SubStrategy,
- typename Box1,
- typename Box2,
- std::size_t DimensionCount
->
-struct relate_box_box_loop<SubStrategy, Box1, Box2, DimensionCount, DimensionCount>
-{
- static inline bool apply(Box1 const& , Box2 const& )
- {
- return true;
- }
-};
-
-template
-<
- typename Box1,
- typename Box2,
- template <typename, std::size_t, typename> class SubStrategy = box_within_range
->
-struct box_in_box
-{
- static inline bool apply(Box1 const& box1, Box2 const& box2)
- {
- return relate_box_box_loop
- <
- SubStrategy,
- Box1, Box2, 0, dimension<Box1>::type::value
- >::apply(box1, box2);
- }
-};
-
-
-} // namespace within
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-namespace within { namespace services
-{
-
-template <typename BoxContained, typename BoxContaining>
-struct default_strategy
- <
- BoxContained, BoxContaining,
- box_tag, box_tag,
- areal_tag, areal_tag,
- cartesian_tag, cartesian_tag
- >
-{
- typedef within::box_in_box<BoxContained, BoxContaining> type;
-};
-
-// spherical_equatorial_tag, spherical_polar_tag and geographic_cat are casted to spherical_tag
-template <typename BoxContained, typename BoxContaining>
-struct default_strategy
- <
- BoxContained, BoxContaining,
- box_tag, box_tag,
- areal_tag, areal_tag,
- spherical_tag, spherical_tag
- >
-{
- typedef within::box_in_box<BoxContained, BoxContaining> type;
-};
-
-
-}} // namespace within::services
-
-namespace covered_by { namespace services
-{
-
-template <typename BoxContained, typename BoxContaining>
-struct default_strategy
- <
- BoxContained, BoxContaining,
- box_tag, box_tag,
- areal_tag, areal_tag,
- cartesian_tag, cartesian_tag
- >
-{
- typedef within::box_in_box
- <
- BoxContained, BoxContaining,
- within::box_covered_by_range
- > type;
-};
-
-// spherical_equatorial_tag, spherical_polar_tag and geographic_cat are casted to spherical_tag
-template <typename BoxContained, typename BoxContaining>
-struct default_strategy
- <
- BoxContained, BoxContaining,
- box_tag, box_tag,
- areal_tag, areal_tag,
- spherical_tag, spherical_tag
- >
-{
- typedef within::box_in_box
- <
- BoxContained, BoxContaining,
- within::box_covered_by_range
- > type;
-};
-
-
-}} // namespace covered_by::services
-
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}}} // namespace boost::geometry::strategy
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BOX_IN_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_end_flat.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_end_flat.hpp
deleted file mode 100644
index c01cf4df852..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_end_flat.hpp
+++ /dev/null
@@ -1,112 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_END_FLAT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_END_FLAT_HPP
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/strategies/tags.hpp>
-#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-#include <boost/geometry/strategies/buffer.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace buffer
-{
-
-
-/*!
-\brief Let the buffer create flat ends
-\ingroup strategies
-\details This strategy can be used as EndStrategy for the buffer algorithm.
- It creates a flat end for each linestring-end. It can be applied
- for (multi)linestrings. Also it is applicable for spikes in (multi)polygons.
- This strategy is only applicable for Cartesian coordinate systems.
-
-\qbk{
-[heading Example]
-[buffer_end_flat]
-[heading Output]
-[$img/strategies/buffer_end_flat.png]
-[heading See also]
-\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
-\* [link geometry.reference.strategies.strategy_buffer_end_round end_round]
-}
- */
-class end_flat
-{
-
-public :
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
- //! Fills output_range with a flat end
- template <typename Point, typename RangeOut, typename DistanceStrategy>
- inline void apply(Point const& penultimate_point,
- Point const& perp_left_point,
- Point const& ultimate_point,
- Point const& perp_right_point,
- buffer_side_selector side,
- DistanceStrategy const& distance,
- RangeOut& range_out) const
- {
- typedef typename coordinate_type<Point>::type coordinate_type;
-
- typedef typename geometry::select_most_precise
- <
- coordinate_type,
- double
- >::type promoted_type;
-
- promoted_type const dist_left = distance.apply(penultimate_point, ultimate_point, buffer_side_left);
- promoted_type const dist_right = distance.apply(penultimate_point, ultimate_point, buffer_side_right);
-
- bool reversed = (side == buffer_side_left && dist_right < 0 && -dist_right > dist_left)
- || (side == buffer_side_right && dist_left < 0 && -dist_left > dist_right)
- ;
- if (reversed)
- {
- range_out.push_back(perp_right_point);
- range_out.push_back(perp_left_point);
- }
- else
- {
- range_out.push_back(perp_left_point);
- range_out.push_back(perp_right_point);
- }
- // Don't add the ultimate_point (endpoint of the linestring).
- // The buffer might be generated completely at one side.
- // In other cases it does no harm but is further useless
- }
-
- template <typename NumericType>
- static inline NumericType max_distance(NumericType const& distance)
- {
- return distance;
- }
-
- //! Returns the piece_type (flat end)
- static inline piece_type get_piece_type()
- {
- return buffered_flat_end;
- }
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-};
-
-
-}} // namespace strategy::buffer
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_END_FLAT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_end_round.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_end_round.hpp
deleted file mode 100644
index 3d7d5bb467d..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_end_round.hpp
+++ /dev/null
@@ -1,178 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_END_ROUND_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_END_ROUND_HPP
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/strategies/tags.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-#include <boost/geometry/strategies/buffer.hpp>
-
-
-#include <boost/geometry/io/wkt/wkt.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace buffer
-{
-
-
-/*!
-\brief Let the buffer create rounded ends
-\ingroup strategies
-\details This strategy can be used as EndStrategy for the buffer algorithm.
- It creates a rounded end for each linestring-end. It can be applied
- for (multi)linestrings. Also it is applicable for spikes in (multi)polygons.
- This strategy is only applicable for Cartesian coordinate systems.
-
-\qbk{
-[heading Example]
-[buffer_end_round]
-[heading Output]
-[$img/strategies/buffer_end_round.png]
-[heading See also]
-\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
-\* [link geometry.reference.strategies.strategy_buffer_end_flat end_flat]
-}
- */
-class end_round
-{
-private :
- std::size_t m_points_per_circle;
-
- template
- <
- typename Point,
- typename PromotedType,
- typename DistanceType,
- typename RangeOut
- >
- inline void generate_points(Point const& point,
- PromotedType alpha, // by value
- DistanceType const& buffer_distance,
- RangeOut& range_out) const
- {
- PromotedType const two_pi = geometry::math::two_pi<PromotedType>();
-
- std::size_t point_buffer_count = m_points_per_circle;
-
- PromotedType const diff = two_pi / PromotedType(point_buffer_count);
-
- // For half circle:
- point_buffer_count /= 2;
- point_buffer_count++;
-
- for (std::size_t i = 0; i < point_buffer_count; i++, alpha -= diff)
- {
- typename boost::range_value<RangeOut>::type p;
- set<0>(p, get<0>(point) + buffer_distance * cos(alpha));
- set<1>(p, get<1>(point) + buffer_distance * sin(alpha));
- range_out.push_back(p);
- }
- }
-
- template <typename T, typename P1, typename P2>
- static inline T calculate_angle(P1 const& from_point, P2 const& to_point)
- {
- typedef P1 vector_type;
- vector_type v = from_point;
- geometry::subtract_point(v, to_point);
- return atan2(geometry::get<1>(v), geometry::get<0>(v));
- }
-
-public :
-
- //! \brief Constructs the strategy
- //! \param points_per_circle points which would be used for a full circle
- //! (if points_per_circle is smaller than 4, it is internally set to 4)
- explicit inline end_round(std::size_t points_per_circle = 90)
- : m_points_per_circle((points_per_circle < 4u) ? 4u : points_per_circle)
- {}
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
-
- //! Fills output_range with a flat end
- template <typename Point, typename RangeOut, typename DistanceStrategy>
- inline void apply(Point const& penultimate_point,
- Point const& perp_left_point,
- Point const& ultimate_point,
- Point const& perp_right_point,
- buffer_side_selector side,
- DistanceStrategy const& distance,
- RangeOut& range_out) const
- {
- typedef typename coordinate_type<Point>::type coordinate_type;
-
- typedef typename geometry::select_most_precise
- <
- coordinate_type,
- double
- >::type promoted_type;
-
- promoted_type const alpha = calculate_angle<promoted_type>(perp_left_point, ultimate_point);
-
- promoted_type const dist_left = distance.apply(penultimate_point, ultimate_point, buffer_side_left);
- promoted_type const dist_right = distance.apply(penultimate_point, ultimate_point, buffer_side_right);
- if (geometry::math::equals(dist_left, dist_right))
- {
- generate_points(ultimate_point, alpha, dist_left, range_out);
- }
- else
- {
- promoted_type const two = 2.0;
- promoted_type dist_half_diff = (dist_left - dist_right) / two;
-
- if (side == buffer_side_right)
- {
- dist_half_diff = -dist_half_diff;
- }
-
- Point shifted_point;
- set<0>(shifted_point, get<0>(ultimate_point) + dist_half_diff * cos(alpha));
- set<1>(shifted_point, get<1>(ultimate_point) + dist_half_diff * sin(alpha));
- generate_points(shifted_point, alpha, (dist_left + dist_right) / two, range_out);
- }
-
- if (m_points_per_circle % 2 == 1)
- {
- // For a half circle, if the number of points is not even,
- // we should insert the end point too, to generate a full cap
- range_out.push_back(perp_right_point);
- }
- }
-
- template <typename NumericType>
- static inline NumericType max_distance(NumericType const& distance)
- {
- return distance;
- }
-
- //! Returns the piece_type (flat end)
- static inline piece_type get_piece_type()
- {
- return buffered_round_end;
- }
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-};
-
-
-}} // namespace strategy::buffer
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_END_ROUND_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_join_miter.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_join_miter.hpp
deleted file mode 100644
index 5358156f6d2..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_join_miter.hpp
+++ /dev/null
@@ -1,142 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_MITER_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_MITER_HPP
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/policies/compare.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-#include <boost/geometry/strategies/buffer.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace buffer
-{
-
-/*!
-\brief Let the buffer create sharp corners
-\ingroup strategies
-\details This strategy can be used as JoinStrategy for the buffer algorithm.
- It creates a sharp corners around each convex vertex. It can be applied
- for (multi)linestrings and (multi)polygons.
- If corners are sharp by themselves, the miters might become very long. Therefore
- there is a limit (miter_limit), in terms of the used distance, which limits
- their length. The miter is not changed to a bevel form (as done in some
- other software), it is just adapted to the specified miter_limit but keeps
- its miter form.
- If the buffer distance is 5.0, and the miter limit is 2.0, generated points
- will be located at a distance of at most 10.0 (2*5) units.
- This strategy is only applicable for Cartesian coordinate systems.
-
-\qbk{
-[heading Example]
-[buffer_join_miter]
-[heading Output]
-[$img/strategies/buffer_join_miter.png]
-[heading See also]
-\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
-\* [link geometry.reference.strategies.strategy_buffer_join_round join_round]
-}
- */
-class join_miter
-{
-public:
-
- //! \brief Constructs the strategy
- //! \param miter_limit The miter limit, to avoid excessively long miters around sharp corners
- explicit inline join_miter(double miter_limit = 5.0)
- : m_miter_limit(valid_limit(miter_limit))
- {}
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
- //! Fills output_range with a sharp shape around a vertex
- template <typename Point, typename DistanceType, typename RangeOut>
- inline bool apply(Point const& ip, Point const& vertex,
- Point const& perp1, Point const& perp2,
- DistanceType const& buffer_distance,
- RangeOut& range_out) const
- {
- geometry::equal_to<Point> equals;
- if (equals(ip, vertex))
- {
- return false;
- }
- if (equals(perp1, perp2))
- {
- return false;
- }
-
- typedef typename coordinate_type<Point>::type coordinate_type;
- typedef typename geometry::select_most_precise
- <
- coordinate_type,
- double
- >::type promoted_type;
-
- Point p = ip;
-
- // Check the distance ip-vertex (= miter distance)
- // (We calculate it manually (not using Pythagoras strategy) to reuse
- // dx and dy)
- coordinate_type const dx = get<0>(p) - get<0>(vertex);
- coordinate_type const dy = get<1>(p) - get<1>(vertex);
-
- promoted_type const distance = geometry::math::sqrt(dx * dx + dy * dy);
-
- promoted_type const max_distance
- = m_miter_limit * geometry::math::abs(buffer_distance);
-
- if (distance > max_distance)
- {
- BOOST_GEOMETRY_ASSERT(distance != 0.0);
-
- promoted_type const proportion = max_distance / distance;
- set<0>(p, get<0>(vertex) + dx * proportion);
- set<1>(p, get<1>(vertex) + dy * proportion);
- }
-
- range_out.push_back(perp1);
- range_out.push_back(p);
- range_out.push_back(perp2);
- return true;
- }
-
- template <typename NumericType>
- inline NumericType max_distance(NumericType const& distance) const
- {
- return distance * m_miter_limit;
- }
-
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
-private :
- double valid_limit(double miter_limit) const
- {
- if (miter_limit < 1.0)
- {
- // It should always exceed the buffer distance
- miter_limit = 1.0;
- }
- return miter_limit;
- }
-
- double m_miter_limit;
-};
-
-}} // namespace strategy::buffer
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_MITER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_join_round.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_join_round.hpp
deleted file mode 100644
index e1a433e1eeb..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_join_round.hpp
+++ /dev/null
@@ -1,187 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_ROUND_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_ROUND_HPP
-
-#include <algorithm>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/policies/compare.hpp>
-#include <boost/geometry/strategies/buffer.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_WARN
-#include <iostream>
-#include <boost/geometry/io/wkt/wkt.hpp>
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace buffer
-{
-
-/*!
-\brief Let the buffer create rounded corners
-\ingroup strategies
-\details This strategy can be used as JoinStrategy for the buffer algorithm.
- It creates a rounded corners around each convex vertex. It can be applied
- for (multi)linestrings and (multi)polygons.
- This strategy is only applicable for Cartesian coordinate systems.
-
-\qbk{
-[heading Example]
-[buffer_join_round]
-[heading Output]
-[$img/strategies/buffer_join_round.png]
-[heading See also]
-\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
-\* [link geometry.reference.strategies.strategy_buffer_join_miter join_miter]
-}
- */
-class join_round
-{
-public :
-
- //! \brief Constructs the strategy
- //! \param points_per_circle points which would be used for a full circle
- explicit inline join_round(std::size_t points_per_circle = 90)
- : m_points_per_circle(points_per_circle)
- {}
-
-private :
- template
- <
- typename PromotedType,
- typename Point,
- typename DistanceType,
- typename RangeOut
- >
- inline void generate_points(Point const& vertex,
- Point const& perp1, Point const& perp2,
- DistanceType const& buffer_distance,
- RangeOut& range_out) const
- {
- PromotedType const dx1 = get<0>(perp1) - get<0>(vertex);
- PromotedType const dy1 = get<1>(perp1) - get<1>(vertex);
- PromotedType const dx2 = get<0>(perp2) - get<0>(vertex);
- PromotedType const dy2 = get<1>(perp2) - get<1>(vertex);
-
- PromotedType const two_pi = geometry::math::two_pi<PromotedType>();
-
- PromotedType const angle1 = atan2(dy1, dx1);
- PromotedType angle2 = atan2(dy2, dx2);
- while (angle2 > angle1)
- {
- angle2 -= two_pi;
- }
- PromotedType const angle_diff = angle1 - angle2;
-
- // Divide the angle into an integer amount of steps to make it
- // visually correct also for a low number of points / circle
-
- // If a full circle is divided into 3 parts (e.g. angle is 125),
- // the one point in between must still be generated
- // The calculation below:
- // - generates 1 point in between for an angle of 125 based on 3 points
- // - generates 0 points in between for an angle of 90 based on 4 points
-
- std::size_t const n = (std::max)(static_cast<std::size_t>(
- ceil(m_points_per_circle * angle_diff / two_pi)), std::size_t(1));
-
- PromotedType const diff = angle_diff / static_cast<PromotedType>(n);
- PromotedType a = angle1 - diff;
-
- // Walk to n - 1 to avoid generating the last point
- for (std::size_t i = 0; i < n - 1; i++, a -= diff)
- {
- Point p;
- set<0>(p, get<0>(vertex) + buffer_distance * cos(a));
- set<1>(p, get<1>(vertex) + buffer_distance * sin(a));
- range_out.push_back(p);
- }
- }
-
-public :
-
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
- //! Fills output_range with a rounded shape around a vertex
- template <typename Point, typename DistanceType, typename RangeOut>
- inline bool apply(Point const& ip, Point const& vertex,
- Point const& perp1, Point const& perp2,
- DistanceType const& buffer_distance,
- RangeOut& range_out) const
- {
- typedef typename coordinate_type<Point>::type coordinate_type;
- typedef typename boost::range_value<RangeOut>::type output_point_type;
-
- typedef typename geometry::select_most_precise
- <
- typename geometry::select_most_precise
- <
- coordinate_type,
- typename geometry::coordinate_type<output_point_type>::type
- >::type,
- double
- >::type promoted_type;
-
- geometry::equal_to<Point> equals;
- if (equals(perp1, perp2))
- {
-#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_WARN
- std::cout << "Corner for equal points " << geometry::wkt(ip) << " " << geometry::wkt(perp1) << std::endl;
-#endif
- return false;
- }
-
- // Generate 'vectors'
- coordinate_type vix = (get<0>(ip) - get<0>(vertex));
- coordinate_type viy = (get<1>(ip) - get<1>(vertex));
-
- promoted_type length_i = geometry::math::sqrt(vix * vix + viy * viy);
- DistanceType const bd = geometry::math::abs(buffer_distance);
- promoted_type prop = bd / length_i;
-
- Point bp;
- set<0>(bp, get<0>(vertex) + vix * prop);
- set<1>(bp, get<1>(vertex) + viy * prop);
-
- range_out.push_back(perp1);
- generate_points<promoted_type>(vertex, perp1, perp2, bd, range_out);
- range_out.push_back(perp2);
- return true;
- }
-
- template <typename NumericType>
- static inline NumericType max_distance(NumericType const& distance)
- {
- return distance;
- }
-
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
-private :
- std::size_t m_points_per_circle;
-};
-
-
-}} // namespace strategy::buffer
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_ROUND_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp
deleted file mode 100644
index ed3a010cd55..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp
+++ /dev/null
@@ -1,154 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2014 Barend Gehrels, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_ROUND_BY_DIVIDE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_ROUND_BY_DIVIDE_HPP
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/policies/compare.hpp>
-#include <boost/geometry/strategies/buffer.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_WARN
-#include <boost/geometry/io/wkt/wkt.hpp>
-#endif
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace buffer
-{
-
-
-class join_round_by_divide
-{
-public :
-
- inline join_round_by_divide(std::size_t max_level = 4)
- : m_max_level(max_level)
- {}
-
- template
- <
- typename PromotedType,
- typename Point,
- typename DistanceType,
- typename RangeOut
- >
- inline void mid_points(Point const& vertex,
- Point const& p1, Point const& p2,
- DistanceType const& buffer_distance,
- RangeOut& range_out,
- std::size_t level = 1) const
- {
- typedef typename coordinate_type<Point>::type coordinate_type;
-
- // Generate 'vectors'
- coordinate_type const vp1_x = get<0>(p1) - get<0>(vertex);
- coordinate_type const vp1_y = get<1>(p1) - get<1>(vertex);
-
- coordinate_type const vp2_x = (get<0>(p2) - get<0>(vertex));
- coordinate_type const vp2_y = (get<1>(p2) - get<1>(vertex));
-
- // Average them to generate vector in between
- coordinate_type const two = 2;
- coordinate_type const v_x = (vp1_x + vp2_x) / two;
- coordinate_type const v_y = (vp1_y + vp2_y) / two;
-
- PromotedType const length2 = geometry::math::sqrt(v_x * v_x + v_y * v_y);
-
- PromotedType prop = buffer_distance / length2;
-
- Point mid_point;
- set<0>(mid_point, get<0>(vertex) + v_x * prop);
- set<1>(mid_point, get<1>(vertex) + v_y * prop);
-
- if (level < m_max_level)
- {
- mid_points<PromotedType>(vertex, p1, mid_point, buffer_distance, range_out, level + 1);
- }
- range_out.push_back(mid_point);
- if (level < m_max_level)
- {
- mid_points<PromotedType>(vertex, mid_point, p2, buffer_distance, range_out, level + 1);
- }
- }
-
- template <typename Point, typename DistanceType, typename RangeOut>
- inline bool apply(Point const& ip, Point const& vertex,
- Point const& perp1, Point const& perp2,
- DistanceType const& buffer_distance,
- RangeOut& range_out) const
- {
- typedef typename coordinate_type<Point>::type coordinate_type;
-
- typedef typename geometry::select_most_precise
- <
- coordinate_type,
- double
- >::type promoted_type;
-
- geometry::equal_to<Point> equals;
-
- if (equals(perp1, perp2))
- {
-#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_WARN
- std::cout << "Corner for equal points " << geometry::wkt(ip) << " " << geometry::wkt(perp1) << std::endl;
-#endif
- return false;
- }
-
- // Generate 'vectors'
- coordinate_type const vix = (get<0>(ip) - get<0>(vertex));
- coordinate_type const viy = (get<1>(ip) - get<1>(vertex));
-
- promoted_type const length_i = geometry::math::sqrt(vix * vix + viy * viy);
-
- promoted_type const bd = geometry::math::abs(buffer_distance);
- promoted_type prop = bd / length_i;
-
- Point bp;
- set<0>(bp, get<0>(vertex) + vix * prop);
- set<1>(bp, get<1>(vertex) + viy * prop);
-
- range_out.push_back(perp1);
-
- if (m_max_level > 1)
- {
- mid_points<promoted_type>(vertex, perp1, bp, bd, range_out);
- range_out.push_back(bp);
- mid_points<promoted_type>(vertex, bp, perp2, bd, range_out);
- }
- else if (m_max_level == 1)
- {
- range_out.push_back(bp);
- }
-
- range_out.push_back(perp2);
- return true;
- }
-
- template <typename NumericType>
- static inline NumericType max_distance(NumericType const& distance)
- {
- return distance;
- }
-
-private :
- std::size_t m_max_level;
-};
-
-
-}} // namespace strategy::buffer
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_JOIN_ROUND_BY_DIVIDE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_point_circle.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_point_circle.hpp
deleted file mode 100644
index f2898571776..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_point_circle.hpp
+++ /dev/null
@@ -1,115 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_CIRCLE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_CIRCLE_HPP
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/strategies/buffer.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace buffer
-{
-
-/*!
-\brief Create a circular buffer around a point
-\ingroup strategies
-\details This strategy can be used as PointStrategy for the buffer algorithm.
- It creates a circular buffer around a point. It can be applied
- for points and multi_points, but also for a linestring (if it is degenerate,
- so consisting of only one point) and for polygons (if it is degenerate).
- This strategy is only applicable for Cartesian coordinate systems.
-
-\qbk{
-[heading Example]
-[buffer_point_circle]
-[heading Output]
-[$img/strategies/buffer_point_circle.png]
-[heading See also]
-\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
-\* [link geometry.reference.strategies.strategy_buffer_point_square point_square]
-}
- */
-class point_circle
-{
-public :
- //! \brief Constructs the strategy
- //! \param count number of points for the created circle (if count
- //! is smaller than 3, count is internally set to 3)
- explicit point_circle(std::size_t count = 90)
- : m_count((count < 3u) ? 3u : count)
- {}
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
- //! Fills output_range with a circle around point using distance_strategy
- template
- <
- typename Point,
- typename OutputRange,
- typename DistanceStrategy
- >
- inline void apply(Point const& point,
- DistanceStrategy const& distance_strategy,
- OutputRange& output_range) const
- {
- typedef typename boost::range_value<OutputRange>::type output_point_type;
-
- typedef typename geometry::select_most_precise
- <
- typename geometry::select_most_precise
- <
- typename geometry::coordinate_type<Point>::type,
- typename geometry::coordinate_type<output_point_type>::type
- >::type,
- double
- >::type promoted_type;
-
- promoted_type const buffer_distance = distance_strategy.apply(point, point,
- strategy::buffer::buffer_side_left);
-
- promoted_type const two_pi = geometry::math::two_pi<promoted_type>();
-
- promoted_type const diff = two_pi / promoted_type(m_count);
- promoted_type a = 0;
-
- for (std::size_t i = 0; i < m_count; i++, a -= diff)
- {
- output_point_type p;
- set<0>(p, get<0>(point) + buffer_distance * cos(a));
- set<1>(p, get<1>(point) + buffer_distance * sin(a));
- output_range.push_back(p);
- }
-
- // Close it:
- output_range.push_back(output_range.front());
- }
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
-private :
- std::size_t m_count;
-};
-
-
-}} // namespace strategy::buffer
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_CIRCLE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_point_square.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_point_square.hpp
deleted file mode 100644
index 37a90c013fa..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_point_square.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2012-2014 Barend Gehrels, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_SQUARE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_SQUARE_HPP
-
-#include <cstddef>
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-#include <boost/geometry/strategies/buffer.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace buffer
-{
-
-/*!
-\brief Create a squared form buffer around a point
-\ingroup strategies
-\details This strategy can be used as PointStrategy for the buffer algorithm.
- It creates a square from each point, where the point lies in the center.
- It can be applied for points and multi_points, but also for a linestring (if it is degenerate,
- so consisting of only one point) and for polygons (if it is degenerate).
- This strategy is only applicable for Cartesian coordinate systems.
-
-\qbk{
-[heading Example]
-[buffer_point_square]
-[heading Output]
-[$img/strategies/buffer_point_square.png]
-[heading See also]
-\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
-\* [link geometry.reference.strategies.strategy_buffer_point_circle point_circle]
-}
- */
-class point_square
-{
- template
- <
- typename Point,
- typename DistanceType,
- typename OutputRange
- >
- inline void add_point(Point const& point,
- DistanceType const& distance,
- DistanceType const& x,
- DistanceType const& y,
- OutputRange& output_range) const
- {
- typename boost::range_value<OutputRange>::type p;
- set<0>(p, get<0>(point) + x * distance);
- set<1>(p, get<1>(point) + y * distance);
- output_range.push_back(p);
- }
-
- template
- <
- typename Point,
- typename DistanceType,
- typename OutputRange
- >
- inline void add_points(Point const& point,
- DistanceType const& distance,
- OutputRange& output_range) const
- {
- add_point(point, distance, -1.0, -1.0, output_range);
- add_point(point, distance, -1.0, +1.0, output_range);
- add_point(point, distance, +1.0, +1.0, output_range);
- add_point(point, distance, +1.0, -1.0, output_range);
-
- // Close it:
- output_range.push_back(output_range.front());
- }
-
-public :
-
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
- //! Fills output_range with a square around point using distance_strategy
- template
- <
- typename Point,
- typename DistanceStrategy,
- typename OutputRange
- >
- inline void apply(Point const& point,
- DistanceStrategy const& distance_strategy,
- OutputRange& output_range) const
- {
- add_points(point, distance_strategy.apply(point, point,
- strategy::buffer::buffer_side_left), output_range);
- }
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
-};
-
-
-}} // namespace strategy::buffer
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_SQUARE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_side_straight.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_side_straight.hpp
deleted file mode 100644
index 75247377fae..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/buffer_side_straight.hpp
+++ /dev/null
@@ -1,136 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2012-2014 Barend Gehrels, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_SIDE_STRAIGHT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_SIDE_STRAIGHT_HPP
-
-#include <cstddef>
-
-#include <boost/math/special_functions/fpclassify.hpp>
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-#include <boost/geometry/strategies/buffer.hpp>
-#include <boost/geometry/strategies/side.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace buffer
-{
-
-
-
-/*!
-\brief Let the buffer use straight sides along segments (the default)
-\ingroup strategies
-\details This strategy can be used as SideStrategy for the buffer algorithm.
- It is currently the only provided strategy for this purpose
-
-\qbk{
-[heading Example]
-See the examples for other buffer strategies\, for example
-[link geometry.reference.strategies.strategy_buffer_join_round join_round]
-[heading See also]
-\* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
-}
- */
-class side_straight
-{
-public :
-#ifndef DOXYGEN_SHOULD_SKIP_THIS
- template
- <
- typename Point,
- typename OutputRange,
- typename DistanceStrategy
- >
- static inline result_code apply(
- Point const& input_p1, Point const& input_p2,
- buffer_side_selector side,
- DistanceStrategy const& distance,
- OutputRange& output_range)
- {
- typedef typename coordinate_type<Point>::type coordinate_type;
- typedef typename geometry::select_most_precise
- <
- coordinate_type,
- double
- >::type promoted_type;
-
- // Generate a block along (left or right of) the segment
-
- // Simulate a vector d (dx,dy)
- coordinate_type const dx = get<0>(input_p2) - get<0>(input_p1);
- coordinate_type const dy = get<1>(input_p2) - get<1>(input_p1);
-
- // For normalization [0,1] (=dot product d.d, sqrt)
- promoted_type const length = geometry::math::sqrt(dx * dx + dy * dy);
-
- if (! boost::math::isfinite(length))
- {
- // In case of coordinates differences of e.g. 1e300, length
- // will overflow and we should not generate output
-#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_WARN
- std::cout << "Error in length calculation for points "
- << geometry::wkt(input_p1) << " " << geometry::wkt(input_p2)
- << " length: " << length << std::endl;
-#endif
- return result_error_numerical;
- }
-
- if (geometry::math::equals(length, 0))
- {
- // Coordinates are simplified and therefore most often not equal.
- // But if simplify is skipped, or for lines with two
- // equal points, length is 0 and we cannot generate output.
- return result_no_output;
- }
-
- promoted_type const d = distance.apply(input_p1, input_p2, side);
-
- // Generate the normalized perpendicular p, to the left (ccw)
- promoted_type const px = -dy / length;
- promoted_type const py = dx / length;
-
- if (geometry::math::equals(px, 0)
- && geometry::math::equals(py, 0))
- {
- // This basically should not occur - because of the checks above.
- // There are no unit tests triggering this condition
-#ifdef BOOST_GEOMETRY_DEBUG_BUFFER_WARN
- std::cout << "Error in perpendicular calculation for points "
- << geometry::wkt(input_p1) << " " << geometry::wkt(input_p2)
- << " length: " << length
- << " distance: " << d
- << std::endl;
-#endif
- return result_no_output;
- }
-
- output_range.resize(2);
-
- set<0>(output_range.front(), get<0>(input_p1) + px * d);
- set<1>(output_range.front(), get<1>(input_p1) + py * d);
- set<0>(output_range.back(), get<0>(input_p2) + px * d);
- set<1>(output_range.back(), get<1>(input_p2) + py * d);
-
- return result_normal;
- }
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-};
-
-
-}} // namespace strategy::buffer
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_SIDE_STRAIGHT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/centroid_average.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/centroid_average.hpp
deleted file mode 100644
index 32f551cf950..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/centroid_average.hpp
+++ /dev/null
@@ -1,128 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
-
-
-#include <cstddef>
-
-#include <boost/geometry/algorithms/assign.hpp>
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/strategies/centroid.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace centroid
-{
-
-
-/*!
-\brief Centroid calculation taking average of points
-\ingroup strategies
-*/
-template
-<
- typename PointCentroid,
- typename Point = PointCentroid
->
-class average
-{
-private :
-
- /*! subclass to keep state */
- class sum
- {
- friend class average;
- signed_size_type count;
- PointCentroid centroid;
-
- public :
- inline sum()
- : count(0)
- {
- assign_zero(centroid);
- }
- };
-
-public :
- typedef sum state_type;
- typedef PointCentroid centroid_point_type;
- typedef Point point_type;
-
- static inline void apply(Point const& p, sum& state)
- {
- add_point(state.centroid, p);
- state.count++;
- }
-
- static inline bool result(sum const& state, PointCentroid& centroid)
- {
- centroid = state.centroid;
- if ( state.count > 0 )
- {
- divide_value(centroid, state.count);
- return true;
- }
- return false;
- }
-
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-namespace services
-{
-
-template <typename Point, std::size_t DimensionCount, typename Geometry>
-struct default_strategy
-<
- cartesian_tag,
- pointlike_tag,
- DimensionCount,
- Point,
- Geometry
->
-{
- typedef average
- <
- Point,
- typename point_type<Geometry>::type
- > type;
-};
-
-} // namespace services
-
-#endif
-
-
-}} // namespace strategy::centroid
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_AVERAGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp
deleted file mode 100644
index d081173a3e7..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp
+++ /dev/null
@@ -1,258 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_BASHEIN_DETMER_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_BASHEIN_DETMER_HPP
-
-
-#include <cstddef>
-
-#include <boost/math/special_functions/fpclassify.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-#include <boost/geometry/arithmetic/determinant.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/strategies/centroid.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-// Note: when calling the namespace "centroid", it sometimes,
-// somehow, in gcc, gives compilation problems (confusion with function centroid).
-
-namespace strategy { namespace centroid
-{
-
-
-
-/*!
-\brief Centroid calculation using algorithm Bashein / Detmer
-\ingroup strategies
-\details Calculates centroid using triangulation method published by
- Bashein / Detmer
-\tparam Point point type of centroid to calculate
-\tparam PointOfSegment point type of segments, defaults to Point
-\tparam CalculationType \tparam_calculation
-
-\author Adapted from "Centroid of a Polygon" by
- Gerard Bashein and Paul R. Detmer<em>,
-in "Graphics Gems IV", Academic Press, 1994</em>
-
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.centroid.centroid_3_with_strategy centroid (with strategy)]
-}
-*/
-
-/*
-\par Research notes
-The algorithm gives the same results as Oracle and PostGIS but
- differs from MySQL
-(tried 5.0.21 / 5.0.45 / 5.0.51a / 5.1.23).
-
-Without holes:
-- this: POINT(4.06923363095238 1.65055803571429)
-- geolib: POINT(4.07254 1.66819)
-- MySQL: POINT(3.6636363636364 1.6272727272727)'
-- PostGIS: POINT(4.06923363095238 1.65055803571429)
-- Oracle: 4.06923363095238 1.65055803571429
-- SQL Server: POINT(4.06923362245959 1.65055804168294)
-
-Statements:
-- \b MySQL/PostGIS: select AsText(Centroid(GeomFromText(
- '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))')))
-- \b Oracle: select sdo_geom.sdo_centroid(sdo_geometry(2003, null, null,
- sdo_elem_info_array(1, 1003, 1), sdo_ordinate_array(
- 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))
- , mdsys.sdo_dim_array(mdsys.sdo_dim_element('x',0,10,.00000005)
- ,mdsys.sdo_dim_element('y',0,10,.00000005)))
- from dual
-- \b SQL Server 2008: select geometry::STGeomFromText(
- '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))',0)
- .STCentroid()
- .STAsText()
-
-With holes:
-- this: POINT(4.04663 1.6349)
-- geolib: POINT(4.04675 1.65735)
-- MySQL: POINT(3.6090580503834 1.607573932092)
-- PostGIS: POINT(4.0466265060241 1.63489959839357)
-- Oracle: 4.0466265060241 1.63489959839357
-- SQL Server: POINT(4.0466264962959677 1.6348996057331333)
-
-Statements:
-- \b MySQL/PostGIS: select AsText(Centroid(GeomFromText(
- '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))')));
-- \b Oracle: select sdo_geom.sdo_centroid(sdo_geometry(2003, null, null
- , sdo_elem_info_array(1, 1003, 1, 25, 2003, 1)
- , sdo_ordinate_array(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))
- , mdsys.sdo_dim_array(mdsys.sdo_dim_element('x',0,10,.00000005)
- ,mdsys.sdo_dim_element('y',0,10,.00000005)))
- from dual
- */
-template
-<
- typename Point,
- typename PointOfSegment = Point,
- typename CalculationType = void
->
-class bashein_detmer
-{
-private :
- // If user specified a calculation type, use that type,
- // whatever it is and whatever the point-type(s) are.
- // Else, use the most appropriate coordinate type
- // of the two points, but at least double
- typedef typename
- boost::mpl::if_c
- <
- boost::is_void<CalculationType>::type::value,
- typename select_most_precise
- <
- typename select_coordinate_type
- <
- Point,
- PointOfSegment
- >::type,
- double
- >::type,
- CalculationType
- >::type calculation_type;
-
- /*! subclass to keep state */
- class sums
- {
- friend class bashein_detmer;
- std::size_t count;
- calculation_type sum_a2;
- calculation_type sum_x;
- calculation_type sum_y;
-
- public :
- inline sums()
- : count(0)
- , sum_a2(calculation_type())
- , sum_x(calculation_type())
- , sum_y(calculation_type())
- {}
- };
-
-public :
- typedef sums state_type;
-
- static inline void apply(PointOfSegment const& p1,
- PointOfSegment const& p2, sums& state)
- {
- /* Algorithm:
- For each segment:
- begin
- ai = x1 * y2 - x2 * y1;
- sum_a2 += ai;
- sum_x += ai * (x1 + x2);
- sum_y += ai * (y1 + y2);
- end
- return POINT(sum_x / (3 * sum_a2), sum_y / (3 * sum_a2) )
- */
-
- // Get coordinates and promote them to calculation_type
- calculation_type const x1 = boost::numeric_cast<calculation_type>(get<0>(p1));
- calculation_type const y1 = boost::numeric_cast<calculation_type>(get<1>(p1));
- calculation_type const x2 = boost::numeric_cast<calculation_type>(get<0>(p2));
- calculation_type const y2 = boost::numeric_cast<calculation_type>(get<1>(p2));
- calculation_type const ai = geometry::detail::determinant<calculation_type>(p1, p2);
- state.count++;
- state.sum_a2 += ai;
- state.sum_x += ai * (x1 + x2);
- state.sum_y += ai * (y1 + y2);
- }
-
- static inline bool result(sums const& state, Point& centroid)
- {
- calculation_type const zero = calculation_type();
- if (state.count > 0 && ! math::equals(state.sum_a2, zero))
- {
- calculation_type const v3 = 3;
- calculation_type const a3 = v3 * state.sum_a2;
-
- typedef typename geometry::coordinate_type
- <
- Point
- >::type coordinate_type;
-
- // Prevent NaN centroid coordinates
- if (boost::math::isfinite(a3))
- {
- // NOTE: above calculation_type is checked, not the centroid coordinate_type
- // which means that the centroid can still be filled with INF
- // if e.g. calculation_type is double and centroid contains floats
- set<0>(centroid,
- boost::numeric_cast<coordinate_type>(state.sum_x / a3));
- set<1>(centroid,
- boost::numeric_cast<coordinate_type>(state.sum_y / a3));
- return true;
- }
- }
-
- return false;
- }
-
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-// Register this strategy for rings and (multi)polygons, in two dimensions
-template <typename Point, typename Geometry>
-struct default_strategy<cartesian_tag, areal_tag, 2, Point, Geometry>
-{
- typedef bashein_detmer
- <
- Point,
- typename point_type<Geometry>::type
- > type;
-};
-
-
-} // namespace services
-
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::centroid
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_BASHEIN_DETMER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp
deleted file mode 100644
index 0735e925b69..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp
+++ /dev/null
@@ -1,174 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2009-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_WEIGHTED_LENGTH_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_WEIGHTED_LENGTH_HPP
-
-#include <boost/math/special_functions/fpclassify.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/algorithms/detail/distance/interface.hpp>
-#include <boost/geometry/algorithms/detail/distance/point_to_geometry.hpp>
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/util/for_each_coordinate.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-#include <boost/geometry/strategies/centroid.hpp>
-#include <boost/geometry/strategies/default_distance_result.hpp>
-
-// Helper geometry
-#include <boost/geometry/geometries/point.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace centroid
-{
-
-namespace detail
-{
-
-template <typename Type, std::size_t DimensionCount>
-struct weighted_length_sums
-{
- typedef typename geometry::model::point
- <
- Type, DimensionCount,
- cs::cartesian
- > work_point;
-
- Type length;
- work_point average_sum;
-
- inline weighted_length_sums()
- : length(Type())
- {
- geometry::assign_zero(average_sum);
- }
-};
-}
-
-template
-<
- typename Point,
- typename PointOfSegment = Point
->
-class weighted_length
-{
-private :
- typedef typename select_most_precise
- <
- typename default_distance_result<Point>::type,
- typename default_distance_result<PointOfSegment>::type
- >::type distance_type;
-
-public :
- typedef detail::weighted_length_sums
- <
- distance_type,
- geometry::dimension<Point>::type::value
- > state_type;
-
- static inline void apply(PointOfSegment const& p1,
- PointOfSegment const& p2, state_type& state)
- {
- distance_type const d = geometry::distance(p1, p2);
- state.length += d;
-
- typename state_type::work_point weighted_median;
- geometry::assign_zero(weighted_median);
- geometry::add_point(weighted_median, p1);
- geometry::add_point(weighted_median, p2);
- geometry::multiply_value(weighted_median, d/2);
- geometry::add_point(state.average_sum, weighted_median);
- }
-
- static inline bool result(state_type const& state, Point& centroid)
- {
- distance_type const zero = distance_type();
- if (! geometry::math::equals(state.length, zero)
- && boost::math::isfinite(state.length)) // Prevent NaN centroid coordinates
- {
- // NOTE: above distance_type is checked, not the centroid coordinate_type
- // which means that the centroid can still be filled with INF
- // if e.g. distance_type is double and centroid contains floats
- geometry::for_each_coordinate(centroid, set_sum_div_length(state));
- return true;
- }
-
- return false;
- }
-
- struct set_sum_div_length
- {
- state_type const& m_state;
- set_sum_div_length(state_type const& state)
- : m_state(state)
- {}
- template <typename Pt, std::size_t Dimension>
- void apply(Pt & centroid) const
- {
- typedef typename geometry::coordinate_type<Pt>::type coordinate_type;
- geometry::set<Dimension>(
- centroid,
- boost::numeric_cast<coordinate_type>(
- geometry::get<Dimension>(m_state.average_sum) / m_state.length
- )
- );
- }
- };
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-
-// Register this strategy for linear geometries, in all dimensions
-
-template <std::size_t N, typename Point, typename Geometry>
-struct default_strategy
-<
- cartesian_tag,
- linear_tag,
- N,
- Point,
- Geometry
->
-{
- typedef weighted_length
- <
- Point,
- typename point_type<Geometry>::type
- > type;
-};
-
-
-} // namespace services
-
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::centroid
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_CENTROID_WEIGHTED_LENGTH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/densify.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/densify.hpp
deleted file mode 100644
index 23651637b9e..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/densify.hpp
+++ /dev/null
@@ -1,133 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017-2018, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DENSIFY_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DENSIFY_HPP
-
-
-#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/arithmetic/dot_product.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/strategies/densify.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace densify
-{
-
-
-/*!
-\brief Densification of cartesian segment.
-\ingroup strategies
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.densify.densify_4_with_strategy densify (with strategy)]
-}
- */
-template
-<
- typename CalculationType = void
->
-class cartesian
-{
-public:
- template <typename Point, typename AssignPolicy, typename T>
- static inline void apply(Point const& p0, Point const& p1, AssignPolicy & policy, T const& length_threshold)
- {
- typedef typename AssignPolicy::point_type out_point_t;
- typedef typename select_most_precise
- <
- typename coordinate_type<Point>::type,
- typename coordinate_type<out_point_t>::type,
- CalculationType
- >::type calc_t;
-
- typedef model::point<calc_t, geometry::dimension<Point>::value, cs::cartesian> calc_point_t;
-
- calc_point_t cp0, cp1;
- geometry::detail::conversion::convert_point_to_point(p0, cp0);
- geometry::detail::conversion::convert_point_to_point(p1, cp1);
-
- // dir01 = xy1 - xy0
- calc_point_t dir01 = cp1;
- geometry::subtract_point(dir01, cp0);
- calc_t const dot01 = geometry::dot_product(dir01, dir01);
- calc_t const len = math::sqrt(dot01);
-
- BOOST_GEOMETRY_ASSERT(length_threshold > T(0));
-
- signed_size_type n = signed_size_type(len / length_threshold);
- if (n <= 0)
- {
- return;
- }
-
- // NOTE: Normalization will not work for integral coordinates
- // normalize
- //geometry::divide_value(dir01, len);
-
- calc_t step = len / (n + 1);
-
- calc_t d = step;
- for (signed_size_type i = 0 ; i < n ; ++i, d += step)
- {
- // pd = xy0 + d * dir01
- calc_point_t pd = dir01;
-
- // without normalization
- geometry::multiply_value(pd, calc_t(i + 1));
- geometry::divide_value(pd, calc_t(n + 1));
- // with normalization
- //geometry::multiply_value(pd, d);
-
- geometry::add_point(pd, cp0);
-
- // NOTE: Only needed if types calc_point_t and out_point_t are different
- // otherwise pd could simply be passed into policy
- out_point_t p;
- assert_dimension_equal<calc_point_t, out_point_t>();
- geometry::detail::conversion::convert_point_to_point(pd, p);
-
- policy.apply(p);
- }
- }
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <>
-struct default_strategy<cartesian_tag>
-{
- typedef strategy::densify::cartesian<> type;
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::densify
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DENSIFY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/disjoint_segment_box.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/disjoint_segment_box.hpp
deleted file mode 100644
index 4da4bc4503b..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/disjoint_segment_box.hpp
+++ /dev/null
@@ -1,319 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013-2017.
-// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISJOINT_SEGMENT_BOX_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISJOINT_SEGMENT_BOX_HPP
-
-
-#include <cstddef>
-#include <utility>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/calculation_type.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-
-#include <boost/geometry/strategies/disjoint.hpp>
-
-
-namespace boost { namespace geometry { namespace strategy { namespace disjoint
-{
-
-namespace detail
-{
-
-template <std::size_t I>
-struct compute_tmin_tmax_per_dim
-{
- template <typename SegmentPoint, typename Box, typename RelativeDistance>
- static inline void apply(SegmentPoint const& p0,
- SegmentPoint const& p1,
- Box const& box,
- RelativeDistance& ti_min,
- RelativeDistance& ti_max,
- RelativeDistance& diff)
- {
- typedef typename coordinate_type<Box>::type box_coordinate_type;
- typedef typename coordinate_type
- <
- SegmentPoint
- >::type point_coordinate_type;
-
- RelativeDistance c_p0 = boost::numeric_cast
- <
- point_coordinate_type
- >( geometry::get<I>(p0) );
-
- RelativeDistance c_p1 = boost::numeric_cast
- <
- point_coordinate_type
- >( geometry::get<I>(p1) );
-
- RelativeDistance c_b_min = boost::numeric_cast
- <
- box_coordinate_type
- >( geometry::get<geometry::min_corner, I>(box) );
-
- RelativeDistance c_b_max = boost::numeric_cast
- <
- box_coordinate_type
- >( geometry::get<geometry::max_corner, I>(box) );
-
- if ( geometry::get<I>(p1) >= geometry::get<I>(p0) )
- {
- diff = c_p1 - c_p0;
- ti_min = c_b_min - c_p0;
- ti_max = c_b_max - c_p0;
- }
- else
- {
- diff = c_p0 - c_p1;
- ti_min = c_p0 - c_b_max;
- ti_max = c_p0 - c_b_min;
- }
- }
-};
-
-
-template
-<
- typename RelativeDistance,
- typename SegmentPoint,
- typename Box,
- std::size_t I,
- std::size_t Dimension
->
-struct disjoint_segment_box_impl
-{
- template <typename RelativeDistancePair>
- static inline bool apply(SegmentPoint const& p0,
- SegmentPoint const& p1,
- Box const& box,
- RelativeDistancePair& t_min,
- RelativeDistancePair& t_max)
- {
- RelativeDistance ti_min, ti_max, diff;
-
- compute_tmin_tmax_per_dim<I>::apply(p0, p1, box, ti_min, ti_max, diff);
-
- if ( geometry::math::equals(diff, 0) )
- {
- if ( (geometry::math::equals(t_min.second, 0)
- && t_min.first > ti_max)
- ||
- (geometry::math::equals(t_max.second, 0)
- && t_max.first < ti_min)
- ||
- (math::sign(ti_min) * math::sign(ti_max) > 0) )
- {
- return true;
- }
- }
-
- RelativeDistance t_min_x_diff = t_min.first * diff;
- RelativeDistance t_max_x_diff = t_max.first * diff;
-
- if ( t_min_x_diff > ti_max * t_min.second
- || t_max_x_diff < ti_min * t_max.second )
- {
- return true;
- }
-
- if ( ti_min * t_min.second > t_min_x_diff )
- {
- t_min.first = ti_min;
- t_min.second = diff;
- }
- if ( ti_max * t_max.second < t_max_x_diff )
- {
- t_max.first = ti_max;
- t_max.second = diff;
- }
-
- if ( t_min.first > t_min.second || t_max.first < 0 )
- {
- return true;
- }
-
- return disjoint_segment_box_impl
- <
- RelativeDistance,
- SegmentPoint,
- Box,
- I + 1,
- Dimension
- >::apply(p0, p1, box, t_min, t_max);
- }
-};
-
-
-template
-<
- typename RelativeDistance,
- typename SegmentPoint,
- typename Box,
- std::size_t Dimension
->
-struct disjoint_segment_box_impl
- <
- RelativeDistance, SegmentPoint, Box, 0, Dimension
- >
-{
- static inline bool apply(SegmentPoint const& p0,
- SegmentPoint const& p1,
- Box const& box)
- {
- std::pair<RelativeDistance, RelativeDistance> t_min, t_max;
- RelativeDistance diff;
-
- compute_tmin_tmax_per_dim<0>::apply(p0, p1, box,
- t_min.first, t_max.first, diff);
-
- if ( geometry::math::equals(diff, 0) )
- {
- if ( geometry::math::equals(t_min.first, 0) ) { t_min.first = -1; }
- if ( geometry::math::equals(t_max.first, 0) ) { t_max.first = 1; }
-
- if (math::sign(t_min.first) * math::sign(t_max.first) > 0)
- {
- return true;
- }
- }
-
- if ( t_min.first > diff || t_max.first < 0 )
- {
- return true;
- }
-
- t_min.second = t_max.second = diff;
-
- return disjoint_segment_box_impl
- <
- RelativeDistance, SegmentPoint, Box, 1, Dimension
- >::apply(p0, p1, box, t_min, t_max);
- }
-};
-
-
-template
-<
- typename RelativeDistance,
- typename SegmentPoint,
- typename Box,
- std::size_t Dimension
->
-struct disjoint_segment_box_impl
- <
- RelativeDistance, SegmentPoint, Box, Dimension, Dimension
- >
-{
- template <typename RelativeDistancePair>
- static inline bool apply(SegmentPoint const&, SegmentPoint const&,
- Box const&,
- RelativeDistancePair&, RelativeDistancePair&)
- {
- return false;
- }
-};
-
-} // namespace detail
-
-// NOTE: This may be temporary place for this or corresponding strategy
-// It seems to be more appropriate to implement the opposite of it
-// e.g. intersection::segment_box because in disjoint() algorithm
-// other strategies that are used are intersection and covered_by strategies.
-struct segment_box
-{
- template <typename Segment, typename Box>
- struct point_in_geometry_strategy
- : services::default_strategy
- <
- typename point_type<Segment>::type,
- Box
- >
- {};
-
- template <typename Segment, typename Box>
- static inline typename point_in_geometry_strategy<Segment, Box>::type
- get_point_in_geometry_strategy()
- {
- typedef typename point_in_geometry_strategy<Segment, Box>::type strategy_type;
-
- return strategy_type();
- }
-
- template <typename Segment, typename Box>
- static inline bool apply(Segment const& segment, Box const& box)
- {
- assert_dimension_equal<Segment, Box>();
-
- typedef typename util::calculation_type::geometric::binary
- <
- Segment, Box, void
- >::type relative_distance_type;
-
- typedef typename point_type<Segment>::type segment_point_type;
- segment_point_type p0, p1;
- geometry::detail::assign_point_from_index<0>(segment, p0);
- geometry::detail::assign_point_from_index<1>(segment, p1);
-
- return detail::disjoint_segment_box_impl
- <
- relative_distance_type, segment_point_type, Box,
- 0, dimension<Box>::value
- >::apply(p0, p1, box);
- }
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-namespace services
-{
-
-template <typename Linear, typename Box, typename LinearTag>
-struct default_strategy<Linear, Box, LinearTag, box_tag, 1, 2, cartesian_tag, cartesian_tag>
-{
- typedef disjoint::segment_box type;
-};
-
-template <typename Box, typename Linear, typename LinearTag>
-struct default_strategy<Box, Linear, box_tag, LinearTag, 2, 1, cartesian_tag, cartesian_tag>
-{
- typedef disjoint::segment_box type;
-};
-
-
-} // namespace services
-
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}}}} // namespace boost::geometry::strategy::disjoint
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISJOINT_SEGMENT_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp
deleted file mode 100644
index b7127c834dd..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_projected_point.hpp
+++ /dev/null
@@ -1,278 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PROJECTED_POINT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PROJECTED_POINT_HPP
-
-
-#include <boost/concept_check.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/arithmetic/dot_product.hpp>
-
-#include <boost/geometry/strategies/tags.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/default_distance_result.hpp>
-#include <boost/geometry/strategies/cartesian/distance_pythagoras.hpp>
-
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-// Helper geometry (projected point on line)
-#include <boost/geometry/geometries/point.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace distance
-{
-
-/*!
-\brief Strategy for distance point to segment
-\ingroup strategies
-\details Calculates distance using projected-point method, and (optionally) Pythagoras
-\author Adapted from: http://geometryalgorithms.com/Archive/algorithm_0102/algorithm_0102.htm
-\tparam CalculationType \tparam_calculation
-\tparam Strategy underlying point-point distance strategy
-\par Concepts for Strategy:
-- cartesian_distance operator(Point,Point)
-\note If the Strategy is a "comparable::pythagoras", this strategy
- automatically is a comparable projected_point strategy (so without sqrt)
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
-}
-
-*/
-template
-<
- typename CalculationType = void,
- typename Strategy = pythagoras<CalculationType>
->
-class projected_point
-{
-public :
- // The three typedefs below are necessary to calculate distances
- // from segments defined in integer coordinates.
-
- // Integer coordinates can still result in FP distances.
- // There is a division, which must be represented in FP.
- // So promote.
- template <typename Point, typename PointOfSegment>
- struct calculation_type
- : promote_floating_point
- <
- typename strategy::distance::services::return_type
- <
- Strategy,
- Point,
- PointOfSegment
- >::type
- >
- {};
-
-public :
-
- template <typename Point, typename PointOfSegment>
- inline typename calculation_type<Point, PointOfSegment>::type
- apply(Point const& p, PointOfSegment const& p1, PointOfSegment const& p2) const
- {
- assert_dimension_equal<Point, PointOfSegment>();
-
- typedef typename calculation_type<Point, PointOfSegment>::type calculation_type;
-
- // A projected point of points in Integer coordinates must be able to be
- // represented in FP.
- typedef model::point
- <
- calculation_type,
- dimension<PointOfSegment>::value,
- typename coordinate_system<PointOfSegment>::type
- > fp_point_type;
-
- // For convenience
- typedef fp_point_type fp_vector_type;
-
- /*
- Algorithm [p: (px,py), p1: (x1,y1), p2: (x2,y2)]
- VECTOR v(x2 - x1, y2 - y1)
- VECTOR w(px - x1, py - y1)
- c1 = w . v
- c2 = v . v
- b = c1 / c2
- RETURN POINT(x1 + b * vx, y1 + b * vy)
- */
-
- // v is multiplied below with a (possibly) FP-value, so should be in FP
- // For consistency we define w also in FP
- fp_vector_type v, w, projected;
-
- geometry::convert(p2, v);
- geometry::convert(p, w);
- geometry::convert(p1, projected);
- subtract_point(v, projected);
- subtract_point(w, projected);
-
- Strategy strategy;
- boost::ignore_unused_variable_warning(strategy);
-
- calculation_type const zero = calculation_type();
- calculation_type const c1 = dot_product(w, v);
- if (c1 <= zero)
- {
- return strategy.apply(p, p1);
- }
- calculation_type const c2 = dot_product(v, v);
- if (c2 <= c1)
- {
- return strategy.apply(p, p2);
- }
-
- // See above, c1 > 0 AND c2 > c1 so: c2 != 0
- calculation_type const b = c1 / c2;
-
- multiply_value(v, b);
- add_point(projected, v);
-
- return strategy.apply(p, projected);
- }
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename CalculationType, typename Strategy>
-struct tag<projected_point<CalculationType, Strategy> >
-{
- typedef strategy_tag_distance_point_segment type;
-};
-
-
-template <typename CalculationType, typename Strategy, typename P, typename PS>
-struct return_type<projected_point<CalculationType, Strategy>, P, PS>
- : projected_point<CalculationType, Strategy>::template calculation_type<P, PS>
-{};
-
-
-
-template <typename CalculationType, typename Strategy>
-struct comparable_type<projected_point<CalculationType, Strategy> >
-{
- // Define a projected_point strategy with its underlying point-point-strategy
- // being comparable
- typedef projected_point
- <
- CalculationType,
- typename comparable_type<Strategy>::type
- > type;
-};
-
-
-template <typename CalculationType, typename Strategy>
-struct get_comparable<projected_point<CalculationType, Strategy> >
-{
- typedef typename comparable_type
- <
- projected_point<CalculationType, Strategy>
- >::type comparable_type;
-public :
- static inline comparable_type apply(projected_point<CalculationType, Strategy> const& )
- {
- return comparable_type();
- }
-};
-
-
-template <typename CalculationType, typename Strategy, typename P, typename PS>
-struct result_from_distance<projected_point<CalculationType, Strategy>, P, PS>
-{
-private :
- typedef typename return_type<projected_point<CalculationType, Strategy>, P, PS>::type return_type;
-public :
- template <typename T>
- static inline return_type apply(projected_point<CalculationType, Strategy> const& , T const& value)
- {
- Strategy s;
- return result_from_distance<Strategy, P, PS>::apply(s, value);
- }
-};
-
-
-// Get default-strategy for point-segment distance calculation
-// while still have the possibility to specify point-point distance strategy (PPS)
-// It is used in algorithms/distance.hpp where users specify PPS for distance
-// of point-to-segment or point-to-linestring.
-// Convenient for geographic coordinate systems especially.
-template <typename Point, typename PointOfSegment, typename Strategy>
-struct default_strategy
- <
- point_tag, segment_tag, Point, PointOfSegment,
- cartesian_tag, cartesian_tag, Strategy
- >
-{
- typedef strategy::distance::projected_point
- <
- void,
- typename boost::mpl::if_
- <
- boost::is_void<Strategy>,
- typename default_strategy
- <
- point_tag, point_tag, Point, PointOfSegment,
- cartesian_tag, cartesian_tag
- >::type,
- Strategy
- >::type
- > type;
-};
-
-template <typename PointOfSegment, typename Point, typename Strategy>
-struct default_strategy
- <
- segment_tag, point_tag, PointOfSegment, Point,
- cartesian_tag, cartesian_tag, Strategy
- >
-{
- typedef typename default_strategy
- <
- point_tag, segment_tag, Point, PointOfSegment,
- cartesian_tag, cartesian_tag, Strategy
- >::type type;
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PROJECTED_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp
deleted file mode 100644
index 7ff86c7cfae..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp
+++ /dev/null
@@ -1,314 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PROJECTED_POINT_AX_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PROJECTED_POINT_AX_HPP
-
-
-#include <algorithm>
-
-#include <boost/concept_check.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/arithmetic/dot_product.hpp>
-
-#include <boost/geometry/strategies/tags.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/default_distance_result.hpp>
-#include <boost/geometry/strategies/cartesian/distance_pythagoras.hpp>
-#include <boost/geometry/strategies/cartesian/distance_projected_point.hpp>
-
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-// Helper geometry (projected point on line)
-#include <boost/geometry/geometries/point.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace distance
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename T>
-struct projected_point_ax_result
-{
- typedef T value_type;
-
- projected_point_ax_result(T const& c = T(0))
- : atd(c), xtd(c)
- {}
-
- projected_point_ax_result(T const& a, T const& x)
- : atd(a), xtd(x)
- {}
-
- friend inline bool operator<(projected_point_ax_result const& left,
- projected_point_ax_result const& right)
- {
- return left.xtd < right.xtd || left.atd < right.atd;
- }
-
- T atd, xtd;
-};
-
-// This less-comparator may be used as a parameter of detail::douglas_peucker.
-// In this simplify strategy distances are compared in 2 places
-// 1. to choose the furthest candidate (md < dist)
-// 2. to check if the candidate is further than max_distance (max_distance < md)
-template <typename Distance>
-class projected_point_ax_less
-{
-public:
- projected_point_ax_less(Distance const& max_distance)
- : m_max_distance(max_distance)
- {}
-
- inline bool operator()(Distance const& left, Distance const& right) const
- {
- //return left.xtd < right.xtd && right.atd < m_max_distance.atd;
-
- typedef typename Distance::value_type value_type;
-
- value_type const lx = left.xtd > m_max_distance.xtd ? left.xtd - m_max_distance.xtd : 0;
- value_type const rx = right.xtd > m_max_distance.xtd ? right.xtd - m_max_distance.xtd : 0;
- value_type const la = left.atd > m_max_distance.atd ? left.atd - m_max_distance.atd : 0;
- value_type const ra = right.atd > m_max_distance.atd ? right.atd - m_max_distance.atd : 0;
-
- value_type const l = (std::max)(lx, la);
- value_type const r = (std::max)(rx, ra);
-
- return l < r;
- }
-private:
- Distance const& m_max_distance;
-};
-
-// This strategy returns 2-component Point/Segment distance.
-// The ATD (along track distance) is parallel to the Segment
-// and is a distance between Point projected into a line defined by a Segment and the nearest Segment's endpoint.
-// If the projected Point intersects the Segment the ATD is equal to 0.
-// The XTD (cross track distance) is perpendicular to the Segment
-// and is a distance between input Point and its projection.
-// If the Segment has length equal to 0, ATD and XTD has value equal
-// to the distance between the input Point and one of the Segment's endpoints.
-//
-// p3 p4
-// ^ 7
-// | /
-// p1<-----e========e----->p2
-//
-// p1: atd=D, xtd=0
-// p2: atd=D, xtd=0
-// p3: atd=0, xtd=D
-// p4: atd=D/2, xtd=D
-template
-<
- typename CalculationType = void,
- typename Strategy = pythagoras<CalculationType>
->
-class projected_point_ax
-{
-public :
- template <typename Point, typename PointOfSegment>
- struct calculation_type
- : public projected_point<CalculationType, Strategy>
- ::template calculation_type<Point, PointOfSegment>
- {};
-
- template <typename Point, typename PointOfSegment>
- struct result_type
- {
- typedef projected_point_ax_result
- <
- typename calculation_type<Point, PointOfSegment>::type
- > type;
- };
-
-public :
-
- template <typename Point, typename PointOfSegment>
- inline typename result_type<Point, PointOfSegment>::type
- apply(Point const& p, PointOfSegment const& p1, PointOfSegment const& p2) const
- {
- assert_dimension_equal<Point, PointOfSegment>();
-
- typedef typename calculation_type<Point, PointOfSegment>::type calculation_type;
-
- // A projected point of points in Integer coordinates must be able to be
- // represented in FP.
- typedef model::point
- <
- calculation_type,
- dimension<PointOfSegment>::value,
- typename coordinate_system<PointOfSegment>::type
- > fp_point_type;
-
- // For convenience
- typedef fp_point_type fp_vector_type;
-
- /*
- Algorithm [p: (px,py), p1: (x1,y1), p2: (x2,y2)]
- VECTOR v(x2 - x1, y2 - y1)
- VECTOR w(px - x1, py - y1)
- c1 = w . v
- c2 = v . v
- b = c1 / c2
- RETURN POINT(x1 + b * vx, y1 + b * vy)
- */
-
- // v is multiplied below with a (possibly) FP-value, so should be in FP
- // For consistency we define w also in FP
- fp_vector_type v, w, projected;
-
- geometry::convert(p2, v);
- geometry::convert(p, w);
- geometry::convert(p1, projected);
- subtract_point(v, projected);
- subtract_point(w, projected);
-
- Strategy strategy;
- boost::ignore_unused_variable_warning(strategy);
-
- typename result_type<Point, PointOfSegment>::type result;
-
- calculation_type const zero = calculation_type();
- calculation_type const c2 = dot_product(v, v);
- if ( math::equals(c2, zero) )
- {
- result.xtd = strategy.apply(p, projected);
- // assume that the 0-length segment is perpendicular to the Pt->ProjPt vector
- result.atd = 0;
- return result;
- }
-
- calculation_type const c1 = dot_product(w, v);
- calculation_type const b = c1 / c2;
- multiply_value(v, b);
- add_point(projected, v);
-
- result.xtd = strategy.apply(p, projected);
-
- if (c1 <= zero)
- {
- result.atd = strategy.apply(p1, projected);
- }
- else if (c2 <= c1)
- {
- result.atd = strategy.apply(p2, projected);
- }
- else
- {
- result.atd = 0;
- }
-
- return result;
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-
-template <typename CalculationType, typename Strategy>
-struct tag<detail::projected_point_ax<CalculationType, Strategy> >
-{
- typedef strategy_tag_distance_point_segment type;
-};
-
-
-template <typename CalculationType, typename Strategy, typename P, typename PS>
-struct return_type<detail::projected_point_ax<CalculationType, Strategy>, P, PS>
-{
- typedef typename detail::projected_point_ax<CalculationType, Strategy>
- ::template result_type<P, PS>::type type;
-};
-
-
-template <typename CalculationType, typename Strategy>
-struct comparable_type<detail::projected_point_ax<CalculationType, Strategy> >
-{
- // Define a projected_point strategy with its underlying point-point-strategy
- // being comparable
- typedef detail::projected_point_ax
- <
- CalculationType,
- typename comparable_type<Strategy>::type
- > type;
-};
-
-
-template <typename CalculationType, typename Strategy>
-struct get_comparable<detail::projected_point_ax<CalculationType, Strategy> >
-{
- typedef typename comparable_type
- <
- detail::projected_point_ax<CalculationType, Strategy>
- >::type comparable_type;
-public :
- static inline comparable_type apply(detail::projected_point_ax<CalculationType, Strategy> const& )
- {
- return comparable_type();
- }
-};
-
-
-template <typename CalculationType, typename Strategy, typename P, typename PS>
-struct result_from_distance<detail::projected_point_ax<CalculationType, Strategy>, P, PS>
-{
-private :
- typedef typename return_type<detail::projected_point_ax<CalculationType, Strategy>, P, PS>::type return_type;
-public :
- template <typename T>
- static inline return_type apply(detail::projected_point_ax<CalculationType, Strategy> const& , T const& value)
- {
- Strategy s;
- return_type ret;
- ret.atd = result_from_distance<Strategy, P, PS>::apply(s, value.atd);
- ret.xtd = result_from_distance<Strategy, P, PS>::apply(s, value.xtd);
- return ret;
- }
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PROJECTED_POINT_AX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp
deleted file mode 100644
index 8a8889dc991..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_pythagoras.hpp
+++ /dev/null
@@ -1,288 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_HPP
-
-
-#include <boost/geometry/core/access.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/calculation_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <size_t I, typename T>
-struct compute_pythagoras
-{
- template <typename Point1, typename Point2>
- static inline T apply(Point1 const& p1, Point2 const& p2)
- {
- T const c1 = boost::numeric_cast<T>(get<I-1>(p1));
- T const c2 = boost::numeric_cast<T>(get<I-1>(p2));
- T const d = c1 - c2;
- return d * d + compute_pythagoras<I-1, T>::apply(p1, p2);
- }
-};
-
-template <typename T>
-struct compute_pythagoras<0, T>
-{
- template <typename Point1, typename Point2>
- static inline T apply(Point1 const&, Point2 const&)
- {
- return boost::numeric_cast<T>(0);
- }
-};
-
-}
-#endif // DOXYGEN_NO_DETAIL
-
-
-namespace comparable
-{
-
-/*!
-\brief Strategy to calculate comparable distance between two points
-\ingroup strategies
-\tparam Point1 \tparam_first_point
-\tparam Point2 \tparam_second_point
-\tparam CalculationType \tparam_calculation
-*/
-template <typename CalculationType = void>
-class pythagoras
-{
-public :
-
- template <typename Point1, typename Point2>
- struct calculation_type
- : util::calculation_type::geometric::binary
- <
- Point1,
- Point2,
- CalculationType,
- double,
- double
- >
- {};
-
- template <typename Point1, typename Point2>
- static inline typename calculation_type<Point1, Point2>::type
- apply(Point1 const& p1, Point2 const& p2)
- {
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point1>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point2>) );
-
- // Calculate distance using Pythagoras
- // (Leave comment above for Doxygen)
-
- assert_dimension_equal<Point1, Point2>();
-
- return detail::compute_pythagoras
- <
- dimension<Point1>::value,
- typename calculation_type<Point1, Point2>::type
- >::apply(p1, p2);
- }
-};
-
-} // namespace comparable
-
-
-/*!
-\brief Strategy to calculate the distance between two points
-\ingroup strategies
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading Notes]
-[note Can be used for points with two\, three or more dimensions]
-[heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
-}
-
-*/
-template
-<
- typename CalculationType = void
->
-class pythagoras
-{
-public :
-
- template <typename P1, typename P2>
- struct calculation_type
- : util::calculation_type::geometric::binary
- <
- P1,
- P2,
- CalculationType,
- double,
- double // promote integer to double
- >
- {};
-
- /*!
- \brief applies the distance calculation using pythagoras
- \return the calculated distance (including taking the square root)
- \param p1 first point
- \param p2 second point
- */
- template <typename P1, typename P2>
- static inline typename calculation_type<P1, P2>::type
- apply(P1 const& p1, P2 const& p2)
- {
- // The cast is necessary for MSVC which considers sqrt __int64 as an ambiguous call
- return math::sqrt
- (
- boost::numeric_cast<typename calculation_type<P1, P2>::type>
- (
- comparable::pythagoras<CalculationType>::apply(p1, p2)
- )
- );
- }
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename CalculationType>
-struct tag<pythagoras<CalculationType> >
-{
- typedef strategy_tag_distance_point_point type;
-};
-
-
-template <typename CalculationType, typename P1, typename P2>
-struct return_type<distance::pythagoras<CalculationType>, P1, P2>
- : pythagoras<CalculationType>::template calculation_type<P1, P2>
-{};
-
-
-template <typename CalculationType>
-struct comparable_type<pythagoras<CalculationType> >
-{
- typedef comparable::pythagoras<CalculationType> type;
-};
-
-
-template <typename CalculationType>
-struct get_comparable<pythagoras<CalculationType> >
-{
- typedef comparable::pythagoras<CalculationType> comparable_type;
-public :
- static inline comparable_type apply(pythagoras<CalculationType> const& )
- {
- return comparable_type();
- }
-};
-
-
-template <typename CalculationType, typename Point1, typename Point2>
-struct result_from_distance<pythagoras<CalculationType>, Point1, Point2>
-{
-private :
- typedef typename return_type<pythagoras<CalculationType>, Point1, Point2>::type return_type;
-public :
- template <typename T>
- static inline return_type apply(pythagoras<CalculationType> const& , T const& value)
- {
- return return_type(value);
- }
-};
-
-
-// Specializations for comparable::pythagoras
-template <typename CalculationType>
-struct tag<comparable::pythagoras<CalculationType> >
-{
- typedef strategy_tag_distance_point_point type;
-};
-
-
-template <typename CalculationType, typename P1, typename P2>
-struct return_type<comparable::pythagoras<CalculationType>, P1, P2>
- : comparable::pythagoras<CalculationType>::template calculation_type<P1, P2>
-{};
-
-
-
-
-template <typename CalculationType>
-struct comparable_type<comparable::pythagoras<CalculationType> >
-{
- typedef comparable::pythagoras<CalculationType> type;
-};
-
-
-template <typename CalculationType>
-struct get_comparable<comparable::pythagoras<CalculationType> >
-{
- typedef comparable::pythagoras<CalculationType> comparable_type;
-public :
- static inline comparable_type apply(comparable::pythagoras<CalculationType> const& )
- {
- return comparable_type();
- }
-};
-
-
-template <typename CalculationType, typename Point1, typename Point2>
-struct result_from_distance<comparable::pythagoras<CalculationType>, Point1, Point2>
-{
-private :
- typedef typename return_type<comparable::pythagoras<CalculationType>, Point1, Point2>::type return_type;
-public :
- template <typename T>
- static inline return_type apply(comparable::pythagoras<CalculationType> const& , T const& value)
- {
- return_type const v = value;
- return v * v;
- }
-};
-
-
-template <typename Point1, typename Point2>
-struct default_strategy
- <
- point_tag, point_tag, Point1, Point2, cartesian_tag, cartesian_tag
- >
-{
- typedef pythagoras<> type;
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp
deleted file mode 100644
index 4c1b6539be6..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp
+++ /dev/null
@@ -1,338 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_BOX_BOX_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_BOX_BOX_HPP
-
-
-#include <boost/geometry/core/access.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/calculation_type.hpp>
-
-
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <std::size_t I>
-struct compute_pythagoras_box_box
-{
- template <typename Box1, typename Box2, typename T>
- static inline void apply(Box1 const& box1, Box2 const& box2, T& result)
- {
- T const b1_min_coord =
- boost::numeric_cast<T>(geometry::get<min_corner, I-1>(box1));
- T const b1_max_coord =
- boost::numeric_cast<T>(geometry::get<max_corner, I-1>(box1));
-
- T const b2_min_coord =
- boost::numeric_cast<T>(geometry::get<min_corner, I-1>(box2));
- T const b2_max_coord =
- boost::numeric_cast<T>(geometry::get<max_corner, I-1>(box2));
-
- if ( b1_max_coord < b2_min_coord )
- {
- T diff = b2_min_coord - b1_max_coord;
- result += diff * diff;
- }
- if ( b1_min_coord > b2_max_coord )
- {
- T diff = b1_min_coord - b2_max_coord;
- result += diff * diff;
- }
-
- compute_pythagoras_box_box<I-1>::apply(box1, box2, result);
- }
-};
-
-template <>
-struct compute_pythagoras_box_box<0>
-{
- template <typename Box1, typename Box2, typename T>
- static inline void apply(Box1 const&, Box2 const&, T&)
- {
- }
-};
-
-}
-#endif // DOXYGEN_NO_DETAIL
-
-
-namespace comparable
-{
-
-/*!
-\brief Strategy to calculate comparable distance between two boxes
-\ingroup strategies
-\tparam Box1 \tparam_first_box
-\tparam Box2 \tparam_second_box
-\tparam CalculationType \tparam_calculation
-*/
-template <typename CalculationType = void>
-class pythagoras_box_box
-{
-public :
-
- template <typename Box1, typename Box2>
- struct calculation_type
- {
- typedef typename util::calculation_type::geometric::binary
- <
- Box1,
- Box2,
- CalculationType
- >::type type;
- };
-
- template <typename Box1, typename Box2>
- static inline typename calculation_type<Box1, Box2>::type
- apply(Box1 const& box1, Box2 const& box2)
- {
- BOOST_CONCEPT_ASSERT
- ( (concepts::ConstPoint<typename point_type<Box1>::type>) );
- BOOST_CONCEPT_ASSERT
- ( (concepts::ConstPoint<typename point_type<Box2>::type>) );
-
- // Calculate distance using Pythagoras
- // (Leave comment above for Doxygen)
-
- assert_dimension_equal<Box1, Box2>();
-
- typename calculation_type<Box1, Box2>::type result(0);
-
- detail::compute_pythagoras_box_box
- <
- dimension<Box1>::value
- >::apply(box1, box2, result);
-
- return result;
- }
-};
-
-} // namespace comparable
-
-
-/*!
-\brief Strategy to calculate the distance between two boxes
-\ingroup strategies
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading Notes]
-[note Can be used for boxes with two\, three or more dimensions]
-[heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
-}
-
-*/
-template
-<
- typename CalculationType = void
->
-class pythagoras_box_box
-{
-public :
-
- template <typename Box1, typename Box2>
- struct calculation_type
- : util::calculation_type::geometric::binary
- <
- Box1,
- Box2,
- CalculationType,
- double,
- double // promote integer to double
- >
- {};
-
- /*!
- \brief applies the distance calculation using pythagoras_box_box
- \return the calculated distance (including taking the square root)
- \param box1 first box
- \param box2 second box
- */
- template <typename Box1, typename Box2>
- static inline typename calculation_type<Box1, Box2>::type
- apply(Box1 const& box1, Box2 const& box2)
- {
- // The cast is necessary for MSVC which considers sqrt __int64 as an ambiguous call
- return math::sqrt
- (
- boost::numeric_cast<typename calculation_type
- <
- Box1, Box2
- >::type>
- (
- comparable::pythagoras_box_box
- <
- CalculationType
- >::apply(box1, box2)
- )
- );
- }
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename CalculationType>
-struct tag<pythagoras_box_box<CalculationType> >
-{
- typedef strategy_tag_distance_box_box type;
-};
-
-
-template <typename CalculationType, typename Box1, typename Box2>
-struct return_type<distance::pythagoras_box_box<CalculationType>, Box1, Box2>
- : pythagoras_box_box<CalculationType>::template calculation_type<Box1, Box2>
-{};
-
-
-template <typename CalculationType>
-struct comparable_type<pythagoras_box_box<CalculationType> >
-{
- typedef comparable::pythagoras_box_box<CalculationType> type;
-};
-
-
-template <typename CalculationType>
-struct get_comparable<pythagoras_box_box<CalculationType> >
-{
- typedef comparable::pythagoras_box_box<CalculationType> comparable_type;
-public :
- static inline comparable_type
- apply(pythagoras_box_box<CalculationType> const& )
- {
- return comparable_type();
- }
-};
-
-
-template <typename CalculationType, typename Box1, typename Box2>
-struct result_from_distance<pythagoras_box_box<CalculationType>, Box1, Box2>
-{
-private:
- typedef typename return_type
- <
- pythagoras_box_box<CalculationType>, Box1, Box2
- >::type return_type;
-public:
- template <typename T>
- static inline return_type
- apply(pythagoras_box_box<CalculationType> const& , T const& value)
- {
- return return_type(value);
- }
-};
-
-
-// Specializations for comparable::pythagoras_box_box
-template <typename CalculationType>
-struct tag<comparable::pythagoras_box_box<CalculationType> >
-{
- typedef strategy_tag_distance_box_box type;
-};
-
-
-template <typename CalculationType, typename Box1, typename Box2>
-struct return_type<comparable::pythagoras_box_box<CalculationType>, Box1, Box2>
- : comparable::pythagoras_box_box
- <
- CalculationType
- >::template calculation_type<Box1, Box2>
-{};
-
-
-
-
-template <typename CalculationType>
-struct comparable_type<comparable::pythagoras_box_box<CalculationType> >
-{
- typedef comparable::pythagoras_box_box<CalculationType> type;
-};
-
-
-template <typename CalculationType>
-struct get_comparable<comparable::pythagoras_box_box<CalculationType> >
-{
- typedef comparable::pythagoras_box_box<CalculationType> comparable_type;
-public :
- static inline comparable_type apply(comparable_type const& )
- {
- return comparable_type();
- }
-};
-
-
-template <typename CalculationType, typename Box1, typename Box2>
-struct result_from_distance
- <
- comparable::pythagoras_box_box<CalculationType>, Box1, Box2
- >
-{
-private :
- typedef typename return_type
- <
- comparable::pythagoras_box_box<CalculationType>, Box1, Box2
- >::type return_type;
-public :
- template <typename T>
- static inline return_type
- apply(comparable::pythagoras_box_box<CalculationType> const&,
- T const& value)
- {
- return_type const v = value;
- return v * v;
- }
-};
-
-
-template <typename BoxPoint1, typename BoxPoint2>
-struct default_strategy
- <
- box_tag, box_tag, BoxPoint1, BoxPoint2, cartesian_tag, cartesian_tag
- >
-{
- typedef pythagoras_box_box<> type;
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_BOX_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp
deleted file mode 100644
index 8423d16a63e..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp
+++ /dev/null
@@ -1,349 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_POINT_BOX_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_POINT_BOX_HPP
-
-
-#include <boost/geometry/core/access.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/calculation_type.hpp>
-
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <size_t I>
-struct compute_pythagoras_point_box
-{
- template <typename Point, typename Box, typename T>
- static inline void apply(Point const& point, Box const& box, T& result)
- {
- T const p_coord = boost::numeric_cast<T>(geometry::get<I-1>(point));
- T const b_min_coord =
- boost::numeric_cast<T>(geometry::get<min_corner, I-1>(box));
- T const b_max_coord =
- boost::numeric_cast<T>(geometry::get<max_corner, I-1>(box));
-
- if ( p_coord < b_min_coord )
- {
- T diff = b_min_coord - p_coord;
- result += diff * diff;
- }
- if ( p_coord > b_max_coord )
- {
- T diff = p_coord - b_max_coord;
- result += diff * diff;
- }
-
- compute_pythagoras_point_box<I-1>::apply(point, box, result);
- }
-};
-
-template <>
-struct compute_pythagoras_point_box<0>
-{
- template <typename Point, typename Box, typename T>
- static inline void apply(Point const&, Box const&, T&)
- {
- }
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-namespace comparable
-{
-
-/*!
- \brief Strategy to calculate comparable distance between a point
- and a box
- \ingroup strategies
- \tparam Point \tparam_first_point
- \tparam Box \tparam_second_box
- \tparam CalculationType \tparam_calculation
-*/
-template <typename CalculationType = void>
-class pythagoras_point_box
-{
-public :
-
- template <typename Point, typename Box>
- struct calculation_type
- {
- typedef typename util::calculation_type::geometric::binary
- <
- Point, Box, CalculationType
- >::type type;
- };
-
- template <typename Point, typename Box>
- static inline typename calculation_type<Point, Box>::type
- apply(Point const& point, Box const& box)
- {
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point>) );
- BOOST_CONCEPT_ASSERT
- ( (concepts::ConstPoint<typename point_type<Box>::type>) );
-
- // Calculate distance using Pythagoras
- // (Leave comment above for Doxygen)
-
- assert_dimension_equal<Point, Box>();
-
- typename calculation_type<Point, Box>::type result(0);
-
- detail::compute_pythagoras_point_box
- <
- dimension<Point>::value
- >::apply(point, box, result);
-
- return result;
- }
-};
-
-} // namespace comparable
-
-
-/*!
-\brief Strategy to calculate the distance between a point and a box
-\ingroup strategies
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading Notes]
-[note Can be used for points and boxes with two\, three or more dimensions]
-[heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
-}
-
-*/
-template
-<
- typename CalculationType = void
->
-class pythagoras_point_box
-{
-public :
-
- template <typename Point, typename Box>
- struct calculation_type
- : util::calculation_type::geometric::binary
- <
- Point,
- Box,
- CalculationType,
- double,
- double // promote integer to double
- >
- {};
-
- /*!
- \brief applies the distance calculation using pythagoras
- \return the calculated distance (including taking the square root)
- \param point point
- \param box box
- */
- template <typename Point, typename Box>
- static inline typename calculation_type<Point, Box>::type
- apply(Point const& point, Box const& box)
- {
- // The cast is necessary for MSVC which considers sqrt __int64 as an ambiguous call
- return math::sqrt
- (
- boost::numeric_cast<typename calculation_type
- <
- Point, Box
- >::type>
- (
- comparable::pythagoras_point_box
- <
- CalculationType
- >::apply(point, box)
- )
- );
- }
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename CalculationType>
-struct tag<pythagoras_point_box<CalculationType> >
-{
- typedef strategy_tag_distance_point_box type;
-};
-
-
-template <typename CalculationType, typename Point, typename Box>
-struct return_type<distance::pythagoras_point_box<CalculationType>, Point, Box>
- : pythagoras_point_box
- <
- CalculationType
- >::template calculation_type<Point, Box>
-{};
-
-
-template <typename CalculationType>
-struct comparable_type<pythagoras_point_box<CalculationType> >
-{
- typedef comparable::pythagoras_point_box<CalculationType> type;
-};
-
-
-template <typename CalculationType>
-struct get_comparable<pythagoras_point_box<CalculationType> >
-{
- typedef comparable::pythagoras_point_box<CalculationType> comparable_type;
-public :
- static inline comparable_type
- apply(pythagoras_point_box<CalculationType> const& )
- {
- return comparable_type();
- }
-};
-
-
-template <typename CalculationType, typename Point, typename Box>
-struct result_from_distance<pythagoras_point_box<CalculationType>, Point, Box>
-{
-private :
- typedef typename return_type
- <
- pythagoras_point_box<CalculationType>, Point, Box
- >::type return_type;
-public :
- template <typename T>
- static inline return_type
- apply(pythagoras_point_box<CalculationType> const& , T const& value)
- {
- return return_type(value);
- }
-};
-
-
-// Specializations for comparable::pythagoras_point_box
-template <typename CalculationType>
-struct tag<comparable::pythagoras_point_box<CalculationType> >
-{
- typedef strategy_tag_distance_point_box type;
-};
-
-
-template <typename CalculationType, typename Point, typename Box>
-struct return_type
- <
- comparable::pythagoras_point_box<CalculationType>, Point, Box
- > : comparable::pythagoras_point_box
- <
- CalculationType
- >::template calculation_type<Point, Box>
-{};
-
-
-
-
-template <typename CalculationType>
-struct comparable_type<comparable::pythagoras_point_box<CalculationType> >
-{
- typedef comparable::pythagoras_point_box<CalculationType> type;
-};
-
-
-template <typename CalculationType>
-struct get_comparable<comparable::pythagoras_point_box<CalculationType> >
-{
- typedef comparable::pythagoras_point_box<CalculationType> comparable_type;
-public :
- static inline comparable_type apply(comparable_type const& )
- {
- return comparable_type();
- }
-};
-
-
-template <typename CalculationType, typename Point, typename Box>
-struct result_from_distance
- <
- comparable::pythagoras_point_box<CalculationType>, Point, Box
- >
-{
-private :
- typedef typename return_type
- <
- comparable::pythagoras_point_box<CalculationType>, Point, Box
- >::type return_type;
-public :
- template <typename T>
- static inline return_type
- apply(comparable::pythagoras_point_box<CalculationType> const& ,
- T const& value)
- {
- return_type const v = value;
- return v * v;
- }
-};
-
-
-template <typename Point, typename BoxPoint>
-struct default_strategy
- <
- point_tag, box_tag, Point, BoxPoint, cartesian_tag, cartesian_tag
- >
-{
- typedef pythagoras_point_box<> type;
-};
-
-template <typename BoxPoint, typename Point>
-struct default_strategy
- <
- box_tag, point_tag, BoxPoint, Point, cartesian_tag, cartesian_tag
- >
-{
- typedef typename default_strategy
- <
- point_tag, box_tag, Point, BoxPoint, cartesian_tag, cartesian_tag
- >::type type;
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_DISTANCE_PYTHAGORAS_POINT_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/envelope_segment.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/envelope_segment.hpp
deleted file mode 100644
index a591996b848..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/envelope_segment.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_ENVELOPE_SEGMENT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_ENVELOPE_SEGMENT_HPP
-
-
-#include <boost/geometry/algorithms/detail/envelope/segment.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/strategies/envelope.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace envelope
-{
-
-template
-<
- typename CalculationType = void
->
-class cartesian_segment
-{
-public :
-
- template <typename Point1, typename Point2, typename Box>
- inline void
- apply(Point1 const& point1, Point2 const& point2, Box& box) const
- {
- geometry::detail::envelope::envelope_one_segment
- <
- 0,
- dimension<Point1>::value
- >
- ::apply(point1,
- point2,
- box,
- strategy::envelope::cartesian_segment<CalculationType>());
- }
-
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-template <typename CalculationType>
-struct default_strategy<cartesian_tag, CalculationType>
-{
- typedef strategy::envelope::cartesian_segment<CalculationType> type;
-};
-
-}
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::envelope
-
-}} //namepsace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_ENVELOPE_SEGMENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/intersection.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/intersection.hpp
deleted file mode 100644
index 10fd73ba543..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/intersection.hpp
+++ /dev/null
@@ -1,751 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2013-2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014, 2016, 2017.
-// Modifications copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_INTERSECTION_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_INTERSECTION_HPP
-
-#include <algorithm>
-
-#include <boost/geometry/core/exception.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-#include <boost/geometry/geometries/concepts/segment_concept.hpp>
-
-#include <boost/geometry/arithmetic/determinant.hpp>
-#include <boost/geometry/algorithms/detail/assign_values.hpp>
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-#include <boost/geometry/algorithms/detail/recalculate.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/promote_integral.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-#include <boost/geometry/strategies/cartesian/area.hpp>
-#include <boost/geometry/strategies/cartesian/distance_pythagoras.hpp>
-#include <boost/geometry/strategies/cartesian/envelope_segment.hpp>
-#include <boost/geometry/strategies/cartesian/point_in_poly_winding.hpp>
-#include <boost/geometry/strategies/cartesian/side_by_triangle.hpp>
-#include <boost/geometry/strategies/covered_by.hpp>
-#include <boost/geometry/strategies/intersection.hpp>
-#include <boost/geometry/strategies/intersection_result.hpp>
-#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/strategies/side_info.hpp>
-#include <boost/geometry/strategies/within.hpp>
-
-#include <boost/geometry/policies/robustness/robust_point_type.hpp>
-#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
-
-
-#if defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS)
-# include <boost/geometry/io/wkt/write.hpp>
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace intersection
-{
-
-
-/*!
- \see http://mathworld.wolfram.com/Line-LineIntersection.html
- */
-template
-<
- typename CalculationType = void
->
-struct cartesian_segments
-{
- typedef side::side_by_triangle<CalculationType> side_strategy_type;
-
- static inline side_strategy_type get_side_strategy()
- {
- return side_strategy_type();
- }
-
- template <typename Geometry1, typename Geometry2>
- struct point_in_geometry_strategy
- {
- typedef strategy::within::cartesian_winding
- <
- typename point_type<Geometry1>::type,
- typename point_type<Geometry2>::type,
- CalculationType
- > type;
- };
-
- template <typename Geometry1, typename Geometry2>
- static inline typename point_in_geometry_strategy<Geometry1, Geometry2>::type
- get_point_in_geometry_strategy()
- {
- typedef typename point_in_geometry_strategy
- <
- Geometry1, Geometry2
- >::type strategy_type;
- return strategy_type();
- }
-
- template <typename Geometry>
- struct area_strategy
- {
- typedef area::cartesian
- <
- CalculationType
- > type;
- };
-
- template <typename Geometry>
- static inline typename area_strategy<Geometry>::type get_area_strategy()
- {
- typedef typename area_strategy<Geometry>::type strategy_type;
- return strategy_type();
- }
-
- template <typename Geometry>
- struct distance_strategy
- {
- typedef distance::pythagoras
- <
- CalculationType
- > type;
- };
-
- template <typename Geometry>
- static inline typename distance_strategy<Geometry>::type get_distance_strategy()
- {
- typedef typename distance_strategy<Geometry>::type strategy_type;
- return strategy_type();
- }
-
- typedef envelope::cartesian_segment<CalculationType>
- envelope_strategy_type;
-
- static inline envelope_strategy_type get_envelope_strategy()
- {
- return envelope_strategy_type();
- }
-
- template <typename CoordinateType, typename SegmentRatio>
- struct segment_intersection_info
- {
- private :
- typedef typename select_most_precise
- <
- CoordinateType, double
- >::type promoted_type;
-
- promoted_type comparable_length_a() const
- {
- return dx_a * dx_a + dy_a * dy_a;
- }
-
- promoted_type comparable_length_b() const
- {
- return dx_b * dx_b + dy_b * dy_b;
- }
-
- template <typename Point, typename Segment1, typename Segment2>
- void assign_a(Point& point, Segment1 const& a, Segment2 const& ) const
- {
- assign(point, a, dx_a, dy_a, robust_ra);
- }
- template <typename Point, typename Segment1, typename Segment2>
- void assign_b(Point& point, Segment1 const& , Segment2 const& b) const
- {
- assign(point, b, dx_b, dy_b, robust_rb);
- }
-
- template <typename Point, typename Segment>
- void assign(Point& point, Segment const& segment, CoordinateType const& dx, CoordinateType const& dy, SegmentRatio const& ratio) const
- {
- // Calculate the intersection point based on segment_ratio
- // Up to now, division was postponed. Here we divide using numerator/
- // denominator. In case of integer this results in an integer
- // division.
- BOOST_GEOMETRY_ASSERT(ratio.denominator() != 0);
-
- typedef typename promote_integral<CoordinateType>::type promoted_type;
-
- promoted_type const numerator
- = boost::numeric_cast<promoted_type>(ratio.numerator());
- promoted_type const denominator
- = boost::numeric_cast<promoted_type>(ratio.denominator());
- promoted_type const dx_promoted = boost::numeric_cast<promoted_type>(dx);
- promoted_type const dy_promoted = boost::numeric_cast<promoted_type>(dy);
-
- set<0>(point, get<0, 0>(segment) + boost::numeric_cast
- <
- CoordinateType
- >(numerator * dx_promoted / denominator));
- set<1>(point, get<0, 1>(segment) + boost::numeric_cast
- <
- CoordinateType
- >(numerator * dy_promoted / denominator));
- }
-
- public :
- template <typename Point, typename Segment1, typename Segment2>
- void calculate(Point& point, Segment1 const& a, Segment2 const& b) const
- {
- bool use_a = true;
-
- // Prefer one segment if one is on or near an endpoint
- bool const a_near_end = robust_ra.near_end();
- bool const b_near_end = robust_rb.near_end();
- if (a_near_end && ! b_near_end)
- {
- use_a = true;
- }
- else if (b_near_end && ! a_near_end)
- {
- use_a = false;
- }
- else
- {
- // Prefer shorter segment
- promoted_type const len_a = comparable_length_a();
- promoted_type const len_b = comparable_length_b();
- if (len_b < len_a)
- {
- use_a = false;
- }
- // else use_a is true but was already assigned like that
- }
-
- if (use_a)
- {
- assign_a(point, a, b);
- }
- else
- {
- assign_b(point, a, b);
- }
- }
-
- CoordinateType dx_a, dy_a;
- CoordinateType dx_b, dy_b;
- SegmentRatio robust_ra;
- SegmentRatio robust_rb;
- };
-
- template <typename D, typename W, typename ResultType>
- static inline void cramers_rule(D const& dx_a, D const& dy_a,
- D const& dx_b, D const& dy_b, W const& wx, W const& wy,
- // out:
- ResultType& d, ResultType& da)
- {
- // Cramers rule
- d = geometry::detail::determinant<ResultType>(dx_a, dy_a, dx_b, dy_b);
- da = geometry::detail::determinant<ResultType>(dx_b, dy_b, wx, wy);
- // Ratio is da/d , collinear if d == 0, intersecting if 0 <= r <= 1
- // IntersectionPoint = (x1 + r * dx_a, y1 + r * dy_a)
- }
-
-
- // Relate segments a and b
- template
- <
- typename Segment1,
- typename Segment2,
- typename Policy,
- typename RobustPolicy
- >
- static inline typename Policy::return_type
- apply(Segment1 const& a, Segment2 const& b,
- Policy const& policy, RobustPolicy const& robust_policy)
- {
- // type them all as in Segment1 - TODO reconsider this, most precise?
- typedef typename geometry::point_type<Segment1>::type point_type;
-
- typedef typename geometry::robust_point_type
- <
- point_type, RobustPolicy
- >::type robust_point_type;
-
- point_type a0, a1, b0, b1;
- robust_point_type a0_rob, a1_rob, b0_rob, b1_rob;
-
- detail::assign_point_from_index<0>(a, a0);
- detail::assign_point_from_index<1>(a, a1);
- detail::assign_point_from_index<0>(b, b0);
- detail::assign_point_from_index<1>(b, b1);
-
- geometry::recalculate(a0_rob, a0, robust_policy);
- geometry::recalculate(a1_rob, a1, robust_policy);
- geometry::recalculate(b0_rob, b0, robust_policy);
- geometry::recalculate(b1_rob, b1, robust_policy);
-
- return apply(a, b, policy, robust_policy, a0_rob, a1_rob, b0_rob, b1_rob);
- }
-
- // The main entry-routine, calculating intersections of segments a / b
- // NOTE: Robust* types may be the same as Segments' point types
- template
- <
- typename Segment1,
- typename Segment2,
- typename Policy,
- typename RobustPolicy,
- typename RobustPoint1,
- typename RobustPoint2
- >
- static inline typename Policy::return_type
- apply(Segment1 const& a, Segment2 const& b,
- Policy const&, RobustPolicy const& /*robust_policy*/,
- RobustPoint1 const& robust_a1, RobustPoint1 const& robust_a2,
- RobustPoint2 const& robust_b1, RobustPoint2 const& robust_b2)
- {
- BOOST_CONCEPT_ASSERT( (concepts::ConstSegment<Segment1>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstSegment<Segment2>) );
-
- using geometry::detail::equals::equals_point_point;
- bool const a_is_point = equals_point_point(robust_a1, robust_a2);
- bool const b_is_point = equals_point_point(robust_b1, robust_b2);
-
- if(a_is_point && b_is_point)
- {
- return equals_point_point(robust_a1, robust_b2)
- ? Policy::degenerate(a, true)
- : Policy::disjoint()
- ;
- }
-
- side_info sides;
- sides.set<0>(side_strategy_type::apply(robust_b1, robust_b2, robust_a1),
- side_strategy_type::apply(robust_b1, robust_b2, robust_a2));
-
- if (sides.same<0>())
- {
- // Both points are at same side of other segment, we can leave
- return Policy::disjoint();
- }
-
- sides.set<1>(side_strategy_type::apply(robust_a1, robust_a2, robust_b1),
- side_strategy_type::apply(robust_a1, robust_a2, robust_b2));
-
- if (sides.same<1>())
- {
- // Both points are at same side of other segment, we can leave
- return Policy::disjoint();
- }
-
- bool collinear = sides.collinear();
-
- typedef typename select_most_precise
- <
- typename geometry::coordinate_type<RobustPoint1>::type,
- typename geometry::coordinate_type<RobustPoint2>::type
- >::type robust_coordinate_type;
-
- typedef typename segment_ratio_type
- <
- typename geometry::point_type<Segment1>::type, // TODO: most precise point?
- RobustPolicy
- >::type ratio_type;
-
- segment_intersection_info
- <
- typename select_calculation_type<Segment1, Segment2, CalculationType>::type,
- ratio_type
- > sinfo;
-
- sinfo.dx_a = get<1, 0>(a) - get<0, 0>(a); // distance in x-dir
- sinfo.dx_b = get<1, 0>(b) - get<0, 0>(b);
- sinfo.dy_a = get<1, 1>(a) - get<0, 1>(a); // distance in y-dir
- sinfo.dy_b = get<1, 1>(b) - get<0, 1>(b);
-
- robust_coordinate_type const robust_dx_a = get<0>(robust_a2) - get<0>(robust_a1);
- robust_coordinate_type const robust_dx_b = get<0>(robust_b2) - get<0>(robust_b1);
- robust_coordinate_type const robust_dy_a = get<1>(robust_a2) - get<1>(robust_a1);
- robust_coordinate_type const robust_dy_b = get<1>(robust_b2) - get<1>(robust_b1);
-
- // r: ratio 0-1 where intersection divides A/B
- // (only calculated for non-collinear segments)
- if (! collinear)
- {
- robust_coordinate_type robust_da0, robust_da;
- robust_coordinate_type robust_db0, robust_db;
-
- cramers_rule(robust_dx_a, robust_dy_a, robust_dx_b, robust_dy_b,
- get<0>(robust_a1) - get<0>(robust_b1),
- get<1>(robust_a1) - get<1>(robust_b1),
- robust_da0, robust_da);
-
- cramers_rule(robust_dx_b, robust_dy_b, robust_dx_a, robust_dy_a,
- get<0>(robust_b1) - get<0>(robust_a1),
- get<1>(robust_b1) - get<1>(robust_a1),
- robust_db0, robust_db);
-
- math::detail::equals_factor_policy<robust_coordinate_type>
- policy(robust_dx_a, robust_dy_a, robust_dx_b, robust_dy_b);
- robust_coordinate_type const zero = 0;
- if (math::detail::equals_by_policy(robust_da0, zero, policy)
- || math::detail::equals_by_policy(robust_db0, zero, policy))
- {
- // If this is the case, no rescaling is done for FP precision.
- // We set it to collinear, but it indicates a robustness issue.
- sides.set<0>(0,0);
- sides.set<1>(0,0);
- collinear = true;
- }
- else
- {
- sinfo.robust_ra.assign(robust_da, robust_da0);
- sinfo.robust_rb.assign(robust_db, robust_db0);
- }
- }
-
- if (collinear)
- {
- std::pair<bool, bool> const collinear_use_first
- = is_x_more_significant(geometry::math::abs(robust_dx_a),
- geometry::math::abs(robust_dy_a),
- geometry::math::abs(robust_dx_b),
- geometry::math::abs(robust_dy_b),
- a_is_point, b_is_point);
-
- if (collinear_use_first.second)
- {
- // Degenerate cases: segments of single point, lying on other segment, are not disjoint
- // This situation is collinear too
-
- if (collinear_use_first.first)
- {
- return relate_collinear<0, Policy, ratio_type>(a, b,
- robust_a1, robust_a2, robust_b1, robust_b2,
- a_is_point, b_is_point);
- }
- else
- {
- // Y direction contains larger segments (maybe dx is zero)
- return relate_collinear<1, Policy, ratio_type>(a, b,
- robust_a1, robust_a2, robust_b1, robust_b2,
- a_is_point, b_is_point);
- }
- }
- }
-
- return Policy::segments_crosses(sides, sinfo, a, b);
- }
-
-private:
- // first is true if x is more significant
- // second is true if the more significant difference is not 0
- template <typename RobustCoordinateType>
- static inline std::pair<bool, bool>
- is_x_more_significant(RobustCoordinateType const& abs_robust_dx_a,
- RobustCoordinateType const& abs_robust_dy_a,
- RobustCoordinateType const& abs_robust_dx_b,
- RobustCoordinateType const& abs_robust_dy_b,
- bool const a_is_point,
- bool const b_is_point)
- {
- //BOOST_GEOMETRY_ASSERT_MSG(!(a_is_point && b_is_point), "both segments shouldn't be degenerated");
-
- // for degenerated segments the second is always true because this function
- // shouldn't be called if both segments were degenerated
-
- if (a_is_point)
- {
- return std::make_pair(abs_robust_dx_b >= abs_robust_dy_b, true);
- }
- else if (b_is_point)
- {
- return std::make_pair(abs_robust_dx_a >= abs_robust_dy_a, true);
- }
- else
- {
- RobustCoordinateType const min_dx = (std::min)(abs_robust_dx_a, abs_robust_dx_b);
- RobustCoordinateType const min_dy = (std::min)(abs_robust_dy_a, abs_robust_dy_b);
- return min_dx == min_dy ?
- std::make_pair(true, min_dx > RobustCoordinateType(0)) :
- std::make_pair(min_dx > min_dy, true);
- }
- }
-
- template
- <
- std::size_t Dimension,
- typename Policy,
- typename RatioType,
- typename Segment1,
- typename Segment2,
- typename RobustPoint1,
- typename RobustPoint2
- >
- static inline typename Policy::return_type
- relate_collinear(Segment1 const& a,
- Segment2 const& b,
- RobustPoint1 const& robust_a1, RobustPoint1 const& robust_a2,
- RobustPoint2 const& robust_b1, RobustPoint2 const& robust_b2,
- bool a_is_point, bool b_is_point)
- {
- if (a_is_point)
- {
- return relate_one_degenerate<Policy, RatioType>(a,
- get<Dimension>(robust_a1),
- get<Dimension>(robust_b1), get<Dimension>(robust_b2),
- true);
- }
- if (b_is_point)
- {
- return relate_one_degenerate<Policy, RatioType>(b,
- get<Dimension>(robust_b1),
- get<Dimension>(robust_a1), get<Dimension>(robust_a2),
- false);
- }
- return relate_collinear<Policy, RatioType>(a, b,
- get<Dimension>(robust_a1),
- get<Dimension>(robust_a2),
- get<Dimension>(robust_b1),
- get<Dimension>(robust_b2));
- }
-
- /// Relate segments known collinear
- template
- <
- typename Policy,
- typename RatioType,
- typename Segment1,
- typename Segment2,
- typename RobustType1,
- typename RobustType2
- >
- static inline typename Policy::return_type
- relate_collinear(Segment1 const& a, Segment2 const& b,
- RobustType1 oa_1, RobustType1 oa_2,
- RobustType2 ob_1, RobustType2 ob_2)
- {
- // Calculate the ratios where a starts in b, b starts in a
- // a1--------->a2 (2..7)
- // b1----->b2 (5..8)
- // length_a: 7-2=5
- // length_b: 8-5=3
- // b1 is located w.r.t. a at ratio: (5-2)/5=3/5 (on a)
- // b2 is located w.r.t. a at ratio: (8-2)/5=6/5 (right of a)
- // a1 is located w.r.t. b at ratio: (2-5)/3=-3/3 (left of b)
- // a2 is located w.r.t. b at ratio: (7-5)/3=2/3 (on b)
- // A arrives (a2 on b), B departs (b1 on a)
-
- // If both are reversed:
- // a2<---------a1 (7..2)
- // b2<-----b1 (8..5)
- // length_a: 2-7=-5
- // length_b: 5-8=-3
- // b1 is located w.r.t. a at ratio: (8-7)/-5=-1/5 (before a starts)
- // b2 is located w.r.t. a at ratio: (5-7)/-5=2/5 (on a)
- // a1 is located w.r.t. b at ratio: (7-8)/-3=1/3 (on b)
- // a2 is located w.r.t. b at ratio: (2-8)/-3=6/3 (after b ends)
-
- // If both one is reversed:
- // a1--------->a2 (2..7)
- // b2<-----b1 (8..5)
- // length_a: 7-2=+5
- // length_b: 5-8=-3
- // b1 is located w.r.t. a at ratio: (8-2)/5=6/5 (after a ends)
- // b2 is located w.r.t. a at ratio: (5-2)/5=3/5 (on a)
- // a1 is located w.r.t. b at ratio: (2-8)/-3=6/3 (after b ends)
- // a2 is located w.r.t. b at ratio: (7-8)/-3=1/3 (on b)
- RobustType1 const length_a = oa_2 - oa_1; // no abs, see above
- RobustType2 const length_b = ob_2 - ob_1;
-
- RatioType ra_from(oa_1 - ob_1, length_b);
- RatioType ra_to(oa_2 - ob_1, length_b);
- RatioType rb_from(ob_1 - oa_1, length_a);
- RatioType rb_to(ob_2 - oa_1, length_a);
-
- // use absolute measure to detect endpoints intersection
- // NOTE: it'd be possible to calculate bx_wrt_a using ax_wrt_b values
- int const a1_wrt_b = position_value(oa_1, ob_1, ob_2);
- int const a2_wrt_b = position_value(oa_2, ob_1, ob_2);
- int const b1_wrt_a = position_value(ob_1, oa_1, oa_2);
- int const b2_wrt_a = position_value(ob_2, oa_1, oa_2);
-
- // fix the ratios if necessary
- // CONSIDER: fixing ratios also in other cases, if they're inconsistent
- // e.g. if ratio == 1 or 0 (so IP at the endpoint)
- // but position value indicates that the IP is in the middle of the segment
- // because one of the segments is very long
- // In such case the ratios could be moved into the middle direction
- // by some small value (e.g. EPS+1ULP)
- if (a1_wrt_b == 1)
- {
- ra_from.assign(0, 1);
- rb_from.assign(0, 1);
- }
- else if (a1_wrt_b == 3)
- {
- ra_from.assign(1, 1);
- rb_to.assign(0, 1);
- }
-
- if (a2_wrt_b == 1)
- {
- ra_to.assign(0, 1);
- rb_from.assign(1, 1);
- }
- else if (a2_wrt_b == 3)
- {
- ra_to.assign(1, 1);
- rb_to.assign(1, 1);
- }
-
- if ((a1_wrt_b < 1 && a2_wrt_b < 1) || (a1_wrt_b > 3 && a2_wrt_b > 3))
- //if ((ra_from.left() && ra_to.left()) || (ra_from.right() && ra_to.right()))
- {
- return Policy::disjoint();
- }
-
- bool const opposite = math::sign(length_a) != math::sign(length_b);
-
- return Policy::segments_collinear(a, b, opposite,
- a1_wrt_b, a2_wrt_b, b1_wrt_a, b2_wrt_a,
- ra_from, ra_to, rb_from, rb_to);
- }
-
- /// Relate segments where one is degenerate
- template
- <
- typename Policy,
- typename RatioType,
- typename DegenerateSegment,
- typename RobustType1,
- typename RobustType2
- >
- static inline typename Policy::return_type
- relate_one_degenerate(DegenerateSegment const& degenerate_segment,
- RobustType1 d, RobustType2 s1, RobustType2 s2,
- bool a_degenerate)
- {
- // Calculate the ratios where ds starts in s
- // a1--------->a2 (2..6)
- // b1/b2 (4..4)
- // Ratio: (4-2)/(6-2)
- RatioType const ratio(d - s1, s2 - s1);
-
- if (!ratio.on_segment())
- {
- return Policy::disjoint();
- }
-
- return Policy::one_degenerate(degenerate_segment, ratio, a_degenerate);
- }
-
- template <typename ProjCoord1, typename ProjCoord2>
- static inline int position_value(ProjCoord1 const& ca1,
- ProjCoord2 const& cb1,
- ProjCoord2 const& cb2)
- {
- // S1x 0 1 2 3 4
- // S2 |---------->
- return math::equals(ca1, cb1) ? 1
- : math::equals(ca1, cb2) ? 3
- : cb1 < cb2 ?
- ( ca1 < cb1 ? 0
- : ca1 > cb2 ? 4
- : 2 )
- : ( ca1 > cb1 ? 0
- : ca1 < cb2 ? 4
- : 2 );
- }
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename CalculationType>
-struct default_strategy<cartesian_tag, CalculationType>
-{
- typedef cartesian_segments<CalculationType> type;
-};
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::intersection
-
-namespace strategy
-{
-
-namespace within { namespace services
-{
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, linear_tag, linear_tag, cartesian_tag, cartesian_tag>
-{
- typedef strategy::intersection::cartesian_segments<> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, linear_tag, polygonal_tag, cartesian_tag, cartesian_tag>
-{
- typedef strategy::intersection::cartesian_segments<> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, polygonal_tag, linear_tag, cartesian_tag, cartesian_tag>
-{
- typedef strategy::intersection::cartesian_segments<> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, polygonal_tag, polygonal_tag, cartesian_tag, cartesian_tag>
-{
- typedef strategy::intersection::cartesian_segments<> type;
-};
-
-}} // within::services
-
-namespace covered_by { namespace services
-{
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, linear_tag, linear_tag, cartesian_tag, cartesian_tag>
-{
- typedef strategy::intersection::cartesian_segments<> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, linear_tag, polygonal_tag, cartesian_tag, cartesian_tag>
-{
- typedef strategy::intersection::cartesian_segments<> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, polygonal_tag, linear_tag, cartesian_tag, cartesian_tag>
-{
- typedef strategy::intersection::cartesian_segments<> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, polygonal_tag, polygonal_tag, cartesian_tag, cartesian_tag>
-{
- typedef strategy::intersection::cartesian_segments<> type;
-};
-
-}} // within::services
-
-} // strategy
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_box.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_box.hpp
deleted file mode 100644
index 1c14125a6da..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_box.hpp
+++ /dev/null
@@ -1,295 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015-2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_BOX_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_BOX_HPP
-
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/strategies/covered_by.hpp>
-#include <boost/geometry/strategies/within.hpp>
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-
-
-namespace boost { namespace geometry { namespace strategy
-{
-
-namespace within
-{
-
-struct within_coord
-{
- template <typename Value1, typename Value2>
- static inline bool apply(Value1 const& value, Value2 const& min_value, Value2 const& max_value)
- {
- return value > min_value && value < max_value;
- }
-};
-
-struct covered_by_coord
-{
- template <typename Value1, typename Value2>
- static inline bool apply(Value1 const& value, Value2 const& min_value, Value2 const& max_value)
- {
- return value >= min_value && value <= max_value;
- }
-};
-
-template <typename Geometry, std::size_t Dimension, typename CSTag>
-struct within_range
- : within_coord
-{};
-
-
-template <typename Geometry, std::size_t Dimension, typename CSTag>
-struct covered_by_range
- : covered_by_coord
-{};
-
-
-// NOTE: the result would be the same if instead of structs defined below
-// the above xxx_range were used with the following arguments:
-// (min_value + diff_min, min_value, max_value)
-struct within_longitude_diff
-{
- template <typename CalcT>
- static inline bool apply(CalcT const& diff_min, CalcT const& min_value, CalcT const& max_value)
- {
- CalcT const c0 = 0;
- return diff_min > c0
- && (min_value + diff_min < max_value
- /*|| max_value - diff_min > min_value*/);
- }
-};
-
-struct covered_by_longitude_diff
-{
- template <typename CalcT>
- static inline bool apply(CalcT const& diff_min, CalcT const& min_value, CalcT const& max_value)
- {
- return min_value + diff_min <= max_value
- /*|| max_value - diff_min >= min_value*/;
- }
-};
-
-
-template <typename Geometry,
- typename CoordCheck,
- typename DiffCheck>
-struct longitude_range
-{
- template <typename Value1, typename Value2>
- static inline bool apply(Value1 const& value, Value2 const& min_value, Value2 const& max_value)
- {
- typedef typename select_most_precise
- <
- Value1, Value2
- >::type calc_t;
- typedef typename coordinate_system<Geometry>::type::units units_t;
- typedef math::detail::constants_on_spheroid<calc_t, units_t> constants;
-
- if (CoordCheck::apply(value, min_value, max_value))
- {
- return true;
- }
-
- // min <= max <=> diff >= 0
- calc_t const diff_ing = max_value - min_value;
-
- // if containing covers the whole globe it contains all
- if (diff_ing >= constants::period())
- {
- return true;
- }
-
- // calculate positive longitude translation with min_value as origin
- calc_t const diff_min = math::longitude_distance_unsigned<units_t, calc_t>(min_value, value);
-
- return DiffCheck::template apply<calc_t>(diff_min, min_value, max_value);
- }
-};
-
-
-// spherical_equatorial_tag, spherical_polar_tag and geographic_cat are casted to spherical_tag
-template <typename Geometry>
-struct within_range<Geometry, 0, spherical_tag>
- : longitude_range<Geometry, within_coord, within_longitude_diff>
-{};
-
-
-template <typename Geometry>
-struct covered_by_range<Geometry, 0, spherical_tag>
- : longitude_range<Geometry, covered_by_coord, covered_by_longitude_diff>
-{};
-
-
-template
-<
- template <typename, std::size_t, typename> class SubStrategy,
- typename Point,
- typename Box,
- std::size_t Dimension,
- std::size_t DimensionCount
->
-struct relate_point_box_loop
-{
- static inline bool apply(Point const& point, Box const& box)
- {
- typedef typename tag_cast<typename cs_tag<Point>::type, spherical_tag>::type cs_tag_t;
-
- if (! SubStrategy<Point, Dimension, cs_tag_t>::apply(get<Dimension>(point),
- get<min_corner, Dimension>(box),
- get<max_corner, Dimension>(box))
- )
- {
- return false;
- }
-
- return relate_point_box_loop
- <
- SubStrategy,
- Point, Box,
- Dimension + 1, DimensionCount
- >::apply(point, box);
- }
-};
-
-
-template
-<
- template <typename, std::size_t, typename> class SubStrategy,
- typename Point,
- typename Box,
- std::size_t DimensionCount
->
-struct relate_point_box_loop<SubStrategy, Point, Box, DimensionCount, DimensionCount>
-{
- static inline bool apply(Point const& , Box const& )
- {
- return true;
- }
-};
-
-
-template
-<
- typename Point,
- typename Box,
- template <typename, std::size_t, typename> class SubStrategy = within_range
->
-struct point_in_box
-{
- static inline bool apply(Point const& point, Box const& box)
- {
- return relate_point_box_loop
- <
- SubStrategy,
- Point, Box,
- 0, dimension<Point>::type::value
- >::apply(point, box);
- }
-};
-
-
-} // namespace within
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-namespace within { namespace services
-{
-
-template <typename Point, typename Box>
-struct default_strategy
- <
- Point, Box,
- point_tag, box_tag,
- pointlike_tag, areal_tag,
- cartesian_tag, cartesian_tag
- >
-{
- typedef within::point_in_box<Point, Box> type;
-};
-
-// spherical_equatorial_tag, spherical_polar_tag and geographic_cat are casted to spherical_tag
-template <typename Point, typename Box>
-struct default_strategy
- <
- Point, Box,
- point_tag, box_tag,
- pointlike_tag, areal_tag,
- spherical_tag, spherical_tag
- >
-{
- typedef within::point_in_box<Point, Box> type;
-};
-
-
-}} // namespace within::services
-
-
-namespace covered_by { namespace services
-{
-
-
-template <typename Point, typename Box>
-struct default_strategy
- <
- Point, Box,
- point_tag, box_tag,
- pointlike_tag, areal_tag,
- cartesian_tag, cartesian_tag
- >
-{
- typedef within::point_in_box
- <
- Point, Box,
- within::covered_by_range
- > type;
-};
-
-// spherical_equatorial_tag, spherical_polar_tag and geographic_cat are casted to spherical_tag
-template <typename Point, typename Box>
-struct default_strategy
- <
- Point, Box,
- point_tag, box_tag,
- pointlike_tag, areal_tag,
- spherical_tag, spherical_tag
- >
-{
- typedef within::point_in_box
- <
- Point, Box,
- within::covered_by_range
- > type;
-};
-
-
-}} // namespace covered_by::services
-
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}}} // namespace boost::geometry::strategy
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp
deleted file mode 100644
index 94da5cc6775..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp
+++ /dev/null
@@ -1,124 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_CROSSINGS_MULTIPLY_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_CROSSINGS_MULTIPLY_HPP
-
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace within
-{
-
-/*!
-\brief Within detection using cross counting,
-\ingroup strategies
-\tparam Point \tparam_point
-\tparam PointOfSegment \tparam_segment_point
-\tparam CalculationType \tparam_calculation
-\see http://tog.acm.org/resources/GraphicsGems/gemsiv/ptpoly_haines/ptinpoly.c
-\note Does NOT work correctly for point ON border
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)]
-}
- */
-
-template
-<
- typename Point,
- typename PointOfSegment = Point,
- typename CalculationType = void
->
-class crossings_multiply
-{
- typedef typename select_calculation_type
- <
- Point,
- PointOfSegment,
- CalculationType
- >::type calculation_type;
-
- class flags
- {
- bool inside_flag;
- bool first;
- bool yflag0;
-
- public :
-
- friend class crossings_multiply;
-
- inline flags()
- : inside_flag(false)
- , first(true)
- , yflag0(false)
- {}
- };
-
-public :
-
- typedef Point point_type;
- typedef PointOfSegment segment_point_type;
- typedef flags state_type;
-
- static inline bool apply(Point const& point,
- PointOfSegment const& seg1, PointOfSegment const& seg2,
- flags& state)
- {
- calculation_type const tx = get<0>(point);
- calculation_type const ty = get<1>(point);
- calculation_type const x0 = get<0>(seg1);
- calculation_type const y0 = get<1>(seg1);
- calculation_type const x1 = get<0>(seg2);
- calculation_type const y1 = get<1>(seg2);
-
- if (state.first)
- {
- state.first = false;
- state.yflag0 = y0 >= ty;
- }
-
-
- bool yflag1 = y1 >= ty;
- if (state.yflag0 != yflag1)
- {
- if ( ((y1-ty) * (x0-x1) >= (x1-tx) * (y0-y1)) == yflag1 )
- {
- state.inside_flag = ! state.inside_flag;
- }
- }
- state.yflag0 = yflag1;
- return true;
- }
-
- static inline int result(flags const& state)
- {
- return state.inside_flag ? 1 : -1;
- }
-};
-
-
-
-}} // namespace strategy::within
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_CROSSINGS_MULTIPLY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp
deleted file mode 100644
index a774d3c52dc..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp
+++ /dev/null
@@ -1,118 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_FRANKLIN_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_FRANKLIN_HPP
-
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace within
-{
-
-/*!
-\brief Within detection using cross counting
-\ingroup strategies
-\tparam Point \tparam_point
-\tparam PointOfSegment \tparam_segment_point
-\tparam CalculationType \tparam_calculation
-\author adapted from Randolph Franklin algorithm
-\author Barend and Maarten, 1995
-\author Revised for templatized library, Barend Gehrels, 2007
-\return true if point is in ring, works for closed rings in both directions
-\note Does NOT work correctly for point ON border
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)]
-}
- */
-
-template
-<
- typename Point,
- typename PointOfSegment = Point,
- typename CalculationType = void
->
-class franklin
-{
- typedef typename select_calculation_type
- <
- Point,
- PointOfSegment,
- CalculationType
- >::type calculation_type;
-
- /*! subclass to keep state */
- class crossings
- {
- bool crosses;
-
- public :
-
- friend class franklin;
- inline crossings()
- : crosses(false)
- {}
- };
-
-public :
-
- typedef Point point_type;
- typedef PointOfSegment segment_point_type;
- typedef crossings state_type;
-
- static inline bool apply(Point const& point,
- PointOfSegment const& seg1, PointOfSegment const& seg2,
- crossings& state)
- {
- calculation_type const& px = get<0>(point);
- calculation_type const& py = get<1>(point);
- calculation_type const& x1 = get<0>(seg1);
- calculation_type const& y1 = get<1>(seg1);
- calculation_type const& x2 = get<0>(seg2);
- calculation_type const& y2 = get<1>(seg2);
-
- if (
- ( (y2 <= py && py < y1) || (y1 <= py && py < y2) )
- && (px < (x1 - x2) * (py - y2) / (y1 - y2) + x2)
- )
- {
- state.crosses = ! state.crosses;
- }
- return true;
- }
-
- static inline int result(crossings const& state)
- {
- return state.crosses ? 1 : -1;
- }
-};
-
-
-
-}} // namespace strategy::within
-
-
-
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_POINT_IN_POLY_FRANKLIN_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_poly_winding.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_poly_winding.hpp
deleted file mode 100644
index c41bc9b83d6..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/point_in_poly_winding.hpp
+++ /dev/null
@@ -1,296 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014, 2016, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGY_CARTESIAN_POINT_IN_POLY_WINDING_HPP
-#define BOOST_GEOMETRY_STRATEGY_CARTESIAN_POINT_IN_POLY_WINDING_HPP
-
-
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-#include <boost/geometry/strategies/cartesian/side_by_triangle.hpp>
-#include <boost/geometry/strategies/covered_by.hpp>
-#include <boost/geometry/strategies/within.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace within
-{
-
-
-/*!
-\brief Within detection using winding rule in cartesian coordinate system.
-\ingroup strategies
-\tparam Point \tparam_point
-\tparam PointOfSegment \tparam_segment_point
-\tparam CalculationType \tparam_calculation
-\author Barend Gehrels
-\note The implementation is inspired by terralib http://www.terralib.org (LGPL)
-\note but totally revised afterwards, especially for cases on segments
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)]
-}
- */
-template
-<
- typename Point,
- typename PointOfSegment = Point,
- typename CalculationType = void
->
-class cartesian_winding
-{
- typedef side::side_by_triangle<CalculationType> side_strategy_type;
-
- typedef typename select_calculation_type
- <
- Point,
- PointOfSegment,
- CalculationType
- >::type calculation_type;
-
- /*! subclass to keep state */
- class counter
- {
- int m_count;
- bool m_touches;
-
- inline int code() const
- {
- return m_touches ? 0 : m_count == 0 ? -1 : 1;
- }
-
- public :
- friend class cartesian_winding;
-
- inline counter()
- : m_count(0)
- , m_touches(false)
- {}
-
- };
-
-public:
- typedef typename side_strategy_type::envelope_strategy_type envelope_strategy_type;
-
- static inline envelope_strategy_type get_envelope_strategy()
- {
- return side_strategy_type::get_envelope_strategy();
- }
-
- typedef typename side_strategy_type::disjoint_strategy_type disjoint_strategy_type;
-
- static inline disjoint_strategy_type get_disjoint_strategy()
- {
- return side_strategy_type::get_disjoint_strategy();
- }
-
- // Typedefs and static methods to fulfill the concept
- typedef Point point_type;
- typedef PointOfSegment segment_point_type;
- typedef counter state_type;
-
- static inline bool apply(Point const& point,
- PointOfSegment const& s1, PointOfSegment const& s2,
- counter& state)
- {
- bool eq1 = false;
- bool eq2 = false;
-
- int count = check_segment(point, s1, s2, state, eq1, eq2);
- if (count != 0)
- {
- int side = 0;
- if (count == 1 || count == -1)
- {
- side = side_equal(point, eq1 ? s1 : s2, count);
- }
- else // count == 2 || count == -2
- {
- // 1 left, -1 right
- side = side_strategy_type::apply(s1, s2, point);
- }
-
- if (side == 0)
- {
- // Point is lying on segment
- state.m_touches = true;
- state.m_count = 0;
- return false;
- }
-
- // Side is NEG for right, POS for left.
- // The count is -2 for left, 2 for right (or -1/1)
- // Side positive thus means RIGHT and LEFTSIDE or LEFT and RIGHTSIDE
- // See accompagnying figure (TODO)
- if (side * count > 0)
- {
- state.m_count += count;
- }
- }
- return ! state.m_touches;
- }
-
- static inline int result(counter const& state)
- {
- return state.code();
- }
-
-private:
- static inline int check_segment(Point const& point,
- PointOfSegment const& seg1,
- PointOfSegment const& seg2,
- counter& state,
- bool& eq1, bool& eq2)
- {
- if (check_touch(point, seg1, seg2, state, eq1, eq2))
- {
- return 0;
- }
-
- return calculate_count(point, seg1, seg2, eq1, eq2);
- }
-
- static inline bool check_touch(Point const& point,
- PointOfSegment const& seg1,
- PointOfSegment const& seg2,
- counter& state,
- bool& eq1, bool& eq2)
- {
- calculation_type const px = get<0>(point);
- calculation_type const s1x = get<0>(seg1);
- calculation_type const s2x = get<0>(seg2);
-
- eq1 = math::equals(s1x, px);
- eq2 = math::equals(s2x, px);
-
- // Both equal p -> segment vertical
- // The only thing which has to be done is check if point is ON segment
- if (eq1 && eq2)
- {
- calculation_type const py = get<1>(point);
- calculation_type const s1y = get<1>(seg1);
- calculation_type const s2y = get<1>(seg2);
- if ((s1y <= py && s2y >= py) || (s2y <= py && s1y >= py))
- {
- state.m_touches = true;
- }
- return true;
- }
- return false;
- }
-
- static inline int calculate_count(Point const& point,
- PointOfSegment const& seg1,
- PointOfSegment const& seg2,
- bool eq1, bool eq2)
- {
- calculation_type const p = get<0>(point);
- calculation_type const s1 = get<0>(seg1);
- calculation_type const s2 = get<0>(seg2);
-
- return eq1 ? (s2 > p ? 1 : -1) // Point on level s1, E/W depending on s2
- : eq2 ? (s1 > p ? -1 : 1) // idem
- : s1 < p && s2 > p ? 2 // Point between s1 -> s2 --> E
- : s2 < p && s1 > p ? -2 // Point between s2 -> s1 --> W
- : 0;
- }
-
- static inline int side_equal(Point const& point,
- PointOfSegment const& se,
- int count)
- {
- // NOTE: for D=0 the signs would be reversed
- return math::equals(get<1>(point), get<1>(se)) ?
- 0 :
- get<1>(point) < get<1>(se) ?
- // assuming count is equal to 1 or -1
- -count : // ( count > 0 ? -1 : 1) :
- count; // ( count > 0 ? 1 : -1) ;
- }
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-template <typename PointLike, typename Geometry, typename AnyTag1, typename AnyTag2>
-struct default_strategy<PointLike, Geometry, AnyTag1, AnyTag2, pointlike_tag, polygonal_tag, cartesian_tag, cartesian_tag>
-{
- typedef cartesian_winding
- <
- typename geometry::point_type<PointLike>::type,
- typename geometry::point_type<Geometry>::type
- > type;
-};
-
-template <typename PointLike, typename Geometry, typename AnyTag1, typename AnyTag2>
-struct default_strategy<PointLike, Geometry, AnyTag1, AnyTag2, pointlike_tag, linear_tag, cartesian_tag, cartesian_tag>
-{
- typedef cartesian_winding
- <
- typename geometry::point_type<PointLike>::type,
- typename geometry::point_type<Geometry>::type
- > type;
-};
-
-} // namespace services
-
-#endif
-
-
-}} // namespace strategy::within
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace strategy { namespace covered_by { namespace services
-{
-
-template <typename PointLike, typename Geometry, typename AnyTag1, typename AnyTag2>
-struct default_strategy<PointLike, Geometry, AnyTag1, AnyTag2, pointlike_tag, polygonal_tag, cartesian_tag, cartesian_tag>
-{
- typedef within::cartesian_winding
- <
- typename geometry::point_type<PointLike>::type,
- typename geometry::point_type<Geometry>::type
- > type;
-};
-
-template <typename PointLike, typename Geometry, typename AnyTag1, typename AnyTag2>
-struct default_strategy<PointLike, Geometry, AnyTag1, AnyTag2, pointlike_tag, linear_tag, cartesian_tag, cartesian_tag>
-{
- typedef within::cartesian_winding
- <
- typename geometry::point_type<PointLike>::type,
- typename geometry::point_type<Geometry>::type
- > type;
-};
-
-}}} // namespace strategy::covered_by::services
-#endif
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGY_CARTESIAN_POINT_IN_POLY_WINDING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp
deleted file mode 100644
index 91bbee7bb29..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/side_by_triangle.hpp
+++ /dev/null
@@ -1,282 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015, 2017.
-// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CARTESIAN_SIDE_BY_TRIANGLE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_SIDE_BY_TRIANGLE_HPP
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_integral.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-#include <boost/geometry/arithmetic/determinant.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-#include <boost/geometry/strategies/cartesian/disjoint_segment_box.hpp>
-#include <boost/geometry/strategies/cartesian/envelope_segment.hpp>
-#include <boost/geometry/strategies/compare.hpp>
-#include <boost/geometry/strategies/side.hpp>
-
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace side
-{
-
-/*!
-\brief Check at which side of a segment a point lies:
- left of segment (> 0), right of segment (< 0), on segment (0)
-\ingroup strategies
-\tparam CalculationType \tparam_calculation
- */
-template <typename CalculationType = void>
-class side_by_triangle
-{
- template <typename Policy>
- struct eps_policy
- {
- eps_policy() {}
- template <typename Type>
- eps_policy(Type const& a, Type const& b, Type const& c, Type const& d)
- : policy(a, b, c, d)
- {}
- Policy policy;
- };
-
- struct eps_empty
- {
- eps_empty() {}
- template <typename Type>
- eps_empty(Type const&, Type const&, Type const&, Type const&) {}
- };
-
-public :
- typedef strategy::envelope::cartesian_segment<CalculationType> envelope_strategy_type;
-
- static inline envelope_strategy_type get_envelope_strategy()
- {
- return envelope_strategy_type();
- }
-
- typedef strategy::disjoint::segment_box disjoint_strategy_type;
-
- static inline disjoint_strategy_type get_disjoint_strategy()
- {
- return disjoint_strategy_type();
- }
-
- // Template member function, because it is not always trivial
- // or convenient to explicitly mention the typenames in the
- // strategy-struct itself.
-
- // Types can be all three different. Therefore it is
- // not implemented (anymore) as "segment"
-
- template
- <
- typename CoordinateType,
- typename PromotedType,
- typename P1,
- typename P2,
- typename P,
- typename EpsPolicy
- >
- static inline
- PromotedType side_value(P1 const& p1, P2 const& p2, P const& p, EpsPolicy & eps_policy)
- {
- CoordinateType const x = get<0>(p);
- CoordinateType const y = get<1>(p);
-
- CoordinateType const sx1 = get<0>(p1);
- CoordinateType const sy1 = get<1>(p1);
- CoordinateType const sx2 = get<0>(p2);
- CoordinateType const sy2 = get<1>(p2);
-
- PromotedType const dx = sx2 - sx1;
- PromotedType const dy = sy2 - sy1;
- PromotedType const dpx = x - sx1;
- PromotedType const dpy = y - sy1;
-
- eps_policy = EpsPolicy(dx, dy, dpx, dpy);
-
- return geometry::detail::determinant<PromotedType>
- (
- dx, dy,
- dpx, dpy
- );
-
- }
-
- template
- <
- typename CoordinateType,
- typename PromotedType,
- typename P1,
- typename P2,
- typename P
- >
- static inline
- PromotedType side_value(P1 const& p1, P2 const& p2, P const& p)
- {
- eps_empty dummy;
- return side_value<CoordinateType, PromotedType>(p1, p2, p, dummy);
- }
-
-
- template
- <
- typename CoordinateType,
- typename PromotedType,
- bool AreAllIntegralCoordinates
- >
- struct compute_side_value
- {
- template <typename P1, typename P2, typename P, typename EpsPolicy>
- static inline PromotedType apply(P1 const& p1, P2 const& p2, P const& p, EpsPolicy & epsp)
- {
- return side_value<CoordinateType, PromotedType>(p1, p2, p, epsp);
- }
- };
-
- template <typename CoordinateType, typename PromotedType>
- struct compute_side_value<CoordinateType, PromotedType, false>
- {
- template <typename P1, typename P2, typename P, typename EpsPolicy>
- static inline PromotedType apply(P1 const& p1, P2 const& p2, P const& p, EpsPolicy & epsp)
- {
- // For robustness purposes, first check if any two points are
- // the same; in this case simply return that the points are
- // collinear
- if (geometry::detail::equals::equals_point_point(p1, p2)
- || geometry::detail::equals::equals_point_point(p1, p)
- || geometry::detail::equals::equals_point_point(p2, p))
- {
- return PromotedType(0);
- }
-
- // The side_by_triangle strategy computes the signed area of
- // the point triplet (p1, p2, p); as such it is (in theory)
- // invariant under cyclic permutations of its three arguments.
- //
- // In the context of numerical errors that arise in
- // floating-point computations, and in order to make the strategy
- // consistent with respect to cyclic permutations of its three
- // arguments, we cyclically permute them so that the first
- // argument is always the lexicographically smallest point.
-
- typedef compare::cartesian<compare::less> less;
-
- if (less::apply(p, p1))
- {
- if (less::apply(p, p2))
- {
- // p is the lexicographically smallest
- return side_value<CoordinateType, PromotedType>(p, p1, p2, epsp);
- }
- else
- {
- // p2 is the lexicographically smallest
- return side_value<CoordinateType, PromotedType>(p2, p, p1, epsp);
- }
- }
-
- if (less::apply(p1, p2))
- {
- // p1 is the lexicographically smallest
- return side_value<CoordinateType, PromotedType>(p1, p2, p, epsp);
- }
- else
- {
- // p2 is the lexicographically smallest
- return side_value<CoordinateType, PromotedType>(p2, p, p1, epsp);
- }
- }
- };
-
-
- template <typename P1, typename P2, typename P>
- static inline int apply(P1 const& p1, P2 const& p2, P const& p)
- {
- typedef typename coordinate_type<P1>::type coordinate_type1;
- typedef typename coordinate_type<P2>::type coordinate_type2;
- typedef typename coordinate_type<P>::type coordinate_type3;
-
- typedef typename boost::mpl::if_c
- <
- boost::is_void<CalculationType>::type::value,
- typename select_most_precise
- <
- typename select_most_precise
- <
- coordinate_type1, coordinate_type2
- >::type,
- coordinate_type3
- >::type,
- CalculationType
- >::type coordinate_type;
-
- // Promote float->double, small int->int
- typedef typename select_most_precise
- <
- coordinate_type,
- double
- >::type promoted_type;
-
- bool const are_all_integral_coordinates =
- boost::is_integral<coordinate_type1>::value
- && boost::is_integral<coordinate_type2>::value
- && boost::is_integral<coordinate_type3>::value;
-
- eps_policy< math::detail::equals_factor_policy<promoted_type> > epsp;
- promoted_type s = compute_side_value
- <
- coordinate_type, promoted_type, are_all_integral_coordinates
- >::apply(p1, p2, p, epsp);
-
- promoted_type const zero = promoted_type();
- return math::detail::equals_by_policy(s, zero, epsp.policy) ? 0
- : s > zero ? 1
- : -1;
- }
-
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename CalculationType>
-struct default_strategy<cartesian_tag, CalculationType>
-{
- typedef side_by_triangle<CalculationType> type;
-};
-
-}
-#endif
-
-}} // namespace strategy::side
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_SIDE_BY_TRIANGLE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/cartesian/side_of_intersection.hpp b/contrib/restricted/boost/boost/geometry/strategies/cartesian/side_of_intersection.hpp
deleted file mode 100644
index 6eb1ef99b19..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/cartesian/side_of_intersection.hpp
+++ /dev/null
@@ -1,353 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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(__GNUC__)
- #pragma GCC system_header
-#endif
-
-#ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_SIDE_OF_INTERSECTION_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_SIDE_OF_INTERSECTION_HPP
-
-
-#include <limits>
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/type_traits/is_integral.hpp>
-#include <boost/type_traits/make_unsigned.hpp>
-
-#include <boost/geometry/arithmetic/determinant.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/strategies/cartesian/side_by_triangle.hpp>
-#include <boost/geometry/util/math.hpp>
-
-#ifdef BOOST_GEOMETRY_SIDE_OF_INTERSECTION_DEBUG
-#include <boost/math/common_factor_ct.hpp>
-#include <boost/math/common_factor_rt.hpp>
-#include <boost/multiprecision/cpp_int.hpp>
-#endif
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace side
-{
-
-namespace detail
-{
-
-// A tool for multiplication of integers avoiding overflow
-// It's a temporary workaround until we can use Multiprecision
-// The algorithm is based on Karatsuba algorithm
-// see: http://en.wikipedia.org/wiki/Karatsuba_algorithm
-template <typename T>
-struct multiplicable_integral
-{
- // Currently this tool can't be used with non-integral coordinate types.
- // Also side_of_intersection strategy sign_of_product() and sign_of_compare()
- // functions would have to be modified to properly support floating-point
- // types (comparisons and multiplication).
- BOOST_STATIC_ASSERT(boost::is_integral<T>::value);
-
- static const std::size_t bits = CHAR_BIT * sizeof(T);
- static const std::size_t half_bits = bits / 2;
- typedef typename boost::make_unsigned<T>::type unsigned_type;
- static const unsigned_type base = unsigned_type(1) << half_bits; // 2^half_bits
-
- int m_sign;
- unsigned_type m_ms;
- unsigned_type m_ls;
-
- multiplicable_integral(int sign, unsigned_type ms, unsigned_type ls)
- : m_sign(sign), m_ms(ms), m_ls(ls)
- {}
-
- explicit multiplicable_integral(T const& val)
- {
- unsigned_type val_u = val > 0 ?
- unsigned_type(val)
- : val == (std::numeric_limits<T>::min)() ?
- unsigned_type((std::numeric_limits<T>::max)()) + 1
- : unsigned_type(-val);
- // MMLL -> S 00MM 00LL
- m_sign = math::sign(val);
- m_ms = val_u >> half_bits; // val_u / base
- m_ls = val_u - m_ms * base;
- }
-
- friend multiplicable_integral operator*(multiplicable_integral const& a,
- multiplicable_integral const& b)
- {
- // (S 00MM 00LL) * (S 00MM 00LL) -> (S Z2MM 00LL)
- unsigned_type z2 = a.m_ms * b.m_ms;
- unsigned_type z0 = a.m_ls * b.m_ls;
- unsigned_type z1 = (a.m_ms + a.m_ls) * (b.m_ms + b.m_ls) - z2 - z0;
- // z0 may be >= base so it must be normalized to allow comparison
- unsigned_type z0_ms = z0 >> half_bits; // z0 / base
- return multiplicable_integral(a.m_sign * b.m_sign,
- z2 * base + z1 + z0_ms,
- z0 - base * z0_ms);
- }
-
- friend bool operator<(multiplicable_integral const& a,
- multiplicable_integral const& b)
- {
- if ( a.m_sign == b.m_sign )
- {
- bool u_less = a.m_ms < b.m_ms
- || (a.m_ms == b.m_ms && a.m_ls < b.m_ls);
- return a.m_sign > 0 ? u_less : (! u_less);
- }
- else
- {
- return a.m_sign < b.m_sign;
- }
- }
-
- friend bool operator>(multiplicable_integral const& a,
- multiplicable_integral const& b)
- {
- return b < a;
- }
-
- template <typename CmpVal>
- void check_value(CmpVal const& cmp_val) const
- {
- unsigned_type b = base; // a workaround for MinGW - undefined reference base
- CmpVal val = CmpVal(m_sign) * (CmpVal(m_ms) * CmpVal(b) + CmpVal(m_ls));
- BOOST_GEOMETRY_ASSERT(cmp_val == val);
- }
-};
-
-} // namespace detail
-
-// Calculates the side of the intersection-point (if any) of
-// of segment a//b w.r.t. segment c
-// This is calculated without (re)calculating the IP itself again and fully
-// based on integer mathematics; there are no divisions
-// It can be used for either integer (rescaled) points, and also for FP
-class side_of_intersection
-{
-private :
- template <typename T, typename U>
- static inline
- int sign_of_product(T const& a, U const& b)
- {
- return a == 0 || b == 0 ? 0
- : a > 0 && b > 0 ? 1
- : a < 0 && b < 0 ? 1
- : -1;
- }
-
- template <typename T>
- static inline
- int sign_of_compare(T const& a, T const& b, T const& c, T const& d)
- {
- // Both a*b and c*d are positive
- // We have to judge if a*b > c*d
-
- using side::detail::multiplicable_integral;
- multiplicable_integral<T> ab = multiplicable_integral<T>(a)
- * multiplicable_integral<T>(b);
- multiplicable_integral<T> cd = multiplicable_integral<T>(c)
- * multiplicable_integral<T>(d);
-
- int result = ab > cd ? 1
- : ab < cd ? -1
- : 0
- ;
-
-#ifdef BOOST_GEOMETRY_SIDE_OF_INTERSECTION_DEBUG
- using namespace boost::multiprecision;
- cpp_int const lab = cpp_int(a) * cpp_int(b);
- cpp_int const lcd = cpp_int(c) * cpp_int(d);
-
- ab.check_value(lab);
- cd.check_value(lcd);
-
- int result2 = lab > lcd ? 1
- : lab < lcd ? -1
- : 0
- ;
- BOOST_GEOMETRY_ASSERT(result == result2);
-#endif
-
- return result;
- }
-
- template <typename T>
- static inline
- int sign_of_addition_of_two_products(T const& a, T const& b, T const& c, T const& d)
- {
- // sign of a*b+c*d, 1 if positive, -1 if negative, else 0
- int const ab = sign_of_product(a, b);
- int const cd = sign_of_product(c, d);
- if (ab == 0)
- {
- return cd;
- }
- if (cd == 0)
- {
- return ab;
- }
-
- if (ab == cd)
- {
- // Both positive or both negative
- return ab;
- }
-
- // One is positive, one is negative, both are non zero
- // If ab is positive, we have to judge if a*b > -c*d (then 1 because sum is positive)
- // If ab is negative, we have to judge if c*d > -a*b (idem)
- return ab == 1
- ? sign_of_compare(a, b, -c, d)
- : sign_of_compare(c, d, -a, b);
- }
-
-
-public :
-
- // Calculates the side of the intersection-point (if any) of
- // of segment a//b w.r.t. segment c
- // This is calculated without (re)calculating the IP itself again and fully
- // based on integer mathematics
- template <typename T, typename Segment, typename Point>
- static inline T side_value(Segment const& a, Segment const& b,
- Segment const& c, Point const& fallback_point)
- {
- // The first point of the three segments is reused several times
- T const ax = get<0, 0>(a);
- T const ay = get<0, 1>(a);
- T const bx = get<0, 0>(b);
- T const by = get<0, 1>(b);
- T const cx = get<0, 0>(c);
- T const cy = get<0, 1>(c);
-
- T const dx_a = get<1, 0>(a) - ax;
- T const dy_a = get<1, 1>(a) - ay;
-
- T const dx_b = get<1, 0>(b) - bx;
- T const dy_b = get<1, 1>(b) - by;
-
- T const dx_c = get<1, 0>(c) - cx;
- T const dy_c = get<1, 1>(c) - cy;
-
- // Cramer's rule: d (see cart_intersect.hpp)
- T const d = geometry::detail::determinant<T>
- (
- dx_a, dy_a,
- dx_b, dy_b
- );
-
- T const zero = T();
- if (d == zero)
- {
- // There is no IP of a//b, they are collinear or parallel
- // Assuming they intersect (this method should be called for
- // segments known to intersect), they are collinear and overlap.
- // They have one or two intersection points - we don't know and
- // have to rely on the fallback intersection point
-
- Point c1, c2;
- geometry::detail::assign_point_from_index<0>(c, c1);
- geometry::detail::assign_point_from_index<1>(c, c2);
- return side_by_triangle<>::apply(c1, c2, fallback_point);
- }
-
- // Cramer's rule: da (see cart_intersect.hpp)
- T const da = geometry::detail::determinant<T>
- (
- dx_b, dy_b,
- ax - bx, ay - by
- );
-
- // IP is at (ax + (da/d) * dx_a, ay + (da/d) * dy_a)
- // Side of IP is w.r.t. c is: determinant(dx_c, dy_c, ipx-cx, ipy-cy)
- // We replace ipx by expression above and multiply each term by d
-
-#ifdef BOOST_GEOMETRY_SIDE_OF_INTERSECTION_DEBUG
- T const result1 = geometry::detail::determinant<T>
- (
- dx_c * d, dy_c * d,
- d * (ax - cx) + dx_a * da, d * (ay - cy) + dy_a * da
- );
-
- // Note: result / (d * d)
- // is identical to the side_value of side_by_triangle
- // Therefore, the sign is always the same as that result, and the
- // resulting side (left,right,collinear) is the same
-
- // The first row we divide again by d because of determinant multiply rule
- T const result2 = d * geometry::detail::determinant<T>
- (
- dx_c, dy_c,
- d * (ax - cx) + dx_a * da, d * (ay - cy) + dy_a * da
- );
- // Write out:
- T const result3 = d * (dx_c * (d * (ay - cy) + dy_a * da)
- - dy_c * (d * (ax - cx) + dx_a * da));
- // Write out in braces:
- T const result4 = d * (dx_c * d * (ay - cy) + dx_c * dy_a * da
- - dy_c * d * (ax - cx) - dy_c * dx_a * da);
- // Write in terms of d * XX + da * YY
- T const result5 = d * (d * (dx_c * (ay - cy) - dy_c * (ax - cx))
- + da * (dx_c * dy_a - dy_c * dx_a));
-
- boost::ignore_unused(result1, result2, result3, result4, result5);
- //return result;
-#endif
-
- // We consider the results separately
- // (in the end we only have to return the side-value 1,0 or -1)
-
- // To avoid multiplications we judge the product (easy, avoids *d)
- // and the sign of p*q+r*s (more elaborate)
- T const result = sign_of_product
- (
- d,
- sign_of_addition_of_two_products
- (
- d, dx_c * (ay - cy) - dy_c * (ax - cx),
- da, dx_c * dy_a - dy_c * dx_a
- )
- );
- return result;
-
-
- }
-
- template <typename Segment, typename Point>
- static inline int apply(Segment const& a, Segment const& b,
- Segment const& c,
- Point const& fallback_point)
- {
- typedef typename geometry::coordinate_type<Segment>::type coordinate_type;
- coordinate_type const s = side_value<coordinate_type>(a, b, c, fallback_point);
- coordinate_type const zero = coordinate_type();
- return math::equals(s, zero) ? 0
- : s > zero ? 1
- : -1;
- }
-
-};
-
-
-}} // namespace strategy::side
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_SIDE_OF_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/centroid.hpp b/contrib/restricted/boost/boost/geometry/strategies/centroid.hpp
deleted file mode 100644
index 4963e6b40b7..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/centroid.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CENTROID_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CENTROID_HPP
-
-
-#include <cstddef>
-
-#include <boost/mpl/assert.hpp>
-
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/strategies/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace centroid
-{
-
-struct not_applicable_strategy
-{
-};
-
-
-namespace services
-{
-
-/*!
- \brief Traits class binding a centroid calculation strategy to a coordinate system
- \ingroup centroid
- \tparam CsTag tag of coordinate system, for specialization
- \tparam GeometryTag tag of geometry, for specialization
- \tparam Dimension dimension of geometry, for specialization
- \tparam Point point-type
- \tparam Geometry
-*/
-template
-<
- typename CsTag,
- typename GeometryTag,
- std::size_t Dimension,
- typename Point,
- typename Geometry
->
-struct default_strategy
-{
- typedef not_applicable_strategy type;
-};
-
-
-} // namespace services
-
-
-}} // namespace strategy::centroid
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CENTROID_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/comparable_distance_result.hpp b/contrib/restricted/boost/boost/geometry/strategies/comparable_distance_result.hpp
deleted file mode 100644
index 5ba9b1603d2..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/comparable_distance_result.hpp
+++ /dev/null
@@ -1,196 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_STRATEGIES_COMPARABLE_DISTANCE_RESULT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_COMPARABLE_DISTANCE_RESULT_HPP
-
-#include <boost/mpl/always.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/vector.hpp>
-
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-
-#include <boost/geometry/util/compress_variant.hpp>
-#include <boost/geometry/util/transform_variant.hpp>
-#include <boost/geometry/util/combine_if.hpp>
-
-#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace resolve_strategy
-{
-
-template <typename Geometry1, typename Geometry2, typename Strategy>
-struct comparable_distance_result
- : strategy::distance::services::return_type
- <
- typename strategy::distance::services::comparable_type
- <
- Strategy
- >::type,
- typename point_type<Geometry1>::type,
- typename point_type<Geometry2>::type
- >
-{};
-
-template <typename Geometry1, typename Geometry2>
-struct comparable_distance_result<Geometry1, Geometry2, default_strategy>
- : comparable_distance_result
- <
- Geometry1,
- Geometry2,
- typename detail::distance::default_strategy
- <
- Geometry1, Geometry2
- >::type
- >
-{};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry1, typename Geometry2, typename Strategy>
-struct comparable_distance_result
- : resolve_strategy::comparable_distance_result
- <
- Geometry1,
- Geometry2,
- Strategy
- >
-{};
-
-
-template
-<
- typename Geometry1,
- BOOST_VARIANT_ENUM_PARAMS(typename T),
- typename Strategy
->
-struct comparable_distance_result
- <
- Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Strategy
- >
-{
- // A set of all variant type combinations that are compatible and
- // implemented
- typedef typename util::combine_if<
- typename boost::mpl::vector1<Geometry1>,
- typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
- boost::mpl::always<boost::mpl::true_>
- >::type possible_input_types;
-
- // The (possibly variant) result type resulting from these combinations
- typedef typename compress_variant<
- typename transform_variant<
- possible_input_types,
- resolve_strategy::comparable_distance_result<
- boost::mpl::first<boost::mpl::_>,
- boost::mpl::second<boost::mpl::_>,
- Strategy
- >,
- boost::mpl::back_inserter<boost::mpl::vector0<> >
- >::type
- >::type type;
-};
-
-
-// Distance arguments are commutative
-template
-<
- BOOST_VARIANT_ENUM_PARAMS(typename T),
- typename Geometry2,
- typename Strategy
->
-struct comparable_distance_result
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Geometry2,
- Strategy
- > : public comparable_distance_result
- <
- Geometry2, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Strategy
- >
-{};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Strategy>
-struct comparable_distance_result
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Strategy
- >
-{
- // A set of all variant type combinations that are compatible and
- // implemented
- typedef typename util::combine_if
- <
- typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
- typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
- boost::mpl::always<boost::mpl::true_>
- >::type possible_input_types;
-
- // The (possibly variant) result type resulting from these combinations
- typedef typename compress_variant<
- typename transform_variant<
- possible_input_types,
- resolve_strategy::comparable_distance_result<
- boost::mpl::first<boost::mpl::_>,
- boost::mpl::second<boost::mpl::_>,
- Strategy
- >,
- boost::mpl::back_inserter<boost::mpl::vector0<> >
- >::type
- >::type type;
-};
-
-} // namespace resolve_variant
-
-
-
-
-
-/*!
-\brief Meta-function defining return type of comparable_distance function
-\ingroup distance
-*/
-template
-<
- typename Geometry1,
- typename Geometry2 = Geometry1,
- typename Strategy = void
->
-struct comparable_distance_result
- : resolve_variant::comparable_distance_result
- <
- Geometry1, Geometry2, Strategy
- >
-{};
-
-template <typename Geometry1, typename Geometry2>
-struct comparable_distance_result<Geometry1, Geometry2, void>
- : comparable_distance_result<Geometry1, Geometry2, default_strategy>
-{};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_COMPARABLE_DISTANCE_RESULT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/compare.hpp b/contrib/restricted/boost/boost/geometry/strategies/compare.hpp
deleted file mode 100644
index b196b75ec26..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/compare.hpp
+++ /dev/null
@@ -1,226 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_COMPARE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_COMPARE_HPP
-
-
-#include <cstddef>
-#include <functional>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/min.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace compare
-{
-
-
-struct less
-{
- template <typename T1, typename T2>
- static inline bool apply(T1 const& l, T2 const& r)
- {
- return l < r;
- }
-};
-
-struct greater
-{
- template <typename T1, typename T2>
- static inline bool apply(T1 const& l, T2 const& r)
- {
- return l > r;
- }
-};
-
-struct equal_to
-{
- template <typename T1, typename T2>
- static inline bool apply(T1 const& , T2 const& )
- {
- return false;
- }
-};
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-template
-<
- typename ComparePolicy,
- std::size_t Dimension,
- std::size_t DimensionCount
->
-struct compare_loop
-{
- template <typename Point1, typename Point2>
- static inline bool apply(Point1 const& left, Point2 const& right)
- {
- typename geometry::coordinate_type<Point1>::type const&
- cleft = geometry::get<Dimension>(left);
- typename geometry::coordinate_type<Point2>::type const&
- cright = geometry::get<Dimension>(right);
-
- if (math::equals(cleft, cright))
- {
- return compare_loop
- <
- ComparePolicy,
- Dimension + 1, DimensionCount
- >::apply(left, right);
- }
- else
- {
- return ComparePolicy::apply(cleft, cright);
- }
- }
-};
-
-template
-<
- typename ComparePolicy,
- std::size_t DimensionCount
->
-struct compare_loop<ComparePolicy, DimensionCount, DimensionCount>
-{
- template <typename Point1, typename Point2>
- static inline bool apply(Point1 const& , Point2 const& )
- {
- // On coming here, points are equal.
- // Return false for less/greater.
- return false;
- }
-};
-
-template
-<
- std::size_t DimensionCount
->
-struct compare_loop<strategy::compare::equal_to, DimensionCount, DimensionCount>
-{
- template <typename Point1, typename Point2>
- static inline bool apply(Point1 const& , Point2 const& )
- {
- // On coming here, points are equal.
- // Return true for equal_to.
- return true;
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-template
-<
- typename ComparePolicy,
- int Dimension = -1
->
-struct cartesian
-{
- template <typename Point1, typename Point2>
- static inline bool apply(Point1 const& left, Point2 const& right)
- {
- return compare::detail::compare_loop
- <
- ComparePolicy, Dimension, Dimension + 1
- >::apply(left, right);
- }
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-template
-<
- typename ComparePolicy
->
-struct cartesian<ComparePolicy, -1>
-{
- template <typename Point1, typename Point2>
- static inline bool apply(Point1 const& left, Point2 const& right)
- {
- return compare::detail::compare_loop
- <
- ComparePolicy,
- 0,
- boost::mpl::min
- <
- geometry::dimension<Point1>,
- geometry::dimension<Point2>
- >::type::value
- >::apply(left, right);
- }
-};
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-
-template
-<
- typename ComparePolicy,
- typename Point1,
- typename Point2 = Point1,
- int Dimension = -1,
- typename CSTag1 = typename cs_tag<Point1>::type,
- typename CSTag2 = typename cs_tag<Point2>::type
->
-struct default_strategy
-{
- BOOST_MPL_ASSERT_MSG
- (
- false,
- NOT_IMPLEMENTED_FOR_THESE_TYPES,
- (types<CSTag1, CSTag2>)
- );
-};
-
-
-template <typename ComparePolicy, typename Point1, typename Point2, int Dimension>
-struct default_strategy<ComparePolicy, Point1, Point2, Dimension, cartesian_tag, cartesian_tag>
-{
- typedef compare::cartesian<ComparePolicy, Dimension> type;
-};
-
-
-} // namespace services
-
-
-}} // namespace strategy compare
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_COMPARE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/concepts/area_concept.hpp b/contrib/restricted/boost/boost/geometry/strategies/concepts/area_concept.hpp
deleted file mode 100644
index 66982e3f272..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/concepts/area_concept.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CONCEPTS_AREA_CONCEPT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_AREA_CONCEPT_HPP
-
-
-#include <boost/concept_check.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
- \brief Checks strategy for area
- \ingroup area
-*/
-template <typename Geometry, typename Strategy>
-class AreaStrategy
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-
- // 1) must define state template,
- typedef typename Strategy::template state<Geometry> state_type;
-
- // 2) must define result_type template,
- typedef typename Strategy::template result_type<Geometry>::type return_type;
-
- struct check_methods
- {
- static void apply()
- {
- Strategy const* str = 0;
- state_type *st = 0;
-
- // 3) must implement a method apply with the following signature
- typename geometry::point_type<Geometry>::type const* sp = 0;
- str->apply(*sp, *sp, *st);
-
- // 4) must implement a static method result with the following signature
- return_type r = str->result(*st);
-
- boost::ignore_unused_variable_warning(r);
- boost::ignore_unused_variable_warning(str);
- }
- };
-
-public :
- BOOST_CONCEPT_USAGE(AreaStrategy)
- {
- check_methods::apply();
- }
-
-#endif
-};
-
-
-}}} // namespace boost::geometry::concepts
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_AREA_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/concepts/centroid_concept.hpp b/contrib/restricted/boost/boost/geometry/strategies/concepts/centroid_concept.hpp
deleted file mode 100644
index 0bbe94ba776..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/concepts/centroid_concept.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CONCEPTS_CENTROID_CONCEPT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_CENTROID_CONCEPT_HPP
-
-
-
-#include <boost/concept_check.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
- \brief Checks strategy for centroid
- \ingroup centroid
-*/
-template <typename Strategy>
-class CentroidStrategy
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-
- // 1) must define state_type,
- typedef typename Strategy::state_type state_type;
-
- // 2) must define point_type,
- typedef typename Strategy::point_type point_type;
-
- // 3) must define point_type, of polygon (segments)
- typedef typename Strategy::segment_point_type spoint_type;
-
- struct check_methods
- {
- static void apply()
- {
- Strategy *str = 0;
- state_type *st = 0;
-
- // 4) must implement a static method apply,
- // getting two segment-points
- spoint_type const* sp = 0;
- str->apply(*sp, *sp, *st);
-
- // 5) must implement a static method result
- // getting the centroid
- point_type *c = 0;
- bool r = str->result(*st, *c);
-
- boost::ignore_unused_variable_warning(str);
- boost::ignore_unused_variable_warning(r);
- }
- };
-
-public :
- BOOST_CONCEPT_USAGE(CentroidStrategy)
- {
- check_methods::apply();
- }
-#endif
-};
-
-
-}}} // namespace boost::geometry::concepts
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_CENTROID_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp b/contrib/restricted/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp
deleted file mode 100644
index d4295ce47b8..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/concepts/convex_hull_concept.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CONCEPTS_CONVEX_HULL_CONCEPT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_CONVEX_HULL_CONCEPT_HPP
-
-
-#include <vector>
-
-#include <boost/concept_check.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
- \brief Checks strategy for convex_hull
- \ingroup convex_hull
-*/
-template <typename Strategy>
-class ConvexHullStrategy
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-
- // 1) must define state_type
- typedef typename Strategy::state_type state_type;
-
- // 2) must define point_type
- typedef typename Strategy::point_type point_type;
-
- // 3) must define geometry_type
- typedef typename Strategy::geometry_type geometry_type;
-
- struct check_methods
- {
- static void apply()
- {
- Strategy const* str = 0;
-
- state_type* st = 0;
- geometry_type* sp = 0;
- std::vector<point_type> *v = 0;
-
- // 4) must implement a method apply, iterating over a range
- str->apply(*sp, *st);
-
- // 5) must implement a method result, with an output iterator
- str->result(*st, std::back_inserter(*v), true, true);
- }
- };
-
-public :
- BOOST_CONCEPT_USAGE(ConvexHullStrategy)
- {
- check_methods::apply();
- }
-#endif
-};
-
-
-}}} // namespace boost::geometry::concepts
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_CONVEX_HULL_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/concepts/distance_concept.hpp b/contrib/restricted/boost/boost/geometry/strategies/concepts/distance_concept.hpp
deleted file mode 100644
index 0064d438d59..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/concepts/distance_concept.hpp
+++ /dev/null
@@ -1,212 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CONCEPTS_DISTANCE_CONCEPT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_DISTANCE_CONCEPT_HPP
-
-#include <vector>
-#include <iterator>
-
-#include <boost/concept_check.hpp>
-#include <boost/core/ignore_unused.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/util/parameter_type_of.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-#include <boost/geometry/geometries/segment.hpp>
-#include <boost/geometry/geometries/point.hpp>
-
-#include <boost/geometry/strategies/tags.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
- \brief Checks strategy for point-point or point-box or box-box distance
- \ingroup distance
-*/
-template <typename Strategy, typename Point1, typename Point2>
-struct PointDistanceStrategy
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-private :
-
- struct checker
- {
- template <typename ApplyMethod>
- static void apply(ApplyMethod)
- {
- // 1: inspect and define both arguments of apply
- typedef typename parameter_type_of
- <
- ApplyMethod, 0
- >::type ptype1;
-
- typedef typename parameter_type_of
- <
- ApplyMethod, 1
- >::type ptype2;
-
- // 2) must define meta-function "return_type"
- typedef typename strategy::distance::services::return_type
- <
- Strategy, ptype1, ptype2
- >::type rtype;
-
- // 3) must define meta-function "comparable_type"
- typedef typename strategy::distance::services::comparable_type
- <
- Strategy
- >::type ctype;
-
- // 4) must define meta-function "tag"
- typedef typename strategy::distance::services::tag
- <
- Strategy
- >::type tag;
-
- static const bool is_correct_strategy_tag =
- boost::is_same<tag, strategy_tag_distance_point_point>::value
- || boost::is_same<tag, strategy_tag_distance_point_box>::value
- || boost::is_same<tag, strategy_tag_distance_box_box>::value;
-
- BOOST_MPL_ASSERT_MSG
- ((is_correct_strategy_tag),
- INCORRECT_STRATEGY_TAG,
- (types<tag>));
-
- // 5) must implement apply with arguments
- Strategy* str = 0;
- ptype1 *p1 = 0;
- ptype2 *p2 = 0;
- rtype r = str->apply(*p1, *p2);
-
- // 6) must define (meta)struct "get_comparable" with apply
- ctype c = strategy::distance::services::get_comparable
- <
- Strategy
- >::apply(*str);
-
- // 7) must define (meta)struct "result_from_distance" with apply
- r = strategy::distance::services::result_from_distance
- <
- Strategy,
- ptype1, ptype2
- >::apply(*str, 1.0);
-
- boost::ignore_unused<tag>();
- boost::ignore_unused(str, c, r);
- }
- };
-
-
-
-public :
- BOOST_CONCEPT_USAGE(PointDistanceStrategy)
- {
- checker::apply(&Strategy::template apply<Point1, Point2>);
- }
-#endif
-};
-
-
-/*!
- \brief Checks strategy for point-segment distance
- \ingroup strategy_concepts
-*/
-template <typename Strategy, typename Point, typename PointOfSegment>
-struct PointSegmentDistanceStrategy
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-private :
-
- struct checker
- {
- template <typename ApplyMethod>
- static void apply(ApplyMethod)
- {
- // 1) inspect and define both arguments of apply
- typedef typename parameter_type_of
- <
- ApplyMethod, 0
- >::type ptype;
-
- typedef typename parameter_type_of
- <
- ApplyMethod, 1
- >::type sptype;
-
- namespace services = strategy::distance::services;
- // 2) must define meta-function "tag"
- typedef typename services::tag<Strategy>::type tag;
-
- BOOST_MPL_ASSERT_MSG
- ((boost::is_same
- <
- tag, strategy_tag_distance_point_segment
- >::value),
- INCORRECT_STRATEGY_TAG,
- (types<tag>));
-
- // 3) must define meta-function "return_type"
- typedef typename services::return_type
- <
- Strategy, ptype, sptype
- >::type rtype;
-
- // 4) must define meta-function "comparable_type"
- typedef typename services::comparable_type<Strategy>::type ctype;
-
- // 5) must implement apply with arguments
- Strategy *str = 0;
- ptype *p = 0;
- sptype *sp1 = 0;
- sptype *sp2 = 0;
-
- rtype r = str->apply(*p, *sp1, *sp2);
-
- // 6) must define (meta-)struct "get_comparable" with apply
- ctype cstrategy = services::get_comparable<Strategy>::apply(*str);
-
- // 7) must define (meta-)struct "result_from_distance" with apply
- r = services::result_from_distance
- <
- Strategy, ptype, sptype
- >::apply(*str, rtype(1.0));
-
- boost::ignore_unused(str, r, cstrategy);
- }
- };
-
-public :
- BOOST_CONCEPT_USAGE(PointSegmentDistanceStrategy)
- {
- checker::apply(&Strategy::template apply<Point, PointOfSegment>);
- }
-#endif
-};
-
-
-}}} // namespace boost::geometry::concepts
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_DISTANCE_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/concepts/segment_intersect_concept.hpp b/contrib/restricted/boost/boost/geometry/strategies/concepts/segment_intersect_concept.hpp
deleted file mode 100644
index 87d901eb939..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/concepts/segment_intersect_concept.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CONCEPTS_SEGMENT_INTERSECT_CONCEPT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_SEGMENT_INTERSECT_CONCEPT_HPP
-
-
-//NOT FINISHED!
-
-#include <boost/concept_check.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
- \brief Checks strategy for segment intersection
- \ingroup segment_intersection
-*/
-template <typename Strategy>
-class SegmentIntersectStrategy
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-
- // 1) must define return_type
- typedef typename Strategy::return_type return_type;
-
- // 2) must define point_type (of segment points)
- //typedef typename Strategy::point_type point_type;
-
- // 3) must define segment_type 1 and 2 (of segment points)
- typedef typename Strategy::segment_type1 segment_type1;
- typedef typename Strategy::segment_type2 segment_type2;
-
-
- struct check_methods
- {
- static void apply()
- {
- Strategy const* str;
-
- return_type* rt;
- //point_type const* p;
- segment_type1 const* s1;
- segment_type2 const* s2;
-
- // 4) must implement a method apply
- // having two segments
- *rt = str->apply(*s1, *s2);
-
- }
- };
-
-
-public :
- BOOST_CONCEPT_USAGE(SegmentIntersectStrategy)
- {
- check_methods::apply();
- }
-#endif
-};
-
-
-
-}}} // namespace boost::geometry::concepts
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_SEGMENT_INTERSECT_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/concepts/simplify_concept.hpp b/contrib/restricted/boost/boost/geometry/strategies/concepts/simplify_concept.hpp
deleted file mode 100644
index 06600bafcba..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/concepts/simplify_concept.hpp
+++ /dev/null
@@ -1,96 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CONCEPTS_SIMPLIFY_CONCEPT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_SIMPLIFY_CONCEPT_HPP
-
-#include <vector>
-#include <iterator>
-
-#include <boost/concept_check.hpp>
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/geometries/point.hpp>
-#include <boost/geometry/strategies/concepts/distance_concept.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
- \brief Checks strategy for simplify
- \ingroup simplify
-*/
-template <typename Strategy, typename Point>
-struct SimplifyStrategy
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-private :
-
- // 1) must define distance_strategy_type,
- // defining point-segment distance strategy (to be checked)
- typedef typename Strategy::distance_strategy_type ds_type;
-
-
- struct checker
- {
- template <typename ApplyMethod>
- static void apply(ApplyMethod)
- {
- namespace ft = boost::function_types;
- typedef typename ft::parameter_types
- <
- ApplyMethod
- >::type parameter_types;
-
- typedef typename boost::mpl::if_
- <
- ft::is_member_function_pointer<ApplyMethod>,
- boost::mpl::int_<1>,
- boost::mpl::int_<0>
- >::type base_index;
-
- BOOST_CONCEPT_ASSERT
- (
- (concepts::PointSegmentDistanceStrategy<ds_type, Point, Point>)
- );
-
- Strategy *str = 0;
- std::vector<Point> const* v1 = 0;
- std::vector<Point> * v2 = 0;
-
- // 2) must implement method apply with arguments
- // - Range
- // - OutputIterator
- // - floating point value
- str->apply(*v1, std::back_inserter(*v2), 1.0);
-
- boost::ignore_unused<parameter_types, base_index>();
- boost::ignore_unused(str);
- }
- };
-
-public :
- BOOST_CONCEPT_USAGE(SimplifyStrategy)
- {
- checker::apply(&ds_type::template apply<Point, Point>);
- }
-#endif
-};
-
-
-
-}}} // namespace boost::geometry::concepts
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_SIMPLIFY_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/concepts/within_concept.hpp b/contrib/restricted/boost/boost/geometry/strategies/concepts/within_concept.hpp
deleted file mode 100644
index ab712ccd5e1..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/concepts/within_concept.hpp
+++ /dev/null
@@ -1,291 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CONCEPTS_WITHIN_CONCEPT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CONCEPTS_WITHIN_CONCEPT_HPP
-
-
-
-#include <boost/concept_check.hpp>
-#include <boost/function_types/result_type.hpp>
-
-#include <boost/geometry/util/parameter_type_of.hpp>
-
-
-namespace boost { namespace geometry { namespace concepts
-{
-
-
-/*!
-\brief Checks strategy for within (point-in-polygon)
-\ingroup within
-*/
-template <typename Strategy>
-class WithinStrategyPolygonal
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-
- // 1) must define state_type
- typedef typename Strategy::state_type state_type;
-
- struct checker
- {
- template <typename ApplyMethod, typename ResultMethod>
- static void apply(ApplyMethod const&, ResultMethod const& )
- {
- typedef typename parameter_type_of
- <
- ApplyMethod, 0
- >::type point_type;
- typedef typename parameter_type_of
- <
- ApplyMethod, 1
- >::type segment_point_type;
-
- // CHECK: apply-arguments should both fulfill point concept
- BOOST_CONCEPT_ASSERT
- (
- (concepts::ConstPoint<point_type>)
- );
-
- BOOST_CONCEPT_ASSERT
- (
- (concepts::ConstPoint<segment_point_type>)
- );
-
- // CHECK: return types (result: int, apply: bool)
- BOOST_MPL_ASSERT_MSG
- (
- (boost::is_same
- <
- bool, typename boost::function_types::result_type<ApplyMethod>::type
- >::type::value),
- WRONG_RETURN_TYPE_OF_APPLY
- , (bool)
- );
- BOOST_MPL_ASSERT_MSG
- (
- (boost::is_same
- <
- int, typename boost::function_types::result_type<ResultMethod>::type
- >::type::value),
- WRONG_RETURN_TYPE_OF_RESULT
- , (int)
- );
-
-
- // CHECK: calling method apply and result
- Strategy const* str = 0;
- state_type* st = 0;
- point_type const* p = 0;
- segment_point_type const* sp = 0;
-
- bool b = str->apply(*p, *sp, *sp, *st);
- int r = str->result(*st);
-
- boost::ignore_unused_variable_warning(r);
- boost::ignore_unused_variable_warning(b);
- boost::ignore_unused_variable_warning(str);
- }
- };
-
-
-public :
- BOOST_CONCEPT_USAGE(WithinStrategyPolygonal)
- {
- checker::apply(&Strategy::apply, &Strategy::result);
- }
-#endif
-};
-
-template <typename Strategy>
-class WithinStrategyPointBox
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-
- struct checker
- {
- template <typename ApplyMethod>
- static void apply(ApplyMethod const&)
- {
- typedef typename parameter_type_of
- <
- ApplyMethod, 0
- >::type point_type;
- typedef typename parameter_type_of
- <
- ApplyMethod, 1
- >::type box_type;
-
- // CHECK: apply-arguments should fulfill point/box concept
- BOOST_CONCEPT_ASSERT
- (
- (concepts::ConstPoint<point_type>)
- );
-
- BOOST_CONCEPT_ASSERT
- (
- (concepts::ConstBox<box_type>)
- );
-
- // CHECK: return types (apply: bool)
- BOOST_MPL_ASSERT_MSG
- (
- (boost::is_same
- <
- bool,
- typename boost::function_types::result_type<ApplyMethod>::type
- >::type::value),
- WRONG_RETURN_TYPE
- , (bool)
- );
-
-
- // CHECK: calling method apply
- Strategy const* str = 0;
- point_type const* p = 0;
- box_type const* bx = 0;
-
- bool b = str->apply(*p, *bx);
-
- boost::ignore_unused_variable_warning(b);
- boost::ignore_unused_variable_warning(str);
- }
- };
-
-
-public :
- BOOST_CONCEPT_USAGE(WithinStrategyPointBox)
- {
- checker::apply(&Strategy::apply);
- }
-#endif
-};
-
-template <typename Strategy>
-class WithinStrategyBoxBox
-{
-#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
-
- struct checker
- {
- template <typename ApplyMethod>
- static void apply(ApplyMethod const&)
- {
- typedef typename parameter_type_of
- <
- ApplyMethod, 0
- >::type box_type1;
- typedef typename parameter_type_of
- <
- ApplyMethod, 1
- >::type box_type2;
-
- // CHECK: apply-arguments should both fulfill box concept
- BOOST_CONCEPT_ASSERT
- (
- (concepts::ConstBox<box_type1>)
- );
-
- BOOST_CONCEPT_ASSERT
- (
- (concepts::ConstBox<box_type2>)
- );
-
- // CHECK: return types (apply: bool)
- BOOST_MPL_ASSERT_MSG
- (
- (boost::is_same
- <
- bool,
- typename boost::function_types::result_type<ApplyMethod>::type
- >::type::value),
- WRONG_RETURN_TYPE
- , (bool)
- );
-
-
- // CHECK: calling method apply
- Strategy const* str = 0;
- box_type1 const* b1 = 0;
- box_type2 const* b2 = 0;
-
- bool b = str->apply(*b1, *b2);
-
- boost::ignore_unused_variable_warning(b);
- boost::ignore_unused_variable_warning(str);
- }
- };
-
-
-public :
- BOOST_CONCEPT_USAGE(WithinStrategyBoxBox)
- {
- checker::apply(&Strategy::apply);
- }
-#endif
-};
-
-// So now: boost::geometry::concepts::within
-namespace within
-{
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-template <typename FirstTag, typename SecondTag, typename CastedTag, typename Strategy>
-struct check_within
-{};
-
-
-template <typename AnyTag, typename Strategy>
-struct check_within<point_tag, AnyTag, areal_tag, Strategy>
-{
- BOOST_CONCEPT_ASSERT( (WithinStrategyPolygonal<Strategy>) );
-};
-
-
-template <typename Strategy>
-struct check_within<point_tag, box_tag, areal_tag, Strategy>
-{
- BOOST_CONCEPT_ASSERT( (WithinStrategyPointBox<Strategy>) );
-};
-
-template <typename Strategy>
-struct check_within<box_tag, box_tag, areal_tag, Strategy>
-{
- BOOST_CONCEPT_ASSERT( (WithinStrategyBoxBox<Strategy>) );
-};
-
-
-} // namespace dispatch
-#endif
-
-
-/*!
-\brief Checks, in compile-time, the concept of any within-strategy
-\ingroup concepts
-*/
-template <typename FirstTag, typename SecondTag, typename CastedTag, typename Strategy>
-inline void check()
-{
- dispatch::check_within<FirstTag, SecondTag, CastedTag, Strategy> c;
- boost::ignore_unused_variable_warning(c);
-}
-
-
-}}}} // namespace boost::geometry::concepts::within
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CONCEPTS_WITHIN_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/convex_hull.hpp b/contrib/restricted/boost/boost/geometry/strategies/convex_hull.hpp
deleted file mode 100644
index f4edc5ba3f1..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/convex_hull.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_CONVEX_HULL_HPP
-#define BOOST_GEOMETRY_STRATEGIES_CONVEX_HULL_HPP
-
-#include <boost/geometry/strategies/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-
-
-/*!
- \brief Traits class binding a convex hull calculation strategy to a coordinate system
- \ingroup convex_hull
- \tparam Tag tag of coordinate system
- \tparam Geometry the geometry type (hull operates internally per hull over geometry)
- \tparam Point point-type of output points
-*/
-template
-<
- typename Geometry1,
- typename Point,
- typename CsTag = typename cs_tag<Point>::type
->
-struct strategy_convex_hull
-{
- typedef strategy::not_implemented type;
-};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_CONVEX_HULL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/covered_by.hpp b/contrib/restricted/boost/boost/geometry/strategies/covered_by.hpp
deleted file mode 100644
index 363e34b68fb..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/covered_by.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_COVERED_BY_HPP
-#define BOOST_GEOMETRY_STRATEGIES_COVERED_BY_HPP
-
-#include <boost/mpl/assert.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace covered_by
-{
-
-
-namespace services
-{
-
-/*!
-\brief Traits class binding a covered_by determination strategy to a coordinate system
-\ingroup covered_by
-\tparam GeometryContained geometry-type of input (possibly) contained type
-\tparam GeometryContaining geometry-type of input (possibly) containing type
-\tparam TagContained casted tag of (possibly) contained type
-\tparam TagContaining casted tag of (possibly) containing type
-\tparam CsTagContained tag of coordinate system of (possibly) contained type
-\tparam CsTagContaining tag of coordinate system of (possibly) containing type
-*/
-template
-<
- typename GeometryContained,
- typename GeometryContaining,
- typename TagContained = typename tag<GeometryContained>::type,
- typename TagContaining = typename tag<GeometryContaining>::type,
- typename CastedTagContained = typename tag_cast
- <
- typename tag<GeometryContained>::type,
- pointlike_tag, linear_tag, polygonal_tag, areal_tag
- >::type,
- typename CastedTagContaining = typename tag_cast
- <
- typename tag<GeometryContaining>::type,
- pointlike_tag, linear_tag, polygonal_tag, areal_tag
- >::type,
- typename CsTagContained = typename tag_cast
- <
- typename cs_tag<typename point_type<GeometryContained>::type>::type,
- spherical_tag
- >::type,
- typename CsTagContaining = typename tag_cast
- <
- typename cs_tag<typename point_type<GeometryContaining>::type>::type,
- spherical_tag
- >::type
->
-struct default_strategy
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THESE_TYPES
- , (types<GeometryContained, GeometryContaining>)
- );
-};
-
-
-} // namespace services
-
-
-}} // namespace strategy::covered_by
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_COVERED_BY_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/strategies/default_area_result.hpp b/contrib/restricted/boost/boost/geometry/strategies/default_area_result.hpp
deleted file mode 100644
index 65818ea91af..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/default_area_result.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_DEFAULT_AREA_RESULT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_DEFAULT_AREA_RESULT_HPP
-
-
-#include <boost/geometry/strategies/area_result.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-/*!
-\brief Meta-function defining return type of area function, using the default strategy
-\ingroup area
-\note The strategy defines the return-type (so this situation is different
- from length, where distance is sqr/sqrt, but length always squared)
- */
-
-template <typename Geometry>
-struct default_area_result
- : area_result<Geometry>
-{};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_DEFAULT_AREA_RESULT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/default_comparable_distance_result.hpp b/contrib/restricted/boost/boost/geometry/strategies/default_comparable_distance_result.hpp
deleted file mode 100644
index 3b4229f1067..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/default_comparable_distance_result.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_DEFAULT_COMPARABLE_DISTANCE_RESULT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_DEFAULT_COMPARABLE_DISTANCE_RESULT_HPP
-
-#include <boost/geometry/strategies/comparable_distance_result.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-/*!
-\brief Meta-function defining return type of comparable_distance function
-\ingroup distance
-\note The strategy defines the return-type (so this situation is different
- from length, where distance is sqr/sqrt, but length always squared)
- */
-template <typename Geometry1, typename Geometry2 = Geometry1>
-struct default_comparable_distance_result
- : comparable_distance_result<Geometry1, Geometry2, void>
-{};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_DEFAULT_COMPARABLE_DISTANCE_RESULT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/default_distance_result.hpp b/contrib/restricted/boost/boost/geometry/strategies/default_distance_result.hpp
deleted file mode 100644
index e34a9477279..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/default_distance_result.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_DEFAULT_DISTANCE_RESULT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_DEFAULT_DISTANCE_RESULT_HPP
-
-#include <boost/geometry/strategies/distance_result.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-/*!
-\brief Meta-function defining return type of distance function
-\ingroup distance
-\note The strategy defines the return-type (so this situation is different
- from length, where distance is sqr/sqrt, but length always squared)
- */
-template <typename Geometry1, typename Geometry2 = Geometry1>
-struct default_distance_result
- : distance_result<Geometry1, Geometry2, void>
-{};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_DEFAULT_DISTANCE_RESULT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/default_length_result.hpp b/contrib/restricted/boost/boost/geometry/strategies/default_length_result.hpp
deleted file mode 100644
index 806e4284ce5..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/default_length_result.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_DEFAULT_LENGTH_RESULT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_DEFAULT_LENGTH_RESULT_HPP
-
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/coordinate_type.hpp>
-
-#include <boost/geometry/util/compress_variant.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-#include <boost/geometry/util/transform_variant.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace resolve_strategy
-{
-
-template <typename Geometry>
-struct default_length_result
-{
- typedef typename select_most_precise
- <
- typename coordinate_type<Geometry>::type,
- long double
- >::type type;
-};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry>
-struct default_length_result
- : resolve_strategy::default_length_result<Geometry>
-{};
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
-struct default_length_result<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
-{
- typedef typename compress_variant<
- typename transform_variant<
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- resolve_strategy::default_length_result<boost::mpl::placeholders::_>
- >::type
- >::type type;
-};
-
-} // namespace resolve_variant
-
-
-/*!
- \brief Meta-function defining return type of length function
- \ingroup length
- \note Length of a line of integer coordinates can be double.
- So we take at least a double. If Big Number types are used,
- we take that type.
-
- */
-template <typename Geometry>
-struct default_length_result
- : resolve_variant::default_length_result<Geometry>
-{};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_DEFAULT_LENGTH_RESULT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/default_strategy.hpp b/contrib/restricted/boost/boost/geometry/strategies/default_strategy.hpp
deleted file mode 100644
index 6d05970b426..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/default_strategy.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
-// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_DEFAULT_STRATEGY_HPP
-#define BOOST_GEOMETRY_STRATEGIES_DEFAULT_STRATEGY_HPP
-
-
-namespace boost { namespace geometry
-{
-
-// This is a strategy placeholder type, which is passed by the algorithm free
-// functions to the multi-stage resolving process. It's resolved into an actual
-// strategy type during the resolve_strategy stage, possibly depending on the
-// input geometry type(s). This typically happens after the resolve_variant
-// stage, as it needs to be based on concrete geometry types - as opposed to
-// variant geometry types.
-
-struct default_strategy {};
-
-}} // namespace boost::geometry
-
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_DEFAULT_STRATEGY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/densify.hpp b/contrib/restricted/boost/boost/geometry/strategies/densify.hpp
deleted file mode 100644
index cde061af927..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/densify.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_STRATEGIES_DENSIFY_HPP
-#define BOOST_GEOMETRY_STRATEGIES_DENSIFY_HPP
-
-
-#include <boost/mpl/assert.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace densify
-{
-
-namespace services
-{
-
-template <typename CSTag>
-struct default_strategy
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_CS
- , (types<CSTag>)
- );
-};
-
-} // namespace services
-
-}} // namespace strategy::densify
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_DENSIFY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/disjoint.hpp b/contrib/restricted/boost/boost/geometry/strategies/disjoint.hpp
deleted file mode 100644
index 23d2cede498..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/disjoint.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_DISJOINT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_DISJOINT_HPP
-
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/topological_dimension.hpp>
-
-#include <boost/geometry/strategies/covered_by.hpp>
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/relate.hpp>
-
-
-namespace boost { namespace geometry { namespace strategy { namespace disjoint
-{
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Tag1 = typename geometry::tag<Geometry1>::type,
- typename Tag2 = typename geometry::tag<Geometry2>::type,
- int TopDim1 = geometry::topological_dimension<Geometry1>::value,
- int TopDim2 = geometry::topological_dimension<Geometry2>::value,
- typename CsTag1 = typename cs_tag<Geometry1>::type,
- typename CsTag2 = typename cs_tag<Geometry2>::type
->
-struct default_strategy
- : relate::services::default_strategy
- <
- Geometry1, Geometry2
- >
-{};
-
-template <typename Point, typename Box>
-struct default_strategy<Point, Box, point_tag, box_tag, 0, 2>
- : strategy::covered_by::services::default_strategy<Point, Box>
-{};
-
-template <typename Box, typename Point>
-struct default_strategy<Box, Point, box_tag, point_tag, 2, 0>
- : strategy::covered_by::services::default_strategy<Point, Box>
-{};
-
-template <typename MultiPoint, typename Box>
-struct default_strategy<MultiPoint, Box, multi_point_tag, box_tag, 0, 2>
- : strategy::covered_by::services::default_strategy
- <
- typename point_type<MultiPoint>::type,
- Box
- >
-{};
-
-template <typename Box, typename MultiPoint>
-struct default_strategy<Box, MultiPoint, box_tag, multi_point_tag, 2, 0>
- : strategy::covered_by::services::default_strategy
- <
- typename point_type<MultiPoint>::type,
- Box
- >
-{};
-
-template <typename Box1, typename Box2>
-struct default_strategy<Box1, Box2, box_tag, box_tag, 2, 2>
-{
- // dummy strategy which will be ignored
- typedef geometry::default_strategy type;
-};
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-}}}} // namespace boost::geometry::strategy::disjoint
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_DISJOINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/distance.hpp b/contrib/restricted/boost/boost/geometry/strategies/distance.hpp
deleted file mode 100644
index 98ccb8202bd..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/distance.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_DISTANCE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_DISTANCE_HPP
-
-
-#include <boost/mpl/assert.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/strategies/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace distance { namespace services
-{
-
-
-template <typename Strategy> struct tag {};
-
-template <typename Strategy, typename P1, typename P2>
-struct return_type
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY, (types<Strategy, P1, P2>)
- );
-};
-
-
-template <typename Strategy> struct comparable_type
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY, (types<Strategy>)
- );
-};
-
-template <typename Strategy> struct get_comparable
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_STRATEGY, (types<Strategy>)
- );
-};
-
-template <typename Strategy, typename P1, typename P2>
-struct result_from_distance {};
-
-
-
-
-// Default strategy
-
-
-/*!
- \brief Traits class binding a default strategy for distance
- to one (or possibly two) coordinate system(s)
- \ingroup distance
- \tparam GeometryTag1 tag (point/segment/box) for which this strategy is the default
- \tparam GeometryTag2 tag (point/segment/box) for which this strategy is the default
- \tparam Point1 first point-type
- \tparam Point2 second point-type
- \tparam CsTag1 tag of coordinate system of first point type
- \tparam CsTag2 tag of coordinate system of second point type
-*/
-template
-<
- typename GeometryTag1,
- typename GeometryTag2,
- typename Point1,
- typename Point2 = Point1,
- typename CsTag1 = typename cs_tag<Point1>::type,
- typename CsTag2 = typename cs_tag<Point2>::type,
- typename UnderlyingStrategy = void
->
-struct default_strategy
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPE_COMBINATION
- , (types<Point1, Point2, CsTag1, CsTag2>)
- );
-};
-
-
-}}} // namespace strategy::distance::services
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_DISTANCE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/distance_result.hpp b/contrib/restricted/boost/boost/geometry/strategies/distance_result.hpp
deleted file mode 100644
index e4f326d3eee..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/distance_result.hpp
+++ /dev/null
@@ -1,213 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland.
-// Copyright (c) 2014-2015 Samuel Debionne, Grenoble, France.
-
-// This file was modified by Oracle on 2014, 2015.
-// Modifications copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_DISTANCE_RESULT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_DISTANCE_RESULT_HPP
-
-#include <boost/mpl/always.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/mpl/vector.hpp>
-
-#include <boost/variant/variant_fwd.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/strategies/default_strategy.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-
-#include <boost/geometry/util/compress_variant.hpp>
-#include <boost/geometry/util/transform_variant.hpp>
-#include <boost/geometry/util/combine_if.hpp>
-
-#include <boost/geometry/algorithms/detail/distance/default_strategies.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace resolve_strategy
-{
-
-template <typename Geometry1, typename Geometry2, typename Strategy>
-struct distance_result
- : strategy::distance::services::return_type
- <
- Strategy,
- typename point_type<Geometry1>::type,
- typename point_type<Geometry2>::type
- >
-{};
-
-template <typename Geometry1, typename Geometry2>
-struct distance_result<Geometry1, Geometry2, default_strategy>
- : distance_result
- <
- Geometry1,
- Geometry2,
- typename detail::distance::default_strategy
- <
- Geometry1, Geometry2
- >::type
- >
-{};
-
-} // namespace resolve_strategy
-
-
-namespace resolve_variant
-{
-
-template <typename Geometry1, typename Geometry2, typename Strategy>
-struct distance_result
- : resolve_strategy::distance_result
- <
- Geometry1,
- Geometry2,
- Strategy
- >
-{};
-
-
-template
-<
- typename Geometry1,
- BOOST_VARIANT_ENUM_PARAMS(typename T),
- typename Strategy
->
-struct distance_result
- <
- Geometry1, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Strategy
- >
-{
- // A set of all variant type combinations that are compatible and
- // implemented
- typedef typename util::combine_if<
- typename boost::mpl::vector1<Geometry1>,
- typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
- // Here we want should remove most of the combinations that
- // are not valid, mostly to limit the size of the resulting MPL set.
- // But is_implementedn is not ready for prime time
- //
- // util::is_implemented2<boost::mpl::_1, boost::mpl::_2, dispatch::distance<boost::mpl::_1, boost::mpl::_2> >
- boost::mpl::always<boost::mpl::true_>
- >::type possible_input_types;
-
- // The (possibly variant) result type resulting from these combinations
- typedef typename compress_variant<
- typename transform_variant<
- possible_input_types,
- resolve_strategy::distance_result<
- boost::mpl::first<boost::mpl::_>,
- boost::mpl::second<boost::mpl::_>,
- Strategy
- >,
- boost::mpl::back_inserter<boost::mpl::vector0<> >
- >::type
- >::type type;
-};
-
-
-// Distance arguments are commutative
-template
-<
- BOOST_VARIANT_ENUM_PARAMS(typename T),
- typename Geometry2,
- typename Strategy
->
-struct distance_result
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Geometry2,
- Strategy
- > : public distance_result
- <
- Geometry2, boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Strategy
- >
-{};
-
-
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Strategy>
-struct distance_result
- <
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>,
- Strategy
- >
-{
- // A set of all variant type combinations that are compatible and
- // implemented
- typedef typename util::combine_if
- <
- typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
- typename boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
- // Here we want to try to remove most of the combinations
- // that are not valid, mostly to limit the size of the
- // resulting MPL vector.
- // But is_implemented is not ready for prime time
- //
- // util::is_implemented2<boost::mpl::_1, boost::mpl::_2, dispatch::distance<boost::mpl::_1, boost::mpl::_2> >
- boost::mpl::always<boost::mpl::true_>
- >::type possible_input_types;
-
- // The (possibly variant) result type resulting from these combinations
- typedef typename compress_variant<
- typename transform_variant<
- possible_input_types,
- resolve_strategy::distance_result<
- boost::mpl::first<boost::mpl::_>,
- boost::mpl::second<boost::mpl::_>,
- Strategy
- >,
- boost::mpl::back_inserter<boost::mpl::vector0<> >
- >::type
- >::type type;
-};
-
-} // namespace resolve_variant
-
-
-/*!
-\brief Meta-function defining return type of distance function
-\ingroup distance
-\note The strategy defines the return-type (so this situation is different
- from length, where distance is sqr/sqrt, but length always squared)
- */
-template
-<
- typename Geometry1,
- typename Geometry2 = Geometry1,
- typename Strategy = void
->
-struct distance_result
- : resolve_variant::distance_result<Geometry1, Geometry2, Strategy>
-{};
-
-
-template <typename Geometry1, typename Geometry2>
-struct distance_result<Geometry1, Geometry2, void>
- : distance_result<Geometry1, Geometry2, default_strategy>
-{};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_DISTANCE_RESULT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/envelope.hpp b/contrib/restricted/boost/boost/geometry/strategies/envelope.hpp
deleted file mode 100644
index fde9c858a6a..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/envelope.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2016-2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_ENVELOPE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_ENVELOPE_HPP
-
-#include <boost/mpl/assert.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace envelope { namespace services
-{
-
-/*!
-\brief Traits class binding a default envelope strategy to a coordinate system
-\ingroup util
-\tparam CSTag tag of coordinate system
-\tparam CalculationType \tparam_calculation
-*/
-template <typename CSTag, typename CalculationType = void>
-struct default_strategy
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_TYPE
- , (types<CSTag>)
- );
-};
-
-}}} // namespace strategy::envelope::services
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_ENVELOPE_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/area.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/area.hpp
deleted file mode 100644
index ac7d933ce7d..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/area.hpp
+++ /dev/null
@@ -1,231 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Copyright (c) 2016-2018 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_AREA_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_AREA_HPP
-
-
-#include <boost/geometry/srs/spheroid.hpp>
-
-#include <boost/geometry/formulas/area_formulas.hpp>
-#include <boost/geometry/formulas/authalic_radius_sqr.hpp>
-#include <boost/geometry/formulas/eccentricity_sqr.hpp>
-
-#include <boost/geometry/strategies/geographic/parameters.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace area
-{
-
-/*!
-\brief Geographic area calculation
-\ingroup strategies
-\details Geographic area calculation by trapezoidal rule plus integral
- approximation that gives the ellipsoidal correction
-\tparam FormulaPolicy Formula used to calculate azimuths
-\tparam SeriesOrder The order of approximation of the geodesic integral
-\tparam Spheroid The spheroid model
-\tparam CalculationType \tparam_calculation
-\author See
-- Danielsen JS, The area under the geodesic. Surv Rev 30(232): 61–66, 1989
-- Charles F.F Karney, Algorithms for geodesics, 2011 https://arxiv.org/pdf/1109.4448.pdf
-
-\qbk{
-[heading See also]
-\* [link geometry.reference.algorithms.area.area_2_with_strategy area (with strategy)]
-\* [link geometry.reference.srs.srs_spheroid srs::spheroid]
-}
-*/
-template
-<
- typename FormulaPolicy = strategy::andoyer,
- std::size_t SeriesOrder = strategy::default_order<FormulaPolicy>::value,
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class geographic
-{
- // Switch between two kinds of approximation(series in eps and n v.s.series in k ^ 2 and e'^2)
- static const bool ExpandEpsN = true;
- // LongSegment Enables special handling of long segments
- static const bool LongSegment = false;
-
- //Select default types in case they are not set
-
-public:
- template <typename Geometry>
- struct result_type
- : strategy::area::detail::result_type
- <
- Geometry,
- CalculationType
- >
- {};
-
-protected :
- struct spheroid_constants
- {
- typedef typename boost::mpl::if_c
- <
- boost::is_void<CalculationType>::value,
- typename geometry::radius_type<Spheroid>::type,
- CalculationType
- >::type calc_t;
-
- Spheroid m_spheroid;
- calc_t const m_a2; // squared equatorial radius
- calc_t const m_e2; // squared eccentricity
- calc_t const m_ep2; // squared second eccentricity
- calc_t const m_ep; // second eccentricity
- calc_t const m_c2; // squared authalic radius
-
- inline spheroid_constants(Spheroid const& spheroid)
- : m_spheroid(spheroid)
- , m_a2(math::sqr(get_radius<0>(spheroid)))
- , m_e2(formula::eccentricity_sqr<calc_t>(spheroid))
- , m_ep2(m_e2 / (calc_t(1.0) - m_e2))
- , m_ep(math::sqrt(m_ep2))
- , m_c2(formula_dispatch::authalic_radius_sqr
- <
- calc_t, Spheroid, srs_spheroid_tag
- >::apply(m_a2, m_e2))
- {}
- };
-
-public:
- template <typename Geometry>
- class state
- {
- friend class geographic;
-
- typedef typename result_type<Geometry>::type return_type;
-
- public:
- inline state()
- : m_excess_sum(0)
- , m_correction_sum(0)
- , m_crosses_prime_meridian(0)
- {}
-
- private:
- inline return_type area(spheroid_constants const& spheroid_const) const
- {
- return_type result;
-
- return_type sum = spheroid_const.m_c2 * m_excess_sum
- + spheroid_const.m_e2 * spheroid_const.m_a2 * m_correction_sum;
-
- // If encircles some pole
- if (m_crosses_prime_meridian % 2 == 1)
- {
- std::size_t times_crosses_prime_meridian
- = 1 + (m_crosses_prime_meridian / 2);
-
- result = return_type(2.0)
- * geometry::math::pi<return_type>()
- * spheroid_const.m_c2
- * return_type(times_crosses_prime_meridian)
- - geometry::math::abs(sum);
-
- if (geometry::math::sign<return_type>(sum) == 1)
- {
- result = - result;
- }
-
- }
- else
- {
- result = sum;
- }
-
- return result;
- }
-
- return_type m_excess_sum;
- return_type m_correction_sum;
-
- // Keep track if encircles some pole
- std::size_t m_crosses_prime_meridian;
- };
-
-public :
- explicit inline geographic(Spheroid const& spheroid = Spheroid())
- : m_spheroid_constants(spheroid)
- {}
-
- template <typename PointOfSegment, typename Geometry>
- inline void apply(PointOfSegment const& p1,
- PointOfSegment const& p2,
- state<Geometry>& st) const
- {
- if (! geometry::math::equals(get<0>(p1), get<0>(p2)))
- {
- typedef geometry::formula::area_formulas
- <
- typename result_type<Geometry>::type,
- SeriesOrder, ExpandEpsN
- > area_formulas;
-
- typename area_formulas::return_type_ellipsoidal result =
- area_formulas::template ellipsoidal<FormulaPolicy::template inverse>
- (p1, p2, m_spheroid_constants);
-
- st.m_excess_sum += result.spherical_term;
- st.m_correction_sum += result.ellipsoidal_term;
-
- // Keep track whenever a segment crosses the prime meridian
- if (area_formulas::crosses_prime_meridian(p1, p2))
- {
- st.m_crosses_prime_meridian++;
- }
- }
- }
-
- template <typename Geometry>
- inline typename result_type<Geometry>::type
- result(state<Geometry> const& st) const
- {
- return st.area(m_spheroid_constants);
- }
-
-private:
- spheroid_constants m_spheroid_constants;
-
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-
-template <>
-struct default_strategy<geographic_tag>
-{
- typedef strategy::area::geographic<> type;
-};
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-}
-
-}} // namespace strategy::area
-
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_AREA_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/azimuth.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/azimuth.hpp
deleted file mode 100644
index b918caccea5..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/azimuth.hpp
+++ /dev/null
@@ -1,121 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2016-2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_AZIMUTH_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_AZIMUTH_HPP
-
-
-#include <boost/geometry/srs/spheroid.hpp>
-
-#include <boost/geometry/strategies/azimuth.hpp>
-#include <boost/geometry/strategies/geographic/parameters.hpp>
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace azimuth
-{
-
-template
-<
- typename FormulaPolicy = strategy::andoyer,
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class geographic
-{
-public :
-
- typedef Spheroid model_type;
-
- inline geographic()
- : m_spheroid()
- {}
-
- explicit inline geographic(Spheroid const& spheroid)
- : m_spheroid(spheroid)
- {}
-
- inline model_type const& model() const
- {
- return m_spheroid;
- }
-
- template <typename T>
- inline void apply(T const& lon1_rad, T const& lat1_rad,
- T const& lon2_rad, T const& lat2_rad,
- T& a1, T& a2) const
- {
- typedef typename boost::mpl::if_
- <
- boost::is_void<CalculationType>, T, CalculationType
- >::type calc_t;
-
- typedef typename FormulaPolicy::template inverse<calc_t, false, true, true, false, false> inverse_type;
- typedef typename inverse_type::result_type inverse_result;
- inverse_result i_res = inverse_type::apply(calc_t(lon1_rad), calc_t(lat1_rad),
- calc_t(lon2_rad), calc_t(lat2_rad),
- m_spheroid);
- a1 = i_res.azimuth;
- a2 = i_res.reverse_azimuth;
- }
-
- template <typename T>
- inline void apply(T const& lon1_rad, T const& lat1_rad,
- T const& lon2_rad, T const& lat2_rad,
- T& a1) const
- {
- typedef typename boost::mpl::if_
- <
- boost::is_void<CalculationType>, T, CalculationType
- >::type calc_t;
-
- typedef typename FormulaPolicy::template inverse<calc_t, false, true, false, false, false> inverse_type;
- typedef typename inverse_type::result_type inverse_result;
- inverse_result i_res = inverse_type::apply(calc_t(lon1_rad), calc_t(lat1_rad),
- calc_t(lon2_rad), calc_t(lat2_rad),
- m_spheroid);
- a1 = i_res.azimuth;
- }
-
-private :
- Spheroid m_spheroid;
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-template <typename CalculationType>
-struct default_strategy<geographic_tag, CalculationType>
-{
- typedef strategy::azimuth::geographic
- <
- strategy::andoyer,
- srs::spheroid<double>,
- CalculationType
- > type;
-};
-
-}
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-}} // namespace strategy::azimuth
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_AZIMUTH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/densify.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/densify.hpp
deleted file mode 100644
index a31ba72200e..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/densify.hpp
+++ /dev/null
@@ -1,136 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017-2018, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DENSIFY_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DENSIFY_HPP
-
-
-#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/srs/spheroid.hpp>
-#include <boost/geometry/strategies/densify.hpp>
-#include <boost/geometry/strategies/geographic/parameters.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace densify
-{
-
-
-/*!
-\brief Densification of geographic segment.
-\ingroup strategies
-\tparam FormulaPolicy The geodesic formulas used internally.
-\tparam Spheroid The spheroid model.
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading See also]
-\* [link geometry.reference.algorithms.densify.densify_4_with_strategy densify (with strategy)]
-\* [link geometry.reference.srs.srs_spheroid srs::spheroid]
-}
- */
-template
-<
- typename FormulaPolicy = strategy::andoyer,
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class geographic
-{
-public:
- geographic()
- : m_spheroid()
- {}
-
- explicit geographic(Spheroid const& spheroid)
- : m_spheroid(spheroid)
- {}
-
- template <typename Point, typename AssignPolicy, typename T>
- inline void apply(Point const& p0, Point const& p1, AssignPolicy & policy, T const& length_threshold) const
- {
- typedef typename AssignPolicy::point_type out_point_t;
- typedef typename select_most_precise
- <
- typename coordinate_type<Point>::type,
- typename coordinate_type<out_point_t>::type,
- CalculationType
- >::type calc_t;
-
- typedef typename FormulaPolicy::template direct<calc_t, true, false, false, false> direct_t;
- typedef typename FormulaPolicy::template inverse<calc_t, true, true, false, false, false> inverse_t;
-
- typename inverse_t::result_type
- inv_r = inverse_t::apply(get_as_radian<0>(p0), get_as_radian<1>(p0),
- get_as_radian<0>(p1), get_as_radian<1>(p1),
- m_spheroid);
-
- BOOST_GEOMETRY_ASSERT(length_threshold > T(0));
-
- signed_size_type n = signed_size_type(inv_r.distance / length_threshold);
- if (n <= 0)
- return;
-
- calc_t step = inv_r.distance / (n + 1);
-
- calc_t current = step;
- for (signed_size_type i = 0 ; i < n ; ++i, current += step)
- {
- typename direct_t::result_type
- dir_r = direct_t::apply(get_as_radian<0>(p0), get_as_radian<1>(p0),
- current, inv_r.azimuth,
- m_spheroid);
-
- out_point_t p;
- set_from_radian<0>(p, dir_r.lon2);
- set_from_radian<1>(p, dir_r.lat2);
- geometry::detail::conversion::point_to_point
- <
- Point, out_point_t,
- 2, dimension<out_point_t>::value
- >::apply(p0, p);
-
- policy.apply(p);
- }
- }
-
-private:
- Spheroid m_spheroid;
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <>
-struct default_strategy<geographic_tag>
-{
- typedef strategy::densify::geographic<> type;
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::densify
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DENSIFY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/disjoint_segment_box.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/disjoint_segment_box.hpp
deleted file mode 100644
index afc9d667754..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/disjoint_segment_box.hpp
+++ /dev/null
@@ -1,130 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISJOINT_SEGMENT_BOX_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISJOINT_SEGMENT_BOX_HPP
-
-
-#include <cstddef>
-#include <utility>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/calculation_type.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/segment_box.hpp>
-
-#include <boost/geometry/strategies/disjoint.hpp>
-#include <boost/geometry/strategies/geographic/azimuth.hpp>
-#include <boost/geometry/strategies/geographic/parameters.hpp>
-
-
-namespace boost { namespace geometry { namespace strategy { namespace disjoint
-{
-
-// NOTE: This may be temporary place for this or corresponding strategy
-// It seems to be more appropriate to implement the opposite of it
-// e.g. intersection::segment_box because in disjoint() algorithm
-// other strategies that are used are intersection and covered_by strategies.
-template
-<
- typename FormulaPolicy = strategy::andoyer,
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-struct segment_box_geographic
-{
-public:
- typedef Spheroid model_type;
-
- inline segment_box_geographic()
- : m_spheroid()
- {}
-
- explicit inline segment_box_geographic(Spheroid const& spheroid)
- : m_spheroid(spheroid)
- {}
-
- template <typename Segment, typename Box>
- struct point_in_geometry_strategy
- : services::default_strategy
- <
- typename point_type<Segment>::type,
- Box
- >
- {};
-
- template <typename Segment, typename Box>
- static inline typename point_in_geometry_strategy<Segment, Box>::type
- get_point_in_geometry_strategy()
- {
- typedef typename point_in_geometry_strategy<Segment, Box>::type strategy_type;
-
- return strategy_type();
- }
-
- template <typename Segment, typename Box>
- inline bool apply(Segment const& segment, Box const& box) const
- {
- geometry::strategy::azimuth::geographic
- <
- FormulaPolicy,
- Spheroid,
- CalculationType
- > azimuth_geographic(m_spheroid);
-
- return geometry::detail::disjoint::disjoint_segment_box_sphere_or_spheroid
- <geographic_tag>::apply(segment, box, azimuth_geographic);
- }
-
-private:
- Spheroid m_spheroid;
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-namespace services
-{
-
-template <typename Linear, typename Box, typename LinearTag>
-struct default_strategy<Linear, Box, LinearTag, box_tag, 1, 2,
- geographic_tag, geographic_tag>
-{
- typedef segment_box_geographic<> type;
-};
-
-template <typename Box, typename Linear, typename LinearTag>
-struct default_strategy<Box, Linear, box_tag, LinearTag, 2, 1,
- geographic_tag, geographic_tag>
-{
- typedef segment_box_geographic<> type;
-};
-
-
-} // namespace services
-
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}}}} // namespace boost::geometry::strategy::disjoint
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISJOINT_SEGMENT_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/distance.hpp
deleted file mode 100644
index 01f766c10ef..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance.hpp
+++ /dev/null
@@ -1,250 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2016 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014-2018.
-// Modifications copyright (c) 2014-2018 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_HPP
-
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/radius.hpp>
-
-#include <boost/geometry/formulas/andoyer_inverse.hpp>
-#include <boost/geometry/formulas/elliptic_arc_length.hpp>
-#include <boost/geometry/formulas/flattening.hpp>
-
-#include <boost/geometry/srs/spheroid.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/geographic/parameters.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-#include <boost/geometry/geometries/point_xy.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-/*!
-\brief Distance calculation for geographic coordinates on a spheroid
-\ingroup strategies
-\tparam FormulaPolicy Formula used to calculate azimuths
-\tparam Spheroid The spheroid model
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading See also]
-\* [link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
-\* [link geometry.reference.srs.srs_spheroid srs::spheroid]
-}
-*/
-template
-<
- typename FormulaPolicy = strategy::andoyer,
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class geographic
-{
-public :
- template <typename Point1, typename Point2>
- struct calculation_type
- : promote_floating_point
- <
- typename select_calculation_type
- <
- Point1,
- Point2,
- CalculationType
- >::type
- >
- {};
-
- typedef Spheroid model_type;
-
- inline geographic()
- : m_spheroid()
- {}
-
- explicit inline geographic(Spheroid const& spheroid)
- : m_spheroid(spheroid)
- {}
-
- template <typename CT>
- static inline CT apply(CT lon1, CT lat1, CT lon2, CT lat2,
- Spheroid const& spheroid)
- {
- typedef typename formula::elliptic_arc_length
- <
- CT, strategy::default_order<FormulaPolicy>::value
- > elliptic_arc_length;
-
- typename elliptic_arc_length::result res =
- elliptic_arc_length::apply(lon1, lat1, lon2, lat2, spheroid);
-
- if (res.meridian)
- {
- return res.distance;
- }
-
- return FormulaPolicy::template inverse
- <
- CT, true, false, false, false, false
- >::apply(lon1, lat1, lon2, lat2, spheroid).distance;
- }
-
- template <typename Point1, typename Point2>
- inline typename calculation_type<Point1, Point2>::type
- apply(Point1 const& point1, Point2 const& point2) const
- {
- typedef typename calculation_type<Point1, Point2>::type CT;
-
- CT lon1 = get_as_radian<0>(point1);
- CT lat1 = get_as_radian<1>(point1);
- CT lon2 = get_as_radian<0>(point2);
- CT lat2 = get_as_radian<1>(point2);
-
- return apply(lon1, lat1, lon2, lat2, m_spheroid);
- }
-
- // points on a meridian not crossing poles
- template <typename CT>
- inline CT meridian(CT lat1, CT lat2) const
- {
- typedef typename formula::elliptic_arc_length
- <
- CT, strategy::default_order<FormulaPolicy>::value
- > elliptic_arc_length;
-
- return elliptic_arc_length::meridian_not_crossing_pole_dist(lat1, lat2,
- m_spheroid);
- }
-
- inline Spheroid const& model() const
- {
- return m_spheroid;
- }
-
-private :
- Spheroid m_spheroid;
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template
-<
- typename FormulaPolicy,
- typename Spheroid,
- typename CalculationType
->
-struct tag<geographic<FormulaPolicy, Spheroid, CalculationType> >
-{
- typedef strategy_tag_distance_point_point type;
-};
-
-
-template
-<
- typename FormulaPolicy,
- typename Spheroid,
- typename CalculationType,
- typename P1,
- typename P2
->
-struct return_type<geographic<FormulaPolicy, Spheroid, CalculationType>, P1, P2>
- : geographic<FormulaPolicy, Spheroid, CalculationType>::template calculation_type<P1, P2>
-{};
-
-
-template
-<
- typename FormulaPolicy,
- typename Spheroid,
- typename CalculationType
->
-struct comparable_type<geographic<FormulaPolicy, Spheroid, CalculationType> >
-{
- typedef geographic<FormulaPolicy, Spheroid, CalculationType> type;
-};
-
-
-template
-<
- typename FormulaPolicy,
- typename Spheroid,
- typename CalculationType
->
-struct get_comparable<geographic<FormulaPolicy, Spheroid, CalculationType> >
-{
- static inline geographic<FormulaPolicy, Spheroid, CalculationType>
- apply(geographic<FormulaPolicy, Spheroid, CalculationType> const& input)
- {
- return input;
- }
-};
-
-template
-<
- typename FormulaPolicy,
- typename Spheroid,
- typename CalculationType,
- typename P1,
- typename P2
->
-struct result_from_distance<geographic<FormulaPolicy, Spheroid, CalculationType>, P1, P2>
-{
- template <typename T>
- static inline typename return_type<geographic<FormulaPolicy, Spheroid, CalculationType>, P1, P2>::type
- apply(geographic<FormulaPolicy, Spheroid, CalculationType> const& , T const& value)
- {
- return value;
- }
-};
-
-
-template <typename Point1, typename Point2>
-struct default_strategy<point_tag, point_tag, Point1, Point2, geographic_tag, geographic_tag>
-{
- typedef strategy::distance::geographic
- <
- strategy::andoyer,
- srs::spheroid
- <
- typename select_coordinate_type<Point1, Point2>::type
- >
- > type;
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_andoyer.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_andoyer.hpp
deleted file mode 100644
index d732951642b..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_andoyer.hpp
+++ /dev/null
@@ -1,128 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2016 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_DETAIL_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_DETAIL_HPP
-
-
-#include <boost/geometry/strategies/geographic/distance.hpp>
-#include <boost/geometry/strategies/geographic/parameters.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-
-/*!
-\brief Point-point distance approximation taking flattening into account
-\ingroup distance
-\tparam Spheroid The reference spheroid model
-\tparam CalculationType \tparam_calculation
-\author After Andoyer, 19xx, republished 1950, republished by Meeus, 1999
-\note Although not so well-known, the approximation is very good: in all cases the results
-are about the same as Vincenty. In my (Barend's) testcases the results didn't differ more than 6 m
-\see http://nacc.upc.es/tierra/node16.html
-\see http://sci.tech-archive.net/Archive/sci.geo.satellite-nav/2004-12/2724.html
-\see http://home.att.net/~srschmitt/great_circle_route.html (implementation)
-\see http://www.codeguru.com/Cpp/Cpp/algorithms/article.php/c5115 (implementation)
-\see http://futureboy.homeip.net/frinksamp/navigation.frink (implementation)
-\see http://www.voidware.com/earthdist.htm (implementation)
-\see http://www.dtic.mil/docs/citations/AD0627893
-\see http://www.dtic.mil/docs/citations/AD703541
-*/
-template
-<
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class andoyer
- : public strategy::distance::geographic
- <
- strategy::andoyer, Spheroid, CalculationType
- >
-{
- typedef strategy::distance::geographic
- <
- strategy::andoyer, Spheroid, CalculationType
- > base_type;
-
-public :
- inline andoyer()
- : base_type()
- {}
-
- explicit inline andoyer(Spheroid const& spheroid)
- : base_type(spheroid)
- {}
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename Spheroid, typename CalculationType>
-struct tag<andoyer<Spheroid, CalculationType> >
-{
- typedef strategy_tag_distance_point_point type;
-};
-
-
-template <typename Spheroid, typename CalculationType, typename P1, typename P2>
-struct return_type<andoyer<Spheroid, CalculationType>, P1, P2>
- : andoyer<Spheroid, CalculationType>::template calculation_type<P1, P2>
-{};
-
-
-template <typename Spheroid, typename CalculationType>
-struct comparable_type<andoyer<Spheroid, CalculationType> >
-{
- typedef andoyer<Spheroid, CalculationType> type;
-};
-
-
-template <typename Spheroid, typename CalculationType>
-struct get_comparable<andoyer<Spheroid, CalculationType> >
-{
- static inline andoyer<Spheroid, CalculationType> apply(andoyer<Spheroid, CalculationType> const& input)
- {
- return input;
- }
-};
-
-template <typename Spheroid, typename CalculationType, typename P1, typename P2>
-struct result_from_distance<andoyer<Spheroid, CalculationType>, P1, P2>
-{
- template <typename T>
- static inline typename return_type<andoyer<Spheroid, CalculationType>, P1, P2>::type
- apply(andoyer<Spheroid, CalculationType> const& , T const& value)
- {
- return value;
- }
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_DETAIL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_cross_track.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_cross_track.hpp
deleted file mode 100644
index be930a3fd4d..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_cross_track.hpp
+++ /dev/null
@@ -1,700 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2016-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_CROSS_TRACK_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_CROSS_TRACK_HPP
-
-#include <algorithm>
-
-#include <boost/config.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/concepts/distance_concept.hpp>
-#include <boost/geometry/strategies/spherical/distance_haversine.hpp>
-#include <boost/geometry/strategies/geographic/azimuth.hpp>
-#include <boost/geometry/strategies/geographic/parameters.hpp>
-
-#include <boost/geometry/formulas/vincenty_direct.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-
-#include <boost/geometry/formulas/result_direct.hpp>
-#include <boost/geometry/formulas/mean_radius.hpp>
-
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
-#include <boost/geometry/io/dsv/write.hpp>
-#endif
-
-#ifndef BOOST_GEOMETRY_DETAIL_POINT_SEGMENT_DISTANCE_MAX_STEPS
-#define BOOST_GEOMETRY_DETAIL_POINT_SEGMENT_DISTANCE_MAX_STEPS 100
-#endif
-
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
-#include <iostream>
-#endif
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-/*!
-\brief Strategy functor for distance point to segment calculation on ellipsoid
- Algorithm uses direct and inverse geodesic problems as subroutines.
- The algorithm approximates the distance by an iterative Newton method.
-\ingroup strategies
-\details Class which calculates the distance of a point to a segment, for points
-on the ellipsoid
-\see C.F.F.Karney - Geodesics on an ellipsoid of revolution,
- https://arxiv.org/abs/1102.1215
-\tparam FormulaPolicy underlying point-point distance strategy
-\tparam Spheroid is the spheroidal model used
-\tparam CalculationType \tparam_calculation
-\tparam EnableClosestPoint computes the closest point on segment if true
-*/
-template
-<
- typename FormulaPolicy = strategy::andoyer,
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void,
- bool EnableClosestPoint = false
->
-class geographic_cross_track
-{
-public :
- template <typename Point, typename PointOfSegment>
- struct return_type
- : promote_floating_point
- <
- typename select_calculation_type
- <
- Point,
- PointOfSegment,
- CalculationType
- >::type
- >
- {};
-
- struct distance_strategy
- {
- typedef geographic<FormulaPolicy, Spheroid, CalculationType> type;
- };
-
- inline typename distance_strategy::type get_distance_strategy() const
- {
- typedef typename distance_strategy::type distance_type;
- return distance_type(m_spheroid);
- }
-
- explicit geographic_cross_track(Spheroid const& spheroid = Spheroid())
- : m_spheroid(spheroid)
- {}
-
- template <typename Point, typename PointOfSegment>
- inline typename return_type<Point, PointOfSegment>::type
- apply(Point const& p, PointOfSegment const& sp1, PointOfSegment const& sp2) const
- {
- typedef typename coordinate_system<Point>::type::units units_type;
-
- return (apply<units_type>(get<0>(sp1), get<1>(sp1),
- get<0>(sp2), get<1>(sp2),
- get<0>(p), get<1>(p),
- m_spheroid)).distance;
- }
-
-private :
-
- template <typename CT>
- struct result_distance_point_segment
- {
- result_distance_point_segment()
- : distance(0)
- , closest_point_lon(0)
- , closest_point_lat(0)
- {}
-
- CT distance;
- CT closest_point_lon;
- CT closest_point_lat;
- };
-
- template <typename CT>
- result_distance_point_segment<CT>
- static inline non_iterative_case(CT lon, CT lat, CT distance)
- {
- result_distance_point_segment<CT> result;
- result.distance = distance;
-
- if (EnableClosestPoint)
- {
- result.closest_point_lon = lon;
- result.closest_point_lat = lat;
- }
- return result;
- }
-
- template <typename CT>
- result_distance_point_segment<CT>
- static inline non_iterative_case(CT lon1, CT lat1, //p1
- CT lon2, CT lat2, //p2
- Spheroid const& spheroid)
- {
- CT distance = geometry::strategy::distance::geographic<FormulaPolicy, Spheroid, CT>
- ::apply(lon1, lat1, lon2, lat2, spheroid);
-
- return non_iterative_case(lon1, lat1, distance);
- }
-
- template <typename CT>
- CT static inline normalize(CT g4, CT& der)
- {
- CT const pi = math::pi<CT>();
- if (g4 < -1.25*pi)//close to -270
- {
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "g4=" << g4 << ", close to -270" << std::endl;
-#endif
- return g4 + 1.5 * pi;
- }
- else if (g4 > 1.25*pi)//close to 270
- {
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "g4=" << g4 << ", close to 270" << std::endl;
-#endif
- return - g4 + 1.5 * pi;
- }
- else if (g4 < 0 && g4 > -0.75*pi)//close to -90
- {
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "g4=" << g4 << ", close to -90" << std::endl;
-#endif
- der = -der;
- return -g4 - pi/2;
- }
- return g4 - pi/2;
- }
-
- template <typename Units, typename CT>
- result_distance_point_segment<CT>
- static inline apply(CT lon1, CT lat1, //p1
- CT lon2, CT lat2, //p2
- CT lon3, CT lat3, //query point p3
- Spheroid const& spheroid)
- {
- typedef typename FormulaPolicy::template inverse<CT, true, true, false, true, true>
- inverse_distance_azimuth_quantities_type;
- typedef typename FormulaPolicy::template inverse<CT, false, true, false, false, false>
- inverse_azimuth_type;
- typedef typename FormulaPolicy::template inverse<CT, false, true, true, false, false>
- inverse_azimuth_reverse_type;
- typedef typename FormulaPolicy::template direct<CT, true, false, false, false>
- direct_distance_type;
-
- CT const earth_radius = geometry::formula::mean_radius<CT>(spheroid);
-
- result_distance_point_segment<CT> result;
-
- // Constants
- //CT const f = geometry::formula::flattening<CT>(spheroid);
- CT const pi = math::pi<CT>();
- CT const half_pi = pi / CT(2);
- CT const c0 = CT(0);
-
- // Convert to radians
- lon1 = math::as_radian<Units>(lon1);
- lat1 = math::as_radian<Units>(lat1);
- lon2 = math::as_radian<Units>(lon2);
- lat2 = math::as_radian<Units>(lat2);
- lon3 = math::as_radian<Units>(lon3);
- lat3 = math::as_radian<Units>(lat3);
-
- if (lon1 > lon2)
- {
- std::swap(lon1, lon2);
- std::swap(lat1, lat2);
- }
-
- //segment on equator
- //Note: antipodal points on equator does not define segment on equator
- //but pass by the pole
- CT diff = geometry::math::longitude_distance_signed<geometry::radian>(lon1, lon2);
-
- typedef typename formula::elliptic_arc_length<CT> elliptic_arc_length;
-
- bool meridian_not_crossing_pole =
- elliptic_arc_length::meridian_not_crossing_pole(lat1, lat2, diff);
-
- bool meridian_crossing_pole =
- elliptic_arc_length::meridian_crossing_pole(diff);
-
- //bool meridian_crossing_pole = math::equals(math::abs(diff), pi);
- //bool meridian_not_crossing_pole = math::equals(math::abs(diff), c0);
-
- if (math::equals(lat1, c0) && math::equals(lat2, c0) && !meridian_crossing_pole)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "Equatorial segment" << std::endl;
- std::cout << "segment=(" << lon1 * math::r2d<CT>();
- std::cout << "," << lat1 * math::r2d<CT>();
- std::cout << "),(" << lon2 * math::r2d<CT>();
- std::cout << "," << lat2 * math::r2d<CT>();
- std::cout << ")\np=(" << lon3 * math::r2d<CT>();
- std::cout << "," << lat3 * math::r2d<CT>() << ")\n";
-#endif
- if (lon3 <= lon1)
- {
- return non_iterative_case(lon1, lat1, lon3, lat3, spheroid);
- }
- if (lon3 >= lon2)
- {
- return non_iterative_case(lon2, lat2, lon3, lat3, spheroid);
- }
- return non_iterative_case(lon3, lat1, lon3, lat3, spheroid);
- }
-
- if ( (meridian_not_crossing_pole || meridian_crossing_pole ) && lat1 > lat2)
- {
- std::swap(lat1,lat2);
- }
-
- if (meridian_crossing_pole)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "Meridian segment" << std::endl;
-#endif
- result_distance_point_segment<CT> d1 = apply<geometry::radian>(lon1, lat1, lon1, half_pi, lon3, lat3, spheroid);
- result_distance_point_segment<CT> d2 = apply<geometry::radian>(lon2, lat2, lon2, half_pi, lon3, lat3, spheroid);
- if (d1.distance < d2.distance)
- {
- return d1;
- }
- else
- {
- return d2;
- }
- }
-
- CT d1 = geometry::strategy::distance::geographic<FormulaPolicy, Spheroid, CT>
- ::apply(lon1, lat1, lon3, lat3, spheroid);
-
- CT d3 = geometry::strategy::distance::geographic<FormulaPolicy, Spheroid, CT>
- ::apply(lon1, lat1, lon2, lat2, spheroid);
-
- if (geometry::math::equals(d3, c0))
- {
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "Degenerate segment" << std::endl;
- std::cout << "distance between points=" << d1 << std::endl;
-#endif
- return non_iterative_case(lon1, lat2, d1);
- }
-
- CT d2 = geometry::strategy::distance::geographic<FormulaPolicy, Spheroid, CT>
- ::apply(lon2, lat2, lon3, lat3, spheroid);
-
- // Compute a12 (GEO)
- geometry::formula::result_inverse<CT> res12 =
- inverse_azimuth_reverse_type::apply(lon1, lat1, lon2, lat2, spheroid);
- CT a12 = res12.azimuth;
- CT a13 = inverse_azimuth_type::apply(lon1, lat1, lon3, lat3, spheroid).azimuth;
-
- CT a312 = a13 - a12;
-
- if (geometry::math::equals(a312, c0))
- {
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "point on segment" << std::endl;
-#endif
- return non_iterative_case(lon3, lat3, c0);
- }
-
- CT projection1 = cos( a312 ) * d1 / d3;
-
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "segment=(" << lon1 * math::r2d<CT>();
- std::cout << "," << lat1 * math::r2d<CT>();
- std::cout << "),(" << lon2 * math::r2d<CT>();
- std::cout << "," << lat2 * math::r2d<CT>();
- std::cout << ")\np=(" << lon3 * math::r2d<CT>();
- std::cout << "," << lat3 * math::r2d<CT>();
- std::cout << ")\na1=" << a12 * math::r2d<CT>() << std::endl;
- std::cout << "a13=" << a13 * math::r2d<CT>() << std::endl;
- std::cout << "a312=" << a312 * math::r2d<CT>() << std::endl;
- std::cout << "cos(a312)=" << cos(a312) << std::endl;
-#endif
- if (projection1 < 0.0)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "projection closer to p1" << std::endl;
-#endif
- // projection of p3 on geodesic spanned by segment (p1,p2) fall
- // outside of segment on the side of p1
- return non_iterative_case(lon1, lat1, lon3, lat3, spheroid);
- }
-
- CT a21 = res12.reverse_azimuth - pi;
- CT a23 = inverse_azimuth_type::apply(lon2, lat2, lon3, lat3, spheroid).azimuth;
-
- CT a321 = a23 - a21;
-
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "a21=" << a21 * math::r2d<CT>() << std::endl;
- std::cout << "a23=" << a23 * math::r2d<CT>() << std::endl;
- std::cout << "a321=" << a321 * math::r2d<CT>() << std::endl;
- std::cout << "cos(a321)=" << cos(a321) << std::endl;
-#endif
- CT projection2 = cos( a321 ) * d2 / d3;
-
- if (projection2 < 0.0)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "projection closer to p2" << std::endl;
-#endif
- // projection of p3 on geodesic spanned by segment (p1,p2) fall
- // outside of segment on the side of p2
- return non_iterative_case(lon2, lat2, lon3, lat3, spheroid);
- }
-
- // Guess s14 (SPHERICAL)
- typedef geometry::model::point
- <
- CT, 2,
- geometry::cs::spherical_equatorial<geometry::radian>
- > point;
-
- point p1 = point(lon1, lat1);
- point p2 = point(lon2, lat2);
- point p3 = point(lon3, lat3);
-
- geometry::strategy::distance::cross_track<CT> cross_track(earth_radius);
- CT s34 = cross_track.apply(p3, p1, p2);
-
- geometry::strategy::distance::haversine<CT> str(earth_radius);
- CT s13 = str.apply(p1, p3);
- CT s14 = acos( cos(s13/earth_radius) / cos(s34/earth_radius) ) * earth_radius;
-
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "s34=" << s34 << std::endl;
- std::cout << "s13=" << s13 << std::endl;
- std::cout << "s14=" << s14 << std::endl;
- std::cout << "===============" << std::endl;
-#endif
-
- // Update s14 (using Newton method)
- CT prev_distance = 0;
- geometry::formula::result_direct<CT> res14;
- geometry::formula::result_inverse<CT> res34;
-
- int counter = 0; // robustness
- CT g4;
- CT delta_g4;
-
- do{
- prev_distance = res34.distance;
-
- // Solve the direct problem to find p4 (GEO)
- res14 = direct_distance_type::apply(lon1, lat1, s14, a12, spheroid);
-
- // Solve an inverse problem to find g4
- // g4 is the angle between segment (p1,p2) and segment (p3,p4) that meet on p4 (GEO)
-
- CT a4 = inverse_azimuth_type::apply(res14.lon2, res14.lat2,
- lon2, lat2, spheroid).azimuth;
- res34 = inverse_distance_azimuth_quantities_type::apply(res14.lon2, res14.lat2,
- lon3, lat3, spheroid);
- g4 = res34.azimuth - a4;
-
-
-
- CT M43 = res34.geodesic_scale; // cos(s14/earth_radius) is the spherical limit
- CT m34 = res34.reduced_length;
- CT der = (M43 / m34) * sin(g4);
-
- // normalize (g4 - pi/2)
- delta_g4 = normalize(g4, der);
-
- s14 = s14 - delta_g4 / der;
-
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "p4=" << res14.lon2 * math::r2d<CT>() <<
- "," << res14.lat2 * math::r2d<CT>() << std::endl;
- std::cout << "a34=" << res34.azimuth * math::r2d<CT>() << std::endl;
- std::cout << "a4=" << a4 * math::r2d<CT>() << std::endl;
- std::cout << "g4=" << g4 * math::r2d<CT>() << std::endl;
- std::cout << "delta_g4=" << delta_g4 * math::r2d<CT>() << std::endl;
- std::cout << "der=" << der << std::endl;
- std::cout << "M43=" << M43 << std::endl;
- std::cout << "spherical limit=" << cos(s14/earth_radius) << std::endl;
- std::cout << "m34=" << m34 << std::endl;
- std::cout << "new_s14=" << s14 << std::endl;
- std::cout << std::setprecision(16) << "dist =" << res34.distance << std::endl;
- std::cout << "---------end of step " << counter << std::endl<< std::endl;
-#endif
- result.distance = prev_distance;
-
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- if (g4 == half_pi)
- {
- std::cout << "Stop msg: g4 == half_pi" << std::endl;
- }
- if (res34.distance >= prev_distance && prev_distance != 0)
- {
- std::cout << "Stop msg: res34.distance >= prev_distance" << std::endl;
- }
- if (delta_g4 == 0)
- {
- std::cout << "Stop msg: delta_g4 == 0" << std::endl;
- }
- if (counter == 19)
- {
- std::cout << "Stop msg: counter" << std::endl;
- }
-#endif
-
- } while (g4 != half_pi
- && (prev_distance > res34.distance || prev_distance == 0)
- && delta_g4 != 0
- && ++counter < BOOST_GEOMETRY_DETAIL_POINT_SEGMENT_DISTANCE_MAX_STEPS ) ;
-
-#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
- std::cout << "distance=" << res34.distance << std::endl;
-
- point p4(res14.lon2, res14.lat2);
- CT s34_sph = str.apply(p4, p3);
-
- std::cout << "s34(sph) =" << s34_sph << std::endl;
- std::cout << "s34(geo) ="
- << inverse_distance_azimuth_quantities_type::apply(get<0>(p4), get<1>(p4), lon3, lat3, spheroid).distance
- << ", p4=(" << get<0>(p4) * math::r2d<double>() << ","
- << get<1>(p4) * math::r2d<double>() << ")"
- << std::endl;
-
- CT s31 = inverse_distance_azimuth_quantities_type::apply(lon3, lat3, lon1, lat1, spheroid).distance;
- CT s32 = inverse_distance_azimuth_quantities_type::apply(lon3, lat3, lon2, lat2, spheroid).distance;
-
- CT a4 = inverse_azimuth_type::apply(get<0>(p4), get<1>(p4), lon2, lat2, spheroid).azimuth;
- geometry::formula::result_direct<CT> res4 = direct_distance_type::apply(get<0>(p4), get<1>(p4), .04, a4, spheroid);
- CT p4_plus = inverse_distance_azimuth_quantities_type::apply(res4.lon2, res4.lat2, lon3, lat3, spheroid).distance;
-
- geometry::formula::result_direct<CT> res1 = direct_distance_type::apply(lon1, lat1, s14-.04, a12, spheroid);
- CT p4_minus = inverse_distance_azimuth_quantities_type::apply(res1.lon2, res1.lat2, lon3, lat3, spheroid).distance;
-
- std::cout << "s31=" << s31 << "\ns32=" << s32
- << "\np4_plus=" << p4_plus << ", p4=(" << res4.lon2 * math::r2d<double>() << "," << res4.lat2 * math::r2d<double>() << ")"
- << "\np4_minus=" << p4_minus << ", p4=(" << res1.lon2 * math::r2d<double>() << "," << res1.lat2 * math::r2d<double>() << ")"
- << std::endl;
-
- if (res34.distance <= p4_plus && res34.distance <= p4_minus)
- {
- std::cout << "Closest point computed" << std::endl;
- }
- else
- {
- std::cout << "There is a closer point nearby" << std::endl;
- }
-#endif
-
- return result;
- }
-
- Spheroid m_spheroid;
-};
-
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-//tags
-template <typename FormulaPolicy>
-struct tag<geographic_cross_track<FormulaPolicy> >
-{
- typedef strategy_tag_distance_point_segment type;
-};
-
-template
-<
- typename FormulaPolicy,
- typename Spheroid
->
-struct tag<geographic_cross_track<FormulaPolicy, Spheroid> >
-{
- typedef strategy_tag_distance_point_segment type;
-};
-
-template
-<
- typename FormulaPolicy,
- typename Spheroid,
- typename CalculationType
->
-struct tag<geographic_cross_track<FormulaPolicy, Spheroid, CalculationType> >
-{
- typedef strategy_tag_distance_point_segment type;
-};
-
-
-//return types
-template <typename FormulaPolicy, typename P, typename PS>
-struct return_type<geographic_cross_track<FormulaPolicy>, P, PS>
- : geographic_cross_track<FormulaPolicy>::template return_type<P, PS>
-{};
-
-template
-<
- typename FormulaPolicy,
- typename Spheroid,
- typename P,
- typename PS
->
-struct return_type<geographic_cross_track<FormulaPolicy, Spheroid>, P, PS>
- : geographic_cross_track<FormulaPolicy, Spheroid>::template return_type<P, PS>
-{};
-
-template
-<
- typename FormulaPolicy,
- typename Spheroid,
- typename CalculationType,
- typename P,
- typename PS
->
-struct return_type<geographic_cross_track<FormulaPolicy, Spheroid, CalculationType>, P, PS>
- : geographic_cross_track<FormulaPolicy, Spheroid, CalculationType>::template return_type<P, PS>
-{};
-
-//comparable types
-template
-<
- typename FormulaPolicy,
- typename Spheroid,
- typename CalculationType
->
-struct comparable_type<geographic_cross_track<FormulaPolicy, Spheroid, CalculationType> >
-{
- typedef geographic_cross_track
- <
- FormulaPolicy, Spheroid, CalculationType
- > type;
-};
-
-template
-<
- typename FormulaPolicy,
- typename Spheroid,
- typename CalculationType
->
-struct get_comparable<geographic_cross_track<FormulaPolicy, Spheroid, CalculationType> >
-{
- typedef typename comparable_type
- <
- geographic_cross_track<FormulaPolicy, Spheroid, CalculationType>
- >::type comparable_type;
-public :
- static inline comparable_type
- apply(geographic_cross_track<FormulaPolicy, Spheroid, CalculationType> const& )
- {
- return comparable_type();
- }
-};
-
-
-template
-<
- typename FormulaPolicy,
- typename P,
- typename PS
->
-struct result_from_distance<geographic_cross_track<FormulaPolicy>, P, PS>
-{
-private :
- typedef typename geographic_cross_track
- <
- FormulaPolicy
- >::template return_type<P, PS>::type return_type;
-public :
- template <typename T>
- static inline return_type
- apply(geographic_cross_track<FormulaPolicy> const& , T const& distance)
- {
- return distance;
- }
-};
-
-template
-<
- typename FormulaPolicy,
- typename Spheroid,
- typename CalculationType,
- typename P,
- typename PS
->
-struct result_from_distance<geographic_cross_track<FormulaPolicy, Spheroid, CalculationType>, P, PS>
-{
-private :
- typedef typename geographic_cross_track
- <
- FormulaPolicy, Spheroid, CalculationType
- >::template return_type<P, PS>::type return_type;
-public :
- template <typename T>
- static inline return_type
- apply(geographic_cross_track<FormulaPolicy, Spheroid, CalculationType> const& , T const& distance)
- {
- return distance;
- }
-};
-
-
-template <typename Point, typename PointOfSegment>
-struct default_strategy
- <
- point_tag, segment_tag, Point, PointOfSegment,
- geographic_tag, geographic_tag
- >
-{
- typedef geographic_cross_track<> type;
-};
-
-
-template <typename PointOfSegment, typename Point>
-struct default_strategy
- <
- segment_tag, point_tag, PointOfSegment, Point,
- geographic_tag, geographic_tag
- >
-{
- typedef typename default_strategy
- <
- point_tag, segment_tag, Point, PointOfSegment,
- geographic_tag, geographic_tag
- >::type type;
-};
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-}} // namespace strategy::distance
-
-}} // namespace boost::geometry
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_CROSS_TRACK_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_cross_track_box_box.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_cross_track_box_box.hpp
deleted file mode 100644
index 4f6b3b45b7b..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_cross_track_box_box.hpp
+++ /dev/null
@@ -1,207 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017-2018, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_CROSS_TRACK_BOX_BOX_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_CROSS_TRACK_BOX_BOX_HPP
-
-#include <boost/config.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/concepts/distance_concept.hpp>
-#include <boost/geometry/strategies/spherical/distance_cross_track.hpp>
-#include <boost/geometry/strategies/spherical/distance_cross_track_box_box.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/algorithms/detail/assign_box_corners.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-
-/*!
-\brief Strategy functor for distance point to box calculation
-\ingroup strategies
-\details Class which calculates the distance of a point to a box, for
-points and boxes on a sphere or globe
-\tparam CalculationType \tparam_calculation
-\tparam Strategy underlying point-segment distance strategy, defaults
-to cross track
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
-}
-*/
-template
-<
- typename FormulaPolicy = strategy::andoyer,
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class geographic_cross_track_box_box
-{
-public:
- typedef geographic_cross_track<FormulaPolicy, Spheroid, CalculationType> Strategy;
-
- template <typename Box1, typename Box2>
- struct return_type
- : services::return_type<Strategy, typename point_type<Box1>::type, typename point_type<Box2>::type>
- {};
-
- inline geographic_cross_track_box_box()
- {}
-
- template <typename Box1, typename Box2>
- inline typename return_type<Box1, Box2>::type
- apply(Box1 const& box1, Box2 const& box2) const
- {
-/*
-#if !defined(BOOST_MSVC)
- BOOST_CONCEPT_ASSERT
- (
- (concepts::PointSegmentDistanceStrategy
- <
- Strategy,
- typename point_type<Box1>::type,
- typename point_type<Box2>::type
- >)
- );
-#endif
-*/
- typedef typename return_type<Box1, Box2>::type return_type;
- return details::cross_track_box_box_generic
- <return_type>::apply(box1, box2, Strategy());
- }
-};
-
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename Strategy, typename Spheroid, typename CalculationType>
-struct tag<geographic_cross_track_box_box<Strategy, Spheroid, CalculationType> >
-{
- typedef strategy_tag_distance_box_box type;
-};
-
-
-template <typename Strategy, typename Spheroid, typename CalculationType, typename Box1, typename Box2>
-struct return_type<geographic_cross_track_box_box<Strategy, Spheroid, CalculationType>, Box1, Box2>
- : geographic_cross_track_box_box
- <
- Strategy, Spheroid, CalculationType
- >::template return_type<Box1, Box2>
-{};
-
-template <typename Strategy, typename Spheroid, typename Box1, typename Box2>
-struct return_type<geographic_cross_track_box_box<Strategy, Spheroid>, Box1, Box2>
- : geographic_cross_track_box_box
- <
- Strategy, Spheroid
- >::template return_type<Box1, Box2>
-{};
-
-template <typename Strategy, typename Box1, typename Box2>
-struct return_type<geographic_cross_track_box_box<Strategy>, Box1, Box2>
- : geographic_cross_track_box_box
- <
- Strategy
- >::template return_type<Box1, Box2>
-{};
-
-template <typename Strategy, typename Spheroid, typename CalculationType>
-struct comparable_type<geographic_cross_track_box_box<Strategy, Spheroid, CalculationType> >
-{
- typedef geographic_cross_track_box_box
- <
- typename comparable_type<Strategy>::type, Spheroid, CalculationType
- > type;
-};
-
-
-template <typename Strategy, typename Spheroid, typename CalculationType>
-struct get_comparable<geographic_cross_track_box_box<Strategy, Spheroid, CalculationType> >
-{
- typedef geographic_cross_track_box_box<Strategy, Spheroid, CalculationType> this_strategy;
- typedef typename comparable_type<this_strategy>::type comparable_type;
-
-public:
- static inline comparable_type apply(this_strategy const& /*strategy*/)
- {
- return comparable_type();
- }
-};
-
-
-template <typename Strategy, typename Spheroid, typename CalculationType, typename Box1, typename Box2>
-struct result_from_distance
- <
- geographic_cross_track_box_box<Strategy, Spheroid, CalculationType>, Box1, Box2
- >
-{
-private:
- typedef geographic_cross_track_box_box<Strategy, Spheroid, CalculationType> this_strategy;
-
- typedef typename this_strategy::template return_type
- <
- Box1, Box2
- >::type return_type;
-
-public:
- template <typename T>
- static inline return_type apply(this_strategy const& strategy,
- T const& distance)
- {
- result_from_distance
- <
- Strategy,
- typename point_type<Box1>::type,
- typename point_type<Box2>::type
- >::apply(strategy, distance);
- }
-};
-
-template <typename Box1, typename Box2>
-struct default_strategy
- <
- box_tag, box_tag, Box1, Box2,
- geographic_tag, geographic_tag
- >
-{
- typedef geographic_cross_track_box_box<> type;
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_CROSS_TRACK_BOX_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_cross_track_point_box.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_cross_track_point_box.hpp
deleted file mode 100644
index 016427428c5..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_cross_track_point_box.hpp
+++ /dev/null
@@ -1,218 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017-2018, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle.
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_CROSS_TRACK_POINT_BOX_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_CROSS_TRACK_POINT_BOX_HPP
-
-#include <boost/config.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/concepts/distance_concept.hpp>
-#include <boost/geometry/strategies/spherical/distance_cross_track.hpp>
-#include <boost/geometry/strategies/geographic/distance_cross_track.hpp>
-#include <boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/algorithms/detail/assign_box_corners.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-
-/*!
-\brief Strategy functor for distance point to box calculation
-\ingroup strategies
-\details Class which calculates the distance of a point to a box, for
-points and boxes on a sphere or globe
-\tparam CalculationType \tparam_calculation
-\tparam Strategy underlying point-segment distance strategy, defaults
-to cross track
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
-}
-*/
-template
-<
- typename FormulaPolicy = strategy::andoyer,
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class geographic_cross_track_point_box
-{
-public:
- typedef geographic_cross_track<FormulaPolicy, Spheroid, CalculationType> Strategy;
-
- template <typename Point, typename Box>
- struct return_type
- : services::return_type<Strategy, Point, typename point_type<Box>::type>
- {};
-
- inline geographic_cross_track_point_box()
- {}
-
- template <typename Point, typename Box>
- inline typename return_type<Point, Box>::type
- apply(Point const& point, Box const& box) const
- {
-/*
-#if !defined(BOOST_MSVC)
- BOOST_CONCEPT_ASSERT
- (
- (concepts::PointSegmentDistanceStrategy
- <
- Strategy, Point, typename point_type<Box>::type
- >)
- );
-#endif
-*/
-
- typedef typename return_type<Point, Box>::type return_type;
-
- return details::cross_track_point_box_generic
- <return_type>::apply(point, box, Strategy());
- }
-};
-
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename Strategy, typename Spheroid, typename CalculationType>
-struct tag<geographic_cross_track_point_box<Strategy, Spheroid, CalculationType> >
-{
- typedef strategy_tag_distance_point_box type;
-};
-
-
-template <typename Strategy, typename Spheroid, typename CalculationType, typename P, typename Box>
-struct return_type<geographic_cross_track_point_box<Strategy, Spheroid, CalculationType>, P, Box>
- : geographic_cross_track_point_box
- <
- Strategy, Spheroid, CalculationType
- >::template return_type<P, Box>
-{};
-
-template <typename Strategy, typename Spheroid, typename P, typename Box>
-struct return_type<geographic_cross_track_point_box<Strategy, Spheroid>, P, Box>
- : geographic_cross_track_point_box
- <
- Strategy, Spheroid
- >::template return_type<P, Box>
-{};
-
-template <typename Strategy, typename P, typename Box>
-struct return_type<geographic_cross_track_point_box<Strategy>, P, Box>
- : geographic_cross_track_point_box
- <
- Strategy
- >::template return_type<P, Box>
-{};
-
-template <typename Strategy, typename Spheroid, typename CalculationType>
-struct comparable_type<geographic_cross_track_point_box<Strategy, Spheroid, CalculationType> >
-{
- typedef geographic_cross_track_point_box
- <
- Strategy, Spheroid, CalculationType
- > type;
-};
-
-
-template <typename Strategy, typename Spheroid, typename CalculationType>
-struct get_comparable<geographic_cross_track_point_box<Strategy, Spheroid, CalculationType> >
-{
- typedef geographic_cross_track_point_box<Strategy, Spheroid, CalculationType> this_strategy;
- typedef typename comparable_type<this_strategy>::type comparable_type;
-
-public:
- static inline comparable_type apply(this_strategy const&)
- {
- return comparable_type();
- }
-};
-
-
-template <typename Strategy, typename Spheroid, typename CalculationType, typename P, typename Box>
-struct result_from_distance
- <
- geographic_cross_track_point_box<Strategy, Spheroid, CalculationType>, P, Box
- >
-{
-private:
- typedef geographic_cross_track_point_box<Strategy, Spheroid, CalculationType> this_strategy;
-
- typedef typename this_strategy::template return_type
- <
- P, Box
- >::type return_type;
-
-public:
- template <typename T>
- static inline return_type apply(this_strategy const& strategy,
- T const& distance)
- {
- result_from_distance
- <
- Strategy, P, typename point_type<Box>::type
- >::apply(strategy, distance);
- }
-};
-
-template <typename Point, typename Box>
-struct default_strategy
- <
- point_tag, box_tag, Point, Box,
- geographic_tag, geographic_tag
- >
-{
- typedef geographic_cross_track_point_box<> type;
-};
-
-template <typename Box, typename Point>
-struct default_strategy
- <
- box_tag, point_tag, Box, Point,
- geographic_tag, geographic_tag
- >
-{
- typedef typename default_strategy
- <
- point_tag, box_tag, Point, Box,
- geographic_tag, geographic_tag
- >::type type;
-};
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_DISTANCE_CROSS_TRACK_POINT_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_thomas.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_thomas.hpp
deleted file mode 100644
index 490920c7781..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_thomas.hpp
+++ /dev/null
@@ -1,121 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015-2017.
-// Modifications copyright (c) 2015-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_THOMAS_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_THOMAS_HPP
-
-
-#include <boost/geometry/strategies/geographic/distance.hpp>
-#include <boost/geometry/strategies/geographic/parameters.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-/*!
-\brief The solution of the inverse problem of geodesics on latlong coordinates,
- Forsyth-Andoyer-Lambert type approximation with second order terms.
-\ingroup distance
-\tparam Spheroid The reference spheroid model
-\tparam CalculationType \tparam_calculation
-\author See
- - Technical Report: PAUL D. THOMAS, MATHEMATICAL MODELS FOR NAVIGATION SYSTEMS, 1965
- http://www.dtic.mil/docs/citations/AD0627893
- - Technical Report: PAUL D. THOMAS, SPHEROIDAL GEODESICS, REFERENCE SYSTEMS, AND LOCAL GEOMETRY, 1970
- http://www.dtic.mil/docs/citations/AD703541
-*/
-template
-<
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class thomas
- : public strategy::distance::geographic
- <
- strategy::thomas, Spheroid, CalculationType
- >
-{
- typedef strategy::distance::geographic
- <
- strategy::thomas, Spheroid, CalculationType
- > base_type;
-
-public :
- inline thomas()
- : base_type()
- {}
-
- explicit inline thomas(Spheroid const& spheroid)
- : base_type(spheroid)
- {}
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename Spheroid, typename CalculationType>
-struct tag<thomas<Spheroid, CalculationType> >
-{
- typedef strategy_tag_distance_point_point type;
-};
-
-
-template <typename Spheroid, typename CalculationType, typename P1, typename P2>
-struct return_type<thomas<Spheroid, CalculationType>, P1, P2>
- : thomas<Spheroid, CalculationType>::template calculation_type<P1, P2>
-{};
-
-
-template <typename Spheroid, typename CalculationType>
-struct comparable_type<thomas<Spheroid, CalculationType> >
-{
- typedef thomas<Spheroid, CalculationType> type;
-};
-
-
-template <typename Spheroid, typename CalculationType>
-struct get_comparable<thomas<Spheroid, CalculationType> >
-{
- static inline thomas<Spheroid, CalculationType> apply(thomas<Spheroid, CalculationType> const& input)
- {
- return input;
- }
-};
-
-template <typename Spheroid, typename CalculationType, typename P1, typename P2>
-struct result_from_distance<thomas<Spheroid, CalculationType>, P1, P2 >
-{
- template <typename T>
- static inline typename return_type<thomas<Spheroid, CalculationType>, P1, P2>::type
- apply(thomas<Spheroid, CalculationType> const& , T const& value)
- {
- return value;
- }
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_THOMAS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_vincenty.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_vincenty.hpp
deleted file mode 100644
index 41146db9ff4..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/distance_vincenty.hpp
+++ /dev/null
@@ -1,127 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014-2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_VINCENTY_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_VINCENTY_HPP
-
-
-#include <boost/geometry/strategies/geographic/distance.hpp>
-#include <boost/geometry/strategies/geographic/parameters.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-/*!
-\brief Distance calculation formulae on latlong coordinates, after Vincenty, 1975
-\ingroup distance
-\tparam Spheroid The reference spheroid model
-\tparam CalculationType \tparam_calculation
-\author See
- - http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf
- - http://www.icsm.gov.au/gda/gdav2.3.pdf
-\author Adapted from various implementations to get it close to the original document
- - http://www.movable-type.co.uk/scripts/LatLongVincenty.html
- - http://exogen.case.edu/projects/geopy/source/geopy.distance.html
- - http://futureboy.homeip.net/fsp/colorize.fsp?fileName=navigation.frink
-
-*/
-template
-<
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class vincenty
- : public strategy::distance::geographic
- <
- strategy::vincenty, Spheroid, CalculationType
- >
-{
- typedef strategy::distance::geographic
- <
- strategy::vincenty, Spheroid, CalculationType
- > base_type;
-
-public:
- inline vincenty()
- : base_type()
- {}
-
- explicit inline vincenty(Spheroid const& spheroid)
- : base_type(spheroid)
- {}
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename Spheroid, typename CalculationType>
-struct tag<vincenty<Spheroid, CalculationType> >
-{
- typedef strategy_tag_distance_point_point type;
-};
-
-
-template <typename Spheroid, typename CalculationType, typename P1, typename P2>
-struct return_type<vincenty<Spheroid, CalculationType>, P1, P2>
- : vincenty<Spheroid, CalculationType>::template calculation_type<P1, P2>
-{};
-
-
-template <typename Spheroid, typename CalculationType>
-struct comparable_type<vincenty<Spheroid, CalculationType> >
-{
- typedef vincenty<Spheroid, CalculationType> type;
-};
-
-
-template <typename Spheroid, typename CalculationType>
-struct get_comparable<vincenty<Spheroid, CalculationType> >
-{
- static inline vincenty<Spheroid, CalculationType> apply(vincenty<Spheroid, CalculationType> const& input)
- {
- return input;
- }
-};
-
-template <typename Spheroid, typename CalculationType, typename P1, typename P2>
-struct result_from_distance<vincenty<Spheroid, CalculationType>, P1, P2 >
-{
- template <typename T>
- static inline typename return_type<vincenty<Spheroid, CalculationType>, P1, P2>::type
- apply(vincenty<Spheroid, CalculationType> const& , T const& value)
- {
- return value;
- }
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-// We might add a vincenty-like strategy also for point-segment distance, but to calculate the projected point is not trivial
-
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_VINCENTY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/envelope_segment.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/envelope_segment.hpp
deleted file mode 100644
index 5bada63f634..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/envelope_segment.hpp
+++ /dev/null
@@ -1,106 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_ENVELOPE_SEGMENT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_ENVELOPE_SEGMENT_HPP
-
-
-#include <boost/geometry/algorithms/detail/envelope/segment.hpp>
-#include <boost/geometry/algorithms/detail/normalize.hpp>
-
-#include <boost/geometry/srs/spheroid.hpp>
-
-#include <boost/geometry/strategies/envelope.hpp>
-#include <boost/geometry/strategies/geographic/azimuth.hpp>
-#include <boost/geometry/strategies/geographic/parameters.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace envelope
-{
-
-template
-<
- typename FormulaPolicy = strategy::andoyer,
- typename Spheroid = geometry::srs::spheroid<double>,
- typename CalculationType = void
->
-class geographic_segment
-{
-public:
- typedef Spheroid model_type;
-
- inline geographic_segment()
- : m_spheroid()
- {}
-
- explicit inline geographic_segment(Spheroid const& spheroid)
- : m_spheroid(spheroid)
- {}
-
- template <typename Point1, typename Point2, typename Box>
- inline void apply(Point1 const& point1, Point2 const& point2, Box& box) const
- {
- Point1 p1_normalized = detail::return_normalized<Point1>(point1);
- Point2 p2_normalized = detail::return_normalized<Point2>(point2);
-
- geometry::strategy::azimuth::geographic
- <
- FormulaPolicy,
- Spheroid,
- CalculationType
- > azimuth_geographic(m_spheroid);
-
- typedef typename coordinate_system<Point1>::type::units units_type;
-
- detail::envelope::envelope_segment_impl
- <
- geographic_tag
- >::template apply<units_type>(geometry::get<0>(p1_normalized),
- geometry::get<1>(p1_normalized),
- geometry::get<0>(p2_normalized),
- geometry::get<1>(p2_normalized),
- box,
- azimuth_geographic);
-
- }
-
-private:
- Spheroid m_spheroid;
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-template <typename CalculationType>
-struct default_strategy<geographic_tag, CalculationType>
-{
- typedef strategy::envelope::geographic_segment
- <
- strategy::andoyer,
- srs::spheroid<double>,
- CalculationType
- > type;
-};
-
-}
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::envelope
-
-}} //namepsace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_ENVELOPE_SEGMENT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/intersection.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/intersection.hpp
deleted file mode 100644
index b017097f3e4..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/intersection.hpp
+++ /dev/null
@@ -1,952 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Copyright (c) 2016-2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_INTERSECTION_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_INTERSECTION_HPP
-
-#include <algorithm>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/detail/assign_values.hpp>
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-#include <boost/geometry/algorithms/detail/recalculate.hpp>
-
-#include <boost/geometry/formulas/andoyer_inverse.hpp>
-#include <boost/geometry/formulas/sjoberg_intersection.hpp>
-#include <boost/geometry/formulas/spherical.hpp>
-#include <boost/geometry/formulas/unit_spheroid.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-#include <boost/geometry/geometries/concepts/segment_concept.hpp>
-
-#include <boost/geometry/policies/robustness/segment_ratio.hpp>
-
-#include <boost/geometry/srs/spheroid.hpp>
-
-#include <boost/geometry/strategies/geographic/area.hpp>
-#include <boost/geometry/strategies/geographic/distance.hpp>
-#include <boost/geometry/strategies/geographic/envelope_segment.hpp>
-#include <boost/geometry/strategies/geographic/parameters.hpp>
-#include <boost/geometry/strategies/geographic/point_in_poly_winding.hpp>
-#include <boost/geometry/strategies/geographic/side.hpp>
-#include <boost/geometry/strategies/intersection.hpp>
-#include <boost/geometry/strategies/intersection_result.hpp>
-#include <boost/geometry/strategies/side_info.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace intersection
-{
-
-// CONSIDER: Improvement of the robustness/accuracy/repeatability by
-// moving all segments to 0 longitude
-// picking latitudes closer to 0
-// etc.
-
-template
-<
- typename FormulaPolicy = strategy::andoyer,
- unsigned int Order = strategy::default_order<FormulaPolicy>::value,
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-struct geographic_segments
-{
- typedef side::geographic
- <
- FormulaPolicy, Spheroid, CalculationType
- > side_strategy_type;
-
- inline side_strategy_type get_side_strategy() const
- {
- return side_strategy_type(m_spheroid);
- }
-
- template <typename Geometry1, typename Geometry2>
- struct point_in_geometry_strategy
- {
- typedef strategy::within::geographic_winding
- <
- typename point_type<Geometry1>::type,
- typename point_type<Geometry2>::type,
- FormulaPolicy,
- Spheroid,
- CalculationType
- > type;
- };
-
- template <typename Geometry1, typename Geometry2>
- inline typename point_in_geometry_strategy<Geometry1, Geometry2>::type
- get_point_in_geometry_strategy() const
- {
- typedef typename point_in_geometry_strategy
- <
- Geometry1, Geometry2
- >::type strategy_type;
- return strategy_type(m_spheroid);
- }
-
- template <typename Geometry>
- struct area_strategy
- {
- typedef area::geographic
- <
- FormulaPolicy,
- Order,
- Spheroid,
- CalculationType
- > type;
- };
-
- template <typename Geometry>
- inline typename area_strategy<Geometry>::type get_area_strategy() const
- {
- typedef typename area_strategy<Geometry>::type strategy_type;
- return strategy_type(m_spheroid);
- }
-
- template <typename Geometry>
- struct distance_strategy
- {
- typedef distance::geographic
- <
- FormulaPolicy,
- Spheroid,
- CalculationType
- > type;
- };
-
- template <typename Geometry>
- inline typename distance_strategy<Geometry>::type get_distance_strategy() const
- {
- typedef typename distance_strategy<Geometry>::type strategy_type;
- return strategy_type(m_spheroid);
- }
-
- typedef envelope::geographic_segment<FormulaPolicy, Spheroid, CalculationType>
- envelope_strategy_type;
-
- inline envelope_strategy_type get_envelope_strategy() const
- {
- return envelope_strategy_type(m_spheroid);
- }
-
- enum intersection_point_flag { ipi_inters = 0, ipi_at_a1, ipi_at_a2, ipi_at_b1, ipi_at_b2 };
-
- template <typename CoordinateType, typename SegmentRatio>
- struct segment_intersection_info
- {
- template <typename Point, typename Segment1, typename Segment2>
- void calculate(Point& point, Segment1 const& a, Segment2 const& b) const
- {
- if (ip_flag == ipi_inters)
- {
- // TODO: assign the rest of coordinates
- set_from_radian<0>(point, lon);
- set_from_radian<1>(point, lat);
- }
- else if (ip_flag == ipi_at_a1)
- {
- detail::assign_point_from_index<0>(a, point);
- }
- else if (ip_flag == ipi_at_a2)
- {
- detail::assign_point_from_index<1>(a, point);
- }
- else if (ip_flag == ipi_at_b1)
- {
- detail::assign_point_from_index<0>(b, point);
- }
- else // ip_flag == ipi_at_b2
- {
- detail::assign_point_from_index<1>(b, point);
- }
- }
-
- CoordinateType lon;
- CoordinateType lat;
- SegmentRatio robust_ra;
- SegmentRatio robust_rb;
- intersection_point_flag ip_flag;
- };
-
- explicit geographic_segments(Spheroid const& spheroid = Spheroid())
- : m_spheroid(spheroid)
- {}
-
- // Relate segments a and b
- template
- <
- typename Segment1,
- typename Segment2,
- typename Policy,
- typename RobustPolicy
- >
- inline typename Policy::return_type apply(Segment1 const& a, Segment2 const& b,
- Policy const& policy,
- RobustPolicy const& robust_policy) const
- {
- typedef typename point_type<Segment1>::type point1_t;
- typedef typename point_type<Segment2>::type point2_t;
- point1_t a1, a2;
- point2_t b1, b2;
-
- detail::assign_point_from_index<0>(a, a1);
- detail::assign_point_from_index<1>(a, a2);
- detail::assign_point_from_index<0>(b, b1);
- detail::assign_point_from_index<1>(b, b2);
-
- return apply(a, b, policy, robust_policy, a1, a2, b1, b2);
- }
-
- // Relate segments a and b
- template
- <
- typename Segment1,
- typename Segment2,
- typename Policy,
- typename RobustPolicy,
- typename Point1,
- typename Point2
- >
- inline typename Policy::return_type apply(Segment1 const& a, Segment2 const& b,
- Policy const&, RobustPolicy const&,
- Point1 a1, Point1 a2, Point2 b1, Point2 b2) const
- {
- bool is_a_reversed = get<1>(a1) > get<1>(a2);
- bool is_b_reversed = get<1>(b1) > get<1>(b2);
-
- if (is_a_reversed)
- {
- std::swap(a1, a2);
- }
-
- if (is_b_reversed)
- {
- std::swap(b1, b2);
- }
-
- return apply<Policy>(a, b, a1, a2, b1, b2, is_a_reversed, is_b_reversed);
- }
-
-private:
- // Relate segments a and b
- template
- <
- typename Policy,
- typename Segment1,
- typename Segment2,
- typename Point1,
- typename Point2
- >
- inline typename Policy::return_type apply(Segment1 const& a, Segment2 const& b,
- Point1 const& a1, Point1 const& a2,
- Point2 const& b1, Point2 const& b2,
- bool is_a_reversed, bool is_b_reversed) const
- {
- BOOST_CONCEPT_ASSERT( (concepts::ConstSegment<Segment1>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstSegment<Segment2>) );
-
- typedef typename select_calculation_type
- <Segment1, Segment2, CalculationType>::type calc_t;
-
- typedef srs::spheroid<calc_t> spheroid_type;
-
- static const calc_t c0 = 0;
-
- // normalized spheroid
- spheroid_type spheroid = formula::unit_spheroid<spheroid_type>(m_spheroid);
-
- // TODO: check only 2 first coordinates here?
- using geometry::detail::equals::equals_point_point;
- bool a_is_point = equals_point_point(a1, a2);
- bool b_is_point = equals_point_point(b1, b2);
-
- if(a_is_point && b_is_point)
- {
- return equals_point_point(a1, b2)
- ? Policy::degenerate(a, true)
- : Policy::disjoint()
- ;
- }
-
- calc_t const a1_lon = get_as_radian<0>(a1);
- calc_t const a1_lat = get_as_radian<1>(a1);
- calc_t const a2_lon = get_as_radian<0>(a2);
- calc_t const a2_lat = get_as_radian<1>(a2);
- calc_t const b1_lon = get_as_radian<0>(b1);
- calc_t const b1_lat = get_as_radian<1>(b1);
- calc_t const b2_lon = get_as_radian<0>(b2);
- calc_t const b2_lat = get_as_radian<1>(b2);
-
- side_info sides;
-
- // NOTE: potential optimization, don't calculate distance at this point
- // this would require to reimplement inverse strategy to allow
- // calculation of distance if needed, probably also storing intermediate
- // results somehow inside an object.
- typedef typename FormulaPolicy::template inverse<calc_t, true, true, false, false, false> inverse_dist_azi;
- typedef typename inverse_dist_azi::result_type inverse_result;
-
- // TODO: no need to call inverse formula if we know that the points are equal
- // distance can be set to 0 in this case and azimuth may be not calculated
- bool is_equal_a1_b1 = equals_point_point(a1, b1);
- bool is_equal_a2_b1 = equals_point_point(a2, b1);
- bool degen_neq_coords = false;
-
- inverse_result res_b1_b2, res_b1_a1, res_b1_a2;
- if (! b_is_point)
- {
- res_b1_b2 = inverse_dist_azi::apply(b1_lon, b1_lat, b2_lon, b2_lat, spheroid);
- if (math::equals(res_b1_b2.distance, c0))
- {
- b_is_point = true;
- degen_neq_coords = true;
- }
- else
- {
- res_b1_a1 = inverse_dist_azi::apply(b1_lon, b1_lat, a1_lon, a1_lat, spheroid);
- if (math::equals(res_b1_a1.distance, c0))
- {
- is_equal_a1_b1 = true;
- }
- res_b1_a2 = inverse_dist_azi::apply(b1_lon, b1_lat, a2_lon, a2_lat, spheroid);
- if (math::equals(res_b1_a2.distance, c0))
- {
- is_equal_a2_b1 = true;
- }
- sides.set<0>(is_equal_a1_b1 ? 0 : formula::azimuth_side_value(res_b1_a1.azimuth, res_b1_b2.azimuth),
- is_equal_a2_b1 ? 0 : formula::azimuth_side_value(res_b1_a2.azimuth, res_b1_b2.azimuth));
- if (sides.same<0>())
- {
- // Both points are at the same side of other segment, we can leave
- return Policy::disjoint();
- }
- }
- }
-
- bool is_equal_a1_b2 = equals_point_point(a1, b2);
-
- inverse_result res_a1_a2, res_a1_b1, res_a1_b2;
- if (! a_is_point)
- {
- res_a1_a2 = inverse_dist_azi::apply(a1_lon, a1_lat, a2_lon, a2_lat, spheroid);
- if (math::equals(res_a1_a2.distance, c0))
- {
- a_is_point = true;
- degen_neq_coords = true;
- }
- else
- {
- res_a1_b1 = inverse_dist_azi::apply(a1_lon, a1_lat, b1_lon, b1_lat, spheroid);
- if (math::equals(res_a1_b1.distance, c0))
- {
- is_equal_a1_b1 = true;
- }
- res_a1_b2 = inverse_dist_azi::apply(a1_lon, a1_lat, b2_lon, b2_lat, spheroid);
- if (math::equals(res_a1_b2.distance, c0))
- {
- is_equal_a1_b2 = true;
- }
- sides.set<1>(is_equal_a1_b1 ? 0 : formula::azimuth_side_value(res_a1_b1.azimuth, res_a1_a2.azimuth),
- is_equal_a1_b2 ? 0 : formula::azimuth_side_value(res_a1_b2.azimuth, res_a1_a2.azimuth));
- if (sides.same<1>())
- {
- // Both points are at the same side of other segment, we can leave
- return Policy::disjoint();
- }
- }
- }
-
- if(a_is_point && b_is_point)
- {
- return is_equal_a1_b2
- ? Policy::degenerate(a, true)
- : Policy::disjoint()
- ;
- }
-
- // NOTE: at this point the segments may still be disjoint
- // NOTE: at this point one of the segments may be degenerated
-
- bool collinear = sides.collinear();
-
- if (! collinear)
- {
- // WARNING: the side strategy doesn't have the info about the other
- // segment so it may return results inconsistent with this intersection
- // strategy, as it checks both segments for consistency
-
- if (sides.get<0, 0>() == 0 && sides.get<0, 1>() == 0)
- {
- collinear = true;
- sides.set<1>(0, 0);
- }
- else if (sides.get<1, 0>() == 0 && sides.get<1, 1>() == 0)
- {
- collinear = true;
- sides.set<0>(0, 0);
- }
- }
-
- if (collinear)
- {
- if (a_is_point)
- {
- return collinear_one_degenerated<Policy, calc_t>(a, true, b1, b2, a1, a2, res_b1_b2, res_b1_a1, res_b1_a2, is_b_reversed, degen_neq_coords);
- }
- else if (b_is_point)
- {
- return collinear_one_degenerated<Policy, calc_t>(b, false, a1, a2, b1, b2, res_a1_a2, res_a1_b1, res_a1_b2, is_a_reversed, degen_neq_coords);
- }
- else
- {
- calc_t dist_a1_a2, dist_a1_b1, dist_a1_b2;
- calc_t dist_b1_b2, dist_b1_a1, dist_b1_a2;
- // use shorter segment
- if (res_a1_a2.distance <= res_b1_b2.distance)
- {
- calculate_collinear_data(a1, a2, b1, b2, res_a1_a2, res_a1_b1, res_a1_b2, dist_a1_a2, dist_a1_b1);
- calculate_collinear_data(a1, a2, b1, b2, res_a1_a2, res_a1_b2, res_a1_b1, dist_a1_a2, dist_a1_b2);
- dist_b1_b2 = dist_a1_b2 - dist_a1_b1;
- dist_b1_a1 = -dist_a1_b1;
- dist_b1_a2 = dist_a1_a2 - dist_a1_b1;
- }
- else
- {
- calculate_collinear_data(b1, b2, a1, a2, res_b1_b2, res_b1_a1, res_b1_a2, dist_b1_b2, dist_b1_a1);
- calculate_collinear_data(b1, b2, a1, a2, res_b1_b2, res_b1_a2, res_b1_a1, dist_b1_b2, dist_b1_a2);
- dist_a1_a2 = dist_b1_a2 - dist_b1_a1;
- dist_a1_b1 = -dist_b1_a1;
- dist_a1_b2 = dist_b1_b2 - dist_b1_a1;
- }
-
- // NOTE: this is probably not needed
- calc_t const c0 = 0;
- int a1_on_b = position_value(c0, dist_a1_b1, dist_a1_b2);
- int a2_on_b = position_value(dist_a1_a2, dist_a1_b1, dist_a1_b2);
- int b1_on_a = position_value(c0, dist_b1_a1, dist_b1_a2);
- int b2_on_a = position_value(dist_b1_b2, dist_b1_a1, dist_b1_a2);
-
- if ((a1_on_b < 1 && a2_on_b < 1) || (a1_on_b > 3 && a2_on_b > 3))
- {
- return Policy::disjoint();
- }
-
- if (a1_on_b == 1)
- {
- dist_b1_a1 = 0;
- dist_a1_b1 = 0;
- }
- else if (a1_on_b == 3)
- {
- dist_b1_a1 = dist_b1_b2;
- dist_a1_b2 = 0;
- }
-
- if (a2_on_b == 1)
- {
- dist_b1_a2 = 0;
- dist_a1_b1 = dist_a1_a2;
- }
- else if (a2_on_b == 3)
- {
- dist_b1_a2 = dist_b1_b2;
- dist_a1_b2 = dist_a1_a2;
- }
-
- bool opposite = ! same_direction(res_a1_a2.azimuth, res_b1_b2.azimuth);
-
- // NOTE: If segment was reversed opposite, positions and segment ratios has to be altered
- if (is_a_reversed)
- {
- // opposite
- opposite = ! opposite;
- // positions
- std::swap(a1_on_b, a2_on_b);
- b1_on_a = 4 - b1_on_a;
- b2_on_a = 4 - b2_on_a;
- // distances for ratios
- std::swap(dist_b1_a1, dist_b1_a2);
- dist_a1_b1 = dist_a1_a2 - dist_a1_b1;
- dist_a1_b2 = dist_a1_a2 - dist_a1_b2;
- }
- if (is_b_reversed)
- {
- // opposite
- opposite = ! opposite;
- // positions
- a1_on_b = 4 - a1_on_b;
- a2_on_b = 4 - a2_on_b;
- std::swap(b1_on_a, b2_on_a);
- // distances for ratios
- dist_b1_a1 = dist_b1_b2 - dist_b1_a1;
- dist_b1_a2 = dist_b1_b2 - dist_b1_a2;
- std::swap(dist_a1_b1, dist_a1_b2);
- }
-
- segment_ratio<calc_t> ra_from(dist_b1_a1, dist_b1_b2);
- segment_ratio<calc_t> ra_to(dist_b1_a2, dist_b1_b2);
- segment_ratio<calc_t> rb_from(dist_a1_b1, dist_a1_a2);
- segment_ratio<calc_t> rb_to(dist_a1_b2, dist_a1_a2);
-
- return Policy::segments_collinear(a, b, opposite,
- a1_on_b, a2_on_b, b1_on_a, b2_on_a,
- ra_from, ra_to, rb_from, rb_to);
- }
- }
- else // crossing or touching
- {
- if (a_is_point || b_is_point)
- {
- return Policy::disjoint();
- }
-
- calc_t lon = 0, lat = 0;
- intersection_point_flag ip_flag;
- calc_t dist_a1_a2, dist_a1_i1, dist_b1_b2, dist_b1_i1;
- if (calculate_ip_data(a1, a2, b1, b2,
- a1_lon, a1_lat, a2_lon, a2_lat,
- b1_lon, b1_lat, b2_lon, b2_lat,
- res_a1_a2, res_a1_b1, res_a1_b2,
- res_b1_b2, res_b1_a1, res_b1_a2,
- sides, spheroid,
- lon, lat,
- dist_a1_a2, dist_a1_i1, dist_b1_b2, dist_b1_i1,
- ip_flag))
- {
- // NOTE: If segment was reversed sides and segment ratios has to be altered
- if (is_a_reversed)
- {
- // sides
- sides_reverse_segment<0>(sides);
- // distance for ratio
- dist_a1_i1 = dist_a1_a2 - dist_a1_i1;
- // ip flag
- ip_flag_reverse_segment(ip_flag, ipi_at_a1, ipi_at_a2);
- }
- if (is_b_reversed)
- {
- // sides
- sides_reverse_segment<1>(sides);
- // distance for ratio
- dist_b1_i1 = dist_b1_b2 - dist_b1_i1;
- // ip flag
- ip_flag_reverse_segment(ip_flag, ipi_at_b1, ipi_at_b2);
- }
-
- // intersects
- segment_intersection_info
- <
- calc_t,
- segment_ratio<calc_t>
- > sinfo;
-
- sinfo.lon = lon;
- sinfo.lat = lat;
- sinfo.robust_ra.assign(dist_a1_i1, dist_a1_a2);
- sinfo.robust_rb.assign(dist_b1_i1, dist_b1_b2);
- sinfo.ip_flag = ip_flag;
-
- return Policy::segments_crosses(sides, sinfo, a, b);
- }
- else
- {
- return Policy::disjoint();
- }
- }
- }
-
- template <typename Policy, typename CalcT, typename Segment, typename Point1, typename Point2, typename ResultInverse>
- static inline typename Policy::return_type
- collinear_one_degenerated(Segment const& segment, bool degenerated_a,
- Point1 const& a1, Point1 const& a2,
- Point2 const& b1, Point2 const& b2,
- ResultInverse const& res_a1_a2,
- ResultInverse const& res_a1_b1,
- ResultInverse const& res_a1_b2,
- bool is_other_reversed,
- bool degen_neq_coords)
- {
- CalcT dist_1_2, dist_1_o;
- if (! calculate_collinear_data(a1, a2, b1, b2, res_a1_a2, res_a1_b1, res_a1_b2, dist_1_2, dist_1_o, degen_neq_coords))
- {
- return Policy::disjoint();
- }
-
- // NOTE: If segment was reversed segment ratio has to be altered
- if (is_other_reversed)
- {
- // distance for ratio
- dist_1_o = dist_1_2 - dist_1_o;
- }
-
- return Policy::one_degenerate(segment, segment_ratio<CalcT>(dist_1_o, dist_1_2), degenerated_a);
- }
-
- // TODO: instead of checks below test bi against a1 and a2 here?
- // in order to make this independent from is_near()
- template <typename Point1, typename Point2, typename ResultInverse, typename CalcT>
- static inline bool calculate_collinear_data(Point1 const& a1, Point1 const& a2, // in
- Point2 const& b1, Point2 const& b2, // in
- ResultInverse const& res_a1_a2, // in
- ResultInverse const& res_a1_b1, // in
- ResultInverse const& res_a1_b2, // in
- CalcT& dist_a1_a2, // out
- CalcT& dist_a1_bi, // out
- bool degen_neq_coords = false) // in
- {
- dist_a1_a2 = res_a1_a2.distance;
-
- dist_a1_bi = res_a1_b1.distance;
- if (! same_direction(res_a1_b1.azimuth, res_a1_a2.azimuth))
- {
- dist_a1_bi = -dist_a1_bi;
- }
-
- // if i1 is close to a1 and b1 or b2 is equal to a1
- if (is_endpoint_equal(dist_a1_bi, a1, b1, b2))
- {
- dist_a1_bi = 0;
- return true;
- }
- // or i1 is close to a2 and b1 or b2 is equal to a2
- else if (is_endpoint_equal(dist_a1_a2 - dist_a1_bi, a2, b1, b2))
- {
- dist_a1_bi = dist_a1_a2;
- return true;
- }
-
- // check the other endpoint of a very short segment near the pole
- if (degen_neq_coords)
- {
- static CalcT const c0 = 0;
- if (math::equals(res_a1_b2.distance, c0))
- {
- dist_a1_bi = 0;
- return true;
- }
- else if (math::equals(dist_a1_a2 - res_a1_b2.distance, c0))
- {
- dist_a1_bi = dist_a1_a2;
- return true;
- }
- }
-
- // or i1 is on b
- return segment_ratio<CalcT>(dist_a1_bi, dist_a1_a2).on_segment();
- }
-
- template <typename Point1, typename Point2, typename CalcT, typename ResultInverse, typename Spheroid_>
- static inline bool calculate_ip_data(Point1 const& a1, Point1 const& a2, // in
- Point2 const& b1, Point2 const& b2, // in
- CalcT const& a1_lon, CalcT const& a1_lat, // in
- CalcT const& a2_lon, CalcT const& a2_lat, // in
- CalcT const& b1_lon, CalcT const& b1_lat, // in
- CalcT const& b2_lon, CalcT const& b2_lat, // in
- ResultInverse const& res_a1_a2, // in
- ResultInverse const& res_a1_b1, // in
- ResultInverse const& res_a1_b2, // in
- ResultInverse const& res_b1_b2, // in
- ResultInverse const& res_b1_a1, // in
- ResultInverse const& res_b1_a2, // in
- side_info const& sides, // in
- Spheroid_ const& spheroid, // in
- CalcT & lon, CalcT & lat, // out
- CalcT& dist_a1_a2, CalcT& dist_a1_ip, // out
- CalcT& dist_b1_b2, CalcT& dist_b1_ip, // out
- intersection_point_flag& ip_flag) // out
- {
- dist_a1_a2 = res_a1_a2.distance;
- dist_b1_b2 = res_b1_b2.distance;
-
- // assign the IP if some endpoints overlap
- using geometry::detail::equals::equals_point_point;
- if (equals_point_point(a1, b1))
- {
- lon = a1_lon;
- lat = a1_lat;
- dist_a1_ip = 0;
- dist_b1_ip = 0;
- ip_flag = ipi_at_a1;
- return true;
- }
- else if (equals_point_point(a1, b2))
- {
- lon = a1_lon;
- lat = a1_lat;
- dist_a1_ip = 0;
- dist_b1_ip = dist_b1_b2;
- ip_flag = ipi_at_a1;
- return true;
- }
- else if (equals_point_point(a2, b1))
- {
- lon = a2_lon;
- lat = a2_lat;
- dist_a1_ip = dist_a1_a2;
- dist_b1_ip = 0;
- ip_flag = ipi_at_a2;
- return true;
- }
- else if (equals_point_point(a2, b2))
- {
- lon = a2_lon;
- lat = a2_lat;
- dist_a1_ip = dist_a1_a2;
- dist_b1_ip = dist_b1_b2;
- ip_flag = ipi_at_a2;
- return true;
- }
-
- // at this point we know that the endpoints doesn't overlap
- // check cases when an endpoint lies on the other geodesic
- if (sides.template get<0, 0>() == 0) // a1 wrt b
- {
- if (res_b1_a1.distance <= res_b1_b2.distance
- && same_direction(res_b1_a1.azimuth, res_b1_b2.azimuth))
- {
- lon = a1_lon;
- lat = a1_lat;
- dist_a1_ip = 0;
- dist_b1_ip = res_b1_a1.distance;
- ip_flag = ipi_at_a1;
- return true;
- }
- else
- {
- return false;
- }
- }
- else if (sides.template get<0, 1>() == 0) // a2 wrt b
- {
- if (res_b1_a2.distance <= res_b1_b2.distance
- && same_direction(res_b1_a2.azimuth, res_b1_b2.azimuth))
- {
- lon = a2_lon;
- lat = a2_lat;
- dist_a1_ip = res_a1_a2.distance;
- dist_b1_ip = res_b1_a2.distance;
- ip_flag = ipi_at_a2;
- return true;
- }
- else
- {
- return false;
- }
- }
- else if (sides.template get<1, 0>() == 0) // b1 wrt a
- {
- if (res_a1_b1.distance <= res_a1_a2.distance
- && same_direction(res_a1_b1.azimuth, res_a1_a2.azimuth))
- {
- lon = b1_lon;
- lat = b1_lat;
- dist_a1_ip = res_a1_b1.distance;
- dist_b1_ip = 0;
- ip_flag = ipi_at_b1;
- return true;
- }
- else
- {
- return false;
- }
- }
- else if (sides.template get<1, 1>() == 0) // b2 wrt a
- {
- if (res_a1_b2.distance <= res_a1_a2.distance
- && same_direction(res_a1_b2.azimuth, res_a1_a2.azimuth))
- {
- lon = b2_lon;
- lat = b2_lat;
- dist_a1_ip = res_a1_b2.distance;
- dist_b1_ip = res_b1_b2.distance;
- ip_flag = ipi_at_b2;
- return true;
- }
- else
- {
- return false;
- }
- }
-
- // At this point neither the endpoints overlaps
- // nor any andpoint lies on the other geodesic
- // So the endpoints should lie on the opposite sides of both geodesics
-
- bool const ok = formula::sjoberg_intersection<CalcT, FormulaPolicy::template inverse, Order>
- ::apply(a1_lon, a1_lat, a2_lon, a2_lat, res_a1_a2.azimuth,
- b1_lon, b1_lat, b2_lon, b2_lat, res_b1_b2.azimuth,
- lon, lat, spheroid);
-
- if (! ok)
- {
- return false;
- }
-
- typedef typename FormulaPolicy::template inverse<CalcT, true, true, false, false, false> inverse_dist_azi;
- typedef typename inverse_dist_azi::result_type inverse_result;
-
- inverse_result const res_a1_ip = inverse_dist_azi::apply(a1_lon, a1_lat, lon, lat, spheroid);
- dist_a1_ip = res_a1_ip.distance;
- if (! same_direction(res_a1_ip.azimuth, res_a1_a2.azimuth))
- {
- dist_a1_ip = -dist_a1_ip;
- }
-
- bool is_on_a = segment_ratio<CalcT>(dist_a1_ip, dist_a1_a2).on_segment();
- // NOTE: not fully consistent with equals_point_point() since radians are always used.
- bool is_on_a1 = math::equals(lon, a1_lon) && math::equals(lat, a1_lat);
- bool is_on_a2 = math::equals(lon, a2_lon) && math::equals(lat, a2_lat);
-
- if (! (is_on_a || is_on_a1 || is_on_a2))
- {
- return false;
- }
-
- inverse_result const res_b1_ip = inverse_dist_azi::apply(b1_lon, b1_lat, lon, lat, spheroid);
- dist_b1_ip = res_b1_ip.distance;
- if (! same_direction(res_b1_ip.azimuth, res_b1_b2.azimuth))
- {
- dist_b1_ip = -dist_b1_ip;
- }
-
- bool is_on_b = segment_ratio<CalcT>(dist_b1_ip, dist_b1_b2).on_segment();
- // NOTE: not fully consistent with equals_point_point() since radians are always used.
- bool is_on_b1 = math::equals(lon, b1_lon) && math::equals(lat, b1_lat);
- bool is_on_b2 = math::equals(lon, b2_lon) && math::equals(lat, b2_lat);
-
- if (! (is_on_b || is_on_b1 || is_on_b2))
- {
- return false;
- }
-
- ip_flag = ipi_inters;
-
- if (is_on_b1)
- {
- lon = b1_lon;
- lat = b1_lat;
- dist_b1_ip = 0;
- ip_flag = ipi_at_b1;
- }
- else if (is_on_b2)
- {
- lon = b2_lon;
- lat = b2_lat;
- dist_b1_ip = res_b1_b2.distance;
- ip_flag = ipi_at_b2;
- }
-
- if (is_on_a1)
- {
- lon = a1_lon;
- lat = a1_lat;
- dist_a1_ip = 0;
- ip_flag = ipi_at_a1;
- }
- else if (is_on_a2)
- {
- lon = a2_lon;
- lat = a2_lat;
- dist_a1_ip = res_a1_a2.distance;
- ip_flag = ipi_at_a2;
- }
-
- return true;
- }
-
- template <typename CalcT, typename P1, typename P2>
- static inline bool is_endpoint_equal(CalcT const& dist,
- P1 const& ai, P2 const& b1, P2 const& b2)
- {
- static CalcT const c0 = 0;
- using geometry::detail::equals::equals_point_point;
- return is_near(dist) && (equals_point_point(ai, b1) || equals_point_point(ai, b2) || math::equals(dist, c0));
- }
-
- template <typename CalcT>
- static inline bool is_near(CalcT const& dist)
- {
- // NOTE: This strongly depends on the Inverse method
- CalcT const small_number = CalcT(boost::is_same<CalcT, float>::value ? 0.0001 : 0.00000001);
- return math::abs(dist) <= small_number;
- }
-
- template <typename ProjCoord1, typename ProjCoord2>
- static inline int position_value(ProjCoord1 const& ca1,
- ProjCoord2 const& cb1,
- ProjCoord2 const& cb2)
- {
- // S1x 0 1 2 3 4
- // S2 |---------->
- return math::equals(ca1, cb1) ? 1
- : math::equals(ca1, cb2) ? 3
- : cb1 < cb2 ?
- ( ca1 < cb1 ? 0
- : ca1 > cb2 ? 4
- : 2 )
- : ( ca1 > cb1 ? 0
- : ca1 < cb2 ? 4
- : 2 );
- }
-
- template <typename CalcT>
- static inline bool same_direction(CalcT const& azimuth1, CalcT const& azimuth2)
- {
- // distance between two angles normalized to (-180, 180]
- CalcT const angle_diff = math::longitude_distance_signed<radian>(azimuth1, azimuth2);
- return math::abs(angle_diff) <= math::half_pi<CalcT>();
- }
-
- template <int Which>
- static inline void sides_reverse_segment(side_info & sides)
- {
- // names assuming segment A is reversed (Which == 0)
- int a1_wrt_b = sides.template get<Which, 0>();
- int a2_wrt_b = sides.template get<Which, 1>();
- std::swap(a1_wrt_b, a2_wrt_b);
- sides.template set<Which>(a1_wrt_b, a2_wrt_b);
- int b1_wrt_a = sides.template get<1 - Which, 0>();
- int b2_wrt_a = sides.template get<1 - Which, 1>();
- sides.template set<1 - Which>(-b1_wrt_a, -b2_wrt_a);
- }
-
- static inline void ip_flag_reverse_segment(intersection_point_flag & ip_flag,
- intersection_point_flag const& ipi_at_p1,
- intersection_point_flag const& ipi_at_p2)
- {
- ip_flag = ip_flag == ipi_at_p1 ? ipi_at_p2 :
- ip_flag == ipi_at_p2 ? ipi_at_p1 :
- ip_flag;
- }
-
-private:
- Spheroid m_spheroid;
-};
-
-
-}} // namespace strategy::intersection
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/intersection_elliptic.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/intersection_elliptic.hpp
deleted file mode 100644
index fce97352554..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/intersection_elliptic.hpp
+++ /dev/null
@@ -1,243 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016-2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_INTERSECTION_ELLIPTIC_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_INTERSECTION_ELLIPTIC_HPP
-
-
-#include <boost/geometry/srs/spheroid.hpp>
-
-#include <boost/geometry/formulas/geographic.hpp>
-
-#include <boost/geometry/strategies/spherical/intersection.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace intersection
-{
-
-template <typename Spheroid>
-struct great_elliptic_segments_calc_policy
- : spherical_segments_calc_policy
-{
- explicit great_elliptic_segments_calc_policy(Spheroid const& spheroid = Spheroid())
- : m_spheroid(spheroid)
- {}
-
- template <typename Point, typename Point3d>
- Point from_cart3d(Point3d const& point_3d) const
- {
- return formula::cart3d_to_geo<Point>(point_3d, m_spheroid);
- }
-
- template <typename Point3d, typename Point>
- Point3d to_cart3d(Point const& point) const
- {
- return formula::geo_to_cart3d<Point3d>(point, m_spheroid);
- }
-
- // relate_xxx_calc_policy must live londer than plane because it contains
- // Spheroid object and plane keeps the reference to that object.
- template <typename Point3d>
- struct plane
- {
- typedef typename coordinate_type<Point3d>::type coord_t;
-
- // not normalized
- plane(Point3d const& p1, Point3d const& p2)
- : normal(cross_product(p1, p2))
- {}
-
- int side_value(Point3d const& pt) const
- {
- return formula::sph_side_value(normal, pt);
- }
-
- coord_t cos_angle_between(Point3d const& p1, Point3d const& p2) const
- {
- Point3d v1 = p1;
- detail::vec_normalize(v1);
- Point3d v2 = p2;
- detail::vec_normalize(v2);
-
- return dot_product(v1, v2);
- }
-
- coord_t cos_angle_between(Point3d const& p1, Point3d const& p2, bool & is_forward) const
- {
- coord_t const c0 = 0;
-
- Point3d v1 = p1;
- detail::vec_normalize(v1);
- Point3d v2 = p2;
- detail::vec_normalize(v2);
-
- is_forward = dot_product(normal, cross_product(v1, v2)) >= c0;
- return dot_product(v1, v2);
- }
-
- Point3d normal;
- };
-
- template <typename Point3d>
- plane<Point3d> get_plane(Point3d const& p1, Point3d const& p2) const
- {
- return plane<Point3d>(p1, p2);
- }
-
- template <typename Point3d>
- bool intersection_points(plane<Point3d> const& plane1,
- plane<Point3d> const& plane2,
- Point3d & ip1, Point3d & ip2) const
- {
- typedef typename coordinate_type<Point3d>::type coord_t;
-
- Point3d id = cross_product(plane1.normal, plane2.normal);
- // NOTE: the length should be greater than 0 at this point
- // NOTE: no need to normalize in this case
-
- ip1 = formula::projected_to_surface(id, m_spheroid);
-
- ip2 = ip1;
- multiply_value(ip2, coord_t(-1));
-
- return true;
- }
-
-private:
- Spheroid m_spheroid;
-};
-
-template <typename Spheroid>
-struct experimental_elliptic_segments_calc_policy
-{
- explicit experimental_elliptic_segments_calc_policy(Spheroid const& spheroid = Spheroid())
- : m_spheroid(spheroid)
- {}
-
- template <typename Point, typename Point3d>
- Point from_cart3d(Point3d const& point_3d) const
- {
- return formula::cart3d_to_geo<Point>(point_3d, m_spheroid);
- }
-
- template <typename Point3d, typename Point>
- Point3d to_cart3d(Point const& point) const
- {
- return formula::geo_to_cart3d<Point3d>(point, m_spheroid);
- }
-
- // relate_xxx_calc_policy must live londer than plane because it contains
- // Spheroid object and plane keeps the reference to that object.
- template <typename Point3d>
- struct plane
- {
- typedef typename coordinate_type<Point3d>::type coord_t;
-
- // not normalized
- plane(Point3d const& p1, Point3d const& p2, Spheroid const& spheroid)
- : m_spheroid(spheroid)
- {
- formula::experimental_elliptic_plane(p1, p2, origin, normal, m_spheroid);
- }
-
- int side_value(Point3d const& pt) const
- {
- return formula::elliptic_side_value(origin, normal, pt);
- }
-
- coord_t cos_angle_between(Point3d const& p1, Point3d const& p2) const
- {
- Point3d const v1 = normalized_vec(p1);
- Point3d const v2 = normalized_vec(p2);
- return dot_product(v1, v2);
- }
-
- coord_t cos_angle_between(Point3d const& p1, Point3d const& p2, bool & is_forward) const
- {
- coord_t const c0 = 0;
-
- Point3d const v1 = normalized_vec(p1);
- Point3d const v2 = normalized_vec(p2);
-
- is_forward = dot_product(normal, cross_product(v1, v2)) >= c0;
- return dot_product(v1, v2);
- }
-
- Point3d origin;
- Point3d normal;
-
- private:
- Point3d normalized_vec(Point3d const& p) const
- {
- Point3d v = p;
- subtract_point(v, origin);
- detail::vec_normalize(v);
- return v;
- }
-
- Spheroid const& m_spheroid;
- };
-
- template <typename Point3d>
- plane<Point3d> get_plane(Point3d const& p1, Point3d const& p2) const
- {
- return plane<Point3d>(p1, p2, m_spheroid);
- }
-
- template <typename Point3d>
- bool intersection_points(plane<Point3d> const& plane1,
- plane<Point3d> const& plane2,
- Point3d & ip1, Point3d & ip2) const
- {
- return formula::planes_spheroid_intersection(plane1.origin, plane1.normal,
- plane2.origin, plane2.normal,
- ip1, ip2, m_spheroid);
- }
-
-private:
- Spheroid m_spheroid;
-};
-
-
-template
-<
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-struct great_elliptic_segments
- : ecef_segments
- <
- great_elliptic_segments_calc_policy<Spheroid>,
- CalculationType
- >
-{};
-
-template
-<
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-struct experimental_elliptic_segments
- : ecef_segments
- <
- experimental_elliptic_segments_calc_policy<Spheroid>,
- CalculationType
- >
-{};
-
-
-}} // namespace strategy::intersection
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_INTERSECTION_ELLIPTIC_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/mapping_ssf.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/mapping_ssf.hpp
deleted file mode 100644
index 20a05236162..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/mapping_ssf.hpp
+++ /dev/null
@@ -1,185 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014, 2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_MAPPING_SSF_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_MAPPING_SSF_HPP
-
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/geometry/core/radius.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/strategies/spherical/ssf.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace side
-{
-
-
-// An enumeration type defining types of mapping of geographical
-// latitude to spherical latitude.
-// See: http://en.wikipedia.org/wiki/Great_ellipse
-// http://en.wikipedia.org/wiki/Latitude#Auxiliary_latitudes
-enum mapping_type { mapping_geodetic, mapping_reduced, mapping_geocentric };
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Spheroid, mapping_type Mapping>
-struct mapper
-{
- explicit inline mapper(Spheroid const& /*spheroid*/) {}
-
- template <typename CalculationType>
- static inline CalculationType const& apply(CalculationType const& lat)
- {
- return lat;
- }
-};
-
-template <typename Spheroid>
-struct mapper<Spheroid, mapping_reduced>
-{
- typedef typename promote_floating_point
- <
- typename radius_type<Spheroid>::type
- >::type fraction_type;
-
- explicit inline mapper(Spheroid const& spheroid)
- {
- fraction_type const a = geometry::get_radius<0>(spheroid);
- fraction_type const b = geometry::get_radius<2>(spheroid);
- b_div_a = b / a;
- }
-
- template <typename CalculationType>
- inline CalculationType apply(CalculationType const& lat) const
- {
- return atan(static_cast<CalculationType>(b_div_a) * tan(lat));
- }
-
- fraction_type b_div_a;
-};
-
-template <typename Spheroid>
-struct mapper<Spheroid, mapping_geocentric>
-{
- typedef typename promote_floating_point
- <
- typename radius_type<Spheroid>::type
- >::type fraction_type;
-
- explicit inline mapper(Spheroid const& spheroid)
- {
- fraction_type const a = geometry::get_radius<0>(spheroid);
- fraction_type const b = geometry::get_radius<2>(spheroid);
- sqr_b_div_a = b / a;
- sqr_b_div_a *= sqr_b_div_a;
- }
-
- template <typename CalculationType>
- inline CalculationType apply(CalculationType const& lat) const
- {
- return atan(static_cast<CalculationType>(sqr_b_div_a) * tan(lat));
- }
-
- fraction_type sqr_b_div_a;
-};
-
-}
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief Check at which side of a geographical segment a point lies
- left of segment (> 0), right of segment (< 0), on segment (0).
- The check is performed by mapping the geographical coordinates
- to spherical coordinates and using spherical_side_formula.
-\ingroup strategies
-\tparam Spheroid The reference spheroid model
-\tparam Mapping The type of mapping of geographical to spherical latitude
-\tparam CalculationType \tparam_calculation
- */
-template <typename Spheroid,
- mapping_type Mapping = mapping_geodetic,
- typename CalculationType = void>
-class mapping_spherical_side_formula
-{
-
-public :
- inline mapping_spherical_side_formula()
- : m_mapper(Spheroid())
- {}
-
- explicit inline mapping_spherical_side_formula(Spheroid const& spheroid)
- : m_mapper(spheroid)
- {}
-
- template <typename P1, typename P2, typename P>
- inline int apply(P1 const& p1, P2 const& p2, P const& p) const
- {
- typedef typename promote_floating_point
- <
- typename select_calculation_type_alt
- <
- CalculationType,
- P1, P2, P
- >::type
- >::type calculation_type;
-
- calculation_type lon1 = get_as_radian<0>(p1);
- calculation_type lat1 = m_mapper.template apply<calculation_type>(get_as_radian<1>(p1));
- calculation_type lon2 = get_as_radian<0>(p2);
- calculation_type lat2 = m_mapper.template apply<calculation_type>(get_as_radian<1>(p2));
- calculation_type lon = get_as_radian<0>(p);
- calculation_type lat = m_mapper.template apply<calculation_type>(get_as_radian<1>(p));
-
- return detail::spherical_side_formula(lon1, lat1, lon2, lat2, lon, lat);
- }
-
-private:
- side::detail::mapper<Spheroid, Mapping> const m_mapper;
-};
-
-// The specialization for geodetic latitude which can be used directly
-template <typename Spheroid,
- typename CalculationType>
-class mapping_spherical_side_formula<Spheroid, mapping_geodetic, CalculationType>
-{
-
-public :
- inline mapping_spherical_side_formula() {}
- explicit inline mapping_spherical_side_formula(Spheroid const& /*spheroid*/) {}
-
- template <typename P1, typename P2, typename P>
- static inline int apply(P1 const& p1, P2 const& p2, P const& p)
- {
- return spherical_side_formula<CalculationType>::apply(p1, p2, p);
- }
-};
-
-}} // namespace strategy::side
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_MAPPING_SSF_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/parameters.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/parameters.hpp
deleted file mode 100644
index 4896e42e8d8..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/parameters.hpp
+++ /dev/null
@@ -1,168 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_PARAMETERS_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_PARAMETERS_HPP
-
-
-#include <boost/geometry/formulas/andoyer_inverse.hpp>
-#include <boost/geometry/formulas/thomas_direct.hpp>
-#include <boost/geometry/formulas/thomas_inverse.hpp>
-#include <boost/geometry/formulas/vincenty_direct.hpp>
-#include <boost/geometry/formulas/vincenty_inverse.hpp>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/integral_c.hpp>
-
-
-namespace boost { namespace geometry { namespace strategy
-{
-
-struct andoyer
-{
- //TODO: this should be replaced by an andoyer direct formula
- template
- <
- typename CT,
- bool EnableCoordinates = true,
- bool EnableReverseAzimuth = false,
- bool EnableReducedLength = false,
- bool EnableGeodesicScale = false
- >
- struct direct
- : formula::thomas_direct
- <
- CT, EnableCoordinates, EnableReverseAzimuth,
- EnableReducedLength, EnableGeodesicScale
- >
- {};
-
- template
- <
- typename CT,
- bool EnableDistance,
- bool EnableAzimuth,
- bool EnableReverseAzimuth = false,
- bool EnableReducedLength = false,
- bool EnableGeodesicScale = false
- >
- struct inverse
- : formula::andoyer_inverse
- <
- CT, EnableDistance,
- EnableAzimuth, EnableReverseAzimuth,
- EnableReducedLength, EnableGeodesicScale
- >
- {};
-};
-
-struct thomas
-{
- template
- <
- typename CT,
- bool EnableCoordinates = true,
- bool EnableReverseAzimuth = false,
- bool EnableReducedLength = false,
- bool EnableGeodesicScale = false
- >
- struct direct
- : formula::thomas_direct
- <
- CT, EnableCoordinates, EnableReverseAzimuth,
- EnableReducedLength, EnableGeodesicScale
- >
- {};
-
- template
- <
- typename CT,
- bool EnableDistance,
- bool EnableAzimuth,
- bool EnableReverseAzimuth = false,
- bool EnableReducedLength = false,
- bool EnableGeodesicScale = false
- >
- struct inverse
- : formula::thomas_inverse
- <
- CT, EnableDistance,
- EnableAzimuth, EnableReverseAzimuth,
- EnableReducedLength, EnableGeodesicScale
- >
- {};
-};
-
-struct vincenty
-{
- template
- <
- typename CT,
- bool EnableCoordinates = true,
- bool EnableReverseAzimuth = false,
- bool EnableReducedLength = false,
- bool EnableGeodesicScale = false
- >
- struct direct
- : formula::vincenty_direct
- <
- CT, EnableCoordinates, EnableReverseAzimuth,
- EnableReducedLength, EnableGeodesicScale
- >
- {};
-
- template
- <
- typename CT,
- bool EnableDistance,
- bool EnableAzimuth,
- bool EnableReverseAzimuth = false,
- bool EnableReducedLength = false,
- bool EnableGeodesicScale = false
- >
- struct inverse
- : formula::vincenty_inverse
- <
- CT, EnableDistance,
- EnableAzimuth, EnableReverseAzimuth,
- EnableReducedLength, EnableGeodesicScale
- >
- {};
-};
-
-
-template <typename FormulaPolicy>
-struct default_order
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_TYPE
- , (types<FormulaPolicy>)
- );
-};
-
-template<>
-struct default_order<andoyer>
- : boost::mpl::integral_c<unsigned int, 1>
-{};
-
-template<>
-struct default_order<thomas>
- : boost::mpl::integral_c<unsigned int, 2>
-{};
-
-template<>
-struct default_order<vincenty>
- : boost::mpl::integral_c<unsigned int, 4>
-{};
-
-}}} // namespace boost::geometry::strategy
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_PARAMETERS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/point_in_poly_winding.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/point_in_poly_winding.hpp
deleted file mode 100644
index 95a19614747..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/point_in_poly_winding.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGY_GEOGRAPHIC_POINT_IN_POLY_WINDING_HPP
-#define BOOST_GEOMETRY_STRATEGY_GEOGRAPHIC_POINT_IN_POLY_WINDING_HPP
-
-
-#include <boost/geometry/strategies/geographic/side.hpp>
-#include <boost/geometry/strategies/spherical/point_in_poly_winding.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace within
-{
-
-
-/*!
-\brief Within detection using winding rule in geographic coordinate system.
-\ingroup strategies
-\tparam Point \tparam_point
-\tparam PointOfSegment \tparam_segment_point
-\tparam FormulaPolicy Geodesic formula policy
-\tparam Spheroid Spheroid model
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)]
-}
- */
-template
-<
- typename Point,
- typename PointOfSegment = Point,
- typename FormulaPolicy = strategy::andoyer,
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class geographic_winding
- : public within::detail::spherical_winding_base
- <
- Point,
- PointOfSegment,
- side::geographic<FormulaPolicy, Spheroid, CalculationType>,
- CalculationType
- >
-{
- typedef within::detail::spherical_winding_base
- <
- Point,
- PointOfSegment,
- side::geographic<FormulaPolicy, Spheroid, CalculationType>,
- CalculationType
- > base_t;
-
-public:
- geographic_winding()
- {}
-
- explicit geographic_winding(Spheroid const& model)
- : base_t(model)
- {}
-};
-
-
-}} // namespace strategy::within
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGY_GEOGRAPHIC_POINT_IN_POLY_WINDING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/side.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/side.hpp
deleted file mode 100644
index 1201dc2f6db..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/side.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014-2018.
-// Modifications copyright (c) 2014-2018 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_SIDE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_SIDE_HPP
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/radius.hpp>
-
-#include <boost/geometry/formulas/spherical.hpp>
-
-#include <boost/geometry/srs/spheroid.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-#include <boost/geometry/strategies/geographic/disjoint_segment_box.hpp>
-#include <boost/geometry/strategies/geographic/envelope_segment.hpp>
-#include <boost/geometry/strategies/geographic/parameters.hpp>
-#include <boost/geometry/strategies/side.hpp>
-//#include <boost/geometry/strategies/concepts/side_concept.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace side
-{
-
-
-/*!
-\brief Check at which side of a segment a point lies
- left of segment (> 0), right of segment (< 0), on segment (0)
-\ingroup strategies
-\tparam FormulaPolicy Geodesic solution formula policy.
-\tparam Spheroid Reference model of coordinate system.
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading See also]
-[link geometry.reference.srs.srs_spheroid srs::spheroid]
-}
- */
-template
-<
- typename FormulaPolicy = strategy::andoyer,
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class geographic
-{
-public:
- typedef strategy::envelope::geographic_segment
- <
- FormulaPolicy,
- Spheroid,
- CalculationType
- > envelope_strategy_type;
-
- inline envelope_strategy_type get_envelope_strategy() const
- {
- return envelope_strategy_type(m_model);
- }
-
- typedef strategy::disjoint::segment_box_geographic
- <
- FormulaPolicy,
- Spheroid,
- CalculationType
- > disjoint_strategy_type;
-
- inline disjoint_strategy_type get_disjoint_strategy() const
- {
- return disjoint_strategy_type(m_model);
- }
-
- geographic()
- {}
-
- explicit geographic(Spheroid const& model)
- : m_model(model)
- {}
-
- template <typename P1, typename P2, typename P>
- inline int apply(P1 const& p1, P2 const& p2, P const& p) const
- {
- typedef typename promote_floating_point
- <
- typename select_calculation_type_alt
- <
- CalculationType,
- P1, P2, P
- >::type
- >::type calc_t;
-
- typedef typename FormulaPolicy::template inverse
- <calc_t, false, true, false, false, false> inverse_formula;
-
- calc_t a1p = azimuth<calc_t, inverse_formula>(p1, p, m_model);
- calc_t a12 = azimuth<calc_t, inverse_formula>(p1, p2, m_model);
-
- return formula::azimuth_side_value(a1p, a12);
- }
-
-private:
- template <typename ResultType,
- typename InverseFormulaType,
- typename Point1,
- typename Point2,
- typename ModelT>
- static inline ResultType azimuth(Point1 const& point1, Point2 const& point2,
- ModelT const& model)
- {
- return InverseFormulaType::apply(get_as_radian<0>(point1),
- get_as_radian<1>(point1),
- get_as_radian<0>(point2),
- get_as_radian<1>(point2),
- model).azimuth;
- }
-
- Spheroid m_model;
-};
-
-
-}} // namespace strategy::side
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_SIDE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/side_andoyer.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/side_andoyer.hpp
deleted file mode 100644
index 204e45f6e26..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/side_andoyer.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014-2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_SIDE_ANDOYER_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_SIDE_ANDOYER_HPP
-
-
-#include <boost/geometry/strategies/geographic/side.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace side
-{
-
-/*!
-\brief Check at which side of a segment a point lies
- left of segment (> 0), right of segment (< 0), on segment (0)
-\ingroup strategies
-\tparam Spheroid Reference model of coordinate system.
-\tparam CalculationType \tparam_calculation
- */
-template
-<
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class andoyer
- : public side::geographic<strategy::andoyer, Spheroid, CalculationType>
-{
- typedef side::geographic<strategy::andoyer, Spheroid, CalculationType> base_t;
-
-public:
- andoyer()
- {}
-
- explicit andoyer(Spheroid const& model)
- : base_t(model)
- {}
-};
-
-}} // namespace strategy::side
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_SIDE_ANDOYER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/side_thomas.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/side_thomas.hpp
deleted file mode 100644
index e6f8d77b585..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/side_thomas.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014-2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_SIDE_THOMAS_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_SIDE_THOMAS_HPP
-
-
-#include <boost/geometry/strategies/geographic/side.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace side
-{
-
-/*!
-\brief Check at which side of a segment a point lies
- left of segment (> 0), right of segment (< 0), on segment (0)
-\ingroup strategies
-\tparam Spheroid Reference model of coordinate system.
-\tparam CalculationType \tparam_calculation
- */
-template
-<
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class thomas
- : public side::geographic<strategy::thomas, Spheroid, CalculationType>
-{
- typedef side::geographic<strategy::thomas, Spheroid, CalculationType> base_t;
-
-public:
- thomas()
- {}
-
- explicit thomas(Spheroid const& model)
- : base_t(model)
- {}
-};
-
-}} // namespace strategy::side
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_SIDE_THOMAS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/geographic/side_vincenty.hpp b/contrib/restricted/boost/boost/geometry/strategies/geographic/side_vincenty.hpp
deleted file mode 100644
index b2f51b09011..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/geographic/side_vincenty.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014-2017.
-// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_SIDE_VINCENTY_HPP
-#define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_SIDE_VINCENTY_HPP
-
-
-#include <boost/geometry/strategies/geographic/side.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace side
-{
-
-/*!
-\brief Check at which side of a segment a point lies
- left of segment (> 0), right of segment (< 0), on segment (0)
-\ingroup strategies
-\tparam Spheroid Reference model of coordinate system.
-\tparam CalculationType \tparam_calculation
- */
-template
-<
- typename Spheroid = srs::spheroid<double>,
- typename CalculationType = void
->
-class vincenty
- : public side::geographic<strategy::vincenty, Spheroid, CalculationType>
-{
- typedef side::geographic<strategy::vincenty, Spheroid, CalculationType> base_t;
-
-public:
- vincenty()
- {}
-
- explicit vincenty(Spheroid const& model)
- : base_t(model)
- {}
-};
-
-}} // namespace strategy::side
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_SIDE_VINCENTY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/intersection.hpp b/contrib/restricted/boost/boost/geometry/strategies/intersection.hpp
deleted file mode 100644
index e5662c9e460..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/intersection.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2016-2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SEGMENT_INTERSECTION_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SEGMENT_INTERSECTION_HPP
-
-
-#include <boost/geometry/strategies/tags.hpp>
-
-
-#include <boost/mpl/assert.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace intersection
-{
-
-namespace services
-{
-
-/*!
-\brief Traits class binding a segments intersection strategy to a coordinate system
-\ingroup util
-\tparam CSTag tag of coordinate system of point-type
-\tparam CalculationType \tparam_calculation
-*/
-template <typename CSTag, typename CalculationType = void>
-struct default_strategy
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_TYPE
- , (types<CSTag>)
- );
-};
-
-} // namespace services
-
-}} // namespace strategy::intersection
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SEGMENT_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/intersection_result.hpp b/contrib/restricted/boost/boost/geometry/strategies/intersection_result.hpp
deleted file mode 100644
index db2a46e6a38..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/intersection_result.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2015, 2016.
-// Modifications copyright (c) 2015-2016 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_INTERSECTION_RESULT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_INTERSECTION_RESULT_HPP
-
-#if defined(HAVE_MATRIX_AS_STRING)
-#include <string>
-#endif
-
-#include <cstddef>
-
-
-
-namespace boost { namespace geometry
-{
-
-template <typename SegmentRatio>
-struct fraction_type
-{
- SegmentRatio robust_ra; // TODO this can be renamed now to "ra"
- SegmentRatio robust_rb;
-
- bool initialized;
- inline fraction_type()
- : initialized(false)
- {}
-
- template <typename Info>
- inline void assign(Info const& info)
- {
- initialized = true;
- robust_ra = info.robust_ra;
- robust_rb = info.robust_rb;
- }
-
- inline void assign(SegmentRatio const& a, SegmentRatio const& b)
- {
- initialized = true;
- robust_ra = a;
- robust_rb = b;
- }
-
-};
-
-//
-/*!
-\brief return-type for segment-intersection
-\note Set in intersection_points.hpp, from segment_intersection_info
-*/
-template <typename Point, typename SegmentRatio>
-struct segment_intersection_points
-{
- std::size_t count; // The number of intersection points
-
- // TODO: combine intersections and fractions in one struct
- Point intersections[2];
- fraction_type<SegmentRatio> fractions[2];
- typedef Point point_type;
-
- segment_intersection_points()
- : count(0)
- {}
-};
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_INTERSECTION_RESULT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/intersection_strategies.hpp b/contrib/restricted/boost/boost/geometry/strategies/intersection_strategies.hpp
deleted file mode 100644
index a173505804c..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/intersection_strategies.hpp
+++ /dev/null
@@ -1,101 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2016, 2017.
-// Modifications copyright (c) 2016-2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_INTERSECTION_HPP
-#define BOOST_GEOMETRY_STRATEGIES_INTERSECTION_HPP
-
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/geometries/segment.hpp>
-
-#include <boost/geometry/policies/relate/intersection_points.hpp>
-#include <boost/geometry/policies/relate/direction.hpp>
-#include <boost/geometry/policies/relate/tupled.hpp>
-
-#include <boost/geometry/strategies/intersection.hpp>
-#include <boost/geometry/strategies/intersection_result.hpp>
-#include <boost/geometry/strategies/side.hpp>
-
-#include <boost/geometry/strategies/cartesian/intersection.hpp>
-#include <boost/geometry/strategies/cartesian/side_by_triangle.hpp>
-#include <boost/geometry/strategies/spherical/intersection.hpp>
-#include <boost/geometry/strategies/spherical/ssf.hpp>
-
-#include <boost/geometry/policies/robustness/segment_ratio_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
-\brief "compound strategy", containing a segment-intersection-strategy
- and a side-strategy
- */
-template
-<
- typename Tag,
- typename Geometry1,
- typename Geometry2,
- typename IntersectionPoint,
- typename RobustPolicy,
- typename CalculationType = void
->
-struct intersection_strategies
-{
-private :
- // for development BOOST_STATIC_ASSERT((! boost::is_same<RobustPolicy, void>::type::value));
-
- typedef typename geometry::point_type<Geometry1>::type point1_type;
- typedef typename geometry::point_type<Geometry2>::type point2_type;
- typedef typename model::referring_segment<point1_type const> segment1_type;
- typedef typename model::referring_segment<point2_type const> segment2_type;
-
- typedef segment_intersection_points
- <
- IntersectionPoint,
- typename geometry::segment_ratio_type
- <
- IntersectionPoint, RobustPolicy
- >::type
- > ip_type;
-
-public:
- typedef policies::relate::segments_tupled
- <
- policies::relate::segments_intersection_points
- <
- ip_type
- > ,
- policies::relate::segments_direction
- > intersection_policy_type;
-
- typedef typename strategy::intersection::services::default_strategy
- <
- Tag,
- CalculationType
- >::type segment_intersection_strategy_type;
-
- typedef typename strategy::side::services::default_strategy
- <
- Tag,
- CalculationType
- >::type side_strategy_type;
-
- typedef RobustPolicy rescale_policy_type;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/relate.hpp b/contrib/restricted/boost/boost/geometry/strategies/relate.hpp
deleted file mode 100644
index ffeed789596..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/relate.hpp
+++ /dev/null
@@ -1,177 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_RELATE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_RELATE_HPP
-
-
-#include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/topological_dimension.hpp>
-
-#include <boost/geometry/strategies/covered_by.hpp>
-#include <boost/geometry/strategies/intersection.hpp>
-#include <boost/geometry/strategies/within.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy
-{
-
-namespace point_in_geometry
-{
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template
-<
- typename Point,
- typename Geometry,
- typename Tag1 = typename tag<Point>::type,
- typename Tag2 = typename tag<Geometry>::type
->
-struct default_strategy
- : strategy::within::services::default_strategy
- <
- Point,
- Geometry
- >
-{
- typedef typename default_strategy::type within_strategy_type;
-
- typedef typename strategy::covered_by::services::default_strategy
- <
- Point,
- Geometry
- >::type covered_by_strategy_type;
-
- static const bool same_strategies = boost::is_same<within_strategy_type, covered_by_strategy_type>::value;
- BOOST_MPL_ASSERT_MSG((same_strategies),
- DEFAULT_WITHIN_AND_COVERED_BY_STRATEGIES_NOT_COMPATIBLE,
- (within_strategy_type, covered_by_strategy_type));
-};
-
-template<typename Point, typename Geometry>
-struct default_strategy<Point, Geometry, point_tag, point_tag>
- : strategy::within::services::default_strategy<Point, Geometry>
-{};
-
-template<typename Point, typename Geometry>
-struct default_strategy<Point, Geometry, point_tag, multi_point_tag>
- : strategy::within::services::default_strategy<Point, Geometry>
-{};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-} // namespace point_in_geometry
-
-namespace relate
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Geometry>
-struct default_intersection_strategy
- : strategy::intersection::services::default_strategy
- <
- typename cs_tag<Geometry>::type
- >
-{};
-
-template <typename PointLike, typename Geometry>
-struct default_point_in_geometry_strategy
- : point_in_geometry::services::default_strategy
- <
- typename point_type<PointLike>::type,
- Geometry
- >
-{};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- int TopDim1 = geometry::topological_dimension<Geometry1>::value,
- int TopDim2 = geometry::topological_dimension<Geometry2>::value
->
-struct default_strategy
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THESE_TYPES
- , (types<Geometry1, Geometry2>)
- );
-};
-
-template <typename PointLike1, typename PointLike2>
-struct default_strategy<PointLike1, PointLike2, 0, 0>
- : detail::default_point_in_geometry_strategy<PointLike1, PointLike2>
-{};
-
-template <typename PointLike, typename Geometry, int TopDim2>
-struct default_strategy<PointLike, Geometry, 0, TopDim2>
- : detail::default_point_in_geometry_strategy<PointLike, Geometry>
-{};
-
-template <typename Geometry, typename PointLike, int TopDim1>
-struct default_strategy<Geometry, PointLike, TopDim1, 0>
- : detail::default_point_in_geometry_strategy<PointLike, Geometry>
-{};
-
-template <typename Geometry1, typename Geometry2>
-struct default_strategy<Geometry1, Geometry2, 1, 1>
- : detail::default_intersection_strategy<Geometry1>
-{};
-
-template <typename Geometry1, typename Geometry2>
-struct default_strategy<Geometry1, Geometry2, 1, 2>
- : detail::default_intersection_strategy<Geometry1>
-{};
-
-template <typename Geometry1, typename Geometry2>
-struct default_strategy<Geometry1, Geometry2, 2, 1>
- : detail::default_intersection_strategy<Geometry1>
-{};
-
-template <typename Geometry1, typename Geometry2>
-struct default_strategy<Geometry1, Geometry2, 2, 2>
- : detail::default_intersection_strategy<Geometry1>
-{};
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-} // namespace relate
-
-} // namespace strategy
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_RELATE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/side.hpp b/contrib/restricted/boost/boost/geometry/strategies/side.hpp
deleted file mode 100644
index 9aaa2bdddc1..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/side.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_SIDE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SIDE_HPP
-
-
-#include <boost/geometry/strategies/tags.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace side
-{
-
-namespace services
-{
-
-/*!
-\brief Traits class binding a side determination strategy to a coordinate system
-\ingroup util
-\tparam CSTag tag of coordinate system of point-type
-\tparam CalculationType \tparam_calculation
-*/
-template <typename CSTag, typename CalculationType = void>
-struct default_strategy
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_TYPE
- , (types<CSTag>)
- );
-};
-
-
-} // namespace services
-
-
-}} // namespace strategy::side
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SIDE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/side_info.hpp b/contrib/restricted/boost/boost/geometry/strategies/side_info.hpp
deleted file mode 100644
index d113eaa8ff0..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/side_info.hpp
+++ /dev/null
@@ -1,177 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_SIDE_INFO_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SIDE_INFO_HPP
-
-#include <cmath>
-#include <utility>
-
-#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) || defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS)
-# include <iostream>
-#endif
-
-namespace boost { namespace geometry
-{
-
-// Silence warning C4127: conditional expression is constant
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
-#endif
-
-/*!
-\brief Class side_info: small class wrapping for sides (-1,0,1)
-*/
-class side_info
-{
-public :
- inline side_info(int side_a1 = 0, int side_a2 = 0,
- int side_b1 = 0, int side_b2 = 0)
- {
- sides[0].first = side_a1;
- sides[0].second = side_a2;
- sides[1].first = side_b1;
- sides[1].second = side_b2;
- }
-
- template <int Which>
- inline void set(int first, int second)
- {
- sides[Which].first = first;
- sides[Which].second = second;
- }
-
- template <int Which, int Index>
- inline void correct_to_zero()
- {
- if (Index == 0)
- {
- sides[Which].first = 0;
- }
- else
- {
- sides[Which].second = 0;
- }
- }
-
- template <int Which, int Index>
- inline int get() const
- {
- return Index == 0 ? sides[Which].first : sides[Which].second;
- }
-
-
- // Returns true if both lying on the same side WRT the other
- // (so either 1,1 or -1-1)
- template <int Which>
- inline bool same() const
- {
- return sides[Which].first * sides[Which].second == 1;
- }
-
- inline bool collinear() const
- {
- return sides[0].first == 0
- && sides[0].second == 0
- && sides[1].first == 0
- && sides[1].second == 0;
- }
-
- inline bool crossing() const
- {
- return sides[0].first * sides[0].second == -1
- && sides[1].first * sides[1].second == -1;
- }
-
- inline bool touching() const
- {
- return (sides[0].first * sides[1].first == -1
- && sides[0].second == 0 && sides[1].second == 0)
- || (sides[1].first * sides[0].first == -1
- && sides[1].second == 0 && sides[0].second == 0);
- }
-
- template <int Which>
- inline bool one_touching() const
- {
- // This is normally a situation which can't occur:
- // If one is completely left or right, the other cannot touch
- return one_zero<Which>()
- && sides[1 - Which].first * sides[1 - Which].second == 1;
- }
-
- inline bool meeting() const
- {
- // Two of them (in each segment) zero, two not
- return one_zero<0>() && one_zero<1>();
- }
-
- template <int Which>
- inline bool zero() const
- {
- return sides[Which].first == 0 && sides[Which].second == 0;
- }
-
- template <int Which>
- inline bool one_zero() const
- {
- return (sides[Which].first == 0 && sides[Which].second != 0)
- || (sides[Which].first != 0 && sides[Which].second == 0);
- }
-
- inline bool one_of_all_zero() const
- {
- int const sum = std::abs(sides[0].first)
- + std::abs(sides[0].second)
- + std::abs(sides[1].first)
- + std::abs(sides[1].second);
- return sum == 3;
- }
-
-
- template <int Which>
- inline int zero_index() const
- {
- return sides[Which].first == 0 ? 0 : 1;
- }
-
-#if defined(BOOST_GEOMETRY_DEBUG_INTERSECTION) || defined(BOOST_GEOMETRY_DEBUG_ROBUSTNESS)
- inline void debug() const
- {
- std::cout << sides[0].first << " "
- << sides[0].second << " "
- << sides[1].first << " "
- << sides[1].second
- << std::endl;
- }
-#endif
-
- inline void reverse()
- {
- std::swap(sides[0], sides[1]);
- }
-
-//private :
- std::pair<int, int> sides[2];
-
-};
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SIDE_INFO_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/area.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/area.hpp
deleted file mode 100644
index d12ed9498f8..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/area.hpp
+++ /dev/null
@@ -1,195 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Copyright (c) 2016-2018 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_AREA_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_AREA_HPP
-
-
-#include <boost/geometry/formulas/area_formulas.hpp>
-#include <boost/geometry/srs/sphere.hpp>
-#include <boost/geometry/strategies/area.hpp>
-#include <boost/geometry/strategies/spherical/get_radius.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace area
-{
-
-
-/*!
-\brief Spherical area calculation
-\ingroup strategies
-\details Calculates area on the surface of a sphere using the trapezoidal rule
-\tparam RadiusTypeOrSphere \tparam_radius_or_sphere
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.area.area_2_with_strategy area (with strategy)]
-}
-*/
-template
-<
- typename RadiusTypeOrSphere = double,
- typename CalculationType = void
->
-class spherical
-{
- // Enables special handling of long segments
- static const bool LongSegment = false;
-
-public:
- template <typename Geometry>
- struct result_type
- : strategy::area::detail::result_type
- <
- Geometry,
- CalculationType
- >
- {};
-
- template <typename Geometry>
- class state
- {
- friend class spherical;
-
- typedef typename result_type<Geometry>::type return_type;
-
- public:
- inline state()
- : m_sum(0)
- , m_crosses_prime_meridian(0)
- {}
-
- private:
- template <typename RadiusType>
- inline return_type area(RadiusType const& r) const
- {
- return_type result;
- return_type radius = r;
-
- // Encircles pole
- if(m_crosses_prime_meridian % 2 == 1)
- {
- size_t times_crosses_prime_meridian
- = 1 + (m_crosses_prime_meridian / 2);
-
- result = return_type(2)
- * geometry::math::pi<return_type>()
- * times_crosses_prime_meridian
- - geometry::math::abs(m_sum);
-
- if(geometry::math::sign<return_type>(m_sum) == 1)
- {
- result = - result;
- }
-
- } else {
- result = m_sum;
- }
-
- result *= radius * radius;
-
- return result;
- }
-
- return_type m_sum;
-
- // Keep track if encircles some pole
- size_t m_crosses_prime_meridian;
- };
-
-public :
-
- // For backward compatibility reasons the radius is set to 1
- inline spherical()
- : m_radius(1.0)
- {}
-
- template <typename RadiusOrSphere>
- explicit inline spherical(RadiusOrSphere const& radius_or_sphere)
- : m_radius(strategy_detail::get_radius
- <
- RadiusOrSphere
- >::apply(radius_or_sphere))
- {}
-
- template <typename PointOfSegment, typename Geometry>
- inline void apply(PointOfSegment const& p1,
- PointOfSegment const& p2,
- state<Geometry>& st) const
- {
- if (! geometry::math::equals(get<0>(p1), get<0>(p2)))
- {
- typedef geometry::formula::area_formulas
- <
- typename result_type<Geometry>::type
- > area_formulas;
-
- st.m_sum += area_formulas::template spherical<LongSegment>(p1, p2);
-
- // Keep track whenever a segment crosses the prime meridian
- if (area_formulas::crosses_prime_meridian(p1, p2))
- {
- st.m_crosses_prime_meridian++;
- }
- }
- }
-
- template <typename Geometry>
- inline typename result_type<Geometry>::type
- result(state<Geometry> const& st) const
- {
- return st.area(m_radius);
- }
-
-private :
- typename strategy_detail::get_radius
- <
- RadiusTypeOrSphere
- >::type m_radius;
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-
-template <>
-struct default_strategy<spherical_equatorial_tag>
-{
- typedef strategy::area::spherical<> type;
-};
-
-// Note: spherical polar coordinate system requires "get_as_radian_equatorial"
-template <>
-struct default_strategy<spherical_polar_tag>
-{
- typedef strategy::area::spherical<> type;
-};
-
-} // namespace services
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::area
-
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_AREA_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/azimuth.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/azimuth.hpp
deleted file mode 100644
index 7a711c9814e..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/azimuth.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2016-2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_AZIMUTH_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_AZIMUTH_HPP
-
-
-#include <boost/geometry/strategies/azimuth.hpp>
-#include <boost/geometry/formulas/spherical.hpp>
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace azimuth
-{
-
-template
-<
- typename CalculationType = void
->
-class spherical
-{
-public :
-
- inline spherical()
- {}
-
- template <typename T>
- static inline void apply(T const& lon1_rad, T const& lat1_rad,
- T const& lon2_rad, T const& lat2_rad,
- T& a1, T& a2)
- {
- typedef typename boost::mpl::if_
- <
- boost::is_void<CalculationType>, T, CalculationType
- >::type calc_t;
-
- geometry::formula::result_spherical<calc_t>
- result = geometry::formula::spherical_azimuth<calc_t, true>(
- calc_t(lon1_rad), calc_t(lat1_rad),
- calc_t(lon2_rad), calc_t(lat2_rad));
-
- a1 = result.azimuth;
- a2 = result.reverse_azimuth;
- }
-
- template <typename T>
- inline void apply(T const& lon1_rad, T const& lat1_rad,
- T const& lon2_rad, T const& lat2_rad,
- T& a1) const
- {
- typedef typename boost::mpl::if_
- <
- boost::is_void<CalculationType>, T, CalculationType
- >::type calc_t;
-
- geometry::formula::result_spherical<calc_t>
- result = geometry::formula::spherical_azimuth<calc_t, false>(
- calc_t(lon1_rad), calc_t(lat1_rad),
- calc_t(lon2_rad), calc_t(lat2_rad));
-
- a1 = result.azimuth;
- }
-
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-template <typename CalculationType>
-struct default_strategy<spherical_equatorial_tag, CalculationType>
-{
- typedef strategy::azimuth::spherical<CalculationType> type;
-};
-
-/*
-template <typename CalculationType>
-struct default_strategy<spherical_polar_tag, CalculationType>
-{
- typedef strategy::azimuth::spherical<CalculationType> type;
-};
-*/
-}
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-}} // namespace strategy::azimuth
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_AZIMUTH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/compare.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/compare.hpp
deleted file mode 100644
index 26163f74068..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/compare.hpp
+++ /dev/null
@@ -1,321 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_COMPARE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_COMPARE_HPP
-
-
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/min.hpp>
-
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/compare.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace compare
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <std::size_t I, typename P>
-static inline typename geometry::coordinate_type<P>::type
-get(P const& p, boost::true_type /*same units*/)
-{
- return geometry::get<I>(p);
-}
-
-template <std::size_t I, typename P>
-static inline typename geometry::coordinate_type<P>::type
-get(P const& p, boost::false_type /*different units*/)
-{
- return geometry::get_as_radian<I>(p);
-}
-
-template
-<
- typename ComparePolicy,
- typename Point1,
- typename Point2,
- std::size_t DimensionCount
->
-struct spherical_latitude
-{
- typedef typename geometry::coordinate_type<Point1>::type coordinate1_type;
- typedef typename geometry::coordinate_system<Point1>::type::units units1_type;
- typedef typename geometry::coordinate_type<Point2>::type coordinate2_type;
- typedef typename geometry::coordinate_system<Point2>::type::units units2_type;
- typedef typename boost::is_same<units1_type, units2_type>::type same_units_type;
-
- template <typename T1, typename T2>
- static inline bool apply(Point1 const& left, Point2 const& right,
- T1 const& l1, T2 const& r1)
- {
- // latitudes equal
- if (math::equals(l1, r1))
- {
- return compare::detail::compare_loop
- <
- ComparePolicy, 2, DimensionCount
- >::apply(left, right);
- }
- else
- {
- return ComparePolicy::apply(l1, r1);
- }
- }
-
- static inline bool apply(Point1 const& left, Point2 const& right)
- {
- coordinate1_type const& l1 = compare::detail::get<1>(left, same_units_type());
- coordinate2_type const& r1 = compare::detail::get<1>(right, same_units_type());
-
- return apply(left, right, l1, r1);
- }
-};
-
-template
-<
- typename ComparePolicy,
- typename Point1,
- typename Point2
->
-struct spherical_latitude<ComparePolicy, Point1, Point2, 1>
-{
- template <typename T1, typename T2>
- static inline bool apply(Point1 const& left, Point2 const& right,
- T1 const& , T2 const& )
- {
- return apply(left, right);
- }
-
- static inline bool apply(Point1 const& left, Point2 const& right)
- {
- return compare::detail::compare_loop
- <
- ComparePolicy, 1, 1
- >::apply(left, right);
- }
-};
-
-template
-<
- typename ComparePolicy,
- typename Point1,
- typename Point2,
- std::size_t DimensionCount
->
-struct spherical_longitude
-{
- typedef typename geometry::coordinate_type<Point1>::type coordinate1_type;
- typedef typename geometry::coordinate_system<Point1>::type::units units1_type;
- typedef typename geometry::coordinate_type<Point2>::type coordinate2_type;
- typedef typename geometry::coordinate_system<Point2>::type::units units2_type;
- typedef typename boost::is_same<units1_type, units2_type>::type same_units_type;
- typedef typename boost::mpl::if_<same_units_type, units1_type, geometry::radian>::type units_type;
-
- static const bool is_equatorial = ! boost::is_same
- <
- typename geometry::cs_tag<Point1>::type,
- geometry::spherical_polar_tag
- >::value;
-
- static inline bool are_both_at_antimeridian(coordinate1_type const& l0,
- coordinate2_type const& r0,
- bool & is_left_at,
- bool & is_right_at)
- {
- is_left_at = math::is_longitude_antimeridian<units_type>(l0);
- is_right_at = math::is_longitude_antimeridian<units_type>(r0);
- return is_left_at && is_right_at;
- }
-
- static inline bool apply(Point1 const& left, Point2 const& right)
- {
- // if units are different the coordinates are in radians
- coordinate1_type const& l0 = compare::detail::get<0>(left, same_units_type());
- coordinate2_type const& r0 = compare::detail::get<0>(right, same_units_type());
- coordinate1_type const& l1 = compare::detail::get<1>(left, same_units_type());
- coordinate2_type const& r1 = compare::detail::get<1>(right, same_units_type());
-
- bool is_left_at_antimeridian = false;
- bool is_right_at_antimeridian = false;
-
- // longitudes equal
- if (math::equals(l0, r0)
- // both at antimeridian
- || are_both_at_antimeridian(l0, r0, is_left_at_antimeridian, is_right_at_antimeridian)
- // both at pole
- || (math::equals(l1, r1)
- && math::is_latitude_pole<units_type, is_equatorial>(l1)))
- {
- return spherical_latitude
- <
- ComparePolicy, Point1, Point2, DimensionCount
- >::apply(left, right, l1, r1);
- }
- // if left is at antimeridian and right is not at antimeridian
- // then left is greater than right
- else if (is_left_at_antimeridian)
- {
- // less/equal_to -> false, greater -> true
- return ComparePolicy::apply(1, 0);
- }
- // if right is at antimeridian and left is not at antimeridian
- // then left is lesser than right
- else if (is_right_at_antimeridian)
- {
- // less -> true, equal_to/greater -> false
- return ComparePolicy::apply(0, 1);
- }
- else
- {
- return ComparePolicy::apply(l0, r0);
- }
- }
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief Compare strategy for spherical coordinates
-\ingroup strategies
-\tparam Point point-type
-\tparam Dimension dimension
-*/
-template
-<
- typename ComparePolicy,
- int Dimension = -1
->
-struct spherical
- : cartesian<ComparePolicy, Dimension>
-{};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-// all dimensions starting from longitude
-template <typename ComparePolicy>
-struct spherical<ComparePolicy, -1>
-{
- template <typename Point1, typename Point2>
- static inline bool apply(Point1 const& left, Point2 const& right)
- {
- return compare::detail::spherical_longitude
- <
- ComparePolicy,
- Point1,
- Point2,
- boost::mpl::min
- <
- geometry::dimension<Point1>,
- geometry::dimension<Point2>
- >::type::value
- >::apply(left, right);
- }
-};
-
-// only longitudes (and latitudes to check poles)
-template <typename ComparePolicy>
-struct spherical<ComparePolicy, 0>
-{
- template <typename Point1, typename Point2>
- static inline bool apply(Point1 const& left, Point2 const& right)
- {
- return compare::detail::spherical_longitude
- <
- ComparePolicy, Point1, Point2, 1
- >::apply(left, right);
- }
-};
-
-// only latitudes
-template <typename ComparePolicy>
-struct spherical<ComparePolicy, 1>
-{
- template <typename Point1, typename Point2>
- static inline bool apply(Point1 const& left, Point2 const& right)
- {
- return compare::detail::spherical_latitude
- <
- ComparePolicy, Point1, Point2, 2
- >::apply(left, right);
- }
-};
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-namespace services
-{
-
-
-template <typename ComparePolicy, typename Point1, typename Point2, int Dimension>
-struct default_strategy
- <
- ComparePolicy, Point1, Point2, Dimension,
- spherical_polar_tag, spherical_polar_tag
- >
-{
- typedef compare::spherical<ComparePolicy, Dimension> type;
-};
-
-template <typename ComparePolicy, typename Point1, typename Point2, int Dimension>
-struct default_strategy
- <
- ComparePolicy, Point1, Point2, Dimension,
- spherical_equatorial_tag, spherical_equatorial_tag
- >
-{
- typedef compare::spherical<ComparePolicy, Dimension> type;
-};
-
-template <typename ComparePolicy, typename Point1, typename Point2, int Dimension>
-struct default_strategy
- <
- ComparePolicy, Point1, Point2, Dimension,
- geographic_tag, geographic_tag
- >
-{
- typedef compare::spherical<ComparePolicy, Dimension> type;
-};
-
-
-} // namespace services
-
-
-}} // namespace strategy::compare
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_COMPARE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/densify.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/densify.hpp
deleted file mode 100644
index 97f4605a982..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/densify.hpp
+++ /dev/null
@@ -1,189 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017-2018, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DENSIFY_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DENSIFY_HPP
-
-
-#include <boost/geometry/algorithms/detail/convert_point_to_point.hpp>
-#include <boost/geometry/algorithms/detail/signed_size_type.hpp>
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/arithmetic/cross_product.hpp>
-#include <boost/geometry/arithmetic/dot_product.hpp>
-#include <boost/geometry/arithmetic/normalize.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/formulas/spherical.hpp>
-#include <boost/geometry/srs/sphere.hpp>
-#include <boost/geometry/strategies/densify.hpp>
-#include <boost/geometry/strategies/spherical/get_radius.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace densify
-{
-
-
-/*!
-\brief Densification of spherical segment.
-\ingroup strategies
-\tparam RadiusTypeOrSphere \tparam_radius_or_sphere
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.densify.densify_4_with_strategy densify (with strategy)]
-}
- */
-template
-<
- typename RadiusTypeOrSphere = double,
- typename CalculationType = void
->
-class spherical
-{
-public:
- // For consistency with area strategy the radius is set to 1
- inline spherical()
- : m_radius(1.0)
- {}
-
- template <typename RadiusOrSphere>
- explicit inline spherical(RadiusOrSphere const& radius_or_sphere)
- : m_radius(strategy_detail::get_radius
- <
- RadiusOrSphere
- >::apply(radius_or_sphere))
- {}
-
- template <typename Point, typename AssignPolicy, typename T>
- inline void apply(Point const& p0, Point const& p1, AssignPolicy & policy, T const& length_threshold) const
- {
- typedef typename AssignPolicy::point_type out_point_t;
- typedef typename select_most_precise
- <
- typename coordinate_type<Point>::type,
- typename coordinate_type<out_point_t>::type,
- CalculationType
- >::type calc_t;
-
- calc_t const c0 = 0;
- calc_t const c1 = 1;
- calc_t const pi = math::pi<calc_t>();
-
- typedef model::point<calc_t, 3, cs::cartesian> point3d_t;
- point3d_t const xyz0 = formula::sph_to_cart3d<point3d_t>(p0);
- point3d_t const xyz1 = formula::sph_to_cart3d<point3d_t>(p1);
- calc_t const dot01 = geometry::dot_product(xyz0, xyz1);
- calc_t const angle01 = acos(dot01);
-
- BOOST_GEOMETRY_ASSERT(length_threshold > T(0));
-
- signed_size_type n = signed_size_type(angle01 * m_radius / length_threshold);
- if (n <= 0)
- return;
-
- point3d_t axis;
- if (! math::equals(angle01, pi))
- {
- axis = geometry::cross_product(xyz0, xyz1);
- geometry::detail::vec_normalize(axis);
- }
- else // antipodal
- {
- calc_t const half_pi = math::half_pi<calc_t>();
- calc_t const lat = geometry::get_as_radian<1>(p0);
-
- if (math::equals(lat, half_pi))
- {
- // pointing east, segment lies on prime meridian, going south
- axis = point3d_t(c0, c1, c0);
- }
- else if (math::equals(lat, -half_pi))
- {
- // pointing west, segment lies on prime meridian, going north
- axis = point3d_t(c0, -c1, c0);
- }
- else
- {
- // lon rotated west by pi/2 at equator
- calc_t const lon = geometry::get_as_radian<0>(p0);
- axis = point3d_t(sin(lon), -cos(lon), c0);
- }
- }
-
- calc_t step = angle01 / (n + 1);
-
- calc_t a = step;
- for (signed_size_type i = 0 ; i < n ; ++i, a += step)
- {
- // Axis-Angle rotation
- // see: https://en.wikipedia.org/wiki/Axis-angle_representation
- calc_t const cos_a = cos(a);
- calc_t const sin_a = sin(a);
- // cos_a * v
- point3d_t s1 = xyz0;
- geometry::multiply_value(s1, cos_a);
- // sin_a * (n x v)
- point3d_t s2 = geometry::cross_product(axis, xyz0);
- geometry::multiply_value(s2, sin_a);
- // (1 - cos_a)(n.v) * n
- point3d_t s3 = axis;
- geometry::multiply_value(s3, (c1 - cos_a) * geometry::dot_product(axis, xyz0));
- // v_rot = cos_a * v + sin_a * (n x v) + (1 - cos_a)(n.v) * e
- point3d_t v_rot = s1;
- geometry::add_point(v_rot, s2);
- geometry::add_point(v_rot, s3);
-
- out_point_t p = formula::cart3d_to_sph<out_point_t>(v_rot);
- geometry::detail::conversion::point_to_point
- <
- Point, out_point_t,
- 2, dimension<out_point_t>::value
- >::apply(p0, p);
-
- policy.apply(p);
- }
- }
-
-private:
- typename strategy_detail::get_radius
- <
- RadiusTypeOrSphere
- >::type m_radius;
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <>
-struct default_strategy<spherical_equatorial_tag>
-{
- typedef strategy::densify::spherical<> type;
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::densify
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_ALGORITHMS_DENSIFY_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/disjoint_segment_box.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/disjoint_segment_box.hpp
deleted file mode 100644
index bda62a77fc2..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/disjoint_segment_box.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISJOINT_SEGMENT_BOX_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISJOINT_SEGMENT_BOX_HPP
-
-
-#include <cstddef>
-#include <utility>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/calculation_type.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/point_type.hpp>
-
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/algorithms/detail/disjoint/segment_box.hpp>
-
-#include <boost/geometry/strategies/spherical/azimuth.hpp>
-#include <boost/geometry/strategies/disjoint.hpp>
-
-namespace boost { namespace geometry { namespace strategy { namespace disjoint
-{
-
-// NOTE: This may be temporary place for this or corresponding strategy
-// It seems to be more appropriate to implement the opposite of it
-// e.g. intersection::segment_box because in disjoint() algorithm
-// other strategies that are used are intersection and covered_by strategies.
-struct segment_box_spherical
-{
- template <typename Segment, typename Box>
- struct point_in_geometry_strategy
- : services::default_strategy
- <
- typename point_type<Segment>::type,
- Box
- >
- {};
-
- template <typename Segment, typename Box>
- static inline typename point_in_geometry_strategy<Segment, Box>::type
- get_point_in_geometry_strategy()
- {
- typedef typename point_in_geometry_strategy<Segment, Box>::type strategy_type;
-
- return strategy_type();
- }
-
- template <typename Segment, typename Box>
- static inline bool apply(Segment const& segment, Box const& box)
- {
- typedef typename point_type<Segment>::type segment_point_type;
- typedef typename coordinate_type<segment_point_type>::type CT;
- geometry::strategy::azimuth::spherical<CT> azimuth_strategy;
-
- return geometry::detail::disjoint::disjoint_segment_box_sphere_or_spheroid
- <spherical_equatorial_tag>::apply(segment, box, azimuth_strategy);
- }
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-namespace services
-{
-
-template <typename Linear, typename Box, typename LinearTag>
-struct default_strategy<Linear, Box, LinearTag, box_tag, 1, 2,
- spherical_equatorial_tag, spherical_equatorial_tag>
-{
- typedef segment_box_spherical type;
-};
-
-template <typename Box, typename Linear, typename LinearTag>
-struct default_strategy<Box, Linear, box_tag, LinearTag, 2, 1,
- spherical_equatorial_tag, spherical_equatorial_tag>
-{
- typedef segment_box_spherical type;
-};
-
-} // namespace services
-
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}}}} // namespace boost::geometry::strategy::disjoint
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISJOINT_SEGMENT_BOX_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp
deleted file mode 100644
index db029dff909..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/distance_cross_track.hpp
+++ /dev/null
@@ -1,802 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014-2017.
-// Modifications copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_HPP
-
-#include <algorithm>
-
-#include <boost/config.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/concepts/distance_concept.hpp>
-#include <boost/geometry/strategies/spherical/distance_haversine.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK
-# include <boost/geometry/io/dsv/write.hpp>
-#endif
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-
-namespace comparable
-{
-
-/*
- Given a spherical segment AB and a point D, we are interested in
- computing the distance of D from AB. This is usually known as the
- cross track distance.
-
- If the projection (along great circles) of the point D lies inside
- the segment AB, then the distance (cross track error) XTD is given
- by the formula (see http://williams.best.vwh.net/avform.htm#XTE):
-
- XTD = asin( sin(dist_AD) * sin(crs_AD-crs_AB) )
-
- where dist_AD is the great circle distance between the points A and
- B, and crs_AD, crs_AB is the course (bearing) between the points A,
- D and A, B, respectively.
-
- If the point D does not project inside the arc AB, then the distance
- of D from AB is the minimum of the two distances dist_AD and dist_BD.
-
- Our reference implementation for this procedure is listed below
- (this was the old Boost.Geometry implementation of the cross track distance),
- where:
- * The member variable m_strategy is the underlying haversine strategy.
- * p stands for the point D.
- * sp1 stands for the segment endpoint A.
- * sp2 stands for the segment endpoint B.
-
- ================= reference implementation -- start =================
-
- return_type d1 = m_strategy.apply(sp1, p);
- return_type d3 = m_strategy.apply(sp1, sp2);
-
- if (geometry::math::equals(d3, 0.0))
- {
- // "Degenerate" segment, return either d1 or d2
- return d1;
- }
-
- return_type d2 = m_strategy.apply(sp2, p);
-
- return_type crs_AD = geometry::detail::course<return_type>(sp1, p);
- return_type crs_AB = geometry::detail::course<return_type>(sp1, sp2);
- return_type crs_BA = crs_AB - geometry::math::pi<return_type>();
- return_type crs_BD = geometry::detail::course<return_type>(sp2, p);
- return_type d_crs1 = crs_AD - crs_AB;
- return_type d_crs2 = crs_BD - crs_BA;
-
- // d1, d2, d3 are in principle not needed, only the sign matters
- return_type projection1 = cos( d_crs1 ) * d1 / d3;
- return_type projection2 = cos( d_crs2 ) * d2 / d3;
-
- if (projection1 > 0.0 && projection2 > 0.0)
- {
- return_type XTD
- = radius() * math::abs( asin( sin( d1 / radius() ) * sin( d_crs1 ) ));
-
- // Return shortest distance, projected point on segment sp1-sp2
- return return_type(XTD);
- }
- else
- {
- // Return shortest distance, project either on point sp1 or sp2
- return return_type( (std::min)( d1 , d2 ) );
- }
-
- ================= reference implementation -- end =================
-
-
- Motivation
- ----------
- In what follows we develop a comparable version of the cross track
- distance strategy, that meets the following goals:
- * It is more efficient than the original cross track strategy (less
- operations and less calls to mathematical functions).
- * Distances using the comparable cross track strategy can not only
- be compared with other distances using the same strategy, but also with
- distances computed with the comparable version of the haversine strategy.
- * It can serve as the basis for the computation of the cross track distance,
- as it is more efficient to compute its comparable version and
- transform that to the actual cross track distance, rather than
- follow/use the reference implementation listed above.
-
- Major idea
- ----------
- The idea here is to use the comparable haversine strategy to compute
- the distances d1, d2 and d3 in the above listing. Once we have done
- that we need also to make sure that instead of returning XTD (as
- computed above) that we return a distance CXTD that is compatible
- with the comparable haversine distance. To achieve this CXTD must satisfy
- the relation:
- XTD = 2 * R * asin( sqrt(XTD) )
- where R is the sphere's radius.
-
- Below we perform the mathematical analysis that show how to compute CXTD.
-
-
- Mathematical analysis
- ---------------------
- Below we use the following trigonometric identities:
- sin(2 * x) = 2 * sin(x) * cos(x)
- cos(asin(x)) = sqrt(1 - x^2)
-
- Observation:
- The distance d1 needed when the projection of the point D is within the
- segment must be the true distance. However, comparable::haversine<>
- returns a comparable distance instead of the one needed.
- To remedy this, we implicitly compute what is needed.
- More precisely, we need to compute sin(true_d1):
-
- sin(true_d1) = sin(2 * asin(sqrt(d1)))
- = 2 * sin(asin(sqrt(d1)) * cos(asin(sqrt(d1)))
- = 2 * sqrt(d1) * sqrt(1-(sqrt(d1))^2)
- = 2 * sqrt(d1 - d1 * d1)
- This relation is used below.
-
- As we mentioned above the goal is to find CXTD (named "a" below for
- brevity) such that ("b" below stands for "d1", and "c" for "d_crs1"):
-
- 2 * R * asin(sqrt(a)) == R * asin(2 * sqrt(b-b^2) * sin(c))
-
- Analysis:
- 2 * R * asin(sqrt(a)) == R * asin(2 * sqrt(b-b^2) * sin(c))
- <=> 2 * asin(sqrt(a)) == asin(sqrt(b-b^2) * sin(c))
- <=> sin(2 * asin(sqrt(a))) == 2 * sqrt(b-b^2) * sin(c)
- <=> 2 * sin(asin(sqrt(a))) * cos(asin(sqrt(a))) == 2 * sqrt(b-b^2) * sin(c)
- <=> 2 * sqrt(a) * sqrt(1-a) == 2 * sqrt(b-b^2) * sin(c)
- <=> sqrt(a) * sqrt(1-a) == sqrt(b-b^2) * sin(c)
- <=> sqrt(a-a^2) == sqrt(b-b^2) * sin(c)
- <=> a-a^2 == (b-b^2) * (sin(c))^2
-
- Consider the quadratic equation: x^2-x+p^2 == 0,
- where p = sqrt(b-b^2) * sin(c); its discriminant is:
- d = 1 - 4 * p^2 = 1 - 4 * (b-b^2) * (sin(c))^2
-
- The two solutions are:
- a_1 = (1 - sqrt(d)) / 2
- a_2 = (1 + sqrt(d)) / 2
-
- Which one to choose?
- "a" refers to the distance (on the unit sphere) of D from the
- supporting great circle Circ(A,B) of the segment AB.
- The two different values for "a" correspond to the lengths of the two
- arcs delimited D and the points of intersection of Circ(A,B) and the
- great circle perperdicular to Circ(A,B) passing through D.
- Clearly, the value we want is the smallest among these two distances,
- hence the root we must choose is the smallest root among the two.
-
- So the answer is:
- CXTD = ( 1 - sqrt(1 - 4 * (b-b^2) * (sin(c))^2) ) / 2
-
- Therefore, in order to implement the comparable version of the cross
- track strategy we need to:
- (1) Use the comparable version of the haversine strategy instead of
- the non-comparable one.
- (2) Instead of return XTD when D projects inside the segment AB, we
- need to return CXTD, given by the following formula:
- CXTD = ( 1 - sqrt(1 - 4 * (d1-d1^2) * (sin(d_crs1))^2) ) / 2;
-
-
- Complexity Analysis
- -------------------
- In the analysis that follows we refer to the actual implementation below.
- In particular, instead of computing CXTD as above, we use the more
- efficient (operation-wise) computation of CXTD shown here:
-
- return_type sin_d_crs1 = sin(d_crs1);
- return_type d1_x_sin = d1 * sin_d_crs1;
- return_type d = d1_x_sin * (sin_d_crs1 - d1_x_sin);
- return d / (0.5 + math::sqrt(0.25 - d));
-
- Notice that instead of computing:
- 0.5 - 0.5 * sqrt(1 - 4 * d) = 0.5 - sqrt(0.25 - d)
- we use the following formula instead:
- d / (0.5 + sqrt(0.25 - d)).
- This is done for numerical robustness. The expression 0.5 - sqrt(0.25 - x)
- has large numerical errors for values of x close to 0 (if using doubles
- the error start to become large even when d is as large as 0.001).
- To remedy that, we re-write 0.5 - sqrt(0.25 - x) as:
- 0.5 - sqrt(0.25 - d)
- = (0.5 - sqrt(0.25 - d) * (0.5 - sqrt(0.25 - d)) / (0.5 + sqrt(0.25 - d)).
- The numerator is the difference of two squares:
- (0.5 - sqrt(0.25 - d) * (0.5 - sqrt(0.25 - d))
- = 0.5^2 - (sqrt(0.25 - d))^ = 0.25 - (0.25 - d) = d,
- which gives the expression we use.
-
- For the complexity analysis, we distinguish between two cases:
- (A) The distance is realized between the point D and an
- endpoint of the segment AB
-
- Gains:
- Since we are using comparable::haversine<> which is called
- 3 times, we gain:
- -> 3 calls to sqrt
- -> 3 calls to asin
- -> 6 multiplications
-
- Loses: None
-
- So the net gain is:
- -> 6 function calls (sqrt/asin)
- -> 6 arithmetic operations
-
- If we use comparable::cross_track<> to compute
- cross_track<> we need to account for a call to sqrt, a call
- to asin and 2 multiplications. In this case the net gain is:
- -> 4 function calls (sqrt/asin)
- -> 4 arithmetic operations
-
-
- (B) The distance is realized between the point D and an
- interior point of the segment AB
-
- Gains:
- Since we are using comparable::haversine<> which is called
- 3 times, we gain:
- -> 3 calls to sqrt
- -> 3 calls to asin
- -> 6 multiplications
- Also we gain the operations used to compute XTD:
- -> 2 calls to sin
- -> 1 call to asin
- -> 1 call to abs
- -> 2 multiplications
- -> 1 division
- So the total gains are:
- -> 9 calls to sqrt/sin/asin
- -> 1 call to abs
- -> 8 multiplications
- -> 1 division
-
- Loses:
- To compute a distance compatible with comparable::haversine<>
- we need to perform a few more operations, namely:
- -> 1 call to sin
- -> 1 call to sqrt
- -> 2 multiplications
- -> 1 division
- -> 1 addition
- -> 2 subtractions
-
- So roughly speaking the net gain is:
- -> 8 fewer function calls and 3 fewer arithmetic operations
-
- If we were to implement cross_track directly from the
- comparable version (much like what haversine<> does using
- comparable::haversine<>) we need additionally
- -> 2 function calls (asin/sqrt)
- -> 2 multiplications
-
- So it pays off to re-implement cross_track<> to use
- comparable::cross_track<>; in this case the net gain would be:
- -> 6 function calls
- -> 1 arithmetic operation
-
- Summary/Conclusion
- ------------------
- Following the mathematical and complexity analysis above, the
- comparable cross track strategy (as implemented below) satisfies
- all the goal mentioned in the beginning:
- * It is more efficient than its non-comparable counter-part.
- * Comparable distances using this new strategy can also be compared
- with comparable distances computed with the comparable haversine
- strategy.
- * It turns out to be more efficient to compute the actual cross
- track distance XTD by first computing CXTD, and then computing
- XTD by means of the formula:
- XTD = 2 * R * asin( sqrt(CXTD) )
-*/
-
-template
-<
- typename CalculationType = void,
- typename Strategy = comparable::haversine<double, CalculationType>
->
-class cross_track
-{
-public :
- template <typename Point, typename PointOfSegment>
- struct return_type
- : promote_floating_point
- <
- typename select_calculation_type
- <
- Point,
- PointOfSegment,
- CalculationType
- >::type
- >
- {};
-
- typedef typename Strategy::radius_type radius_type;
-
- inline cross_track()
- {}
-
- explicit inline cross_track(typename Strategy::radius_type const& r)
- : m_strategy(r)
- {}
-
- inline cross_track(Strategy const& s)
- : m_strategy(s)
- {}
-
- //TODO: apply a more general strategy getter
- inline Strategy get_distance_strategy() const
- {
- return m_strategy;
- }
-
- // It might be useful in the future
- // to overload constructor with strategy info.
- // crosstrack(...) {}
-
-
- template <typename Point, typename PointOfSegment>
- inline typename return_type<Point, PointOfSegment>::type
- apply(Point const& p, PointOfSegment const& sp1, PointOfSegment const& sp2) const
- {
-
-#if !defined(BOOST_MSVC)
- BOOST_CONCEPT_ASSERT
- (
- (concepts::PointDistanceStrategy<Strategy, Point, PointOfSegment>)
- );
-#endif
-
- typedef typename return_type<Point, PointOfSegment>::type return_type;
-
- // http://williams.best.vwh.net/avform.htm#XTE
- return_type d1 = m_strategy.apply(sp1, p);
- return_type d3 = m_strategy.apply(sp1, sp2);
-
- if (geometry::math::equals(d3, 0.0))
- {
- // "Degenerate" segment, return either d1 or d2
- return d1;
- }
-
- return_type d2 = m_strategy.apply(sp2, p);
-
- return_type lon1 = geometry::get_as_radian<0>(sp1);
- return_type lat1 = geometry::get_as_radian<1>(sp1);
- return_type lon2 = geometry::get_as_radian<0>(sp2);
- return_type lat2 = geometry::get_as_radian<1>(sp2);
- return_type lon = geometry::get_as_radian<0>(p);
- return_type lat = geometry::get_as_radian<1>(p);
-
- return_type crs_AD = geometry::formula::spherical_azimuth<return_type, false>
- (lon1, lat1, lon, lat).azimuth;
-
- geometry::formula::result_spherical<return_type> result =
- geometry::formula::spherical_azimuth<return_type, true>
- (lon1, lat1, lon2, lat2);
- return_type crs_AB = result.azimuth;
- return_type crs_BA = result.reverse_azimuth - geometry::math::pi<return_type>();
-
- return_type crs_BD = geometry::formula::spherical_azimuth<return_type, false>
- (lon2, lat2, lon, lat).azimuth;
-
- return_type d_crs1 = crs_AD - crs_AB;
- return_type d_crs2 = crs_BD - crs_BA;
-
- // d1, d2, d3 are in principle not needed, only the sign matters
- return_type projection1 = cos( d_crs1 ) * d1 / d3;
- return_type projection2 = cos( d_crs2 ) * d2 / d3;
-
-#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK
- std::cout << "Course " << dsv(sp1) << " to " << dsv(p) << " "
- << crs_AD * geometry::math::r2d<return_type>() << std::endl;
- std::cout << "Course " << dsv(sp1) << " to " << dsv(sp2) << " "
- << crs_AB * geometry::math::r2d<return_type>() << std::endl;
- std::cout << "Course " << dsv(sp2) << " to " << dsv(sp1) << " "
- << crs_BA * geometry::math::r2d<return_type>() << std::endl;
- std::cout << "Course " << dsv(sp2) << " to " << dsv(p) << " "
- << crs_BD * geometry::math::r2d<return_type>() << std::endl;
- std::cout << "Projection AD-AB " << projection1 << " : "
- << d_crs1 * geometry::math::r2d<return_type>() << std::endl;
- std::cout << "Projection BD-BA " << projection2 << " : "
- << d_crs2 * geometry::math::r2d<return_type>() << std::endl;
- std::cout << " d1: " << (d1 )
- << " d2: " << (d2 )
- << std::endl;
-#endif
-
- if (projection1 > 0.0 && projection2 > 0.0)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK
- return_type XTD = radius() * geometry::math::abs( asin( sin( d1 ) * sin( d_crs1 ) ));
-
- std::cout << "Projection ON the segment" << std::endl;
- std::cout << "XTD: " << XTD
- << " d1: " << (d1 * radius())
- << " d2: " << (d2 * radius())
- << std::endl;
-#endif
- return_type const half(0.5);
- return_type const quarter(0.25);
-
- return_type sin_d_crs1 = sin(d_crs1);
- /*
- This is the straightforward obvious way to continue:
-
- return_type discriminant
- = 1.0 - 4.0 * (d1 - d1 * d1) * sin_d_crs1 * sin_d_crs1;
- return 0.5 - 0.5 * math::sqrt(discriminant);
-
- Below we optimize the number of arithmetic operations
- and account for numerical robustness:
- */
- return_type d1_x_sin = d1 * sin_d_crs1;
- return_type d = d1_x_sin * (sin_d_crs1 - d1_x_sin);
- return d / (half + math::sqrt(quarter - d));
- }
- else
- {
-#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK
- std::cout << "Projection OUTSIDE the segment" << std::endl;
-#endif
-
- // Return shortest distance, project either on point sp1 or sp2
- return return_type( (std::min)( d1 , d2 ) );
- }
- }
-
- inline typename Strategy::radius_type radius() const
- { return m_strategy.radius(); }
-
-private :
- Strategy m_strategy;
-};
-
-} // namespace comparable
-
-
-/*!
-\brief Strategy functor for distance point to segment calculation
-\ingroup strategies
-\details Class which calculates the distance of a point to a segment, for points on a sphere or globe
-\see http://williams.best.vwh.net/avform.htm
-\tparam CalculationType \tparam_calculation
-\tparam Strategy underlying point-point distance strategy, defaults to haversine
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
-}
-
-*/
-template
-<
- typename CalculationType = void,
- typename Strategy = haversine<double, CalculationType>
->
-class cross_track
-{
-public :
- template <typename Point, typename PointOfSegment>
- struct return_type
- : promote_floating_point
- <
- typename select_calculation_type
- <
- Point,
- PointOfSegment,
- CalculationType
- >::type
- >
- {};
-
- typedef typename Strategy::radius_type radius_type;
-
- inline cross_track()
- {}
-
- explicit inline cross_track(typename Strategy::radius_type const& r)
- : m_strategy(r)
- {}
-
- inline cross_track(Strategy const& s)
- : m_strategy(s)
- {}
-
- //TODO: apply a more general strategy getter
- inline Strategy get_distance_strategy() const
- {
- return m_strategy;
- }
-
- // It might be useful in the future
- // to overload constructor with strategy info.
- // crosstrack(...) {}
-
-
- template <typename Point, typename PointOfSegment>
- inline typename return_type<Point, PointOfSegment>::type
- apply(Point const& p, PointOfSegment const& sp1, PointOfSegment const& sp2) const
- {
-
-#if !defined(BOOST_MSVC)
- BOOST_CONCEPT_ASSERT
- (
- (concepts::PointDistanceStrategy<Strategy, Point, PointOfSegment>)
- );
-#endif
- typedef typename return_type<Point, PointOfSegment>::type return_type;
- typedef cross_track<CalculationType, Strategy> this_type;
-
- typedef typename services::comparable_type
- <
- this_type
- >::type comparable_type;
-
- comparable_type cstrategy
- = services::get_comparable<this_type>::apply(m_strategy);
-
- return_type const a = cstrategy.apply(p, sp1, sp2);
- return_type const c = return_type(2.0) * asin(math::sqrt(a));
- return c * radius();
- }
-
- inline typename Strategy::radius_type radius() const
- { return m_strategy.radius(); }
-
-private :
-
- Strategy m_strategy;
-};
-
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename CalculationType, typename Strategy>
-struct tag<cross_track<CalculationType, Strategy> >
-{
- typedef strategy_tag_distance_point_segment type;
-};
-
-
-template <typename CalculationType, typename Strategy, typename P, typename PS>
-struct return_type<cross_track<CalculationType, Strategy>, P, PS>
- : cross_track<CalculationType, Strategy>::template return_type<P, PS>
-{};
-
-
-template <typename CalculationType, typename Strategy>
-struct comparable_type<cross_track<CalculationType, Strategy> >
-{
- typedef comparable::cross_track
- <
- CalculationType, typename comparable_type<Strategy>::type
- > type;
-};
-
-
-template
-<
- typename CalculationType,
- typename Strategy
->
-struct get_comparable<cross_track<CalculationType, Strategy> >
-{
- typedef typename comparable_type
- <
- cross_track<CalculationType, Strategy>
- >::type comparable_type;
-public :
- static inline comparable_type
- apply(cross_track<CalculationType, Strategy> const& strategy)
- {
- return comparable_type(strategy.radius());
- }
-};
-
-
-template
-<
- typename CalculationType,
- typename Strategy,
- typename P,
- typename PS
->
-struct result_from_distance<cross_track<CalculationType, Strategy>, P, PS>
-{
-private :
- typedef typename cross_track
- <
- CalculationType, Strategy
- >::template return_type<P, PS>::type return_type;
-public :
- template <typename T>
- static inline return_type
- apply(cross_track<CalculationType, Strategy> const& , T const& distance)
- {
- return distance;
- }
-};
-
-
-// Specializations for comparable::cross_track
-template <typename RadiusType, typename CalculationType>
-struct tag<comparable::cross_track<RadiusType, CalculationType> >
-{
- typedef strategy_tag_distance_point_segment type;
-};
-
-
-template
-<
- typename RadiusType,
- typename CalculationType,
- typename P,
- typename PS
->
-struct return_type<comparable::cross_track<RadiusType, CalculationType>, P, PS>
- : comparable::cross_track
- <
- RadiusType, CalculationType
- >::template return_type<P, PS>
-{};
-
-
-template <typename RadiusType, typename CalculationType>
-struct comparable_type<comparable::cross_track<RadiusType, CalculationType> >
-{
- typedef comparable::cross_track<RadiusType, CalculationType> type;
-};
-
-
-template <typename RadiusType, typename CalculationType>
-struct get_comparable<comparable::cross_track<RadiusType, CalculationType> >
-{
-private :
- typedef comparable::cross_track<RadiusType, CalculationType> this_type;
-public :
- static inline this_type apply(this_type const& input)
- {
- return input;
- }
-};
-
-
-template
-<
- typename RadiusType,
- typename CalculationType,
- typename P,
- typename PS
->
-struct result_from_distance
- <
- comparable::cross_track<RadiusType, CalculationType>, P, PS
- >
-{
-private :
- typedef comparable::cross_track<RadiusType, CalculationType> strategy_type;
- typedef typename return_type<strategy_type, P, PS>::type return_type;
-public :
- template <typename T>
- static inline return_type apply(strategy_type const& strategy,
- T const& distance)
- {
- return_type const s
- = sin( (distance / strategy.radius()) / return_type(2.0) );
- return s * s;
- }
-};
-
-
-
-/*
-
-TODO: spherical polar coordinate system requires "get_as_radian_equatorial<>"
-
-template <typename Point, typename PointOfSegment, typename Strategy>
-struct default_strategy
- <
- segment_tag, Point, PointOfSegment,
- spherical_polar_tag, spherical_polar_tag,
- Strategy
- >
-{
- typedef cross_track
- <
- void,
- typename boost::mpl::if_
- <
- boost::is_void<Strategy>,
- typename default_strategy
- <
- point_tag, Point, PointOfSegment,
- spherical_polar_tag, spherical_polar_tag
- >::type,
- Strategy
- >::type
- > type;
-};
-*/
-
-template <typename Point, typename PointOfSegment, typename Strategy>
-struct default_strategy
- <
- point_tag, segment_tag, Point, PointOfSegment,
- spherical_equatorial_tag, spherical_equatorial_tag,
- Strategy
- >
-{
- typedef cross_track
- <
- void,
- typename boost::mpl::if_
- <
- boost::is_void<Strategy>,
- typename default_strategy
- <
- point_tag, point_tag, Point, PointOfSegment,
- spherical_equatorial_tag, spherical_equatorial_tag
- >::type,
- Strategy
- >::type
- > type;
-};
-
-
-template <typename PointOfSegment, typename Point, typename Strategy>
-struct default_strategy
- <
- segment_tag, point_tag, PointOfSegment, Point,
- spherical_equatorial_tag, spherical_equatorial_tag,
- Strategy
- >
-{
- typedef typename default_strategy
- <
- point_tag, segment_tag, Point, PointOfSegment,
- spherical_equatorial_tag, spherical_equatorial_tag,
- Strategy
- >::type type;
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-}} // namespace strategy::distance
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/distance_cross_track_box_box.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/distance_cross_track_box_box.hpp
deleted file mode 100644
index efa7a728a6c..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/distance_cross_track_box_box.hpp
+++ /dev/null
@@ -1,440 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2016-2018 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_BOX_BOX_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_BOX_BOX_HPP
-
-#include <boost/config.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/concepts/distance_concept.hpp>
-#include <boost/geometry/strategies/spherical/distance_cross_track.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/algorithms/detail/assign_box_corners.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-namespace details
-{
-
-template <typename ReturnType>
-class cross_track_box_box_generic
-{
-public :
-
- template <typename Point, typename Strategy>
- ReturnType static inline diagonal_case(Point topA,
- Point topB,
- Point bottomA,
- Point bottomB,
- bool north_shortest,
- bool non_overlap,
- Strategy ps_strategy)
- {
- if (north_shortest && non_overlap)
- {
- return ps_strategy.get_distance_strategy().apply(topA, bottomB);
- }
- if (north_shortest && !non_overlap)
- {
- return ps_strategy.apply(topA, topB, bottomB);
- }
- if (!north_shortest && non_overlap)
- {
- return ps_strategy.get_distance_strategy().apply(bottomA, topB);
- }
- return ps_strategy.apply(bottomA, topB, bottomB);
- }
-
-
- template
- <
- typename Box1,
- typename Box2,
- typename Strategy
- >
- ReturnType static inline apply (Box1 const& box1,
- Box2 const& box2,
- Strategy ps_strategy)
- {
-
- // this method assumes that the coordinates of the point and
- // the box are normalized
-
- typedef typename point_type<Box1>::type box_point_type1;
- typedef typename point_type<Box2>::type box_point_type2;
-
- box_point_type1 bottom_left1, bottom_right1, top_left1, top_right1;
- geometry::detail::assign_box_corners(box1,
- bottom_left1, bottom_right1,
- top_left1, top_right1);
-
- box_point_type2 bottom_left2, bottom_right2, top_left2, top_right2;
- geometry::detail::assign_box_corners(box2,
- bottom_left2, bottom_right2,
- top_left2, top_right2);
-
- ReturnType lon_min1 = geometry::get_as_radian<0>(bottom_left1);
- ReturnType const lat_min1 = geometry::get_as_radian<1>(bottom_left1);
- ReturnType lon_max1 = geometry::get_as_radian<0>(top_right1);
- ReturnType const lat_max1 = geometry::get_as_radian<1>(top_right1);
-
- ReturnType lon_min2 = geometry::get_as_radian<0>(bottom_left2);
- ReturnType const lat_min2 = geometry::get_as_radian<1>(bottom_left2);
- ReturnType lon_max2 = geometry::get_as_radian<0>(top_right2);
- ReturnType const lat_max2 = geometry::get_as_radian<1>(top_right2);
-
- ReturnType const two_pi = math::two_pi<ReturnType>();
-
- // Test which sides of the boxes are closer and if boxes cross
- // antimeridian
- bool right_wrap;
-
- if (lon_min2 > 0 && lon_max2 < 0) // box2 crosses antimeridian
- {
-#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK_BOX_BOX
- std::cout << "(box2 crosses antimeridian)";
-#endif
- right_wrap = lon_min2 - lon_max1 < lon_min1 - lon_max2;
- lon_max2 += two_pi;
- if (lon_min1 > 0 && lon_max1 < 0) // both boxes crosses antimeridian
- {
- lon_max1 += two_pi;
- }
- }
- else if (lon_min1 > 0 && lon_max1 < 0) // only box1 crosses antimeridian
- {
-#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK_BOX_BOX
- std::cout << "(box1 crosses antimeridian)";
-#endif
- return apply(box2, box1, ps_strategy);
- }
- else
- {
- right_wrap = lon_max1 <= lon_min2
- ? lon_min2 - lon_max1 < two_pi - (lon_max2 - lon_min1)
- : lon_min1 - lon_max2 > two_pi - (lon_max1 - lon_min2);
-
- }
-
- // Check1: if box2 crosses the band defined by the
- // minimum and maximum longitude of box1; if yes, determine
- // if the box2 is above, below or intersects/is inside box1 and compute
- // the distance (easy in this case)
-
- bool lon_min12 = lon_min1 <= lon_min2;
- bool right = lon_max1 <= lon_min2;
- bool left = lon_min1 >= lon_max2;
- bool lon_max12 = lon_max1 <= lon_max2;
-
- if ((lon_min12 && !right)
- || (!left && !lon_max12)
- || (!lon_min12 && lon_max12))
- {
-#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK_BOX_BOX
- std::cout << "(up-down)\n";
-#endif
- if (lat_min1 > lat_max2)
- {
- return geometry::strategy::distance::services::result_from_distance
- <
- Strategy, box_point_type1, box_point_type2
- >::apply(ps_strategy, ps_strategy.get_distance_strategy()
- .meridian(lat_min1, lat_max2));
- }
- else if (lat_max1 < lat_min2)
- {
- return geometry::strategy::distance::services::result_from_distance
- <
- Strategy, box_point_type1, box_point_type2
- >::apply(ps_strategy, ps_strategy.get_distance_strategy().
- meridian(lat_min2, lat_max1));
- }
- else
- {
- //BOOST_GEOMETRY_ASSERT(plat >= lat_min && plat <= lat_max);
- return ReturnType(0);
- }
- }
-
- // Check2: if box2 is right/left of box1
- // the max lat of box2 should be less than the max lat of box1
- bool bottom_max;
-
- ReturnType top_common = (std::min)(lat_max1, lat_max2);
- ReturnType bottom_common = (std::max)(lat_min1, lat_min2);
-
- // true if the closest points are on northern hemisphere
- bool north_shortest = top_common + bottom_common > 0;
- // true if box bands do not overlap
- bool non_overlap = top_common < bottom_common;
-
- if (north_shortest)
- {
- bottom_max = lat_max1 >= lat_max2;
- }
- else
- {
- bottom_max = lat_min1 <= lat_min2;
- }
-
-#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK_BOX_BOX
- std::cout << "(diagonal)";
-#endif
- if (bottom_max && !right_wrap)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK_BOX_BOX
- std::cout << "(bottom left)";
-#endif
- return diagonal_case(top_right2, top_left1,
- bottom_right2, bottom_left1,
- north_shortest, non_overlap,
- ps_strategy);
- }
- if (bottom_max && right_wrap)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK_BOX_BOX
- std::cout << "(bottom right)";
-#endif
- return diagonal_case(top_left2, top_right1,
- bottom_left2, bottom_right1,
- north_shortest, non_overlap,
- ps_strategy);
- }
- if (!bottom_max && !right_wrap)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK_BOX_BOX
- std::cout << "(top left)";
-#endif
- return diagonal_case(top_left1, top_right2,
- bottom_left1, bottom_right2,
- north_shortest, non_overlap,
- ps_strategy);
- }
- if (!bottom_max && right_wrap)
- {
-#ifdef BOOST_GEOMETRY_DEBUG_CROSS_TRACK_BOX_BOX
- std::cout << "(top right)";
-#endif
- return diagonal_case(top_right1, top_left2,
- bottom_right1, bottom_left2,
- north_shortest, non_overlap,
- ps_strategy);
- }
- return ReturnType(0);
- }
-};
-
-} //namespace details
-
-/*!
-\brief Strategy functor for distance box to box calculation
-\ingroup strategies
-\details Class which calculates the distance of a box to a box, for
-boxes on a sphere or globe
-\tparam CalculationType \tparam_calculation
-\tparam Strategy underlying point-segment distance strategy, defaults
-to cross track
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
-}
-*/
-template
-<
- typename CalculationType = void,
- typename Strategy = cross_track<CalculationType>
->
-class cross_track_box_box
-{
-public:
- template <typename Box1, typename Box2>
- struct return_type
- : services::return_type<Strategy,
- typename point_type<Box1>::type,
- typename point_type<Box2>::type>
- {};
-
- typedef typename Strategy::radius_type radius_type;
-
- inline cross_track_box_box()
- {}
-
- explicit inline cross_track_box_box(typename Strategy::radius_type const& r)
- : m_ps_strategy(r)
- {}
-
- inline cross_track_box_box(Strategy const& s)
- : m_ps_strategy(s)
- {}
-
-
- // It might be useful in the future
- // to overload constructor with strategy info.
- // crosstrack(...) {}
-
- template <typename Box1, typename Box2>
- inline typename return_type<Box1, Box2>::type
- apply(Box1 const& box1, Box2 const& box2) const
- {
-#if !defined(BOOST_MSVC)
- BOOST_CONCEPT_ASSERT
- (
- (concepts::PointSegmentDistanceStrategy
- <
- Strategy,
- typename point_type<Box1>::type,
- typename point_type<Box2>::type
- >)
- );
-#endif
- typedef typename return_type<Box1, Box2>::type return_type;
- return details::cross_track_box_box_generic
- <return_type>::apply(box1, box2, m_ps_strategy);
- }
-
- inline typename Strategy::radius_type radius() const
- {
- return m_ps_strategy.radius();
- }
-
-private:
- Strategy m_ps_strategy;
-};
-
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename CalculationType, typename Strategy>
-struct tag<cross_track_box_box<CalculationType, Strategy> >
-{
- typedef strategy_tag_distance_box_box type;
-};
-
-
-template <typename CalculationType, typename Strategy, typename Box1, typename Box2>
-struct return_type<cross_track_box_box<CalculationType, Strategy>, Box1, Box2>
- : cross_track_box_box
- <
- CalculationType, Strategy
- >::template return_type<Box1, Box2>
-{};
-
-
-template <typename CalculationType, typename Strategy>
-struct comparable_type<cross_track_box_box<CalculationType, Strategy> >
-{
- typedef cross_track_box_box
- <
- CalculationType, typename comparable_type<Strategy>::type
- > type;
-};
-
-
-template <typename CalculationType, typename Strategy>
-struct get_comparable<cross_track_box_box<CalculationType, Strategy> >
-{
- typedef cross_track_box_box<CalculationType, Strategy> this_strategy;
- typedef typename comparable_type<this_strategy>::type comparable_type;
-
-public:
- static inline comparable_type apply(this_strategy const& strategy)
- {
- return comparable_type(strategy.radius());
- }
-};
-
-
-template <typename CalculationType, typename Strategy, typename Box1, typename Box2>
-struct result_from_distance
- <
- cross_track_box_box<CalculationType, Strategy>, Box1, Box2
- >
-{
-private:
- typedef cross_track_box_box<CalculationType, Strategy> this_strategy;
-
- typedef typename this_strategy::template return_type
- <
- Box1, Box2
- >::type return_type;
-
-public:
- template <typename T>
- static inline return_type apply(this_strategy const& strategy,
- T const& distance)
- {
- Strategy s(strategy.radius());
-
- return result_from_distance
- <
- Strategy,
- typename point_type<Box1>::type,
- typename point_type<Box2>::type
- >::apply(s, distance);
- }
-};
-
-
-// define cross_track_box_box<default_point_segment_strategy> as
-// default box-box strategy for the spherical equatorial coordinate system
-template <typename Box1, typename Box2, typename Strategy>
-struct default_strategy
- <
- box_tag, box_tag, Box1, Box2,
- spherical_equatorial_tag, spherical_equatorial_tag,
- Strategy
- >
-{
- typedef cross_track_box_box
- <
- void,
- typename boost::mpl::if_
- <
- boost::is_void<Strategy>,
- typename default_strategy
- <
- point_tag, segment_tag,
- typename point_type<Box1>::type, typename point_type<Box2>::type,
- spherical_equatorial_tag, spherical_equatorial_tag
- >::type,
- Strategy
- >::type
- > type;
-};
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_BOX_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp
deleted file mode 100644
index 9c8e7f1a3e1..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp
+++ /dev/null
@@ -1,384 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014-2017.
-// Modifications copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_POINT_BOX_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_POINT_BOX_HPP
-
-#include <boost/config.hpp>
-#include <boost/concept_check.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/concepts/distance_concept.hpp>
-#include <boost/geometry/strategies/spherical/distance_cross_track.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/algorithms/detail/assign_box_corners.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace distance
-{
-
-namespace details
-{
-
-template <typename ReturnType>
-class cross_track_point_box_generic
-{
-public :
-
- template
- <
- typename Point,
- typename Box,
- typename Strategy
- >
- ReturnType static inline apply (Point const& point,
- Box const& box,
- Strategy ps_strategy)
- {
- // this method assumes that the coordinates of the point and
- // the box are normalized
-
- typedef typename point_type<Box>::type box_point_type;
-
- box_point_type bottom_left, bottom_right, top_left, top_right;
- geometry::detail::assign_box_corners(box,
- bottom_left, bottom_right,
- top_left, top_right);
-
- ReturnType const plon = geometry::get_as_radian<0>(point);
- ReturnType const plat = geometry::get_as_radian<1>(point);
-
- ReturnType const lon_min = geometry::get_as_radian<0>(bottom_left);
- ReturnType const lat_min = geometry::get_as_radian<1>(bottom_left);
- ReturnType const lon_max = geometry::get_as_radian<0>(top_right);
- ReturnType const lat_max = geometry::get_as_radian<1>(top_right);
-
- ReturnType const pi = math::pi<ReturnType>();
- ReturnType const two_pi = math::two_pi<ReturnType>();
-
- typedef typename point_type<Box>::type box_point_type;
-
- // First check if the point is within the band defined by the
- // minimum and maximum longitude of the box; if yes, determine
- // if the point is above, below or inside the box and compute
- // the distance (easy in this case)
- //
- // Notice that the point may not be inside the longitude range
- // of the box, but the shifted point may be inside the
- // longitude range of the box; in this case the point is still
- // considered as inside the longitude range band of the box
- if ((plon >= lon_min && plon <= lon_max) || plon + two_pi <= lon_max)
- {
- if (plat > lat_max)
- {
- return geometry::strategy::distance::services::result_from_distance
- <
- Strategy, Point, box_point_type
- >::apply(ps_strategy, ps_strategy.get_distance_strategy().meridian(plat, lat_max));
- }
- else if (plat < lat_min)
- {
- return geometry::strategy::distance::services::result_from_distance
- <
- Strategy, Point, box_point_type
- >::apply(ps_strategy, ps_strategy.get_distance_strategy().meridian(lat_min, plat));
- }
- else
- {
- BOOST_GEOMETRY_ASSERT(plat >= lat_min && plat <= lat_max);
- return ReturnType(0);
- }
- }
-
- // Otherwise determine which among the two medirian segments of the
- // box the point is closest to, and compute the distance of
- // the point to this closest segment
-
- // Below lon_midway is the longitude of the meridian that:
- // (1) is midway between the meridians of the left and right
- // meridians of the box, and
- // (2) does not intersect the box
- ReturnType const two = 2.0;
- bool use_left_segment;
- if (lon_max > pi)
- {
- // the box crosses the antimeridian
-
- // midway longitude = lon_min - (lon_min + (lon_max - 2 * pi)) / 2;
- ReturnType const lon_midway = (lon_min - lon_max) / two + pi;
- BOOST_GEOMETRY_ASSERT(lon_midway >= -pi && lon_midway <= pi);
-
- use_left_segment = plon > lon_midway;
- }
- else
- {
- // the box does not cross the antimeridian
-
- ReturnType const lon_sum = lon_min + lon_max;
- if (math::equals(lon_sum, ReturnType(0)))
- {
- // special case: the box is symmetric with respect to
- // the prime meridian; the midway meridian is the antimeridian
-
- use_left_segment = plon < lon_min;
- }
- else
- {
- // midway long. = lon_min - (2 * pi - (lon_max - lon_min)) / 2;
- ReturnType lon_midway = (lon_min + lon_max) / two - pi;
-
- // normalize the midway longitude
- if (lon_midway > pi)
- {
- lon_midway -= two_pi;
- }
- else if (lon_midway < -pi)
- {
- lon_midway += two_pi;
- }
- BOOST_GEOMETRY_ASSERT(lon_midway >= -pi && lon_midway <= pi);
-
- // if lon_sum is positive the midway meridian is left
- // of the box, or right of the box otherwise
- use_left_segment = lon_sum > 0
- ? (plon < lon_min && plon >= lon_midway)
- : (plon <= lon_max || plon > lon_midway);
- }
- }
-
- return use_left_segment
- ? ps_strategy.apply(point, bottom_left, top_left)
- : ps_strategy.apply(point, bottom_right, top_right);
- }
-};
-
-} //namespace details
-
-/*!
-\brief Strategy functor for distance point to box calculation
-\ingroup strategies
-\details Class which calculates the distance of a point to a box, for
-points and boxes on a sphere or globe
-\tparam CalculationType \tparam_calculation
-\tparam Strategy underlying point-segment distance strategy, defaults
-to cross track
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
-}
-*/
-template
-<
- typename CalculationType = void,
- typename Strategy = cross_track<CalculationType>
->
-class cross_track_point_box
-{
-public:
- template <typename Point, typename Box>
- struct return_type
- : services::return_type<Strategy, Point, typename point_type<Box>::type>
- {};
-
- typedef typename Strategy::radius_type radius_type;
-
- inline cross_track_point_box()
- {}
-
- explicit inline cross_track_point_box(typename Strategy::radius_type const& r)
- : m_ps_strategy(r)
- {}
-
- inline cross_track_point_box(Strategy const& s)
- : m_ps_strategy(s)
- {}
-
-
- // It might be useful in the future
- // to overload constructor with strategy info.
- // crosstrack(...) {}
-
- template <typename Point, typename Box>
- inline typename return_type<Point, Box>::type
- apply(Point const& point, Box const& box) const
- {
-#if !defined(BOOST_MSVC)
- BOOST_CONCEPT_ASSERT
- (
- (concepts::PointSegmentDistanceStrategy
- <
- Strategy, Point, typename point_type<Box>::type
- >)
- );
-#endif
- typedef typename return_type<Point, Box>::type return_type;
- return details::cross_track_point_box_generic
- <return_type>::apply(point, box, m_ps_strategy);
- }
-
- inline typename Strategy::radius_type radius() const
- {
- return m_ps_strategy.radius();
- }
-
-private:
- Strategy m_ps_strategy;
-};
-
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename CalculationType, typename Strategy>
-struct tag<cross_track_point_box<CalculationType, Strategy> >
-{
- typedef strategy_tag_distance_point_box type;
-};
-
-
-template <typename CalculationType, typename Strategy, typename P, typename Box>
-struct return_type<cross_track_point_box<CalculationType, Strategy>, P, Box>
- : cross_track_point_box
- <
- CalculationType, Strategy
- >::template return_type<P, Box>
-{};
-
-
-template <typename CalculationType, typename Strategy>
-struct comparable_type<cross_track_point_box<CalculationType, Strategy> >
-{
- typedef cross_track_point_box
- <
- CalculationType, typename comparable_type<Strategy>::type
- > type;
-};
-
-
-template <typename CalculationType, typename Strategy>
-struct get_comparable<cross_track_point_box<CalculationType, Strategy> >
-{
- typedef cross_track_point_box<CalculationType, Strategy> this_strategy;
- typedef typename comparable_type<this_strategy>::type comparable_type;
-
-public:
- static inline comparable_type apply(this_strategy const& strategy)
- {
- return comparable_type(strategy.radius());
- }
-};
-
-
-template <typename CalculationType, typename Strategy, typename P, typename Box>
-struct result_from_distance
- <
- cross_track_point_box<CalculationType, Strategy>, P, Box
- >
-{
-private:
- typedef cross_track_point_box<CalculationType, Strategy> this_strategy;
-
- typedef typename this_strategy::template return_type
- <
- P, Box
- >::type return_type;
-
-public:
- template <typename T>
- static inline return_type apply(this_strategy const& strategy,
- T const& distance)
- {
- Strategy s(strategy.radius());
-
- return result_from_distance
- <
- Strategy, P, typename point_type<Box>::type
- >::apply(s, distance);
- }
-};
-
-
-// define cross_track_point_box<default_point_segment_strategy> as
-// default point-box strategy for the spherical equatorial coordinate system
-template <typename Point, typename Box, typename Strategy>
-struct default_strategy
- <
- point_tag, box_tag, Point, Box,
- spherical_equatorial_tag, spherical_equatorial_tag,
- Strategy
- >
-{
- typedef cross_track_point_box
- <
- void,
- typename boost::mpl::if_
- <
- boost::is_void<Strategy>,
- typename default_strategy
- <
- point_tag, segment_tag,
- Point, typename point_type<Box>::type,
- spherical_equatorial_tag, spherical_equatorial_tag
- >::type,
- Strategy
- >::type
- > type;
-};
-
-
-template <typename Box, typename Point, typename Strategy>
-struct default_strategy
- <
- box_tag, point_tag, Box, Point,
- spherical_equatorial_tag, spherical_equatorial_tag,
- Strategy
- >
-{
- typedef typename default_strategy
- <
- point_tag, box_tag, Point, Box,
- spherical_equatorial_tag, spherical_equatorial_tag,
- Strategy
- >::type type;
-};
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_CROSS_TRACK_POINT_BOX_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/distance_haversine.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/distance_haversine.hpp
deleted file mode 100644
index 1a4cbdf36be..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/distance_haversine.hpp
+++ /dev/null
@@ -1,354 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017, 2018.
-// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_HAVERSINE_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_HAVERSINE_HPP
-
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-
-#include <boost/geometry/srs/sphere.hpp>
-
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/spherical/get_radius.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace distance
-{
-
-
-namespace comparable
-{
-
-// Comparable haversine.
-// To compare distances, we can avoid:
-// - multiplication with radius and 2.0
-// - applying sqrt
-// - applying asin (which is strictly (monotone) increasing)
-template
-<
- typename RadiusTypeOrSphere = double,
- typename CalculationType = void
->
-class haversine
-{
-public :
- template <typename Point1, typename Point2>
- struct calculation_type
- : promote_floating_point
- <
- typename select_calculation_type
- <
- Point1,
- Point2,
- CalculationType
- >::type
- >
- {};
-
- typedef typename strategy_detail::get_radius
- <
- RadiusTypeOrSphere
- >::type radius_type;
-
- inline haversine()
- : m_radius(1.0)
- {}
-
- template <typename RadiusOrSphere>
- explicit inline haversine(RadiusOrSphere const& radius_or_sphere)
- : m_radius(strategy_detail::get_radius
- <
- RadiusOrSphere
- >::apply(radius_or_sphere))
- {}
-
- template <typename Point1, typename Point2>
- static inline typename calculation_type<Point1, Point2>::type
- apply(Point1 const& p1, Point2 const& p2)
- {
- return calculate<typename calculation_type<Point1, Point2>::type>(
- get_as_radian<0>(p1), get_as_radian<1>(p1),
- get_as_radian<0>(p2), get_as_radian<1>(p2)
- );
- }
-
- template <typename T1, typename T2>
- inline radius_type meridian(T1 lat1, T2 lat2) const
- {
- return m_radius * (lat1 - lat2);
- }
-
- inline radius_type radius() const
- {
- return m_radius;
- }
-
-
-private :
- template <typename R, typename T1, typename T2>
- static inline R calculate(T1 const& lon1, T1 const& lat1,
- T2 const& lon2, T2 const& lat2)
- {
- return math::hav(lat2 - lat1)
- + cos(lat1) * cos(lat2) * math::hav(lon2 - lon1);
- }
-
- radius_type m_radius;
-};
-
-
-
-} // namespace comparable
-
-/*!
-\brief Distance calculation for spherical coordinates
-on a perfect sphere using haversine
-\ingroup strategies
-\tparam RadiusTypeOrSphere \tparam_radius_or_sphere
-\tparam CalculationType \tparam_calculation
-\author Adapted from: http://williams.best.vwh.net/avform.htm
-\see http://en.wikipedia.org/wiki/Great-circle_distance
-\note (from Wiki:) The great circle distance d between two
-points with coordinates {lat1,lon1} and {lat2,lon2} is given by:
- d=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))
-A mathematically equivalent formula, which is less subject
- to rounding error for short distances is:
- d=2*asin(sqrt((sin((lat1-lat2) / 2))^2
- + cos(lat1)*cos(lat2)*(sin((lon1-lon2) / 2))^2))
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.distance.distance_3_with_strategy distance (with strategy)]
-}
-*/
-template
-<
- typename RadiusTypeOrSphere = double,
- typename CalculationType = void
->
-class haversine
-{
- typedef comparable::haversine<RadiusTypeOrSphere, CalculationType> comparable_type;
-
-public :
- template <typename Point1, typename Point2>
- struct calculation_type
- : services::return_type<comparable_type, Point1, Point2>
- {};
-
- typedef typename strategy_detail::get_radius
- <
- RadiusTypeOrSphere
- >::type radius_type;
-
- /*!
- \brief Default constructor, radius set to 1.0 for the unit sphere
- */
- inline haversine()
- : m_radius(1.0)
- {}
-
- /*!
- \brief Constructor
- \param radius_or_sphere radius of the sphere or sphere model
- */
- template <typename RadiusOrSphere>
- explicit inline haversine(RadiusOrSphere const& radius_or_sphere)
- : m_radius(strategy_detail::get_radius
- <
- RadiusOrSphere
- >::apply(radius_or_sphere))
- {}
-
- /*!
- \brief applies the distance calculation
- \return the calculated distance (including multiplying with radius)
- \param p1 first point
- \param p2 second point
- */
- template <typename Point1, typename Point2>
- inline typename calculation_type<Point1, Point2>::type
- apply(Point1 const& p1, Point2 const& p2) const
- {
- typedef typename calculation_type<Point1, Point2>::type calculation_type;
- calculation_type const a = comparable_type::apply(p1, p2);
- calculation_type const c = calculation_type(2.0) * asin(math::sqrt(a));
- return calculation_type(m_radius) * c;
- }
-
- /*!
- \brief meridian distance calculation
- \return the calculated distance (including multiplying with radius)
- \param p1 first point
- \param p2 second point
- */
-
- template <typename T1, typename T2>
- inline radius_type meridian(T1 lat1, T2 lat2) const
- {
- return m_radius * (lat1 - lat2);
- }
-
- /*!
- \brief access to radius value
- \return the radius
- */
- inline radius_type radius() const
- {
- return m_radius;
- }
-
-private :
- radius_type m_radius;
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-template <typename RadiusType, typename CalculationType>
-struct tag<haversine<RadiusType, CalculationType> >
-{
- typedef strategy_tag_distance_point_point type;
-};
-
-
-template <typename RadiusType, typename CalculationType, typename P1, typename P2>
-struct return_type<haversine<RadiusType, CalculationType>, P1, P2>
- : haversine<RadiusType, CalculationType>::template calculation_type<P1, P2>
-{};
-
-
-template <typename RadiusType, typename CalculationType>
-struct comparable_type<haversine<RadiusType, CalculationType> >
-{
- typedef comparable::haversine<RadiusType, CalculationType> type;
-};
-
-
-template <typename RadiusType, typename CalculationType>
-struct get_comparable<haversine<RadiusType, CalculationType> >
-{
-private :
- typedef haversine<RadiusType, CalculationType> this_type;
- typedef comparable::haversine<RadiusType, CalculationType> comparable_type;
-public :
- static inline comparable_type apply(this_type const& input)
- {
- return comparable_type(input.radius());
- }
-};
-
-template <typename RadiusType, typename CalculationType, typename P1, typename P2>
-struct result_from_distance<haversine<RadiusType, CalculationType>, P1, P2>
-{
-private :
- typedef haversine<RadiusType, CalculationType> this_type;
- typedef typename return_type<this_type, P1, P2>::type return_type;
-public :
- template <typename T>
- static inline return_type apply(this_type const& , T const& value)
- {
- return return_type(value);
- }
-};
-
-
-// Specializations for comparable::haversine
-template <typename RadiusType, typename CalculationType>
-struct tag<comparable::haversine<RadiusType, CalculationType> >
-{
- typedef strategy_tag_distance_point_point type;
-};
-
-
-template <typename RadiusType, typename CalculationType, typename P1, typename P2>
-struct return_type<comparable::haversine<RadiusType, CalculationType>, P1, P2>
- : comparable::haversine<RadiusType, CalculationType>::template calculation_type<P1, P2>
-{};
-
-
-template <typename RadiusType, typename CalculationType>
-struct comparable_type<comparable::haversine<RadiusType, CalculationType> >
-{
- typedef comparable::haversine<RadiusType, CalculationType> type;
-};
-
-
-template <typename RadiusType, typename CalculationType>
-struct get_comparable<comparable::haversine<RadiusType, CalculationType> >
-{
-private :
- typedef comparable::haversine<RadiusType, CalculationType> this_type;
-public :
- static inline this_type apply(this_type const& input)
- {
- return input;
- }
-};
-
-
-template <typename RadiusType, typename CalculationType, typename P1, typename P2>
-struct result_from_distance<comparable::haversine<RadiusType, CalculationType>, P1, P2>
-{
-private :
- typedef comparable::haversine<RadiusType, CalculationType> strategy_type;
- typedef typename return_type<strategy_type, P1, P2>::type return_type;
-public :
- template <typename T>
- static inline return_type apply(strategy_type const& strategy, T const& distance)
- {
- return_type const s = sin((distance / strategy.radius()) / return_type(2));
- return s * s;
- }
-};
-
-
-// Register it as the default for point-types
-// in a spherical equatorial coordinate system
-template <typename Point1, typename Point2>
-struct default_strategy
- <
- point_tag, point_tag, Point1, Point2,
- spherical_equatorial_tag, spherical_equatorial_tag
- >
-{
- typedef strategy::distance::haversine<typename select_coordinate_type<Point1, Point2>::type> type;
-};
-
-// Note: spherical polar coordinate system requires "get_as_radian_equatorial"
-
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::distance
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_DISTANCE_HAVERSINE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/envelope_segment.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/envelope_segment.hpp
deleted file mode 100644
index 98f085fe731..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/envelope_segment.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_ENVELOPE_SEGMENT_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_ENVELOPE_SEGMENT_HPP
-
-#include <boost/geometry/algorithms/detail/envelope/segment.hpp>
-#include <boost/geometry/algorithms/detail/normalize.hpp>
-#include <boost/geometry/strategies/envelope.hpp>
-#include <boost/geometry/strategies/spherical/azimuth.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace envelope
-{
-
-template
-<
- typename CalculationType = void
->
-class spherical_segment
-{
-public :
-
- inline spherical_segment()
- {}
-
- template <typename Point1, typename Point2, typename Box>
- inline void
- apply(Point1 const& point1, Point2 const& point2, Box& box) const
- {
- Point1 p1_normalized = detail::return_normalized<Point1>(point1);
- Point2 p2_normalized = detail::return_normalized<Point2>(point2);
-
- geometry::strategy::azimuth::spherical<CalculationType> azimuth_spherical;
-
- typedef typename coordinate_system<Point1>::type::units units_type;
-
- geometry::detail::envelope::envelope_segment_impl<spherical_equatorial_tag>
- ::template apply<units_type>(geometry::get<0>(p1_normalized),
- geometry::get<1>(p1_normalized),
- geometry::get<0>(p2_normalized),
- geometry::get<1>(p2_normalized),
- box,
- azimuth_spherical);
-
- }
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-template <typename CalculationType>
-struct default_strategy<spherical_equatorial_tag, CalculationType>
-{
- typedef strategy::envelope::spherical_segment<CalculationType> type;
-};
-
-
-template <typename CalculationType>
-struct default_strategy<spherical_polar_tag, CalculationType>
-{
- typedef strategy::envelope::spherical_segment<CalculationType> type;
-};
-
-}
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::envelope
-
-}} //namepsace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_ENVELOPE_SEGMENT_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/get_radius.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/get_radius.hpp
deleted file mode 100644
index 411642b13a1..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/get_radius.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Copyright (c) 2016-2018 Oracle and/or its affiliates.
-// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_GET_RADIUS_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_GET_RADIUS_HPP
-
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/radius.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace strategy_detail
-{
-
-template
-<
- typename RadiusTypeOrSphere,
- typename Tag = typename tag<RadiusTypeOrSphere>::type
->
-struct get_radius
-{
- typedef typename geometry::radius_type<RadiusTypeOrSphere>::type type;
- static type apply(RadiusTypeOrSphere const& sphere)
- {
- return geometry::get_radius<0>(sphere);
- }
-};
-
-template <typename RadiusTypeOrSphere>
-struct get_radius<RadiusTypeOrSphere, void>
-{
- typedef RadiusTypeOrSphere type;
- static type apply(RadiusTypeOrSphere const& radius)
- {
- return radius;
- }
-};
-
-// For backward compatibility
-template <typename Point>
-struct get_radius<Point, point_tag>
-{
- typedef typename select_most_precise
- <
- typename coordinate_type<Point>::type,
- double
- >::type type;
-
- template <typename RadiusOrSphere>
- static typename get_radius<RadiusOrSphere>::type
- apply(RadiusOrSphere const& radius_or_sphere)
- {
- return get_radius<RadiusOrSphere>::apply(radius_or_sphere);
- }
-};
-
-
-} // namespace strategy_detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_GET_RADIUS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/intersection.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/intersection.hpp
deleted file mode 100644
index 1cc7b207642..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/intersection.hpp
+++ /dev/null
@@ -1,1042 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Copyright (c) 2016-2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_INTERSECTION_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_INTERSECTION_HPP
-
-#include <algorithm>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/detail/assign_values.hpp>
-#include <boost/geometry/algorithms/detail/assign_indexed_point.hpp>
-#include <boost/geometry/algorithms/detail/equals/point_point.hpp>
-#include <boost/geometry/algorithms/detail/recalculate.hpp>
-
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/arithmetic/cross_product.hpp>
-#include <boost/geometry/arithmetic/dot_product.hpp>
-#include <boost/geometry/arithmetic/normalize.hpp>
-#include <boost/geometry/formulas/spherical.hpp>
-
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-#include <boost/geometry/geometries/concepts/segment_concept.hpp>
-
-#include <boost/geometry/policies/robustness/segment_ratio.hpp>
-
-#include <boost/geometry/strategies/covered_by.hpp>
-#include <boost/geometry/strategies/intersection.hpp>
-#include <boost/geometry/strategies/intersection_result.hpp>
-#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/strategies/side_info.hpp>
-#include <boost/geometry/strategies/spherical/area.hpp>
-#include <boost/geometry/strategies/spherical/distance_haversine.hpp>
-#include <boost/geometry/strategies/spherical/envelope_segment.hpp>
-#include <boost/geometry/strategies/spherical/point_in_poly_winding.hpp>
-#include <boost/geometry/strategies/spherical/ssf.hpp>
-#include <boost/geometry/strategies/within.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace intersection
-{
-
-// NOTE:
-// The coordinates of crossing IP may be calculated with small precision in some cases.
-// For double, near the equator noticed error ~1e-9 so far greater than
-// machine epsilon which is ~1e-16. This error is ~0.04m.
-// E.g. consider two cases, one near the origin and the second one rotated by 90 deg around Z or SN axis.
-// After the conversion from spherical degrees to cartesian 3d the following coordinates
-// are calculated:
-// for sph (-1 -1, 1 1) deg cart3d ys are -0.017449748351250485 and 0.017449748351250485
-// for sph (89 -1, 91 1) deg cart3d xs are 0.017449748351250571 and -0.017449748351250450
-// During the conversion degrees must first be converted to radians and then radians
-// are passed into trigonometric functions. The error may have several causes:
-// 1. Radians cannot represent exactly the same angles as degrees.
-// 2. Different longitudes are passed into sin() for x, corresponding to cos() for y,
-// and for different angle the error of the result may be different.
-// 3. These non-corresponding cartesian coordinates are used in calculation,
-// e.g. multiplied several times in cross and dot products.
-// If it was a problem this strategy could e.g. "normalize" longitudes before the conversion using the source units
-// by rotating the globe around Z axis, so moving longitudes always the same way towards the origin,
-// assuming this could help which is not clear.
-// For now, intersection points near the endpoints are checked explicitly if needed (if the IP is near the endpoint)
-// to generate precise result for them. Only the crossing (i) case may suffer from lower precision.
-
-template
-<
- typename CalcPolicy,
- typename CalculationType = void
->
-struct ecef_segments
-{
- typedef side::spherical_side_formula<CalculationType> side_strategy_type;
-
- static inline side_strategy_type get_side_strategy()
- {
- return side_strategy_type();
- }
-
- template <typename Geometry1, typename Geometry2>
- struct point_in_geometry_strategy
- {
- typedef strategy::within::spherical_winding
- <
- typename point_type<Geometry1>::type,
- typename point_type<Geometry2>::type,
- CalculationType
- > type;
- };
-
- template <typename Geometry1, typename Geometry2>
- static inline typename point_in_geometry_strategy<Geometry1, Geometry2>::type
- get_point_in_geometry_strategy()
- {
- typedef typename point_in_geometry_strategy
- <
- Geometry1, Geometry2
- >::type strategy_type;
- return strategy_type();
- }
-
- template <typename Geometry>
- struct area_strategy
- {
- typedef area::spherical
- <
- typename coordinate_type<Geometry>::type,
- CalculationType
- > type;
- };
-
- template <typename Geometry>
- static inline typename area_strategy<Geometry>::type get_area_strategy()
- {
- typedef typename area_strategy<Geometry>::type strategy_type;
- return strategy_type();
- }
-
- template <typename Geometry>
- struct distance_strategy
- {
- typedef distance::haversine
- <
- typename coordinate_type<Geometry>::type,
- CalculationType
- > type;
- };
-
- template <typename Geometry>
- static inline typename distance_strategy<Geometry>::type get_distance_strategy()
- {
- typedef typename distance_strategy<Geometry>::type strategy_type;
- return strategy_type();
- }
-
- typedef envelope::spherical_segment<CalculationType>
- envelope_strategy_type;
-
- static inline envelope_strategy_type get_envelope_strategy()
- {
- return envelope_strategy_type();
- }
-
- enum intersection_point_flag { ipi_inters = 0, ipi_at_a1, ipi_at_a2, ipi_at_b1, ipi_at_b2 };
-
- // segment_intersection_info cannot outlive relate_ecef_segments
- template <typename CoordinateType, typename SegmentRatio, typename Vector3d>
- struct segment_intersection_info
- {
- segment_intersection_info(CalcPolicy const& calc)
- : calc_policy(calc)
- {}
-
- template <typename Point, typename Segment1, typename Segment2>
- void calculate(Point& point, Segment1 const& a, Segment2 const& b) const
- {
- if (ip_flag == ipi_inters)
- {
- // TODO: assign the rest of coordinates
- point = calc_policy.template from_cart3d<Point>(intersection_point);
- }
- else if (ip_flag == ipi_at_a1)
- {
- detail::assign_point_from_index<0>(a, point);
- }
- else if (ip_flag == ipi_at_a2)
- {
- detail::assign_point_from_index<1>(a, point);
- }
- else if (ip_flag == ipi_at_b1)
- {
- detail::assign_point_from_index<0>(b, point);
- }
- else // ip_flag == ipi_at_b2
- {
- detail::assign_point_from_index<1>(b, point);
- }
- }
-
- Vector3d intersection_point;
- SegmentRatio robust_ra;
- SegmentRatio robust_rb;
- intersection_point_flag ip_flag;
-
- CalcPolicy const& calc_policy;
- };
-
- // Relate segments a and b
- template
- <
- typename Segment1,
- typename Segment2,
- typename Policy,
- typename RobustPolicy
- >
- static inline typename Policy::return_type
- apply(Segment1 const& a, Segment2 const& b,
- Policy const& policy, RobustPolicy const& robust_policy)
- {
- typedef typename point_type<Segment1>::type point1_t;
- typedef typename point_type<Segment2>::type point2_t;
- point1_t a1, a2;
- point2_t b1, b2;
-
- // TODO: use indexed_point_view if possible?
- detail::assign_point_from_index<0>(a, a1);
- detail::assign_point_from_index<1>(a, a2);
- detail::assign_point_from_index<0>(b, b1);
- detail::assign_point_from_index<1>(b, b2);
-
- return apply(a, b, policy, robust_policy, a1, a2, b1, b2);
- }
-
- // Relate segments a and b
- template
- <
- typename Segment1,
- typename Segment2,
- typename Policy,
- typename RobustPolicy,
- typename Point1,
- typename Point2
- >
- static inline typename Policy::return_type
- apply(Segment1 const& a, Segment2 const& b,
- Policy const&, RobustPolicy const&,
- Point1 const& a1, Point1 const& a2, Point2 const& b1, Point2 const& b2)
- {
- // For now create it using default constructor. In the future it could
- // be stored in strategy. However then apply() wouldn't be static and
- // all relops and setops would have to take the strategy or model.
- // Initialize explicitly to prevent compiler errors in case of PoD type
- CalcPolicy const calc_policy = CalcPolicy();
-
- BOOST_CONCEPT_ASSERT( (concepts::ConstSegment<Segment1>) );
- BOOST_CONCEPT_ASSERT( (concepts::ConstSegment<Segment2>) );
-
- // TODO: check only 2 first coordinates here?
- using geometry::detail::equals::equals_point_point;
- bool a_is_point = equals_point_point(a1, a2);
- bool b_is_point = equals_point_point(b1, b2);
-
- if(a_is_point && b_is_point)
- {
- return equals_point_point(a1, b2)
- ? Policy::degenerate(a, true)
- : Policy::disjoint()
- ;
- }
-
- typedef typename select_calculation_type
- <Segment1, Segment2, CalculationType>::type calc_t;
-
- calc_t const c0 = 0;
- calc_t const c1 = 1;
-
- typedef model::point<calc_t, 3, cs::cartesian> vec3d_t;
-
- vec3d_t const a1v = calc_policy.template to_cart3d<vec3d_t>(a1);
- vec3d_t const a2v = calc_policy.template to_cart3d<vec3d_t>(a2);
- vec3d_t const b1v = calc_policy.template to_cart3d<vec3d_t>(b1);
- vec3d_t const b2v = calc_policy.template to_cart3d<vec3d_t>(b2);
-
- bool degen_neq_coords = false;
- side_info sides;
-
- typename CalcPolicy::template plane<vec3d_t>
- plane2 = calc_policy.get_plane(b1v, b2v);
-
- calc_t dist_b1_b2 = 0;
- if (! b_is_point)
- {
- calculate_dist(b1v, b2v, plane2, dist_b1_b2);
- if (math::equals(dist_b1_b2, c0))
- {
- degen_neq_coords = true;
- b_is_point = true;
- dist_b1_b2 = 0;
- }
- else
- {
- // not normalized normals, the same as in side strategy
- sides.set<0>(plane2.side_value(a1v), plane2.side_value(a2v));
- if (sides.same<0>())
- {
- // Both points are at same side of other segment, we can leave
- return Policy::disjoint();
- }
- }
- }
-
- typename CalcPolicy::template plane<vec3d_t>
- plane1 = calc_policy.get_plane(a1v, a2v);
-
- calc_t dist_a1_a2 = 0;
- if (! a_is_point)
- {
- calculate_dist(a1v, a2v, plane1, dist_a1_a2);
- if (math::equals(dist_a1_a2, c0))
- {
- degen_neq_coords = true;
- a_is_point = true;
- dist_a1_a2 = 0;
- }
- else
- {
- // not normalized normals, the same as in side strategy
- sides.set<1>(plane1.side_value(b1v), plane1.side_value(b2v));
- if (sides.same<1>())
- {
- // Both points are at same side of other segment, we can leave
- return Policy::disjoint();
- }
- }
- }
-
- // NOTE: at this point the segments may still be disjoint
-
- calc_t len1 = 0;
- // point or opposite sides of a sphere/spheroid, assume point
- if (! a_is_point && ! detail::vec_normalize(plane1.normal, len1))
- {
- a_is_point = true;
- if (sides.get<0, 0>() == 0 || sides.get<0, 1>() == 0)
- {
- sides.set<0>(0, 0);
- }
- }
-
- calc_t len2 = 0;
- if (! b_is_point && ! detail::vec_normalize(plane2.normal, len2))
- {
- b_is_point = true;
- if (sides.get<1, 0>() == 0 || sides.get<1, 1>() == 0)
- {
- sides.set<1>(0, 0);
- }
- }
-
- // check both degenerated once more
- if (a_is_point && b_is_point)
- {
- return equals_point_point(a1, b2)
- ? Policy::degenerate(a, true)
- : Policy::disjoint()
- ;
- }
-
- // NOTE: at this point the segments may still be disjoint
- // NOTE: at this point one of the segments may be degenerated
-
- bool collinear = sides.collinear();
-
- if (! collinear)
- {
- // NOTE: for some approximations it's possible that both points may lie
- // on the same geodesic but still some of the sides may be != 0.
- // This is e.g. true for long segments represented as elliptic arcs
- // with origin different than the center of the coordinate system.
- // So make the sides consistent
-
- // WARNING: the side strategy doesn't have the info about the other
- // segment so it may return results inconsistent with this intersection
- // strategy, as it checks both segments for consistency
-
- if (sides.get<0, 0>() == 0 && sides.get<0, 1>() == 0)
- {
- collinear = true;
- sides.set<1>(0, 0);
- }
- else if (sides.get<1, 0>() == 0 && sides.get<1, 1>() == 0)
- {
- collinear = true;
- sides.set<0>(0, 0);
- }
- }
-
- calc_t dot_n1n2 = dot_product(plane1.normal, plane2.normal);
-
- // NOTE: this is technically not needed since theoretically above sides
- // are calculated, but just in case check the normals.
- // Have in mind that SSF side strategy doesn't check this.
- // collinear if normals are equal or opposite: cos(a) in {-1, 1}
- if (! collinear && math::equals(math::abs(dot_n1n2), c1))
- {
- collinear = true;
- sides.set<0>(0, 0);
- sides.set<1>(0, 0);
- }
-
- if (collinear)
- {
- if (a_is_point)
- {
- return collinear_one_degenerated<Policy, calc_t>(a, true, b1, b2, a1, a2, b1v, b2v,
- plane2, a1v, a2v, dist_b1_b2, degen_neq_coords);
- }
- else if (b_is_point)
- {
- // b2 used to be consistent with (degenerated) checks above (is it needed?)
- return collinear_one_degenerated<Policy, calc_t>(b, false, a1, a2, b1, b2, a1v, a2v,
- plane1, b1v, b2v, dist_a1_a2, degen_neq_coords);
- }
- else
- {
- calc_t dist_a1_b1, dist_a1_b2;
- calc_t dist_b1_a1, dist_b1_a2;
- // use shorter segment
- if (len1 <= len2)
- {
- calculate_collinear_data(a1, a2, b1, b2, a1v, a2v, plane1, b1v, b2v, dist_a1_a2, dist_a1_b1);
- calculate_collinear_data(a1, a2, b1, b2, a1v, a2v, plane1, b2v, b1v, dist_a1_a2, dist_a1_b2);
- dist_b1_b2 = dist_a1_b2 - dist_a1_b1;
- dist_b1_a1 = -dist_a1_b1;
- dist_b1_a2 = dist_a1_a2 - dist_a1_b1;
- }
- else
- {
- calculate_collinear_data(b1, b2, a1, a2, b1v, b2v, plane2, a1v, a2v, dist_b1_b2, dist_b1_a1);
- calculate_collinear_data(b1, b2, a1, a2, b1v, b2v, plane2, a2v, a1v, dist_b1_b2, dist_b1_a2);
- dist_a1_a2 = dist_b1_a2 - dist_b1_a1;
- dist_a1_b1 = -dist_b1_a1;
- dist_a1_b2 = dist_b1_b2 - dist_b1_a1;
- }
-
- segment_ratio<calc_t> ra_from(dist_b1_a1, dist_b1_b2);
- segment_ratio<calc_t> ra_to(dist_b1_a2, dist_b1_b2);
- segment_ratio<calc_t> rb_from(dist_a1_b1, dist_a1_a2);
- segment_ratio<calc_t> rb_to(dist_a1_b2, dist_a1_a2);
-
- // NOTE: this is probably not needed
- int const a1_wrt_b = position_value(c0, dist_a1_b1, dist_a1_b2);
- int const a2_wrt_b = position_value(dist_a1_a2, dist_a1_b1, dist_a1_b2);
- int const b1_wrt_a = position_value(c0, dist_b1_a1, dist_b1_a2);
- int const b2_wrt_a = position_value(dist_b1_b2, dist_b1_a1, dist_b1_a2);
-
- if (a1_wrt_b == 1)
- {
- ra_from.assign(0, dist_b1_b2);
- rb_from.assign(0, dist_a1_a2);
- }
- else if (a1_wrt_b == 3)
- {
- ra_from.assign(dist_b1_b2, dist_b1_b2);
- rb_to.assign(0, dist_a1_a2);
- }
-
- if (a2_wrt_b == 1)
- {
- ra_to.assign(0, dist_b1_b2);
- rb_from.assign(dist_a1_a2, dist_a1_a2);
- }
- else if (a2_wrt_b == 3)
- {
- ra_to.assign(dist_b1_b2, dist_b1_b2);
- rb_to.assign(dist_a1_a2, dist_a1_a2);
- }
-
- if ((a1_wrt_b < 1 && a2_wrt_b < 1) || (a1_wrt_b > 3 && a2_wrt_b > 3))
- {
- return Policy::disjoint();
- }
-
- bool const opposite = dot_n1n2 < c0;
-
- return Policy::segments_collinear(a, b, opposite,
- a1_wrt_b, a2_wrt_b, b1_wrt_a, b2_wrt_a,
- ra_from, ra_to, rb_from, rb_to);
- }
- }
- else // crossing
- {
- if (a_is_point || b_is_point)
- {
- return Policy::disjoint();
- }
-
- vec3d_t i1;
- intersection_point_flag ip_flag;
- calc_t dist_a1_i1, dist_b1_i1;
- if (calculate_ip_data(a1, a2, b1, b2, a1v, a2v, b1v, b2v,
- plane1, plane2, calc_policy,
- sides, dist_a1_a2, dist_b1_b2,
- i1, dist_a1_i1, dist_b1_i1, ip_flag))
- {
- // intersects
- segment_intersection_info
- <
- calc_t,
- segment_ratio<calc_t>,
- vec3d_t
- > sinfo(calc_policy);
-
- sinfo.robust_ra.assign(dist_a1_i1, dist_a1_a2);
- sinfo.robust_rb.assign(dist_b1_i1, dist_b1_b2);
- sinfo.intersection_point = i1;
- sinfo.ip_flag = ip_flag;
-
- return Policy::segments_crosses(sides, sinfo, a, b);
- }
- else
- {
- return Policy::disjoint();
- }
- }
- }
-
-private:
- template <typename Policy, typename CalcT, typename Segment, typename Point1, typename Point2, typename Vec3d, typename Plane>
- static inline typename Policy::return_type
- collinear_one_degenerated(Segment const& segment, bool degenerated_a,
- Point1 const& a1, Point1 const& a2,
- Point2 const& b1, Point2 const& b2,
- Vec3d const& a1v, Vec3d const& a2v,
- Plane const& plane,
- Vec3d const& b1v, Vec3d const& b2v,
- CalcT const& dist_1_2,
- bool degen_neq_coords)
- {
- CalcT dist_1_o;
- return ! calculate_collinear_data(a1, a2, b1, b2, a1v, a2v, plane, b1v, b2v, dist_1_2, dist_1_o, degen_neq_coords)
- ? Policy::disjoint()
- : Policy::one_degenerate(segment, segment_ratio<CalcT>(dist_1_o, dist_1_2), degenerated_a);
- }
-
- template <typename Point1, typename Point2, typename Vec3d, typename Plane, typename CalcT>
- static inline bool calculate_collinear_data(Point1 const& a1, Point1 const& a2, // in
- Point2 const& b1, Point2 const& b2, // in
- Vec3d const& a1v, // in
- Vec3d const& a2v, // in
- Plane const& plane1, // in
- Vec3d const& b1v, // in
- Vec3d const& b2v, // in
- CalcT const& dist_a1_a2, // in
- CalcT& dist_a1_i1, // out
- bool degen_neq_coords = false) // in
- {
- // calculate dist_a1_a2 and dist_a1_i1
- calculate_dist(a1v, a2v, plane1, b1v, dist_a1_i1);
-
- // if i1 is close to a1 and b1 or b2 is equal to a1
- if (is_endpoint_equal(dist_a1_i1, a1, b1, b2))
- {
- dist_a1_i1 = 0;
- return true;
- }
- // or i1 is close to a2 and b1 or b2 is equal to a2
- else if (is_endpoint_equal(dist_a1_a2 - dist_a1_i1, a2, b1, b2))
- {
- dist_a1_i1 = dist_a1_a2;
- return true;
- }
-
- // check the other endpoint of a very short segment near the pole
- if (degen_neq_coords)
- {
- static CalcT const c0 = 0;
-
- CalcT dist_a1_i2 = 0;
- calculate_dist(a1v, a2v, plane1, b2v, dist_a1_i2);
-
- if (math::equals(dist_a1_i2, c0))
- {
- dist_a1_i1 = 0;
- return true;
- }
- else if (math::equals(dist_a1_a2 - dist_a1_i2, c0))
- {
- dist_a1_i1 = dist_a1_a2;
- return true;
- }
- }
-
- // or i1 is on b
- return segment_ratio<CalcT>(dist_a1_i1, dist_a1_a2).on_segment();
- }
-
- template <typename Point1, typename Point2, typename Vec3d, typename Plane, typename CalcT>
- static inline bool calculate_ip_data(Point1 const& a1, Point1 const& a2, // in
- Point2 const& b1, Point2 const& b2, // in
- Vec3d const& a1v, Vec3d const& a2v, // in
- Vec3d const& b1v, Vec3d const& b2v, // in
- Plane const& plane1, // in
- Plane const& plane2, // in
- CalcPolicy const& calc_policy, // in
- side_info const& sides, // in
- CalcT const& dist_a1_a2, // in
- CalcT const& dist_b1_b2, // in
- Vec3d & ip, // out
- CalcT& dist_a1_ip, // out
- CalcT& dist_b1_ip, // out
- intersection_point_flag& ip_flag) // out
- {
- Vec3d ip1, ip2;
- calc_policy.intersection_points(plane1, plane2, ip1, ip2);
-
- calculate_dist(a1v, a2v, plane1, ip1, dist_a1_ip);
- ip = ip1;
-
- // choose the opposite side of the globe if the distance is shorter
- {
- CalcT const d = abs_distance(dist_a1_a2, dist_a1_ip);
- if (d > CalcT(0))
- {
- // TODO: this should be ok not only for sphere
- // but requires more investigation
- CalcT const dist_a1_i2 = dist_of_i2(dist_a1_ip);
- CalcT const d2 = abs_distance(dist_a1_a2, dist_a1_i2);
- if (d2 < d)
- {
- dist_a1_ip = dist_a1_i2;
- ip = ip2;
- }
- }
- }
-
- bool is_on_a = false, is_near_a1 = false, is_near_a2 = false;
- if (! is_potentially_crossing(dist_a1_a2, dist_a1_ip, is_on_a, is_near_a1, is_near_a2))
- {
- return false;
- }
-
- calculate_dist(b1v, b2v, plane2, ip, dist_b1_ip);
-
- bool is_on_b = false, is_near_b1 = false, is_near_b2 = false;
- if (! is_potentially_crossing(dist_b1_b2, dist_b1_ip, is_on_b, is_near_b1, is_near_b2))
- {
- return false;
- }
-
- // reassign the IP if some endpoints overlap
- using geometry::detail::equals::equals_point_point;
- if (is_near_a1)
- {
- if (is_near_b1 && equals_point_point(a1, b1))
- {
- dist_a1_ip = 0;
- dist_b1_ip = 0;
- //i1 = a1v;
- ip_flag = ipi_at_a1;
- return true;
- }
-
- if (is_near_b2 && equals_point_point(a1, b2))
- {
- dist_a1_ip = 0;
- dist_b1_ip = dist_b1_b2;
- //i1 = a1v;
- ip_flag = ipi_at_a1;
- return true;
- }
- }
-
- if (is_near_a2)
- {
- if (is_near_b1 && equals_point_point(a2, b1))
- {
- dist_a1_ip = dist_a1_a2;
- dist_b1_ip = 0;
- //i1 = a2v;
- ip_flag = ipi_at_a2;
- return true;
- }
-
- if (is_near_b2 && equals_point_point(a2, b2))
- {
- dist_a1_ip = dist_a1_a2;
- dist_b1_ip = dist_b1_b2;
- //i1 = a2v;
- ip_flag = ipi_at_a2;
- return true;
- }
- }
-
- // at this point we know that the endpoints doesn't overlap
- // reassign IP and distance if the IP is on a segment and one of
- // the endpoints of the other segment lies on the former segment
- if (is_on_a)
- {
- if (is_near_b1 && sides.template get<1, 0>() == 0) // b1 wrt a
- {
- dist_b1_ip = 0;
- //i1 = b1v;
- ip_flag = ipi_at_b1;
- return true;
- }
-
- if (is_near_b2 && sides.template get<1, 1>() == 0) // b2 wrt a
- {
- dist_b1_ip = dist_b1_b2;
- //i1 = b2v;
- ip_flag = ipi_at_b2;
- return true;
- }
- }
-
- if (is_on_b)
- {
- if (is_near_a1 && sides.template get<0, 0>() == 0) // a1 wrt b
- {
- dist_a1_ip = 0;
- //i1 = a1v;
- ip_flag = ipi_at_a1;
- return true;
- }
-
- if (is_near_a2 && sides.template get<0, 1>() == 0) // a2 wrt b
- {
- dist_a1_ip = dist_a1_a2;
- //i1 = a2v;
- ip_flag = ipi_at_a2;
- return true;
- }
- }
-
- ip_flag = ipi_inters;
-
- return is_on_a && is_on_b;
- }
-
- template <typename Vec3d, typename Plane, typename CalcT>
- static inline void calculate_dist(Vec3d const& a1v, // in
- Vec3d const& a2v, // in
- Plane const& plane1, // in
- CalcT& dist_a1_a2) // out
- {
- static CalcT const c1 = 1;
- CalcT const cos_a1_a2 = plane1.cos_angle_between(a1v, a2v);
- dist_a1_a2 = -cos_a1_a2 + c1; // [1, -1] -> [0, 2] representing [0, pi]
- }
-
- template <typename Vec3d, typename Plane, typename CalcT>
- static inline void calculate_dist(Vec3d const& a1v, // in
- Vec3d const& /*a2v*/, // in
- Plane const& plane1, // in
- Vec3d const& i1, // in
- CalcT& dist_a1_i1) // out
- {
- static CalcT const c1 = 1;
- static CalcT const c2 = 2;
- static CalcT const c4 = 4;
-
- bool is_forward = true;
- CalcT cos_a1_i1 = plane1.cos_angle_between(a1v, i1, is_forward);
- dist_a1_i1 = -cos_a1_i1 + c1; // [0, 2] representing [0, pi]
- if (! is_forward) // left or right of a1 on a
- {
- dist_a1_i1 = -dist_a1_i1; // [0, 2] -> [0, -2] representing [0, -pi]
- }
- if (dist_a1_i1 <= -c2) // <= -pi
- {
- dist_a1_i1 += c4; // += 2pi
- }
- }
- /*
- template <typename Vec3d, typename Plane, typename CalcT>
- static inline void calculate_dists(Vec3d const& a1v, // in
- Vec3d const& a2v, // in
- Plane const& plane1, // in
- Vec3d const& i1, // in
- CalcT& dist_a1_a2, // out
- CalcT& dist_a1_i1) // out
- {
- calculate_dist(a1v, a2v, plane1, dist_a1_a2);
- calculate_dist(a1v, a2v, plane1, i1, dist_a1_i1);
- }
- */
- // the dist of the ip on the other side of the sphere
- template <typename CalcT>
- static inline CalcT dist_of_i2(CalcT const& dist_a1_i1)
- {
- CalcT const c2 = 2;
- CalcT const c4 = 4;
-
- CalcT dist_a1_i2 = dist_a1_i1 - c2; // dist_a1_i2 = dist_a1_i1 - pi;
- if (dist_a1_i2 <= -c2) // <= -pi
- {
- dist_a1_i2 += c4; // += 2pi;
- }
- return dist_a1_i2;
- }
-
- template <typename CalcT>
- static inline CalcT abs_distance(CalcT const& dist_a1_a2, CalcT const& dist_a1_i1)
- {
- if (dist_a1_i1 < CalcT(0))
- return -dist_a1_i1;
- else if (dist_a1_i1 > dist_a1_a2)
- return dist_a1_i1 - dist_a1_a2;
- else
- return CalcT(0);
- }
-
- template <typename CalcT>
- static inline bool is_potentially_crossing(CalcT const& dist_a1_a2, CalcT const& dist_a1_i1, // in
- bool& is_on_a, bool& is_near_a1, bool& is_near_a2) // out
- {
- is_on_a = segment_ratio<CalcT>(dist_a1_i1, dist_a1_a2).on_segment();
- is_near_a1 = is_near(dist_a1_i1);
- is_near_a2 = is_near(dist_a1_a2 - dist_a1_i1);
- return is_on_a || is_near_a1 || is_near_a2;
- }
-
- template <typename CalcT, typename P1, typename P2>
- static inline bool is_endpoint_equal(CalcT const& dist,
- P1 const& ai, P2 const& b1, P2 const& b2)
- {
- static CalcT const c0 = 0;
- using geometry::detail::equals::equals_point_point;
- return is_near(dist) && (equals_point_point(ai, b1) || equals_point_point(ai, b2) || math::equals(dist, c0));
- }
-
- template <typename CalcT>
- static inline bool is_near(CalcT const& dist)
- {
- CalcT const small_number = CalcT(boost::is_same<CalcT, float>::value ? 0.0001 : 0.00000001);
- return math::abs(dist) <= small_number;
- }
-
- template <typename ProjCoord1, typename ProjCoord2>
- static inline int position_value(ProjCoord1 const& ca1,
- ProjCoord2 const& cb1,
- ProjCoord2 const& cb2)
- {
- // S1x 0 1 2 3 4
- // S2 |---------->
- return math::equals(ca1, cb1) ? 1
- : math::equals(ca1, cb2) ? 3
- : cb1 < cb2 ?
- ( ca1 < cb1 ? 0
- : ca1 > cb2 ? 4
- : 2 )
- : ( ca1 > cb1 ? 0
- : ca1 < cb2 ? 4
- : 2 );
- }
-};
-
-struct spherical_segments_calc_policy
-{
- template <typename Point, typename Point3d>
- static Point from_cart3d(Point3d const& point_3d)
- {
- return formula::cart3d_to_sph<Point>(point_3d);
- }
-
- template <typename Point3d, typename Point>
- static Point3d to_cart3d(Point const& point)
- {
- return formula::sph_to_cart3d<Point3d>(point);
- }
-
- template <typename Point3d>
- struct plane
- {
- typedef typename coordinate_type<Point3d>::type coord_t;
-
- // not normalized
- plane(Point3d const& p1, Point3d const& p2)
- : normal(cross_product(p1, p2))
- {}
-
- int side_value(Point3d const& pt) const
- {
- return formula::sph_side_value(normal, pt);
- }
-
- static coord_t cos_angle_between(Point3d const& p1, Point3d const& p2)
- {
- return dot_product(p1, p2);
- }
-
- coord_t cos_angle_between(Point3d const& p1, Point3d const& p2, bool & is_forward) const
- {
- coord_t const c0 = 0;
- is_forward = dot_product(normal, cross_product(p1, p2)) >= c0;
- return dot_product(p1, p2);
- }
-
- Point3d normal;
- };
-
- template <typename Point3d>
- static plane<Point3d> get_plane(Point3d const& p1, Point3d const& p2)
- {
- return plane<Point3d>(p1, p2);
- }
-
- template <typename Point3d>
- static bool intersection_points(plane<Point3d> const& plane1,
- plane<Point3d> const& plane2,
- Point3d & ip1, Point3d & ip2)
- {
- typedef typename coordinate_type<Point3d>::type coord_t;
-
- ip1 = cross_product(plane1.normal, plane2.normal);
- // NOTE: the length should be greater than 0 at this point
- // if the normals were not normalized and their dot product
- // not checked before this function is called the length
- // should be checked here (math::equals(len, c0))
- coord_t const len = math::sqrt(dot_product(ip1, ip1));
- divide_value(ip1, len); // normalize i1
-
- ip2 = ip1;
- multiply_value(ip2, coord_t(-1));
-
- return true;
- }
-};
-
-
-template
-<
- typename CalculationType = void
->
-struct spherical_segments
- : ecef_segments
- <
- spherical_segments_calc_policy,
- CalculationType
- >
-{};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-/*template <typename CalculationType>
-struct default_strategy<spherical_polar_tag, CalculationType>
-{
- typedef spherical_segments<CalculationType> type;
-};*/
-
-template <typename CalculationType>
-struct default_strategy<spherical_equatorial_tag, CalculationType>
-{
- typedef spherical_segments<CalculationType> type;
-};
-
-template <typename CalculationType>
-struct default_strategy<geographic_tag, CalculationType>
-{
- // NOTE: Spherical strategy returns the same result as the geographic one
- // representing segments as great elliptic arcs. If the elliptic arcs are
- // not great elliptic arcs (the origin not in the center of the coordinate
- // system) then there may be problems with consistency of the side and
- // intersection strategies.
- typedef spherical_segments<CalculationType> type;
-};
-
-} // namespace services
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::intersection
-
-
-namespace strategy
-{
-
-namespace within { namespace services
-{
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, linear_tag, linear_tag, spherical_tag, spherical_tag>
-{
- typedef strategy::intersection::spherical_segments<> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, linear_tag, polygonal_tag, spherical_tag, spherical_tag>
-{
- typedef strategy::intersection::spherical_segments<> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, polygonal_tag, linear_tag, spherical_tag, spherical_tag>
-{
- typedef strategy::intersection::spherical_segments<> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, polygonal_tag, polygonal_tag, spherical_tag, spherical_tag>
-{
- typedef strategy::intersection::spherical_segments<> type;
-};
-
-}} // within::services
-
-namespace covered_by { namespace services
-{
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, linear_tag, linear_tag, spherical_tag, spherical_tag>
-{
- typedef strategy::intersection::spherical_segments<> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, linear_tag, polygonal_tag, spherical_tag, spherical_tag>
-{
- typedef strategy::intersection::spherical_segments<> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, polygonal_tag, linear_tag, spherical_tag, spherical_tag>
-{
- typedef strategy::intersection::spherical_segments<> type;
-};
-
-template <typename Geometry1, typename Geometry2, typename AnyTag1, typename AnyTag2>
-struct default_strategy<Geometry1, Geometry2, AnyTag1, AnyTag2, polygonal_tag, polygonal_tag, spherical_tag, spherical_tag>
-{
- typedef strategy::intersection::spherical_segments<> type;
-};
-
-}} // within::services
-
-} // strategy
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/point_in_poly_winding.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/point_in_poly_winding.hpp
deleted file mode 100644
index 99ab659b104..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/point_in_poly_winding.hpp
+++ /dev/null
@@ -1,584 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2013-2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2013, 2014, 2016, 2017.
-// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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)
-
-#ifdef __GNUC__
-#pragma GCC system_header
-#endif
-
-#ifndef BOOST_GEOMETRY_STRATEGY_SPHERICAL_POINT_IN_POLY_WINDING_HPP
-#define BOOST_GEOMETRY_STRATEGY_SPHERICAL_POINT_IN_POLY_WINDING_HPP
-
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-
-#include <boost/geometry/strategies/covered_by.hpp>
-#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/strategies/spherical/ssf.hpp>
-#include <boost/geometry/strategies/within.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace within
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template
-<
- typename Point,
- typename PointOfSegment = Point,
- typename SideStrategy = typename strategy::side::services::default_strategy
- <
- typename cs_tag<Point>::type
- >::type,
- typename CalculationType = void
->
-class spherical_winding_base
-{
- typedef typename select_calculation_type
- <
- Point,
- PointOfSegment,
- CalculationType
- >::type calculation_type;
-
- typedef typename coordinate_system<Point>::type::units units_t;
- typedef math::detail::constants_on_spheroid<calculation_type, units_t> constants;
-
- /*! subclass to keep state */
- class counter
- {
- int m_count;
- //int m_count_n;
- int m_count_s;
- int m_raw_count;
- int m_raw_count_anti;
- bool m_touches;
-
- inline int code() const
- {
- if (m_touches)
- {
- return 0;
- }
-
- if (m_raw_count != 0 && m_raw_count_anti != 0)
- {
- if (m_raw_count > 0) // right, wrap around south pole
- {
- return (m_count + m_count_s) == 0 ? -1 : 1;
- }
- else // left, wrap around north pole
- {
- //return (m_count + m_count_n) == 0 ? -1 : 1;
- // m_count_n is 0
- return m_count == 0 ? -1 : 1;
- }
- }
-
- return m_count == 0 ? -1 : 1;
- }
-
- public :
- friend class spherical_winding_base;
-
- inline counter()
- : m_count(0)
- //, m_count_n(0)
- , m_count_s(0)
- , m_raw_count(0)
- , m_raw_count_anti(0)
- , m_touches(false)
- {}
-
- };
-
- struct count_info
- {
- explicit count_info(int c = 0, bool ia = false)
- : count(c)
- , is_anti(ia)
- {}
-
- int count;
- bool is_anti;
- };
-
-public:
- typedef typename SideStrategy::envelope_strategy_type envelope_strategy_type;
-
- inline envelope_strategy_type get_envelope_strategy() const
- {
- return m_side_strategy.get_envelope_strategy();
- }
-
- typedef typename SideStrategy::disjoint_strategy_type disjoint_strategy_type;
-
- inline disjoint_strategy_type get_disjoint_strategy() const
- {
- return m_side_strategy.get_disjoint_strategy();
- }
-
- spherical_winding_base()
- {}
-
- template <typename Model>
- explicit spherical_winding_base(Model const& model)
- : m_side_strategy(model)
- {}
-
- // Typedefs and static methods to fulfill the concept
- typedef Point point_type;
- typedef PointOfSegment segment_point_type;
- typedef counter state_type;
-
- inline bool apply(Point const& point,
- PointOfSegment const& s1, PointOfSegment const& s2,
- counter& state) const
- {
- bool eq1 = false;
- bool eq2 = false;
- bool s_antipodal = false;
-
- count_info ci = check_segment(point, s1, s2, state, eq1, eq2, s_antipodal);
- if (ci.count != 0)
- {
- if (! ci.is_anti)
- {
- int side = 0;
- if (ci.count == 1 || ci.count == -1)
- {
- side = side_equal(point, eq1 ? s1 : s2, ci);
- }
- else // count == 2 || count == -2
- {
- if (! s_antipodal)
- {
- // 1 left, -1 right
- side = m_side_strategy.apply(s1, s2, point);
- }
- else
- {
- calculation_type const pi = constants::half_period();
- calculation_type const s1_lat = get<1>(s1);
- calculation_type const s2_lat = get<1>(s2);
-
- side = math::sign(ci.count)
- * (pi - s1_lat - s2_lat <= pi // segment goes through north pole
- ? -1 // going right all points will be on right side
- : 1); // going right all points will be on left side
- }
- }
-
- if (side == 0)
- {
- // Point is lying on segment
- state.m_touches = true;
- state.m_count = 0;
- return false;
- }
-
- // Side is NEG for right, POS for left.
- // The count is -2 for left, 2 for right (or -1/1)
- // Side positive thus means RIGHT and LEFTSIDE or LEFT and RIGHTSIDE
- // See accompagnying figure (TODO)
- if (side * ci.count > 0)
- {
- state.m_count += ci.count;
- }
-
- state.m_raw_count += ci.count;
- }
- else
- {
- // Count negated because the segment is on the other side of the globe
- // so it is reversed to match this side of the globe
-
- // Assuming geometry wraps around north pole, for segments on the other side of the globe
- // the point will always be RIGHT+RIGHTSIDE or LEFT+LEFTSIDE, so side*-count always < 0
- //state.m_count_n -= 0;
-
- // Assuming geometry wraps around south pole, for segments on the other side of the globe
- // the point will always be RIGHT+LEFTSIDE or LEFT+RIGHTSIDE, so side*-count always > 0
- state.m_count_s -= ci.count;
-
- state.m_raw_count_anti -= ci.count;
- }
- }
- return ! state.m_touches;
- }
-
- static inline int result(counter const& state)
- {
- return state.code();
- }
-
-private:
-
- static inline count_info check_segment(Point const& point,
- PointOfSegment const& seg1,
- PointOfSegment const& seg2,
- counter& state,
- bool& eq1, bool& eq2, bool& s_antipodal)
- {
- if (check_touch(point, seg1, seg2, state, eq1, eq2, s_antipodal))
- {
- return count_info(0, false);
- }
-
- return calculate_count(point, seg1, seg2, eq1, eq2, s_antipodal);
- }
-
- static inline int check_touch(Point const& point,
- PointOfSegment const& seg1,
- PointOfSegment const& seg2,
- counter& state,
- bool& eq1,
- bool& eq2,
- bool& s_antipodal)
- {
- calculation_type const c0 = 0;
- calculation_type const c2 = 2;
- calculation_type const pi = constants::half_period();
- calculation_type const half_pi = pi / c2;
-
- calculation_type const p_lon = get<0>(point);
- calculation_type const s1_lon = get<0>(seg1);
- calculation_type const s2_lon = get<0>(seg2);
- calculation_type const p_lat = get<1>(point);
- calculation_type const s1_lat = get<1>(seg1);
- calculation_type const s2_lat = get<1>(seg2);
-
- // NOTE: lat in {-90, 90} and arbitrary lon
- // it doesn't matter what lon it is if it's a pole
- // so e.g. if one of the segment endpoints is a pole
- // then only the other lon matters
-
- bool eq1_strict = longitudes_equal(s1_lon, p_lon);
- bool eq2_strict = longitudes_equal(s2_lon, p_lon);
- bool eq1_anti = false;
- bool eq2_anti = false;
-
- calculation_type const anti_p_lon = p_lon + (p_lon <= c0 ? pi : -pi);
-
- eq1 = eq1_strict // lon strictly equal to s1
- || (eq1_anti = longitudes_equal(s1_lon, anti_p_lon)) // anti-lon strictly equal to s1
- || math::equals(math::abs(s1_lat), half_pi); // s1 is pole
- eq2 = eq2_strict // lon strictly equal to s2
- || (eq2_anti = longitudes_equal(s2_lon, anti_p_lon)) // anti-lon strictly equal to s2
- || math::equals(math::abs(s2_lat), half_pi); // s2 is pole
-
- // segment overlapping pole
- calculation_type const s_lon_diff = math::longitude_distance_signed<units_t>(s1_lon, s2_lon);
- s_antipodal = math::equals(s_lon_diff, pi);
- if (s_antipodal)
- {
- eq1 = eq2 = eq1 || eq2;
-
- // segment overlapping pole and point is pole
- if (math::equals(math::abs(p_lat), half_pi))
- {
- eq1 = eq2 = true;
- }
- }
-
- // Both equal p -> segment vertical
- // The only thing which has to be done is check if point is ON segment
- if (eq1 && eq2)
- {
- // segment endpoints on the same sides of the globe
- if (! s_antipodal)
- {
- // p's lat between segment endpoints' lats
- if ( (s1_lat <= p_lat && s2_lat >= p_lat) || (s2_lat <= p_lat && s1_lat >= p_lat) )
- {
- if (!eq1_anti || !eq2_anti)
- {
- state.m_touches = true;
- }
- }
- }
- else
- {
- // going through north or south pole?
- if (pi - s1_lat - s2_lat <= pi)
- {
- if ( (eq1_strict && s1_lat <= p_lat) || (eq2_strict && s2_lat <= p_lat) // north
- || math::equals(p_lat, half_pi) ) // point on north pole
- {
- state.m_touches = true;
- }
- else if (! eq1_strict && ! eq2_strict && math::equals(p_lat, -half_pi) ) // point on south pole
- {
- return false;
- }
- }
- else // south pole
- {
- if ( (eq1_strict && s1_lat >= p_lat) || (eq2_strict && s2_lat >= p_lat) // south
- || math::equals(p_lat, -half_pi) ) // point on south pole
- {
- state.m_touches = true;
- }
- else if (! eq1_strict && ! eq2_strict && math::equals(p_lat, half_pi) ) // point on north pole
- {
- return false;
- }
- }
- }
-
- return true;
- }
-
- return false;
- }
-
- // Called if point is not aligned with a vertical segment
- static inline count_info calculate_count(Point const& point,
- PointOfSegment const& seg1,
- PointOfSegment const& seg2,
- bool eq1, bool eq2, bool s_antipodal)
- {
- // If both segment endpoints were poles below checks wouldn't be enough
- // but this means that either both are the same or that they are N/S poles
- // and therefore the segment is not valid.
- // If needed (eq1 && eq2 ? 0) could be returned
-
- calculation_type const c0 = 0;
- calculation_type const pi = constants::half_period();
-
- calculation_type const p = get<0>(point);
- calculation_type const s1 = get<0>(seg1);
- calculation_type const s2 = get<0>(seg2);
-
- calculation_type const s1_p = math::longitude_distance_signed<units_t>(s1, p);
-
- if (s_antipodal)
- {
- return count_info(s1_p < c0 ? -2 : 2, false); // choose W/E
- }
-
- calculation_type const s1_s2 = math::longitude_distance_signed<units_t>(s1, s2);
-
- if (eq1 || eq2) // Point on level s1 or s2
- {
- return count_info(s1_s2 < c0 ? -1 : 1, // choose W/E
- longitudes_equal(p + pi, (eq1 ? s1 : s2)));
- }
-
- // Point between s1 and s2
- if ( math::sign(s1_p) == math::sign(s1_s2)
- && math::abs(s1_p) < math::abs(s1_s2) )
- {
- return count_info(s1_s2 < c0 ? -2 : 2, false); // choose W/E
- }
-
- calculation_type const s1_p_anti = math::longitude_distance_signed<units_t>(s1, p + pi);
-
- // Anti-Point between s1 and s2
- if ( math::sign(s1_p_anti) == math::sign(s1_s2)
- && math::abs(s1_p_anti) < math::abs(s1_s2) )
- {
- return count_info(s1_s2 < c0 ? -2 : 2, true); // choose W/E
- }
-
- return count_info(0, false);
- }
-
-
- // Fix for https://svn.boost.org/trac/boost/ticket/9628
- // For floating point coordinates, the <D> coordinate of a point is compared
- // with the segment's points using some EPS. If the coordinates are "equal"
- // the sides are calculated. Therefore we can treat a segment as a long areal
- // geometry having some width. There is a small ~triangular area somewhere
- // between the segment's effective area and a segment's line used in sides
- // calculation where the segment is on the one side of the line but on the
- // other side of a segment (due to the width).
- // Below picture assuming D = 1, if D = 0 horiz<->vert, E<->N, RIGHT<->UP.
- // For the s1 of a segment going NE the real side is RIGHT but the point may
- // be detected as LEFT, like this:
- // RIGHT
- // ___----->
- // ^ O Pt __ __
- // EPS __ __
- // v__ __ BUT DETECTED AS LEFT OF THIS LINE
- // _____7
- // _____/
- // _____/
- // In the code below actually D = 0, so segments are nearly-vertical
- // Called when the point is on the same level as one of the segment's points
- // but the point is not aligned with a vertical segment
- inline int side_equal(Point const& point,
- PointOfSegment const& se,
- count_info const& ci) const
- {
- typedef typename coordinate_type<PointOfSegment>::type scoord_t;
- typedef typename coordinate_system<PointOfSegment>::type::units units_t;
-
- if (math::equals(get<1>(point), get<1>(se)))
- {
- return 0;
- }
-
- // Create a horizontal segment intersecting the original segment's endpoint
- // equal to the point, with the derived direction (E/W).
- PointOfSegment ss1, ss2;
- set<1>(ss1, get<1>(se));
- set<0>(ss1, get<0>(se));
- set<1>(ss2, get<1>(se));
- scoord_t ss20 = get<0>(se);
- if (ci.count > 0)
- {
- ss20 += small_angle();
- }
- else
- {
- ss20 -= small_angle();
- }
- math::normalize_longitude<units_t>(ss20);
- set<0>(ss2, ss20);
-
- // Check the side using this vertical segment
- return m_side_strategy.apply(ss1, ss2, point);
- }
-
- // 1 deg or pi/180 rad
- static inline calculation_type small_angle()
- {
- return constants::half_period() / calculation_type(180);
- };
-
- static inline bool longitudes_equal(calculation_type const& lon1, calculation_type const& lon2)
- {
- return math::equals(
- math::longitude_distance_signed<units_t>(lon1, lon2),
- calculation_type(0));
- }
-
- SideStrategy m_side_strategy;
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief Within detection using winding rule in spherical coordinate system.
-\ingroup strategies
-\tparam Point \tparam_point
-\tparam PointOfSegment \tparam_segment_point
-\tparam CalculationType \tparam_calculation
-
-\qbk{
-[heading See also]
-[link geometry.reference.algorithms.within.within_3_with_strategy within (with strategy)]
-}
- */
-template
-<
- typename Point,
- typename PointOfSegment = Point,
- typename CalculationType = void
->
-class spherical_winding
- : public within::detail::spherical_winding_base
- <
- Point,
- PointOfSegment,
- side::spherical_side_formula<CalculationType>,
- CalculationType
- >
-{};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-template <typename PointLike, typename Geometry, typename AnyTag1, typename AnyTag2>
-struct default_strategy<PointLike, Geometry, AnyTag1, AnyTag2, pointlike_tag, polygonal_tag, spherical_tag, spherical_tag>
-{
- typedef within::detail::spherical_winding_base
- <
- typename geometry::point_type<PointLike>::type,
- typename geometry::point_type<Geometry>::type
- > type;
-};
-
-template <typename PointLike, typename Geometry, typename AnyTag1, typename AnyTag2>
-struct default_strategy<PointLike, Geometry, AnyTag1, AnyTag2, pointlike_tag, linear_tag, spherical_tag, spherical_tag>
-{
- typedef within::detail::spherical_winding_base
- <
- typename geometry::point_type<PointLike>::type,
- typename geometry::point_type<Geometry>::type
- > type;
-};
-
-} // namespace services
-
-#endif
-
-
-}} // namespace strategy::within
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace strategy { namespace covered_by { namespace services
-{
-
-template <typename PointLike, typename Geometry, typename AnyTag1, typename AnyTag2>
-struct default_strategy<PointLike, Geometry, AnyTag1, AnyTag2, pointlike_tag, polygonal_tag, spherical_tag, spherical_tag>
-{
- typedef within::detail::spherical_winding_base
- <
- typename geometry::point_type<PointLike>::type,
- typename geometry::point_type<Geometry>::type
- > type;
-};
-
-template <typename PointLike, typename Geometry, typename AnyTag1, typename AnyTag2>
-struct default_strategy<PointLike, Geometry, AnyTag1, AnyTag2, pointlike_tag, linear_tag, spherical_tag, spherical_tag>
-{
- typedef within::detail::spherical_winding_base
- <
- typename geometry::point_type<PointLike>::type,
- typename geometry::point_type<Geometry>::type
- > type;
-};
-
-}}} // namespace strategy::covered_by::services
-#endif
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGY_SPHERICAL_POINT_IN_POLY_WINDING_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp
deleted file mode 100644
index 2b195e96f08..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/side_by_cross_track.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2014-2017.
-// Modifications copyright (c) 2014-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_SIDE_BY_CROSS_TRACK_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_SIDE_BY_CROSS_TRACK_HPP
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-
-#include <boost/geometry/formulas/spherical.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-#include <boost/geometry/strategies/side.hpp>
-//#include <boost/geometry/strategies/concepts/side_concept.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace side
-{
-
-/*!
-\brief Check at which side of a Great Circle segment a point lies
- left of segment (> 0), right of segment (< 0), on segment (0)
-\ingroup strategies
-\tparam CalculationType \tparam_calculation
- */
-template <typename CalculationType = void>
-class side_by_cross_track
-{
-
-public :
- template <typename P1, typename P2, typename P>
- static inline int apply(P1 const& p1, P2 const& p2, P const& p)
- {
- typedef typename promote_floating_point
- <
- typename select_calculation_type_alt
- <
- CalculationType,
- P1, P2, P
- >::type
- >::type calc_t;
-
- calc_t d1 = 0.001; // m_strategy.apply(sp1, p);
-
- calc_t lon1 = geometry::get_as_radian<0>(p1);
- calc_t lat1 = geometry::get_as_radian<1>(p1);
- calc_t lon2 = geometry::get_as_radian<0>(p2);
- calc_t lat2 = geometry::get_as_radian<1>(p2);
- calc_t lon = geometry::get_as_radian<0>(p);
- calc_t lat = geometry::get_as_radian<1>(p);
-
- calc_t crs_AD = geometry::formula::spherical_azimuth<calc_t, false>
- (lon1, lat1, lon, lat).azimuth;
-
- calc_t crs_AB = geometry::formula::spherical_azimuth<calc_t, false>
- (lon1, lat1, lon2, lat2).azimuth;
-
- calc_t XTD = asin(sin(d1) * sin(crs_AD - crs_AB));
-
- return math::equals(XTD, 0) ? 0 : XTD < 0 ? 1 : -1;
- }
-};
-
-}} // namespace strategy::side
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_SIDE_BY_CROSS_TRACK_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/spherical/ssf.hpp b/contrib/restricted/boost/boost/geometry/strategies/spherical/ssf.hpp
deleted file mode 100644
index 03f5428ede3..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/spherical/ssf.hpp
+++ /dev/null
@@ -1,157 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2016.
-// Modifications copyright (c) 2016, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_SPHERICAL_SSF_HPP
-#define BOOST_GEOMETRY_STRATEGIES_SPHERICAL_SSF_HPP
-
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
-#include <boost/geometry/util/select_calculation_type.hpp>
-
-#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/strategies/spherical/disjoint_segment_box.hpp>
-#include <boost/geometry/strategies/spherical/envelope_segment.hpp>
-//#include <boost/geometry/strategies/concepts/side_concept.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace strategy { namespace side
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename T>
-int spherical_side_formula(T const& lambda1, T const& delta1,
- T const& lambda2, T const& delta2,
- T const& lambda, T const& delta)
-{
- // Create temporary points (vectors) on unit a sphere
- T const cos_delta1 = cos(delta1);
- T const c1x = cos_delta1 * cos(lambda1);
- T const c1y = cos_delta1 * sin(lambda1);
- T const c1z = sin(delta1);
-
- T const cos_delta2 = cos(delta2);
- T const c2x = cos_delta2 * cos(lambda2);
- T const c2y = cos_delta2 * sin(lambda2);
- T const c2z = sin(delta2);
-
- // (Third point is converted directly)
- T const cos_delta = cos(delta);
-
- // Apply the "Spherical Side Formula" as presented on my blog
- T const dist
- = (c1y * c2z - c1z * c2y) * cos_delta * cos(lambda)
- + (c1z * c2x - c1x * c2z) * cos_delta * sin(lambda)
- + (c1x * c2y - c1y * c2x) * sin(delta);
-
- T zero = T();
- return math::equals(dist, zero) ? 0
- : dist > zero ? 1
- : -1; // dist < zero
-}
-
-}
-#endif // DOXYGEN_NO_DETAIL
-
-/*!
-\brief Check at which side of a Great Circle segment a point lies
- left of segment (> 0), right of segment (< 0), on segment (0)
-\ingroup strategies
-\tparam CalculationType \tparam_calculation
- */
-template <typename CalculationType = void>
-class spherical_side_formula
-{
-
-public :
- typedef strategy::envelope::spherical_segment<CalculationType> envelope_strategy_type;
-
- static inline envelope_strategy_type get_envelope_strategy()
- {
- return envelope_strategy_type();
- }
-
- typedef strategy::disjoint::segment_box_spherical disjoint_strategy_type;
-
- static inline disjoint_strategy_type get_disjoint_strategy()
- {
- return disjoint_strategy_type();
- }
-
- template <typename P1, typename P2, typename P>
- static inline int apply(P1 const& p1, P2 const& p2, P const& p)
- {
- typedef typename promote_floating_point
- <
- typename select_calculation_type_alt
- <
- CalculationType,
- P1, P2, P
- >::type
- >::type calculation_type;
-
- calculation_type const lambda1 = get_as_radian<0>(p1);
- calculation_type const delta1 = get_as_radian<1>(p1);
- calculation_type const lambda2 = get_as_radian<0>(p2);
- calculation_type const delta2 = get_as_radian<1>(p2);
- calculation_type const lambda = get_as_radian<0>(p);
- calculation_type const delta = get_as_radian<1>(p);
-
- return detail::spherical_side_formula(lambda1, delta1,
- lambda2, delta2,
- lambda, delta);
- }
-};
-
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-namespace services
-{
-
-/*template <typename CalculationType>
-struct default_strategy<spherical_polar_tag, CalculationType>
-{
- typedef spherical_side_formula<CalculationType> type;
-};*/
-
-template <typename CalculationType>
-struct default_strategy<spherical_equatorial_tag, CalculationType>
-{
- typedef spherical_side_formula<CalculationType> type;
-};
-
-template <typename CalculationType>
-struct default_strategy<geographic_tag, CalculationType>
-{
- typedef spherical_side_formula<CalculationType> type;
-};
-
-}
-#endif
-
-}} // namespace strategy::side
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_SPHERICAL_SSF_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/strategies.hpp b/contrib/restricted/boost/boost/geometry/strategies/strategies.hpp
deleted file mode 100644
index 7d6cb618c68..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/strategies.hpp
+++ /dev/null
@@ -1,123 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// This file was modified by Oracle on 2014-2018.
-// Modifications copyright (c) 2014-2018 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_STRATEGIES_HPP
-#define BOOST_GEOMETRY_STRATEGIES_STRATEGIES_HPP
-
-
-#include <boost/geometry/strategies/tags.hpp>
-
-#include <boost/geometry/strategies/area.hpp>
-#include <boost/geometry/strategies/azimuth.hpp>
-#include <boost/geometry/strategies/buffer.hpp>
-#include <boost/geometry/strategies/centroid.hpp>
-#include <boost/geometry/strategies/compare.hpp>
-#include <boost/geometry/strategies/convex_hull.hpp>
-#include <boost/geometry/strategies/covered_by.hpp>
-#include <boost/geometry/strategies/densify.hpp>
-#include <boost/geometry/strategies/disjoint.hpp>
-#include <boost/geometry/strategies/distance.hpp>
-#include <boost/geometry/strategies/envelope.hpp>
-#include <boost/geometry/strategies/intersection.hpp>
-#include <boost/geometry/strategies/intersection_strategies.hpp> // for backward compatibility
-#include <boost/geometry/strategies/relate.hpp>
-#include <boost/geometry/strategies/side.hpp>
-#include <boost/geometry/strategies/transform.hpp>
-#include <boost/geometry/strategies/within.hpp>
-
-#include <boost/geometry/strategies/cartesian/area.hpp>
-#include <boost/geometry/strategies/cartesian/azimuth.hpp>
-#include <boost/geometry/strategies/cartesian/box_in_box.hpp>
-#include <boost/geometry/strategies/cartesian/buffer_end_flat.hpp>
-#include <boost/geometry/strategies/cartesian/buffer_end_round.hpp>
-#include <boost/geometry/strategies/cartesian/buffer_join_miter.hpp>
-#include <boost/geometry/strategies/cartesian/buffer_join_round.hpp>
-#include <boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp>
-#include <boost/geometry/strategies/cartesian/buffer_point_circle.hpp>
-#include <boost/geometry/strategies/cartesian/buffer_point_square.hpp>
-#include <boost/geometry/strategies/cartesian/buffer_side_straight.hpp>
-#include <boost/geometry/strategies/cartesian/centroid_average.hpp>
-#include <boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp>
-#include <boost/geometry/strategies/cartesian/centroid_weighted_length.hpp>
-#include <boost/geometry/strategies/cartesian/densify.hpp>
-#include <boost/geometry/strategies/cartesian/disjoint_segment_box.hpp>
-#include <boost/geometry/strategies/cartesian/distance_pythagoras.hpp>
-#include <boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp>
-#include <boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp>
-#include <boost/geometry/strategies/cartesian/distance_projected_point.hpp>
-#include <boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp>
-#include <boost/geometry/strategies/cartesian/envelope_segment.hpp>
-#include <boost/geometry/strategies/cartesian/intersection.hpp>
-#include <boost/geometry/strategies/cartesian/point_in_box.hpp>
-#include <boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp>
-#include <boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp>
-#include <boost/geometry/strategies/cartesian/point_in_poly_winding.hpp>
-#include <boost/geometry/strategies/cartesian/side_by_triangle.hpp>
-
-#include <boost/geometry/strategies/spherical/area.hpp>
-#include <boost/geometry/strategies/spherical/azimuth.hpp>
-#include <boost/geometry/strategies/spherical/densify.hpp>
-#include <boost/geometry/strategies/spherical/disjoint_segment_box.hpp>
-#include <boost/geometry/strategies/spherical/distance_haversine.hpp>
-#include <boost/geometry/strategies/spherical/distance_cross_track.hpp>
-#include <boost/geometry/strategies/spherical/distance_cross_track_box_box.hpp>
-#include <boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp>
-#include <boost/geometry/strategies/spherical/compare.hpp>
-#include <boost/geometry/strategies/spherical/envelope_segment.hpp>
-#include <boost/geometry/strategies/spherical/intersection.hpp>
-#include <boost/geometry/strategies/spherical/point_in_poly_winding.hpp>
-#include <boost/geometry/strategies/spherical/ssf.hpp>
-
-#include <boost/geometry/strategies/geographic/area.hpp>
-#include <boost/geometry/strategies/geographic/azimuth.hpp>
-#include <boost/geometry/strategies/geographic/densify.hpp>
-#include <boost/geometry/strategies/geographic/disjoint_segment_box.hpp>
-#include <boost/geometry/strategies/geographic/distance.hpp>
-#include <boost/geometry/strategies/geographic/distance_andoyer.hpp>
-#include <boost/geometry/strategies/geographic/distance_cross_track.hpp>
-#include <boost/geometry/strategies/geographic/distance_cross_track_box_box.hpp>
-#include <boost/geometry/strategies/geographic/distance_cross_track_point_box.hpp>
-#include <boost/geometry/strategies/geographic/distance_thomas.hpp>
-#include <boost/geometry/strategies/geographic/distance_vincenty.hpp>
-#include <boost/geometry/strategies/geographic/envelope_segment.hpp>
-#include <boost/geometry/strategies/geographic/intersection.hpp>
-//#include <boost/geometry/strategies/geographic/intersection_elliptic.hpp>
-#include <boost/geometry/strategies/geographic/point_in_poly_winding.hpp>
-#include <boost/geometry/strategies/geographic/side.hpp>
-#include <boost/geometry/strategies/geographic/side_andoyer.hpp>
-#include <boost/geometry/strategies/geographic/side_thomas.hpp>
-#include <boost/geometry/strategies/geographic/side_vincenty.hpp>
-
-#include <boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp>
-#include <boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp>
-#include <boost/geometry/strategies/agnostic/hull_graham_andrew.hpp>
-#include <boost/geometry/strategies/agnostic/point_in_box_by_side.hpp>
-#include <boost/geometry/strategies/agnostic/point_in_point.hpp>
-#include <boost/geometry/strategies/agnostic/point_in_poly_winding.hpp>
-#include <boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp>
-
-#include <boost/geometry/strategies/strategy_transform.hpp>
-
-#include <boost/geometry/strategies/transform/matrix_transformers.hpp>
-#include <boost/geometry/strategies/transform/map_transformer.hpp>
-#include <boost/geometry/strategies/transform/inverse_transformer.hpp>
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_STRATEGIES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/strategy_transform.hpp b/contrib/restricted/boost/boost/geometry/strategies/strategy_transform.hpp
deleted file mode 100644
index 99fcb720c69..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/strategy_transform.hpp
+++ /dev/null
@@ -1,527 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_STRATEGY_TRANSFORM_HPP
-#define BOOST_GEOMETRY_STRATEGIES_STRATEGY_TRANSFORM_HPP
-
-#include <cstddef>
-#include <cmath>
-#include <functional>
-
-#include <boost/numeric/conversion/cast.hpp>
-
-#include <boost/geometry/algorithms/convert.hpp>
-#include <boost/geometry/arithmetic/arithmetic.hpp>
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/radian_access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/strategies/transform.hpp>
-
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace transform
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template
-<
- typename Src, typename Dst,
- std::size_t D, std::size_t N,
- template <typename> class F
->
-struct transform_coordinates
-{
- template <typename T>
- static inline void transform(Src const& source, Dst& dest, T value)
- {
- typedef typename select_coordinate_type<Src, Dst>::type coordinate_type;
-
- F<coordinate_type> function;
- set<D>(dest, boost::numeric_cast<coordinate_type>(function(get<D>(source), value)));
- transform_coordinates<Src, Dst, D + 1, N, F>::transform(source, dest, value);
- }
-};
-
-template
-<
- typename Src, typename Dst,
- std::size_t N,
- template <typename> class F
->
-struct transform_coordinates<Src, Dst, N, N, F>
-{
- template <typename T>
- static inline void transform(Src const& , Dst& , T )
- {
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
- \brief Transformation strategy to copy one point to another using assignment operator
- \ingroup transform
- \tparam P point type
- */
-template <typename P>
-struct copy_direct
-{
- inline bool apply(P const& p1, P& p2) const
- {
- p2 = p1;
- return true;
- }
-};
-
-/*!
- \brief Transformation strategy to do copy a point, copying per coordinate.
- \ingroup transform
- \tparam P1 first point type
- \tparam P2 second point type
- */
-template <typename P1, typename P2>
-struct copy_per_coordinate
-{
- inline bool apply(P1 const& p1, P2& p2) const
- {
- // Defensive check, dimensions are equal, selected by specialization
- assert_dimension_equal<P1, P2>();
-
- geometry::convert(p1, p2);
- return true;
- }
-};
-
-
-/*!
- \brief Transformation strategy to go from degree to radian and back
- \ingroup transform
- \tparam P1 first point type
- \tparam P2 second point type
- \tparam F additional functor to divide or multiply with d2r
- */
-template <typename P1, typename P2, template <typename> class F>
-struct degree_radian_vv
-{
- inline bool apply(P1 const& p1, P2& p2) const
- {
- // Spherical coordinates always have 2 coordinates measured in angles
- // The optional third one is distance/height, provided in another strategy
- // Polar coordinates having one angle, will be also in another strategy
- assert_dimension<P1, 2>();
- assert_dimension<P2, 2>();
-
- typedef typename promote_floating_point
- <
- typename select_coordinate_type<P1, P2>::type
- >::type calculation_type;
-
- detail::transform_coordinates
- <
- P1, P2, 0, 2, F
- >::transform(p1, p2, math::d2r<calculation_type>());
- return true;
- }
-};
-
-template <typename P1, typename P2, template <typename> class F>
-struct degree_radian_vv_3
-{
- inline bool apply(P1 const& p1, P2& p2) const
- {
- assert_dimension<P1, 3>();
- assert_dimension<P2, 3>();
-
- typedef typename promote_floating_point
- <
- typename select_coordinate_type<P1, P2>::type
- >::type calculation_type;
-
- detail::transform_coordinates
- <
- P1, P2, 0, 2, F
- >::transform(p1, p2, math::d2r<calculation_type>());
-
- // Copy height or other third dimension
- set<2>(p2, get<2>(p1));
- return true;
- }
-};
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
- /// Helper function for conversion, phi/theta are in radians
- template <typename P, typename T, typename R>
- inline void spherical_polar_to_cartesian(T phi, T theta, R r, P& p)
- {
- assert_dimension<P, 3>();
-
- // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_spherical_coordinates
- // http://www.vias.org/comp_geometry/math_coord_convert_3d.htm
- // https://moodle.polymtl.ca/file.php/1183/Autres_Documents/Derivation_for_Spherical_Co-ordinates.pdf
- // http://en.citizendium.org/wiki/Spherical_polar_coordinates
-
- // Phi = first, theta is second, r is third, see documentation on cs::spherical
-
- // (calculations are splitted to implement ttmath)
-
- T r_sin_theta = r;
- T r_cos_theta = r;
- r_sin_theta *= sin(theta);
- r_cos_theta *= cos(theta);
-
- set<0>(p, r_sin_theta * cos(phi));
- set<1>(p, r_sin_theta * sin(phi));
- set<2>(p, r_cos_theta);
- }
-
- /// Helper function for conversion, lambda/delta (lon lat) are in radians
- template <typename P, typename T, typename R>
- inline void spherical_equatorial_to_cartesian(T lambda, T delta, R r, P& p)
- {
- assert_dimension<P, 3>();
-
- // http://mathworld.wolfram.com/GreatCircle.html
- // http://www.spenvis.oma.be/help/background/coortran/coortran.html WRONG
-
- T r_cos_delta = r;
- T r_sin_delta = r;
- r_cos_delta *= cos(delta);
- r_sin_delta *= sin(delta);
-
- set<0>(p, r_cos_delta * cos(lambda));
- set<1>(p, r_cos_delta * sin(lambda));
- set<2>(p, r_sin_delta);
- }
-
-
- /// Helper function for conversion
- template <typename P, typename T>
- inline bool cartesian_to_spherical2(T x, T y, T z, P& p)
- {
- assert_dimension<P, 2>();
-
- // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates
-
-#if defined(BOOST_GEOMETRY_TRANSFORM_CHECK_UNIT_SPHERE)
- // TODO: MAYBE ONLY IF TO BE CHECKED?
- T const r = /*sqrt not necessary, sqrt(1)=1*/ (x * x + y * y + z * z);
-
- // Unit sphere, so r should be 1
- if (geometry::math::abs(r - 1.0) > T(1e-6))
- {
- return false;
- }
- // end todo
-#endif
-
- set_from_radian<0>(p, atan2(y, x));
- set_from_radian<1>(p, acos(z));
- return true;
- }
-
- template <typename P, typename T>
- inline bool cartesian_to_spherical_equatorial2(T x, T y, T z, P& p)
- {
- assert_dimension<P, 2>();
-
- set_from_radian<0>(p, atan2(y, x));
- set_from_radian<1>(p, asin(z));
- return true;
- }
-
-
- template <typename P, typename T>
- inline bool cartesian_to_spherical3(T x, T y, T z, P& p)
- {
- assert_dimension<P, 3>();
-
- // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates
- T const r = math::sqrt(x * x + y * y + z * z);
- set<2>(p, r);
- set_from_radian<0>(p, atan2(y, x));
- if (r > 0.0)
- {
- set_from_radian<1>(p, acos(z / r));
- return true;
- }
- return false;
- }
-
- template <typename P, typename T>
- inline bool cartesian_to_spherical_equatorial3(T x, T y, T z, P& p)
- {
- assert_dimension<P, 3>();
-
- // http://en.wikipedia.org/wiki/List_of_canonical_coordinate_transformations#From_Cartesian_coordinates
- T const r = math::sqrt(x * x + y * y + z * z);
- set<2>(p, r);
- set_from_radian<0>(p, atan2(y, x));
- if (r > 0.0)
- {
- set_from_radian<1>(p, asin(z / r));
- return true;
- }
- return false;
- }
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
- \brief Transformation strategy for 2D spherical (phi,theta) to 3D cartesian (x,y,z)
- \details on Unit sphere
- \ingroup transform
- \tparam P1 first point type
- \tparam P2 second point type
- */
-template <typename P1, typename P2>
-struct from_spherical_polar_2_to_cartesian_3
-{
- inline bool apply(P1 const& p1, P2& p2) const
- {
- assert_dimension<P1, 2>();
- detail::spherical_polar_to_cartesian(get_as_radian<0>(p1), get_as_radian<1>(p1), 1.0, p2);
- return true;
- }
-};
-
-template <typename P1, typename P2>
-struct from_spherical_equatorial_2_to_cartesian_3
-{
- inline bool apply(P1 const& p1, P2& p2) const
- {
- assert_dimension<P1, 2>();
- detail::spherical_equatorial_to_cartesian(get_as_radian<0>(p1), get_as_radian<1>(p1), 1.0, p2);
- return true;
- }
-};
-
-
-/*!
- \brief Transformation strategy for 3D spherical (phi,theta,r) to 3D cartesian (x,y,z)
- \ingroup transform
- \tparam P1 first point type
- \tparam P2 second point type
- */
-template <typename P1, typename P2>
-struct from_spherical_polar_3_to_cartesian_3
-{
- inline bool apply(P1 const& p1, P2& p2) const
- {
- assert_dimension<P1, 3>();
- detail::spherical_polar_to_cartesian(
- get_as_radian<0>(p1), get_as_radian<1>(p1), get<2>(p1), p2);
- return true;
- }
-};
-
-template <typename P1, typename P2>
-struct from_spherical_equatorial_3_to_cartesian_3
-{
- inline bool apply(P1 const& p1, P2& p2) const
- {
- assert_dimension<P1, 3>();
- detail::spherical_equatorial_to_cartesian(
- get_as_radian<0>(p1), get_as_radian<1>(p1), get<2>(p1), p2);
- return true;
- }
-};
-
-
-/*!
- \brief Transformation strategy for 3D cartesian (x,y,z) to 2D spherical (phi,theta)
- \details on Unit sphere
- \ingroup transform
- \tparam P1 first point type
- \tparam P2 second point type
- \note If x,y,z point is not lying on unit sphere, transformation will return false
- */
-template <typename P1, typename P2>
-struct from_cartesian_3_to_spherical_polar_2
-{
- inline bool apply(P1 const& p1, P2& p2) const
- {
- assert_dimension<P1, 3>();
- return detail::cartesian_to_spherical2(get<0>(p1), get<1>(p1), get<2>(p1), p2);
- }
-};
-
-template <typename P1, typename P2>
-struct from_cartesian_3_to_spherical_equatorial_2
-{
- inline bool apply(P1 const& p1, P2& p2) const
- {
- assert_dimension<P1, 3>();
- return detail::cartesian_to_spherical_equatorial2(get<0>(p1), get<1>(p1), get<2>(p1), p2);
- }
-};
-
-
-/*!
- \brief Transformation strategy for 3D cartesian (x,y,z) to 3D spherical (phi,theta,r)
- \ingroup transform
- \tparam P1 first point type
- \tparam P2 second point type
- */
-template <typename P1, typename P2>
-struct from_cartesian_3_to_spherical_polar_3
-{
- inline bool apply(P1 const& p1, P2& p2) const
- {
- assert_dimension<P1, 3>();
- return detail::cartesian_to_spherical3(get<0>(p1), get<1>(p1), get<2>(p1), p2);
- }
-};
-
-template <typename P1, typename P2>
-struct from_cartesian_3_to_spherical_equatorial_3
-{
- inline bool apply(P1 const& p1, P2& p2) const
- {
- assert_dimension<P1, 3>();
- return detail::cartesian_to_spherical_equatorial3(get<0>(p1), get<1>(p1), get<2>(p1), p2);
- }
-};
-
-#ifndef DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-namespace services
-{
-
-/// Specialization for same coordinate system family, same system, same dimension, same point type, can be copied
-template <typename CoordSysTag, typename CoordSys, std::size_t D, typename P>
-struct default_strategy<CoordSysTag, CoordSysTag, CoordSys, CoordSys, D, D, P, P>
-{
- typedef copy_direct<P> type;
-};
-
-/// Specialization for same coordinate system family and system, same dimension, different point type, copy per coordinate
-template <typename CoordSysTag, typename CoordSys, std::size_t D, typename P1, typename P2>
-struct default_strategy<CoordSysTag, CoordSysTag, CoordSys, CoordSys, D, D, P1, P2>
-{
- typedef copy_per_coordinate<P1, P2> type;
-};
-
-/// Specialization to transform from degree to radian for any coordinate system / point type combination
-template <typename CoordSysTag, template<typename> class CoordSys, typename P1, typename P2>
-struct default_strategy<CoordSysTag, CoordSysTag, CoordSys<degree>, CoordSys<radian>, 2, 2, P1, P2>
-{
- typedef degree_radian_vv<P1, P2, std::multiplies> type;
-};
-
-/// Specialization to transform from radian to degree for any coordinate system / point type combination
-template <typename CoordSysTag, template<typename> class CoordSys, typename P1, typename P2>
-struct default_strategy<CoordSysTag, CoordSysTag, CoordSys<radian>, CoordSys<degree>, 2, 2, P1, P2>
-{
- typedef degree_radian_vv<P1, P2, std::divides> type;
-};
-
-
-/// Specialization degree->radian in 3D
-template <typename CoordSysTag, template<typename> class CoordSys, typename P1, typename P2>
-struct default_strategy<CoordSysTag, CoordSysTag, CoordSys<degree>, CoordSys<radian>, 3, 3, P1, P2>
-{
- typedef degree_radian_vv_3<P1, P2, std::multiplies> type;
-};
-
-/// Specialization radian->degree in 3D
-template <typename CoordSysTag, template<typename> class CoordSys, typename P1, typename P2>
-struct default_strategy<CoordSysTag, CoordSysTag, CoordSys<radian>, CoordSys<degree>, 3, 3, P1, P2>
-{
- typedef degree_radian_vv_3<P1, P2, std::divides> type;
-};
-
-/// Specialization to transform from unit sphere(phi,theta) to XYZ
-template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
-struct default_strategy<spherical_polar_tag, cartesian_tag, CoordSys1, CoordSys2, 2, 3, P1, P2>
-{
- typedef from_spherical_polar_2_to_cartesian_3<P1, P2> type;
-};
-
-/// Specialization to transform from sphere(phi,theta,r) to XYZ
-template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
-struct default_strategy<spherical_polar_tag, cartesian_tag, CoordSys1, CoordSys2, 3, 3, P1, P2>
-{
- typedef from_spherical_polar_3_to_cartesian_3<P1, P2> type;
-};
-
-template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
-struct default_strategy<spherical_equatorial_tag, cartesian_tag, CoordSys1, CoordSys2, 2, 3, P1, P2>
-{
- typedef from_spherical_equatorial_2_to_cartesian_3<P1, P2> type;
-};
-
-template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
-struct default_strategy<spherical_equatorial_tag, cartesian_tag, CoordSys1, CoordSys2, 3, 3, P1, P2>
-{
- typedef from_spherical_equatorial_3_to_cartesian_3<P1, P2> type;
-};
-
-/// Specialization to transform from XYZ to unit sphere(phi,theta)
-template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
-struct default_strategy<cartesian_tag, spherical_polar_tag, CoordSys1, CoordSys2, 3, 2, P1, P2>
-{
- typedef from_cartesian_3_to_spherical_polar_2<P1, P2> type;
-};
-
-template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
-struct default_strategy<cartesian_tag, spherical_equatorial_tag, CoordSys1, CoordSys2, 3, 2, P1, P2>
-{
- typedef from_cartesian_3_to_spherical_equatorial_2<P1, P2> type;
-};
-
-/// Specialization to transform from XYZ to sphere(phi,theta,r)
-template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
-struct default_strategy<cartesian_tag, spherical_polar_tag, CoordSys1, CoordSys2, 3, 3, P1, P2>
-{
- typedef from_cartesian_3_to_spherical_polar_3<P1, P2> type;
-};
-template <typename CoordSys1, typename CoordSys2, typename P1, typename P2>
-struct default_strategy<cartesian_tag, spherical_equatorial_tag, CoordSys1, CoordSys2, 3, 3, P1, P2>
-{
- typedef from_cartesian_3_to_spherical_equatorial_3<P1, P2> type;
-};
-
-
-} // namespace services
-
-
-#endif // DOXYGEN_NO_STRATEGY_SPECIALIZATIONS
-
-
-}} // namespace strategy::transform
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_STRATEGY_TRANSFORM_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/tags.hpp b/contrib/restricted/boost/boost/geometry/strategies/tags.hpp
deleted file mode 100644
index 7589c21071e..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/tags.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_TAGS_HPP
-#define BOOST_GEOMETRY_STRATEGIES_TAGS_HPP
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy
-{
- /*!
- \brief Indicate compiler/library user that strategy is not implemented.
- \details Strategies are defined for point types or for point type
- combinations. If there is no implementation for that specific point type, or point type
- combination, the calculation cannot be done. To indicate this, this not_implemented
- class is used as a typedef stub.
-
- */
- struct not_implemented {};
-}
-
-
-struct strategy_tag_distance_point_point {};
-struct strategy_tag_distance_point_segment {};
-struct strategy_tag_distance_point_box {};
-struct strategy_tag_distance_box_box {};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_TAGS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/transform.hpp b/contrib/restricted/boost/boost/geometry/strategies/transform.hpp
deleted file mode 100644
index 3c806acac69..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/transform.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_TRANSFORM_HPP
-#define BOOST_GEOMETRY_STRATEGIES_TRANSFORM_HPP
-
-#include <cstddef>
-
-#include <boost/mpl/assert.hpp>
-
-#include <boost/geometry/strategies/tags.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace transform { namespace services
-{
-
-/*!
- \brief Traits class binding a transformation strategy to a coordinate system
- \ingroup transform
- \details Can be specialized
- - per coordinate system family (tag)
- - per coordinate system (or groups of them)
- - per dimension
- - per point type
- \tparam CoordinateSystemTag 1,2 coordinate system tags
- \tparam CoordinateSystem 1,2 coordinate system
- \tparam D 1, 2 dimension
- \tparam Point 1, 2 point type
- */
-template
-<
- typename CoordinateSystemTag1, typename CoordinateSystemTag2,
- typename CoordinateSystem1, typename CoordinateSystem2,
- std::size_t Dimension1, std::size_t Dimension2,
- typename Point1, typename Point2
->
-struct default_strategy
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THIS_POINT_TYPES
- , (types<Point1, Point2>)
- );
-};
-
-}}} // namespace strategy::transform::services
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_TRANSFORM_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/transform/inverse_transformer.hpp b/contrib/restricted/boost/boost/geometry/strategies/transform/inverse_transformer.hpp
deleted file mode 100644
index 5213bce47ad..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/transform/inverse_transformer.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_TRANSFORM_INVERSE_TRANSFORMER_HPP
-#define BOOST_GEOMETRY_STRATEGIES_TRANSFORM_INVERSE_TRANSFORMER_HPP
-
-#include <boost/qvm/mat.hpp>
-#include <boost/qvm/mat_operations.hpp>
-
-#include <boost/geometry/strategies/transform/matrix_transformers.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace transform
-{
-
-/*!
-\brief Transformation strategy to do an inverse transformation in a Cartesian coordinate system
-\ingroup strategies
- */
-template
-<
- typename CalculationType,
- std::size_t Dimension1,
- std::size_t Dimension2
->
-class inverse_transformer
- : public matrix_transformer<CalculationType, Dimension1, Dimension2>
-{
-public :
- template <typename Transformer>
- inline inverse_transformer(Transformer const& input)
- {
- this->m_matrix = boost::qvm::inverse(input.matrix());
- }
-
-};
-
-
-}} // namespace strategy::transform
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_STRATEGIES_TRANSFORM_INVERSE_TRANSFORMER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/transform/map_transformer.hpp b/contrib/restricted/boost/boost/geometry/strategies/transform/map_transformer.hpp
deleted file mode 100644
index 01ea6168c56..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/transform/map_transformer.hpp
+++ /dev/null
@@ -1,172 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_TRANSFORM_MAP_TRANSFORMER_HPP
-#define BOOST_GEOMETRY_STRATEGIES_TRANSFORM_MAP_TRANSFORMER_HPP
-
-
-#include <cstddef>
-
-#include <boost/geometry/strategies/transform/matrix_transformers.hpp>
-
-namespace boost { namespace geometry
-{
-
-// Silence warning C4127: conditional expression is constant
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127)
-#endif
-
-namespace strategy { namespace transform
-{
-
-/*!
-\brief Transformation strategy to map from one to another Cartesian coordinate system
-\ingroup strategies
-\tparam Mirror if true map is mirrored upside-down (in most cases pixels
- are from top to bottom, while map is from bottom to top)
- */
-template
-<
- typename CalculationType,
- std::size_t Dimension1,
- std::size_t Dimension2,
- bool Mirror = false,
- bool SameScale = true
->
-class map_transformer
- : public matrix_transformer<CalculationType, Dimension1, Dimension2>
-{
- typedef boost::qvm::mat<CalculationType, Dimension1 + 1, Dimension2 + 1> M;
- typedef boost::qvm::mat<CalculationType, 3, 3> matrix33;
-
-public :
- template <typename B, typename D>
- explicit inline map_transformer(B const& box, D const& width, D const& height)
- {
- set_transformation(
- get<min_corner, 0>(box), get<min_corner, 1>(box),
- get<max_corner, 0>(box), get<max_corner, 1>(box),
- width, height);
- }
-
- template <typename W, typename D>
- explicit inline map_transformer(W const& wx1, W const& wy1, W const& wx2, W const& wy2,
- D const& width, D const& height)
- {
- set_transformation(wx1, wy1, wx2, wy2, width, height);
- }
-
-
-private :
- template <typename W, typename P, typename S>
- inline void set_transformation_point(W const& wx, W const& wy,
- P const& px, P const& py,
- S const& scalex, S const& scaley)
- {
-
- // Translate to a coordinate system centered on world coordinates (-wx, -wy)
- matrix33 t1;
- qvm::A<0,0>(t1) = 1; qvm::A<0,1>(t1) = 0; qvm::A<0,2>(t1) = -wx;
- qvm::A<1,0>(t1) = 0; qvm::A<1,1>(t1) = 1; qvm::A<1,2>(t1) = -wy;
- qvm::A<2,0>(t1) = 0; qvm::A<2,1>(t1) = 0; qvm::A<2,2>(t1) = 1;
-
- // Scale the map
- matrix33 s;
- qvm::A<0,0>(s) = scalex; qvm::A<0,1>(s) = 0; qvm::A<0,2>(s) = 0;
- qvm::A<1,0>(s) = 0; qvm::A<1,1>(s) = scaley; qvm::A<1,2>(s) = 0;
- qvm::A<2,0>(s) = 0; qvm::A<2,1>(s) = 0; qvm::A<2,2>(s) = 1;
-
- // Translate to a coordinate system centered on the specified pixels (+px, +py)
- matrix33 t2;
- qvm::A<0,0>(t2) = 1; qvm::A<0,1>(t2) = 0; qvm::A<0,2>(t2) = px;
- qvm::A<1,0>(t2) = 0; qvm::A<1,1>(t2) = 1; qvm::A<1,2>(t2) = py;
- qvm::A<2,0>(t2) = 0; qvm::A<2,1>(t2) = 0; qvm::A<2,2>(t2) = 1;
-
- // Calculate combination matrix in two steps
- this->m_matrix = s * t1;
- this->m_matrix = t2 * this->m_matrix;
- }
-
-
- template <typename W, typename D>
- void set_transformation(W const& wx1, W const& wy1, W const& wx2, W const& wy2,
- D const& width, D const& height)
- {
- D px1 = 0;
- D py1 = 0;
- D px2 = width;
- D py2 = height;
-
- // Get the same type, but at least a double
- typedef typename select_most_precise<D, double>::type type;
-
-
- // Calculate appropriate scale, take min because whole box must fit
- // Scale is in PIXELS/MAPUNITS (meters)
- W wdx = wx2 - wx1;
- W wdy = wy2 - wy1;
- type sx = (px2 - px1) / boost::numeric_cast<type>(wdx);
- type sy = (py2 - py1) / boost::numeric_cast<type>(wdy);
-
- if (SameScale)
- {
- type scale = (std::min)(sx, sy);
- sx = scale;
- sy = scale;
- }
-
- // Calculate centerpoints
- W wtx = wx1 + wx2;
- W wty = wy1 + wy2;
- W two = 2;
- W wmx = wtx / two;
- W wmy = wty / two;
- type pmx = (px1 + px2) / 2.0;
- type pmy = (py1 + py2) / 2.0;
-
- set_transformation_point(wmx, wmy, pmx, pmy, sx, sy);
-
- if (Mirror)
- {
- // Mirror in y-direction
- matrix33 m;
- qvm::A<0,0>(m) = 1; qvm::A<0,1>(m) = 0; qvm::A<0,2>(m) = 0;
- qvm::A<1,0>(m) = 0; qvm::A<1,1>(m) = -1; qvm::A<1,2>(m) = 0;
- qvm::A<2,0>(m) = 0; qvm::A<2,1>(m) = 0; qvm::A<2,2>(m) = 1;
-
- // Translate in y-direction such that it fits again
- matrix33 y;
- qvm::A<0,0>(y) = 1; qvm::A<0,1>(y) = 0; qvm::A<0,2>(y) = 0;
- qvm::A<1,0>(y) = 0; qvm::A<1,1>(y) = 1; qvm::A<1,2>(y) = height;
- qvm::A<2,0>(y) = 0; qvm::A<2,1>(y) = 0; qvm::A<2,2>(y) = 1;
-
- // Calculate combination matrix in two steps
- this->m_matrix = m * this->m_matrix;
- this->m_matrix = y * this->m_matrix;
- }
- }
-};
-
-
-}} // namespace strategy::transform
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_TRANSFORM_MAP_TRANSFORMER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/transform/matrix_transformers.hpp b/contrib/restricted/boost/boost/geometry/strategies/transform/matrix_transformers.hpp
deleted file mode 100644
index a3f3223c95f..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/transform/matrix_transformers.hpp
+++ /dev/null
@@ -1,399 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_TRANSFORM_MATRIX_TRANSFORMERS_HPP
-#define BOOST_GEOMETRY_STRATEGIES_TRANSFORM_MATRIX_TRANSFORMERS_HPP
-
-
-#include <cstddef>
-
-#include <boost/qvm/mat.hpp>
-#include <boost/qvm/mat_access.hpp>
-#include <boost/qvm/mat_operations.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/promote_floating_point.hpp>
-#include <boost/geometry/util/select_coordinate_type.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace transform
-{
-
-/*!
-\brief Affine transformation strategy in Cartesian system.
-\details The strategy serves as a generic definition of affine transformation matrix
- and procedure of application it to given point.
-\see http://en.wikipedia.org/wiki/Affine_transformation
- and http://www.devmaster.net/wiki/Transformation_matrices
-\ingroup strategies
-\tparam Dimension1 number of dimensions to transform from
-\tparam Dimension2 number of dimensions to transform to
- */
-template
-<
- typename CalculationType,
- std::size_t Dimension1,
- std::size_t Dimension2
->
-class matrix_transformer
-{
-};
-
-
-template <typename CalculationType>
-class matrix_transformer<CalculationType, 2, 2>
-{
-protected :
- typedef CalculationType ct;
- typedef boost::qvm::mat<ct, 3, 3> matrix_type;
- matrix_type m_matrix;
-
-public :
-
- inline matrix_transformer(
- ct const& m_0_0, ct const& m_0_1, ct const& m_0_2,
- ct const& m_1_0, ct const& m_1_1, ct const& m_1_2,
- ct const& m_2_0, ct const& m_2_1, ct const& m_2_2)
- {
- qvm::A<0,0>(m_matrix) = m_0_0; qvm::A<0,1>(m_matrix) = m_0_1; qvm::A<0,2>(m_matrix) = m_0_2;
- qvm::A<1,0>(m_matrix) = m_1_0; qvm::A<1,1>(m_matrix) = m_1_1; qvm::A<1,2>(m_matrix) = m_1_2;
- qvm::A<2,0>(m_matrix) = m_2_0; qvm::A<2,1>(m_matrix) = m_2_1; qvm::A<2,2>(m_matrix) = m_2_2;
- }
-
- inline matrix_transformer(matrix_type const& matrix)
- : m_matrix(matrix)
- {}
-
-
- inline matrix_transformer() {}
-
- template <typename P1, typename P2>
- inline bool apply(P1 const& p1, P2& p2) const
- {
- assert_dimension_greater_equal<P1, 2>();
- assert_dimension_greater_equal<P2, 2>();
-
- ct const& c1 = get<0>(p1);
- ct const& c2 = get<1>(p1);
-
- ct p2x = c1 * qvm::A<0,0>(m_matrix) + c2 * qvm::A<0,1>(m_matrix) + qvm::A<0,2>(m_matrix);
- ct p2y = c1 * qvm::A<1,0>(m_matrix) + c2 * qvm::A<1,1>(m_matrix) + qvm::A<1,2>(m_matrix);
-
- typedef typename geometry::coordinate_type<P2>::type ct2;
- set<0>(p2, boost::numeric_cast<ct2>(p2x));
- set<1>(p2, boost::numeric_cast<ct2>(p2y));
-
- return true;
- }
-
- matrix_type const& matrix() const { return m_matrix; }
-};
-
-
-// It IS possible to go from 3 to 2 coordinates
-template <typename CalculationType>
-class matrix_transformer<CalculationType, 3, 2> : public matrix_transformer<CalculationType, 2, 2>
-{
- typedef CalculationType ct;
-
-public :
- inline matrix_transformer(
- ct const& m_0_0, ct const& m_0_1, ct const& m_0_2,
- ct const& m_1_0, ct const& m_1_1, ct const& m_1_2,
- ct const& m_2_0, ct const& m_2_1, ct const& m_2_2)
- : matrix_transformer<CalculationType, 2, 2>(
- m_0_0, m_0_1, m_0_2,
- m_1_0, m_1_1, m_1_2,
- m_2_0, m_2_1, m_2_2)
- {}
-
- inline matrix_transformer()
- : matrix_transformer<CalculationType, 2, 2>()
- {}
-};
-
-
-template <typename CalculationType>
-class matrix_transformer<CalculationType, 3, 3>
-{
-protected :
- typedef CalculationType ct;
- typedef boost::qvm::mat<ct, 4, 4> matrix_type;
- matrix_type m_matrix;
-
-public :
- inline matrix_transformer(
- ct const& m_0_0, ct const& m_0_1, ct const& m_0_2, ct const& m_0_3,
- ct const& m_1_0, ct const& m_1_1, ct const& m_1_2, ct const& m_1_3,
- ct const& m_2_0, ct const& m_2_1, ct const& m_2_2, ct const& m_2_3,
- ct const& m_3_0, ct const& m_3_1, ct const& m_3_2, ct const& m_3_3
- )
- {
- qvm::A<0,0>(m_matrix) = m_0_0; qvm::A<0,1>(m_matrix) = m_0_1; qvm::A<0,2>(m_matrix) = m_0_2; qvm::A<0,3>(m_matrix) = m_0_3;
- qvm::A<1,0>(m_matrix) = m_1_0; qvm::A<1,1>(m_matrix) = m_1_1; qvm::A<1,2>(m_matrix) = m_1_2; qvm::A<1,3>(m_matrix) = m_1_3;
- qvm::A<2,0>(m_matrix) = m_2_0; qvm::A<2,1>(m_matrix) = m_2_1; qvm::A<2,2>(m_matrix) = m_2_2; qvm::A<2,3>(m_matrix) = m_2_3;
- qvm::A<3,0>(m_matrix) = m_3_0; qvm::A<3,1>(m_matrix) = m_3_1; qvm::A<3,2>(m_matrix) = m_3_2; qvm::A<3,3>(m_matrix) = m_3_3;
- }
-
- inline matrix_transformer() {}
-
- template <typename P1, typename P2>
- inline bool apply(P1 const& p1, P2& p2) const
- {
- ct const& c1 = get<0>(p1);
- ct const& c2 = get<1>(p1);
- ct const& c3 = get<2>(p1);
-
- typedef typename geometry::coordinate_type<P2>::type ct2;
-
- set<0>(p2, boost::numeric_cast<ct2>(
- c1 * qvm::A<0,0>(m_matrix) + c2 * qvm::A<0,1>(m_matrix) + c3 * qvm::A<0,2>(m_matrix) + qvm::A<0,3>(m_matrix)));
- set<1>(p2, boost::numeric_cast<ct2>(
- c1 * qvm::A<1,0>(m_matrix) + c2 * qvm::A<1,1>(m_matrix) + c3 * qvm::A<1,2>(m_matrix) + qvm::A<1,3>(m_matrix)));
- set<2>(p2, boost::numeric_cast<ct2>(
- c1 * qvm::A<2,0>(m_matrix) + c2 * qvm::A<2,1>(m_matrix) + c3 * qvm::A<2,2>(m_matrix) + qvm::A<2,3>(m_matrix)));
-
- return true;
- }
-
- matrix_type const& matrix() const { return m_matrix; }
-};
-
-
-/*!
-\brief Strategy of translate transformation in Cartesian system.
-\details Translate moves a geometry a fixed distance in 2 or 3 dimensions.
-\see http://en.wikipedia.org/wiki/Translation_%28geometry%29
-\ingroup strategies
-\tparam Dimension1 number of dimensions to transform from
-\tparam Dimension2 number of dimensions to transform to
- */
-template
-<
- typename CalculationType,
- std::size_t Dimension1,
- std::size_t Dimension2
->
-class translate_transformer
-{
-};
-
-
-template<typename CalculationType>
-class translate_transformer<CalculationType, 2, 2> : public matrix_transformer<CalculationType, 2, 2>
-{
-public :
- // To have translate transformers compatible for 2/3 dimensions, the
- // constructor takes an optional third argument doing nothing.
- inline translate_transformer(CalculationType const& translate_x,
- CalculationType const& translate_y,
- CalculationType const& = 0)
- : matrix_transformer<CalculationType, 2, 2>(
- 1, 0, translate_x,
- 0, 1, translate_y,
- 0, 0, 1)
- {}
-};
-
-
-template <typename CalculationType>
-class translate_transformer<CalculationType, 3, 3> : public matrix_transformer<CalculationType, 3, 3>
-{
-public :
- inline translate_transformer(CalculationType const& translate_x,
- CalculationType const& translate_y,
- CalculationType const& translate_z)
- : matrix_transformer<CalculationType, 3, 3>(
- 1, 0, 0, translate_x,
- 0, 1, 0, translate_y,
- 0, 0, 1, translate_z,
- 0, 0, 0, 1)
- {}
-
-};
-
-
-/*!
-\brief Strategy of scale transformation in Cartesian system.
-\details Scale scales a geometry up or down in all its dimensions.
-\see http://en.wikipedia.org/wiki/Scaling_%28geometry%29
-\ingroup strategies
-\tparam Dimension1 number of dimensions to transform from
-\tparam Dimension2 number of dimensions to transform to
-*/
-template
-<
- typename CalculationType,
- std::size_t Dimension1,
- std::size_t Dimension2
->
-class scale_transformer
-{
-};
-
-
-template <typename CalculationType>
-class scale_transformer<CalculationType, 2, 2> : public matrix_transformer<CalculationType, 2, 2>
-{
-
-public :
- inline scale_transformer(CalculationType const& scale_x,
- CalculationType const& scale_y,
- CalculationType const& = 0)
- : matrix_transformer<CalculationType, 2, 2>(
- scale_x, 0, 0,
- 0, scale_y, 0,
- 0, 0, 1)
- {}
-
-
- inline scale_transformer(CalculationType const& scale)
- : matrix_transformer<CalculationType, 2, 2>(
- scale, 0, 0,
- 0, scale, 0,
- 0, 0, 1)
- {}
-};
-
-
-template <typename CalculationType>
-class scale_transformer<CalculationType, 3, 3> : public matrix_transformer<CalculationType, 3, 3>
-{
-public :
- inline scale_transformer(CalculationType const& scale_x,
- CalculationType const& scale_y,
- CalculationType const& scale_z)
- : matrix_transformer<CalculationType, 3, 3>(
- scale_x, 0, 0, 0,
- 0, scale_y, 0, 0,
- 0, 0, scale_z, 0,
- 0, 0, 0, 1)
- {}
-
-
- inline scale_transformer(CalculationType const& scale)
- : matrix_transformer<CalculationType, 3, 3>(
- scale, 0, 0, 0,
- 0, scale, 0, 0,
- 0, 0, scale, 0,
- 0, 0, 0, 1)
- {}
-};
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-template <typename DegreeOrRadian>
-struct as_radian
-{};
-
-
-template <>
-struct as_radian<radian>
-{
- template <typename T>
- static inline T get(T const& value)
- {
- return value;
- }
-};
-
-template <>
-struct as_radian<degree>
-{
- template <typename T>
- static inline T get(T const& value)
- {
- typedef typename promote_floating_point<T>::type promoted_type;
- return value * math::d2r<promoted_type>();
- }
-
-};
-
-
-template
-<
- typename CalculationType,
- std::size_t Dimension1,
- std::size_t Dimension2
->
-class rad_rotate_transformer
- : public matrix_transformer<CalculationType, Dimension1, Dimension2>
-{
-public :
- inline rad_rotate_transformer(CalculationType const& angle)
- : matrix_transformer<CalculationType, Dimension1, Dimension2>(
- cos(angle), sin(angle), 0,
- -sin(angle), cos(angle), 0,
- 0, 0, 1)
- {}
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief Strategy for rotate transformation in Cartesian coordinate system.
-\details Rotate rotates a geometry of specified angle about a fixed point (e.g. origin).
-\see http://en.wikipedia.org/wiki/Rotation_%28mathematics%29
-\ingroup strategies
-\tparam DegreeOrRadian degree/or/radian, type of rotation angle specification
-\note A single angle is needed to specify a rotation in 2D.
- Not yet in 3D, the 3D version requires special things to allow
- for rotation around X, Y, Z or arbitrary axis.
-\todo The 3D version will not compile.
- */
-template
-<
- typename DegreeOrRadian,
- typename CalculationType,
- std::size_t Dimension1,
- std::size_t Dimension2
->
-class rotate_transformer : public detail::rad_rotate_transformer<CalculationType, Dimension1, Dimension2>
-{
-
-public :
- inline rotate_transformer(CalculationType const& angle)
- : detail::rad_rotate_transformer
- <
- CalculationType, Dimension1, Dimension2
- >(detail::as_radian<DegreeOrRadian>::get(angle))
- {}
-};
-
-
-}} // namespace strategy::transform
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_TRANSFORM_MATRIX_TRANSFORMERS_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/transform/srs_transformer.hpp b/contrib/restricted/boost/boost/geometry/strategies/transform/srs_transformer.hpp
deleted file mode 100644
index e1815e2362c..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/transform/srs_transformer.hpp
+++ /dev/null
@@ -1,102 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_STRATEGIES_TRANSFORM_SRS_TRANSFORMER_HPP
-#define BOOST_GEOMETRY_STRATEGIES_TRANSFORM_SRS_TRANSFORMER_HPP
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace transform
-{
-
-/*!
- \brief Transformation strategy to do transform using a forward
- Map Projection or SRS transformation.
- \ingroup transform
- \tparam ProjectionOrTransformation SRS projection or transformation type
- */
-template
-<
- typename ProjectionOrTransformation
->
-class srs_forward_transformer
-{
-public:
- inline srs_forward_transformer()
- {}
-
- template <typename Parameters>
- inline srs_forward_transformer(Parameters const& parameters)
- : m_proj_or_transform(parameters)
- {}
-
- template <typename Parameters1, typename Parameters2>
- inline srs_forward_transformer(Parameters1 const& parameters1, Parameters2 const& parameters2)
- : m_proj_or_transform(parameters1, parameters2)
- {}
-
- template <typename Geometry1, typename Geometry2>
- inline bool apply(Geometry1 const& g1, Geometry2 & g2) const
- {
- return m_proj_or_transform.forward(g1, g2);
- }
-
-private:
- ProjectionOrTransformation m_proj_or_transform;
-};
-
-
-/*!
- \brief Transformation strategy to do transform using an inverse
- Map Projection or SRS transformation.
- \ingroup transform
- \tparam ProjectionOrTransformation SRS projection or transformation type
- */
-template
-<
- typename ProjectionOrTransformation
->
-class srs_inverse_transformer
-{
-public:
- inline srs_inverse_transformer()
- {}
-
- template <typename Parameters>
- inline srs_inverse_transformer(Parameters const& parameters)
- : m_proj_or_transform(parameters)
- {}
-
- template <typename Parameters1, typename Parameters2>
- inline srs_inverse_transformer(Parameters1 const& parameters1, Parameters2 const& parameters2)
- : m_proj_or_transform(parameters1, parameters2)
- {}
-
- template <typename Geometry1, typename Geometry2>
- inline bool apply(Geometry1 const& g1, Geometry2 & g2) const
- {
- return m_proj_or_transform.inverse(g1, g2);
- }
-
-private:
- ProjectionOrTransformation m_proj_or_transform;
-};
-
-
-}} // namespace strategy::transform
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_TRANSFORM_SRS_TRANSFORMER_HPP
diff --git a/contrib/restricted/boost/boost/geometry/strategies/within.hpp b/contrib/restricted/boost/boost/geometry/strategies/within.hpp
deleted file mode 100644
index 28a3283db0d..00000000000
--- a/contrib/restricted/boost/boost/geometry/strategies/within.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2017.
-// Modifications copyright (c) 2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_STRATEGIES_WITHIN_HPP
-#define BOOST_GEOMETRY_STRATEGIES_WITHIN_HPP
-
-#include <boost/mpl/assert.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/core/tag_cast.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace strategy { namespace within
-{
-
-
-namespace services
-{
-
-/*!
-\brief Traits class binding a within determination strategy to a coordinate system
-\ingroup within
-\tparam GeometryContained geometry-type of input (possibly) contained type
-\tparam GeometryContaining geometry-type of input (possibly) containing type
-\tparam TagContained casted tag of (possibly) contained type
-\tparam TagContaining casted tag of (possibly) containing type
-\tparam CsTagContained tag of coordinate system of (possibly) contained type
-\tparam CsTagContaining tag of coordinate system of (possibly) containing type
-*/
-template
-<
- typename GeometryContained,
- typename GeometryContaining,
- typename TagContained = typename tag<GeometryContained>::type,
- typename TagContaining = typename tag<GeometryContaining>::type,
- typename CastedTagContained = typename tag_cast
- <
- typename tag<GeometryContained>::type,
- pointlike_tag, linear_tag, polygonal_tag, areal_tag
- >::type,
- typename CastedTagContaining = typename tag_cast
- <
- typename tag<GeometryContaining>::type,
- pointlike_tag, linear_tag, polygonal_tag, areal_tag
- >::type,
- typename CsTagContained = typename tag_cast
- <
- typename cs_tag<typename point_type<GeometryContained>::type>::type,
- spherical_tag
- >::type,
- typename CsTagContaining = typename tag_cast
- <
- typename cs_tag<typename point_type<GeometryContaining>::type>::type,
- spherical_tag
- >::type
->
-struct default_strategy
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_IMPLEMENTED_FOR_THESE_TYPES
- , (types<GeometryContained, GeometryContaining>)
- );
-};
-
-
-} // namespace services
-
-
-}} // namespace strategy::within
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_STRATEGIES_WITHIN_HPP
-
diff --git a/contrib/restricted/boost/boost/geometry/util/add_const_if_c.hpp b/contrib/restricted/boost/boost/geometry/util/add_const_if_c.hpp
deleted file mode 100644
index 9e0c01299ce..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/add_const_if_c.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_ADD_CONST_IF_C_HPP
-#define BOOST_GEOMETRY_UTIL_ADD_CONST_IF_C_HPP
-
-
-#include <boost/mpl/if.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
- \brief Meta-function to define a const or non const type
- \ingroup utility
- \details If the boolean template parameter is true, the type parameter
- will be defined as const, otherwise it will be defined as it was.
- This meta-function is used to have one implementation for both
- const and non const references
- \note This traits class is completely independant from Boost.Geometry
- and might be a separate addition to Boost
- \note Used in a.o. for_each, interior_rings, exterior_ring
- \par Example
- \code
- void foo(typename add_const_if_c<IsConst, Point>::type& point)
- \endcode
-*/
-template <bool IsConst, typename Type>
-struct add_const_if_c
-{
- typedef typename boost::mpl::if_c
- <
- IsConst,
- Type const,
- Type
- >::type type;
-};
-
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_UTIL_ADD_CONST_IF_C_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/bare_type.hpp b/contrib/restricted/boost/boost/geometry/util/bare_type.hpp
deleted file mode 100644
index 26dd94a8ae9..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/bare_type.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_UTIL_BARE_TYPE_HPP
-#define BOOST_GEOMETRY_UTIL_BARE_TYPE_HPP
-
-
-#include <boost/type_traits/remove_const.hpp>
-#include <boost/type_traits/remove_pointer.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace util
-{
-
-template <typename T>
-struct bare_type
-{
- typedef typename boost::remove_const
- <
- typename boost::remove_pointer
- <
- typename boost::remove_reference
- <
- T
- >::type
- >::type
- >::type type;
-};
-
-
-} // namespace util
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_UTIL_BARE_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/calculation_type.hpp b/contrib/restricted/boost/boost/geometry/util/calculation_type.hpp
deleted file mode 100644
index 18eac4fbb7d..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/calculation_type.hpp
+++ /dev/null
@@ -1,178 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2012 Mateusz Loskot, London, UK.
-
-// 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 BOOST_GEOMETRY_UTIL_CALCULATION_TYPE_HPP
-#define BOOST_GEOMETRY_UTIL_CALCULATION_TYPE_HPP
-
-#include <boost/config.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_floating_point.hpp>
-#include <boost/type_traits/is_fundamental.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-#include <boost/geometry/util/select_coordinate_type.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace util
-{
-
-namespace detail
-{
-
-struct default_integral
-{
-#ifdef BOOST_HAS_LONG_LONG
- typedef boost::long_long_type type;
-#else
- typedef int type;
-#endif
-};
-
-/*!
-\details Selects the most appropriate:
- - if calculation type is specified (not void), that one is used
- - else if type is non-fundamental (user defined e.g. ttmath), that one
- - else if type is floating point, the specified default FP is used
- - else it is integral and the specified default integral is used
- */
-template
-<
- typename Type,
- typename CalculationType,
- typename DefaultFloatingPointCalculationType,
- typename DefaultIntegralCalculationType
->
-struct calculation_type
-{
- BOOST_STATIC_ASSERT((
- boost::is_fundamental
- <
- DefaultFloatingPointCalculationType
- >::type::value
- ));
- BOOST_STATIC_ASSERT((
- boost::is_fundamental
- <
- DefaultIntegralCalculationType
- >::type::value
- ));
-
-
- typedef typename boost::mpl::if_
- <
- boost::is_void<CalculationType>,
- typename boost::mpl::if_
- <
- boost::is_floating_point<Type>,
- typename select_most_precise
- <
- DefaultFloatingPointCalculationType,
- Type
- >::type,
- typename select_most_precise
- <
- DefaultIntegralCalculationType,
- Type
- >::type
- >::type,
- CalculationType
- >::type type;
-};
-
-} // namespace detail
-
-
-namespace calculation_type
-{
-
-namespace geometric
-{
-
-template
-<
- typename Geometry,
- typename CalculationType,
- typename DefaultFloatingPointCalculationType = double,
- typename DefaultIntegralCalculationType = detail::default_integral::type
->
-struct unary
-{
- typedef typename detail::calculation_type
- <
- typename geometry::coordinate_type<Geometry>::type,
- CalculationType,
- DefaultFloatingPointCalculationType,
- DefaultIntegralCalculationType
- >::type type;
-};
-
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename CalculationType,
- typename DefaultFloatingPointCalculationType = double,
- typename DefaultIntegralCalculationType = detail::default_integral::type
->
-struct binary
-{
- typedef typename detail::calculation_type
- <
- typename select_coordinate_type<Geometry1, Geometry2>::type,
- CalculationType,
- DefaultFloatingPointCalculationType,
- DefaultIntegralCalculationType
- >::type type;
-};
-
-
-/*!
-\brief calculation type (ternary, for three geometry types)
- */
-template
-<
- typename Geometry1,
- typename Geometry2,
- typename Geometry3,
- typename CalculationType,
- typename DefaultFloatingPointCalculationType = double,
- typename DefaultIntegralCalculationType = detail::default_integral::type
->
-struct ternary
-{
- typedef typename detail::calculation_type
- <
- typename select_most_precise
- <
- typename coordinate_type<Geometry1>::type,
- typename select_coordinate_type
- <
- Geometry2,
- Geometry3
- >::type
- >::type,
- CalculationType,
- DefaultFloatingPointCalculationType,
- DefaultIntegralCalculationType
- >::type type;
-};
-
-}} // namespace calculation_type::geometric
-
-} // namespace util
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_UTIL_CALCULATION_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/closure_as_bool.hpp b/contrib/restricted/boost/boost/geometry/util/closure_as_bool.hpp
deleted file mode 100644
index 57fcd528008..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/closure_as_bool.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_CLOSURE_AS_BOOL_HPP
-#define BOOST_GEOMETRY_UTIL_CLOSURE_AS_BOOL_HPP
-
-#include <boost/geometry/core/closure.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-template<closure_selector Closure>
-struct closure_as_bool
-{};
-
-
-template<>
-struct closure_as_bool<closed>
-{
- static const bool value = true;
-};
-
-
-template<>
-struct closure_as_bool<open>
-{
- static const bool value = false;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_UTIL_CLOSURE_AS_BOOL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/combine_if.hpp b/contrib/restricted/boost/boost/geometry/util/combine_if.hpp
deleted file mode 100644
index 5d94c344613..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/combine_if.hpp
+++ /dev/null
@@ -1,92 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2014-2015 Samuel Debionne, Grenoble, France.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_COMBINE_IF_HPP
-#define BOOST_GEOMETRY_UTIL_COMBINE_IF_HPP
-
-#include <boost/mpl/fold.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/bind.hpp>
-#include <boost/mpl/set.hpp>
-#include <boost/mpl/insert.hpp>
-#include <boost/mpl/placeholders.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace util
-{
-
-
-/*!
- \brief Meta-function to generate all the combination of pairs of types
- from a given sequence Sequence except those that does not satisfy the
- predicate Pred
- \ingroup utility
- \par Example
- \code
- typedef boost::mpl::vector<boost::mpl::int_<0>, boost::mpl::int_<1> > types;
- typedef combine_if<types, types, always<true_> >::type combinations;
- typedef boost::mpl::vector<
- pair<boost::mpl::int_<1>, boost::mpl::int_<1> >,
- pair<boost::mpl::int_<1>, boost::mpl::int_<0> >,
- pair<boost::mpl::int_<0>, boost::mpl::int_<1> >,
- pair<boost::mpl::int_<0>, boost::mpl::int_<0> >
- > result_types;
-
- BOOST_MPL_ASSERT(( boost::mpl::equal<combinations, result_types> ));
- \endcode
-*/
-template <typename Sequence1, typename Sequence2, typename Pred>
-struct combine_if
-{
- struct combine
- {
- template <typename Result, typename T>
- struct apply
- {
- typedef typename boost::mpl::fold<Sequence2, Result,
- boost::mpl::if_
- <
- boost::mpl::bind
- <
- typename boost::mpl::lambda<Pred>::type,
- T,
- boost::mpl::_2
- >,
- boost::mpl::insert
- <
- boost::mpl::_1, boost::mpl::pair<T, boost::mpl::_2>
- >,
- boost::mpl::_1
- >
- >::type type;
- };
- };
-
- typedef typename boost::mpl::fold
- <
- Sequence1, boost::mpl::set0<>, combine
- >::type type;
-};
-
-
-} // namespace util
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_UTIL_COMBINE_IF_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/compress_variant.hpp b/contrib/restricted/boost/boost/geometry/util/compress_variant.hpp
deleted file mode 100644
index 363385965d4..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/compress_variant.hpp
+++ /dev/null
@@ -1,106 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_COMPRESS_VARIANT_HPP
-#define BOOST_GEOMETRY_UTIL_COMPRESS_VARIANT_HPP
-
-
-#include <boost/mpl/equal_to.hpp>
-#include <boost/mpl/fold.hpp>
-#include <boost/mpl/front.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/insert.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/set.hpp>
-#include <boost/mpl/size.hpp>
-#include <boost/mpl/vector.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-namespace detail
-{
-
-template <typename Variant>
-struct unique_types:
- boost::mpl::fold<
- typename boost::mpl::reverse_fold<
- typename Variant::types,
- boost::mpl::set<>,
- boost::mpl::insert<
- boost::mpl::placeholders::_1,
- boost::mpl::placeholders::_2
- >
- >::type,
- boost::mpl::vector<>,
- boost::mpl::push_back
- <
- boost::mpl::placeholders::_1, boost::mpl::placeholders::_2
- >
- >
-{};
-
-template <typename Types>
-struct variant_or_single:
- boost::mpl::if_<
- boost::mpl::equal_to<
- boost::mpl::size<Types>,
- boost::mpl::int_<1>
- >,
- typename boost::mpl::front<Types>::type,
- typename make_variant_over<Types>::type
- >
-{};
-
-} // namespace detail
-
-
-/*!
- \brief Meta-function that takes a boost::variant type and tries to minimize
- it by doing the following:
- - if there's any duplicate types, remove them
- - if the result is a variant of one type, turn it into just that type
- \ingroup utility
- \par Example
- \code
- typedef variant<int, float, int, long> variant_type;
- typedef compress_variant<variant_type>::type compressed;
- typedef boost::mpl::vector<int, float, long> result_types;
- BOOST_MPL_ASSERT(( boost::mpl::equal<compressed::types, result_types> ));
-
- typedef variant<int, int, int> one_type_variant_type;
- typedef compress_variant<one_type_variant_type>::type single_type;
- BOOST_MPL_ASSERT(( boost::equals<single_type, int> ));
- \endcode
-*/
-
-template <typename Variant>
-struct compress_variant:
- detail::variant_or_single<
- typename detail::unique_types<Variant>::type
- >
-{};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_UTIL_COMPRESS_VARIANT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/condition.hpp b/contrib/restricted/boost/boost/geometry/util/condition.hpp
deleted file mode 100644
index aea4ad3ad13..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/condition.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_UTIL_CONDITION_HPP
-#define BOOST_GEOMETRY_UTIL_CONDITION_HPP
-
-
-#include <boost/config.hpp>
-
-
-// The macro defined in this file allows to suppress the MSVC
-// compiler warning C4127: conditional expression is constant
-
-#ifdef BOOST_MSVC
-
-// NOTE: The code commented out below contains an alternative implementation
-// of a macro using a free function. It was left here in case if in the future
-// version of MSVC for the code currently used in the macro implementation
-// the warning was generated.
-
-//#ifndef DOXYGEN_NO_DETAIL
-//namespace boost { namespace geometry { namespace detail {
-//BOOST_FORCEINLINE bool condition(bool const b) { return b; }
-//}}} // boost::geometry::detail
-//#endif // DOXYGEN_NO_DETAIL
-//#define BOOST_GEOMETRY_CONDITION(CONDITION) boost::geometry::detail::condition(CONDITION)
-
-#define BOOST_GEOMETRY_CONDITION(CONDITION) ((void)0, (CONDITION))
-
-#else
-
-#define BOOST_GEOMETRY_CONDITION(CONDITION) (CONDITION)
-
-#endif
-
-
-#endif // BOOST_GEOMETRY_UTIL_CONDITION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/coordinate_cast.hpp b/contrib/restricted/boost/boost/geometry/util/coordinate_cast.hpp
deleted file mode 100644
index 16a15cca5ba..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/coordinate_cast.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_COORDINATE_CAST_HPP
-#define BOOST_GEOMETRY_UTIL_COORDINATE_CAST_HPP
-
-#include <cstdlib>
-#include <string>
-#include <boost/lexical_cast.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-/*!
-\brief cast coordinates from a string to a coordinate type
-\detail By default it uses lexical_cast. However, lexical_cast seems not to support
- ttmath / partial specializations. Therefore this small utility is added.
- See also "define_pi" where the same issue is solved
-*/
-template <typename CoordinateType>
-struct coordinate_cast
-{
- static inline CoordinateType apply(std::string const& source)
- {
-#if defined(BOOST_GEOMETRY_NO_LEXICAL_CAST)
- return atof(source.c_str());
-#else
- return boost::lexical_cast<CoordinateType>(source);
-#endif
- }
-};
-
-
-} // namespace detail
-#endif
-
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_UTIL_COORDINATE_CAST_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/for_each_coordinate.hpp b/contrib/restricted/boost/boost/geometry/util/for_each_coordinate.hpp
deleted file mode 100644
index fb1e31856a9..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/for_each_coordinate.hpp
+++ /dev/null
@@ -1,94 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_FOR_EACH_COORDINATE_HPP
-#define BOOST_GEOMETRY_UTIL_FOR_EACH_COORDINATE_HPP
-
-#include <boost/concept/requires.hpp>
-#include <boost/geometry/geometries/concepts/point_concept.hpp>
-#include <boost/geometry/util/add_const_if_c.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Point, int Dimension, int DimensionCount, bool IsConst>
-struct coordinates_scanner
-{
- template <typename Op>
- static inline Op apply(typename add_const_if_c
- <
- IsConst,
- Point
- >::type& point, Op operation)
- {
- operation.template apply<Point, Dimension>(point);
- return coordinates_scanner
- <
- Point,
- Dimension+1,
- DimensionCount,
- IsConst
- >::apply(point, operation);
- }
-};
-
-template <typename Point, int DimensionCount, bool IsConst>
-struct coordinates_scanner<Point, DimensionCount, DimensionCount, IsConst>
-{
- template <typename Op>
- static inline Op apply(typename add_const_if_c
- <
- IsConst,
- Point
- >::type& , Op operation)
- {
- return operation;
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-template <typename Point, typename Op>
-inline void for_each_coordinate(Point& point, Op operation)
-{
- BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
-
- typedef typename detail::coordinates_scanner
- <
- Point, 0, dimension<Point>::type::value, false
- > scanner;
-
- scanner::apply(point, operation);
-}
-
-template <typename Point, typename Op>
-inline Op for_each_coordinate(Point const& point, Op operation)
-{
- BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point>) );
-
- typedef typename detail::coordinates_scanner
- <
- Point, 0, dimension<Point>::type::value, true
- > scanner;
-
- return scanner::apply(point, operation);
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_UTIL_FOR_EACH_COORDINATE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/has_infinite_coordinate.hpp b/contrib/restricted/boost/boost/geometry/util/has_infinite_coordinate.hpp
deleted file mode 100644
index 3f1d11a3b0f..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/has_infinite_coordinate.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_UTIL_HAS_INFINITE_COORDINATE_HPP
-#define BOOST_GEOMETRY_UTIL_HAS_INFINITE_COORDINATE_HPP
-
-#include <boost/type_traits/is_floating_point.hpp>
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/util/has_nan_coordinate.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-struct isinf
-{
- template <typename T>
- static inline bool apply(T const& t)
- {
- return boost::math::isinf(t);
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-template <typename Point>
-bool has_infinite_coordinate(Point const& point)
-{
- return detail::has_coordinate_with_property
- <
- Point,
- detail::isinf,
- boost::is_floating_point
- <
- typename coordinate_type<Point>::type
- >::value
- >::apply(point);
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_UTIL_HAS_INFINITE_COORDINATE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/has_nan_coordinate.hpp b/contrib/restricted/boost/boost/geometry/util/has_nan_coordinate.hpp
deleted file mode 100644
index 93d7c7f0354..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/has_nan_coordinate.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_UTIL_HAS_NAN_COORDINATE_HPP
-#define BOOST_GEOMETRY_UTIL_HAS_NAN_COORDINATE_HPP
-
-#include <cstddef>
-
-#include <boost/type_traits/is_floating_point.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-
-#include <boost/math/special_functions/fpclassify.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-struct isnan
-{
- template <typename T>
- static inline bool apply(T const& t)
- {
- return boost::math::isnan(t);
- }
-};
-
-template
-<
- typename Point,
- typename Predicate,
- bool Enable,
- std::size_t I = 0,
- std::size_t N = geometry::dimension<Point>::value
->
-struct has_coordinate_with_property
-{
- static bool apply(Point const& point)
- {
- return Predicate::apply(geometry::get<I>(point))
- || has_coordinate_with_property
- <
- Point, Predicate, Enable, I+1, N
- >::apply(point);
- }
-};
-
-template <typename Point, typename Predicate, std::size_t I, std::size_t N>
-struct has_coordinate_with_property<Point, Predicate, false, I, N>
-{
- static inline bool apply(Point const&)
- {
- return false;
- }
-};
-
-template <typename Point, typename Predicate, std::size_t N>
-struct has_coordinate_with_property<Point, Predicate, true, N, N>
-{
- static bool apply(Point const& )
- {
- return false;
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-template <typename Point>
-bool has_nan_coordinate(Point const& point)
-{
- return detail::has_coordinate_with_property
- <
- Point,
- detail::isnan,
- boost::is_floating_point
- <
- typename coordinate_type<Point>::type
- >::value
- >::apply(point);
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_UTIL_HAS_NAN_COORDINATE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/has_non_finite_coordinate.hpp b/contrib/restricted/boost/boost/geometry/util/has_non_finite_coordinate.hpp
deleted file mode 100644
index 50075641ed6..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/has_non_finite_coordinate.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2015 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_UTIL_HAS_NON_FINITE_COORDINATE_HPP
-#define BOOST_GEOMETRY_UTIL_HAS_NON_FINITE_COORDINATE_HPP
-
-#include <boost/type_traits/is_floating_point.hpp>
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/util/has_nan_coordinate.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-struct is_not_finite
-{
- template <typename T>
- static inline bool apply(T const& t)
- {
- return ! boost::math::isfinite(t);
- }
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-template <typename Point>
-bool has_non_finite_coordinate(Point const& point)
-{
- return detail::has_coordinate_with_property
- <
- Point,
- detail::is_not_finite,
- boost::is_floating_point
- <
- typename coordinate_type<Point>::type
- >::value
- >::apply(point);
-}
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_UTIL_HAS_NON_FINITE_COORDINATE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/math.hpp b/contrib/restricted/boost/boost/geometry/util/math.hpp
deleted file mode 100644
index b1c3648c982..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/math.hpp
+++ /dev/null
@@ -1,779 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014, 2015.
-// Modifications copyright (c) 2014-2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_MATH_HPP
-#define BOOST_GEOMETRY_UTIL_MATH_HPP
-
-#include <cmath>
-#include <limits>
-
-#include <boost/core/ignore_unused.hpp>
-
-#include <boost/math/constants/constants.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
-//#include <boost/math/special_functions/round.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/type_traits/is_fundamental.hpp>
-#include <boost/type_traits/is_integral.hpp>
-
-#include <boost/geometry/core/cs.hpp>
-
-#include <boost/geometry/util/select_most_precise.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace math
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename T>
-inline T const& greatest(T const& v1, T const& v2)
-{
- return (std::max)(v1, v2);
-}
-
-template <typename T>
-inline T const& greatest(T const& v1, T const& v2, T const& v3)
-{
- return (std::max)(greatest(v1, v2), v3);
-}
-
-template <typename T>
-inline T const& greatest(T const& v1, T const& v2, T const& v3, T const& v4)
-{
- return (std::max)(greatest(v1, v2, v3), v4);
-}
-
-template <typename T>
-inline T const& greatest(T const& v1, T const& v2, T const& v3, T const& v4, T const& v5)
-{
- return (std::max)(greatest(v1, v2, v3, v4), v5);
-}
-
-
-template <typename T>
-inline T bounded(T const& v, T const& lower, T const& upper)
-{
- return (std::min)((std::max)(v, lower), upper);
-}
-
-template <typename T>
-inline T bounded(T const& v, T const& lower)
-{
- return (std::max)(v, lower);
-}
-
-
-template <typename T,
- bool IsFloatingPoint = boost::is_floating_point<T>::value>
-struct abs
-{
- static inline T apply(T const& value)
- {
- T const zero = T();
- return value < zero ? -value : value;
- }
-};
-
-template <typename T>
-struct abs<T, true>
-{
- static inline T apply(T const& value)
- {
- using ::fabs;
- using std::fabs; // for long double
-
- return fabs(value);
- }
-};
-
-
-struct equals_default_policy
-{
- template <typename T>
- static inline T apply(T const& a, T const& b)
- {
- // See http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.17
- return greatest(abs<T>::apply(a), abs<T>::apply(b), T(1));
- }
-};
-
-template <typename T,
- bool IsFloatingPoint = boost::is_floating_point<T>::value>
-struct equals_factor_policy
-{
- equals_factor_policy()
- : factor(1) {}
- explicit equals_factor_policy(T const& v)
- : factor(greatest(abs<T>::apply(v), T(1)))
- {}
- equals_factor_policy(T const& v0, T const& v1, T const& v2, T const& v3)
- : factor(greatest(abs<T>::apply(v0), abs<T>::apply(v1),
- abs<T>::apply(v2), abs<T>::apply(v3),
- T(1)))
- {}
-
- T const& apply(T const&, T const&) const
- {
- return factor;
- }
-
- T factor;
-};
-
-template <typename T>
-struct equals_factor_policy<T, false>
-{
- equals_factor_policy() {}
- explicit equals_factor_policy(T const&) {}
- equals_factor_policy(T const& , T const& , T const& , T const& ) {}
-
- static inline T apply(T const&, T const&)
- {
- return T(1);
- }
-};
-
-template <typename Type,
- bool IsFloatingPoint = boost::is_floating_point<Type>::value>
-struct equals
-{
- template <typename Policy>
- static inline bool apply(Type const& a, Type const& b, Policy const&)
- {
- return a == b;
- }
-};
-
-template <typename Type>
-struct equals<Type, true>
-{
- template <typename Policy>
- static inline bool apply(Type const& a, Type const& b, Policy const& policy)
- {
- boost::ignore_unused(policy);
-
- if (a == b)
- {
- return true;
- }
-
- if (boost::math::isfinite(a) && boost::math::isfinite(b))
- {
- // If a is INF and b is e.g. 0, the expression below returns true
- // but the values are obviously not equal, hence the condition
- return abs<Type>::apply(a - b)
- <= std::numeric_limits<Type>::epsilon() * policy.apply(a, b);
- }
- else
- {
- return a == b;
- }
- }
-};
-
-template <typename T1, typename T2, typename Policy>
-inline bool equals_by_policy(T1 const& a, T2 const& b, Policy const& policy)
-{
- return detail::equals
- <
- typename select_most_precise<T1, T2>::type
- >::apply(a, b, policy);
-}
-
-template <typename Type,
- bool IsFloatingPoint = boost::is_floating_point<Type>::value>
-struct smaller
-{
- static inline bool apply(Type const& a, Type const& b)
- {
- return a < b;
- }
-};
-
-template <typename Type>
-struct smaller<Type, true>
-{
- static inline bool apply(Type const& a, Type const& b)
- {
- if (!(a < b)) // a >= b
- {
- return false;
- }
-
- return ! equals<Type, true>::apply(b, a, equals_default_policy());
- }
-};
-
-template <typename Type,
- bool IsFloatingPoint = boost::is_floating_point<Type>::value>
-struct smaller_or_equals
-{
- static inline bool apply(Type const& a, Type const& b)
- {
- return a <= b;
- }
-};
-
-template <typename Type>
-struct smaller_or_equals<Type, true>
-{
- static inline bool apply(Type const& a, Type const& b)
- {
- if (a <= b)
- {
- return true;
- }
-
- return equals<Type, true>::apply(a, b, equals_default_policy());
- }
-};
-
-
-template <typename Type,
- bool IsFloatingPoint = boost::is_floating_point<Type>::value>
-struct equals_with_epsilon
- : public equals<Type, IsFloatingPoint>
-{};
-
-template
-<
- typename T,
- bool IsFundemantal = boost::is_fundamental<T>::value /* false */
->
-struct square_root
-{
- typedef T return_type;
-
- static inline T apply(T const& value)
- {
- // for non-fundamental number types assume that sqrt is
- // defined either:
- // 1) at T's scope, or
- // 2) at global scope, or
- // 3) in namespace std
- using ::sqrt;
- using std::sqrt;
-
- return sqrt(value);
- }
-};
-
-template <typename FundamentalFP>
-struct square_root_for_fundamental_fp
-{
- typedef FundamentalFP return_type;
-
- static inline FundamentalFP apply(FundamentalFP const& value)
- {
-#ifdef BOOST_GEOMETRY_SQRT_CHECK_FINITENESS
- // This is a workaround for some 32-bit platforms.
- // For some of those platforms it has been reported that
- // std::sqrt(nan) and/or std::sqrt(-nan) returns a finite value.
- // For those platforms we need to define the macro
- // BOOST_GEOMETRY_SQRT_CHECK_FINITENESS so that the argument
- // to std::sqrt is checked appropriately before passed to std::sqrt
- if (boost::math::isfinite(value))
- {
- return std::sqrt(value);
- }
- else if (boost::math::isinf(value) && value < 0)
- {
- return -std::numeric_limits<FundamentalFP>::quiet_NaN();
- }
- return value;
-#else
- // for fundamental floating point numbers use std::sqrt
- return std::sqrt(value);
-#endif // BOOST_GEOMETRY_SQRT_CHECK_FINITENESS
- }
-};
-
-template <>
-struct square_root<float, true>
- : square_root_for_fundamental_fp<float>
-{
-};
-
-template <>
-struct square_root<double, true>
- : square_root_for_fundamental_fp<double>
-{
-};
-
-template <>
-struct square_root<long double, true>
- : square_root_for_fundamental_fp<long double>
-{
-};
-
-template <typename T>
-struct square_root<T, true>
-{
- typedef double return_type;
-
- static inline double apply(T const& value)
- {
- // for all other fundamental number types use also std::sqrt
- //
- // Note: in C++98 the only other possibility is double;
- // in C++11 there are also overloads for integral types;
- // this specialization works for those as well.
- return square_root_for_fundamental_fp
- <
- double
- >::apply(boost::numeric_cast<double>(value));
- }
-};
-
-
-
-template
-<
- typename T,
- bool IsFundemantal = boost::is_fundamental<T>::value /* false */
->
-struct modulo
-{
- typedef T return_type;
-
- static inline T apply(T const& value1, T const& value2)
- {
- // for non-fundamental number types assume that a free
- // function mod() is defined either:
- // 1) at T's scope, or
- // 2) at global scope
- return mod(value1, value2);
- }
-};
-
-template
-<
- typename Fundamental,
- bool IsIntegral = boost::is_integral<Fundamental>::value
->
-struct modulo_for_fundamental
-{
- typedef Fundamental return_type;
-
- static inline Fundamental apply(Fundamental const& value1,
- Fundamental const& value2)
- {
- return value1 % value2;
- }
-};
-
-// specialization for floating-point numbers
-template <typename Fundamental>
-struct modulo_for_fundamental<Fundamental, false>
-{
- typedef Fundamental return_type;
-
- static inline Fundamental apply(Fundamental const& value1,
- Fundamental const& value2)
- {
- return std::fmod(value1, value2);
- }
-};
-
-// specialization for fundamental number type
-template <typename Fundamental>
-struct modulo<Fundamental, true>
- : modulo_for_fundamental<Fundamental>
-{};
-
-
-
-/*!
-\brief Short constructs to enable partial specialization for PI, 2*PI
- and PI/2, currently not possible in Math.
-*/
-template <typename T>
-struct define_pi
-{
- static inline T apply()
- {
- // Default calls Boost.Math
- return boost::math::constants::pi<T>();
- }
-};
-
-template <typename T>
-struct define_two_pi
-{
- static inline T apply()
- {
- // Default calls Boost.Math
- return boost::math::constants::two_pi<T>();
- }
-};
-
-template <typename T>
-struct define_half_pi
-{
- static inline T apply()
- {
- // Default calls Boost.Math
- return boost::math::constants::half_pi<T>();
- }
-};
-
-template <typename T>
-struct relaxed_epsilon
-{
- static inline T apply(const T& factor)
- {
- return factor * std::numeric_limits<T>::epsilon();
- }
-};
-
-// This must be consistent with math::equals.
-// By default math::equals() scales the error by epsilon using the greater of
-// compared values but here is only one value, though it should work the same way.
-// (a-a) <= max(a, a) * EPS -> 0 <= a*EPS
-// (a+da-a) <= max(a+da, a) * EPS -> da <= (a+da)*EPS
-template <typename T, bool IsFloat = boost::is_floating_point<T>::value>
-struct scaled_epsilon
-{
- static inline T apply(T const& val)
- {
- return (std::max)(abs<T>::apply(val), T(1))
- * std::numeric_limits<T>::epsilon();
- }
-};
-
-template <typename T>
-struct scaled_epsilon<T, false>
-{
- static inline T apply(T const&)
- {
- return T(0);
- }
-};
-
-// ItoF ItoI FtoF
-template <typename Result, typename Source,
- bool ResultIsInteger = std::numeric_limits<Result>::is_integer,
- bool SourceIsInteger = std::numeric_limits<Source>::is_integer>
-struct rounding_cast
-{
- static inline Result apply(Source const& v)
- {
- return boost::numeric_cast<Result>(v);
- }
-};
-
-// TtoT
-template <typename Source, bool ResultIsInteger, bool SourceIsInteger>
-struct rounding_cast<Source, Source, ResultIsInteger, SourceIsInteger>
-{
- static inline Source apply(Source const& v)
- {
- return v;
- }
-};
-
-// FtoI
-template <typename Result, typename Source>
-struct rounding_cast<Result, Source, true, false>
-{
- static inline Result apply(Source const& v)
- {
- return boost::numeric_cast<Result>(v < Source(0) ?
- v - Source(0.5) :
- v + Source(0.5));
- }
-};
-
-} // namespace detail
-#endif
-
-
-template <typename T>
-inline T pi() { return detail::define_pi<T>::apply(); }
-
-template <typename T>
-inline T two_pi() { return detail::define_two_pi<T>::apply(); }
-
-template <typename T>
-inline T half_pi() { return detail::define_half_pi<T>::apply(); }
-
-template <typename T>
-inline T relaxed_epsilon(T const& factor)
-{
- return detail::relaxed_epsilon<T>::apply(factor);
-}
-
-template <typename T>
-inline T scaled_epsilon(T const& value)
-{
- return detail::scaled_epsilon<T>::apply(value);
-}
-
-
-// Maybe replace this by boost equals or so
-
-/*!
- \brief returns true if both arguments are equal.
- \ingroup utility
- \param a first argument
- \param b second argument
- \return true if a == b
- \note If both a and b are of an integral type, comparison is done by ==.
- If one of the types is floating point, comparison is done by abs and
- comparing with epsilon. If one of the types is non-fundamental, it might
- be a high-precision number and comparison is done using the == operator
- of that class.
-*/
-
-template <typename T1, typename T2>
-inline bool equals(T1 const& a, T2 const& b)
-{
- return detail::equals
- <
- typename select_most_precise<T1, T2>::type
- >::apply(a, b, detail::equals_default_policy());
-}
-
-template <typename T1, typename T2>
-inline bool equals_with_epsilon(T1 const& a, T2 const& b)
-{
- return detail::equals_with_epsilon
- <
- typename select_most_precise<T1, T2>::type
- >::apply(a, b, detail::equals_default_policy());
-}
-
-template <typename T1, typename T2>
-inline bool smaller(T1 const& a, T2 const& b)
-{
- return detail::smaller
- <
- typename select_most_precise<T1, T2>::type
- >::apply(a, b);
-}
-
-template <typename T1, typename T2>
-inline bool larger(T1 const& a, T2 const& b)
-{
- return detail::smaller
- <
- typename select_most_precise<T1, T2>::type
- >::apply(b, a);
-}
-
-template <typename T1, typename T2>
-inline bool smaller_or_equals(T1 const& a, T2 const& b)
-{
- return detail::smaller_or_equals
- <
- typename select_most_precise<T1, T2>::type
- >::apply(a, b);
-}
-
-template <typename T1, typename T2>
-inline bool larger_or_equals(T1 const& a, T2 const& b)
-{
- return detail::smaller_or_equals
- <
- typename select_most_precise<T1, T2>::type
- >::apply(b, a);
-}
-
-
-template <typename T>
-inline T d2r()
-{
- static T const conversion_coefficient = geometry::math::pi<T>() / T(180.0);
- return conversion_coefficient;
-}
-
-template <typename T>
-inline T r2d()
-{
- static T const conversion_coefficient = T(180.0) / geometry::math::pi<T>();
- return conversion_coefficient;
-}
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail {
-
-template <typename DegreeOrRadian>
-struct as_radian
-{
- template <typename T>
- static inline T apply(T const& value)
- {
- return value;
- }
-};
-
-template <>
-struct as_radian<degree>
-{
- template <typename T>
- static inline T apply(T const& value)
- {
- return value * d2r<T>();
- }
-};
-
-template <typename DegreeOrRadian>
-struct from_radian
-{
- template <typename T>
- static inline T apply(T const& value)
- {
- return value;
- }
-};
-
-template <>
-struct from_radian<degree>
-{
- template <typename T>
- static inline T apply(T const& value)
- {
- return value * r2d<T>();
- }
-};
-
-} // namespace detail
-#endif
-
-template <typename DegreeOrRadian, typename T>
-inline T as_radian(T const& value)
-{
- return detail::as_radian<DegreeOrRadian>::apply(value);
-}
-
-template <typename DegreeOrRadian, typename T>
-inline T from_radian(T const& value)
-{
- return detail::from_radian<DegreeOrRadian>::apply(value);
-}
-
-
-/*!
- \brief Calculates the haversine of an angle
- \ingroup utility
- \note See http://en.wikipedia.org/wiki/Haversine_formula
- haversin(alpha) = sin2(alpha/2)
-*/
-template <typename T>
-inline T hav(T const& theta)
-{
- T const half = T(0.5);
- T const sn = sin(half * theta);
- return sn * sn;
-}
-
-/*!
-\brief Short utility to return the square
-\ingroup utility
-\param value Value to calculate the square from
-\return The squared value
-*/
-template <typename T>
-inline T sqr(T const& value)
-{
- return value * value;
-}
-
-/*!
-\brief Short utility to return the square root
-\ingroup utility
-\param value Value to calculate the square root from
-\return The square root value
-*/
-template <typename T>
-inline typename detail::square_root<T>::return_type
-sqrt(T const& value)
-{
- return detail::square_root
- <
- T, boost::is_fundamental<T>::value
- >::apply(value);
-}
-
-/*!
-\brief Short utility to return the modulo of two values
-\ingroup utility
-\param value1 First value
-\param value2 Second value
-\return The result of the modulo operation on the (ordered) pair
-(value1, value2)
-*/
-template <typename T>
-inline typename detail::modulo<T>::return_type
-mod(T const& value1, T const& value2)
-{
- return detail::modulo
- <
- T, boost::is_fundamental<T>::value
- >::apply(value1, value2);
-}
-
-/*!
-\brief Short utility to workaround gcc/clang problem that abs is converting to integer
- and that older versions of MSVC does not support abs of long long...
-\ingroup utility
-*/
-template<typename T>
-inline T abs(T const& value)
-{
- return detail::abs<T>::apply(value);
-}
-
-/*!
-\brief Short utility to calculate the sign of a number: -1 (negative), 0 (zero), 1 (positive)
-\ingroup utility
-*/
-template <typename T>
-inline int sign(T const& value)
-{
- T const zero = T();
- return value > zero ? 1 : value < zero ? -1 : 0;
-}
-
-/*!
-\brief Short utility to cast a value possibly rounding it to the nearest
- integral value.
-\ingroup utility
-\note If the source T is NOT an integral type and Result is an integral type
- the value is rounded towards the closest integral value. Otherwise it's
- casted without rounding.
-*/
-template <typename Result, typename T>
-inline Result rounding_cast(T const& v)
-{
- return detail::rounding_cast<Result, T>::apply(v);
-}
-
-} // namespace math
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_UTIL_MATH_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/normalize_spheroidal_box_coordinates.hpp b/contrib/restricted/boost/boost/geometry/util/normalize_spheroidal_box_coordinates.hpp
deleted file mode 100644
index fc0a636c2da..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/normalize_spheroidal_box_coordinates.hpp
+++ /dev/null
@@ -1,196 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_UTIL_NORMALIZE_SPHEROIDAL_BOX_COORDINATES_HPP
-#define BOOST_GEOMETRY_UTIL_NORMALIZE_SPHEROIDAL_BOX_COORDINATES_HPP
-
-#ifdef __GNUC__
-#pragma GCC system_header
-#endif
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/util/math.hpp>
-#include <boost/geometry/util/normalize_spheroidal_coordinates.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace math
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-template <typename Units, typename CoordinateType, bool IsEquatorial = true>
-class normalize_spheroidal_box_coordinates
-{
-private:
- typedef normalize_spheroidal_coordinates<Units, CoordinateType> normalize;
- typedef constants_on_spheroid<CoordinateType, Units> constants;
-
- static inline bool is_band(CoordinateType const& longitude1,
- CoordinateType const& longitude2)
- {
- return ! math::smaller(math::abs(longitude1 - longitude2),
- constants::period());
- }
-
-public:
- static inline void apply(CoordinateType& longitude1,
- CoordinateType& latitude1,
- CoordinateType& longitude2,
- CoordinateType& latitude2,
- bool band)
- {
- normalize::apply(longitude1, latitude1, false);
- normalize::apply(longitude2, latitude2, false);
-
- latitude_convert_if_polar<Units, IsEquatorial>::apply(latitude1);
- latitude_convert_if_polar<Units, IsEquatorial>::apply(latitude2);
-
- if (math::equals(latitude1, constants::min_latitude())
- && math::equals(latitude2, constants::min_latitude()))
- {
- // box degenerates to the south pole
- longitude1 = longitude2 = CoordinateType(0);
- }
- else if (math::equals(latitude1, constants::max_latitude())
- && math::equals(latitude2, constants::max_latitude()))
- {
- // box degenerates to the north pole
- longitude1 = longitude2 = CoordinateType(0);
- }
- else if (band)
- {
- // the box is a band between two small circles (parallel
- // to the equator) on the spheroid
- longitude1 = constants::min_longitude();
- longitude2 = constants::max_longitude();
- }
- else if (longitude1 > longitude2)
- {
- // the box crosses the antimeridian, so we need to adjust
- // the longitudes
- longitude2 += constants::period();
- }
-
- latitude_convert_if_polar<Units, IsEquatorial>::apply(latitude1);
- latitude_convert_if_polar<Units, IsEquatorial>::apply(latitude2);
-
-#ifdef BOOST_GEOMETRY_NORMALIZE_LATITUDE
- BOOST_GEOMETRY_ASSERT(! math::larger(latitude1, latitude2));
- BOOST_GEOMETRY_ASSERT(! math::smaller(latitude1, constants::min_latitude()));
- BOOST_GEOMETRY_ASSERT(! math::larger(latitude2, constants::max_latitude()));
-#endif
-
- BOOST_GEOMETRY_ASSERT(! math::larger(longitude1, longitude2));
- BOOST_GEOMETRY_ASSERT(! math::smaller(longitude1, constants::min_longitude()));
- BOOST_GEOMETRY_ASSERT
- (! math::larger(longitude2 - longitude1, constants::period()));
- }
-
- static inline void apply(CoordinateType& longitude1,
- CoordinateType& latitude1,
- CoordinateType& longitude2,
- CoordinateType& latitude2)
- {
- bool const band = is_band(longitude1, longitude2);
-
- apply(longitude1, latitude1, longitude2, latitude2, band);
- }
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief Short utility to normalize the coordinates of a box on a spheroid
-\tparam Units The units of the coordindate system in the spheroid
-\tparam CoordinateType The type of the coordinates
-\param longitude1 Minimum longitude of the box
-\param latitude1 Minimum latitude of the box
-\param longitude2 Maximum longitude of the box
-\param latitude2 Maximum latitude of the box
-\ingroup utility
-*/
-template <typename Units, typename CoordinateType>
-inline void normalize_spheroidal_box_coordinates(CoordinateType& longitude1,
- CoordinateType& latitude1,
- CoordinateType& longitude2,
- CoordinateType& latitude2)
-{
- detail::normalize_spheroidal_box_coordinates
- <
- Units, CoordinateType
- >::apply(longitude1, latitude1, longitude2, latitude2);
-}
-
-template <typename Units, bool IsEquatorial, typename CoordinateType>
-inline void normalize_spheroidal_box_coordinates(CoordinateType& longitude1,
- CoordinateType& latitude1,
- CoordinateType& longitude2,
- CoordinateType& latitude2)
-{
- detail::normalize_spheroidal_box_coordinates
- <
- Units, CoordinateType, IsEquatorial
- >::apply(longitude1, latitude1, longitude2, latitude2);
-}
-
-/*!
-\brief Short utility to normalize the coordinates of a box on a spheroid
-\tparam Units The units of the coordindate system in the spheroid
-\tparam CoordinateType The type of the coordinates
-\param longitude1 Minimum longitude of the box
-\param latitude1 Minimum latitude of the box
-\param longitude2 Maximum longitude of the box
-\param latitude2 Maximum latitude of the box
-\param band Indicates whether the box should be treated as a band or
- not and avoid the computation done in the other version of the function
-\ingroup utility
-*/
-template <typename Units, typename CoordinateType>
-inline void normalize_spheroidal_box_coordinates(CoordinateType& longitude1,
- CoordinateType& latitude1,
- CoordinateType& longitude2,
- CoordinateType& latitude2,
- bool band)
-{
- detail::normalize_spheroidal_box_coordinates
- <
- Units, CoordinateType
- >::apply(longitude1, latitude1, longitude2, latitude2, band);
-}
-
-template <typename Units, bool IsEquatorial, typename CoordinateType>
-inline void normalize_spheroidal_box_coordinates(CoordinateType& longitude1,
- CoordinateType& latitude1,
- CoordinateType& longitude2,
- CoordinateType& latitude2,
- bool band)
-{
- detail::normalize_spheroidal_box_coordinates
- <
- Units, CoordinateType, IsEquatorial
- >::apply(longitude1, latitude1, longitude2, latitude2, band);
-}
-
-
-} // namespace math
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_UTIL_NORMALIZE_SPHEROIDAL_BOX_COORDINATES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/normalize_spheroidal_coordinates.hpp b/contrib/restricted/boost/boost/geometry/util/normalize_spheroidal_coordinates.hpp
deleted file mode 100644
index 1ef1fd736d0..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/normalize_spheroidal_coordinates.hpp
+++ /dev/null
@@ -1,457 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// Copyright (c) 2015-2017, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifdef __GNUC__
-#pragma GCC system_header
-#endif
-
-#ifndef BOOST_GEOMETRY_UTIL_NORMALIZE_SPHEROIDAL_COORDINATES_HPP
-#define BOOST_GEOMETRY_UTIL_NORMALIZE_SPHEROIDAL_COORDINATES_HPP
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/cs.hpp>
-#include <boost/geometry/util/math.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace math
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-// CoordinateType, radian, true
-template <typename CoordinateType, typename Units, bool IsEquatorial = true>
-struct constants_on_spheroid
-{
- static inline CoordinateType period()
- {
- return math::two_pi<CoordinateType>();
- }
-
- static inline CoordinateType half_period()
- {
- return math::pi<CoordinateType>();
- }
-
- static inline CoordinateType quarter_period()
- {
- static CoordinateType const
- pi_half = math::pi<CoordinateType>() / CoordinateType(2);
- return pi_half;
- }
-
- static inline CoordinateType min_longitude()
- {
- static CoordinateType const minus_pi = -math::pi<CoordinateType>();
- return minus_pi;
- }
-
- static inline CoordinateType max_longitude()
- {
- return math::pi<CoordinateType>();
- }
-
- static inline CoordinateType min_latitude()
- {
- static CoordinateType const minus_half_pi
- = -math::half_pi<CoordinateType>();
- return minus_half_pi;
- }
-
- static inline CoordinateType max_latitude()
- {
- return math::half_pi<CoordinateType>();
- }
-};
-
-template <typename CoordinateType>
-struct constants_on_spheroid<CoordinateType, radian, false>
- : constants_on_spheroid<CoordinateType, radian, true>
-{
- static inline CoordinateType min_latitude()
- {
- return CoordinateType(0);
- }
-
- static inline CoordinateType max_latitude()
- {
- return math::pi<CoordinateType>();
- }
-};
-
-template <typename CoordinateType>
-struct constants_on_spheroid<CoordinateType, degree, true>
-{
- static inline CoordinateType period()
- {
- return CoordinateType(360.0);
- }
-
- static inline CoordinateType half_period()
- {
- return CoordinateType(180.0);
- }
-
- static inline CoordinateType quarter_period()
- {
- return CoordinateType(90.0);
- }
-
- static inline CoordinateType min_longitude()
- {
- return CoordinateType(-180.0);
- }
-
- static inline CoordinateType max_longitude()
- {
- return CoordinateType(180.0);
- }
-
- static inline CoordinateType min_latitude()
- {
- return CoordinateType(-90.0);
- }
-
- static inline CoordinateType max_latitude()
- {
- return CoordinateType(90.0);
- }
-};
-
-template <typename CoordinateType>
-struct constants_on_spheroid<CoordinateType, degree, false>
- : constants_on_spheroid<CoordinateType, degree, true>
-{
- static inline CoordinateType min_latitude()
- {
- return CoordinateType(0);
- }
-
- static inline CoordinateType max_latitude()
- {
- return CoordinateType(180.0);
- }
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-template <typename Units, typename CoordinateType>
-inline CoordinateType latitude_convert_ep(CoordinateType const& lat)
-{
- typedef math::detail::constants_on_spheroid
- <
- CoordinateType,
- Units
- > constants;
-
- return constants::quarter_period() - lat;
-}
-
-
-template <typename Units, bool IsEquatorial, typename T>
-static bool is_latitude_pole(T const& lat)
-{
- typedef math::detail::constants_on_spheroid
- <
- T,
- Units
- > constants;
-
- return math::equals(math::abs(IsEquatorial
- ? lat
- : math::latitude_convert_ep<Units>(lat)),
- constants::quarter_period());
-
-}
-
-
-template <typename Units, typename T>
-static bool is_longitude_antimeridian(T const& lon)
-{
- typedef math::detail::constants_on_spheroid
- <
- T,
- Units
- > constants;
-
- return math::equals(math::abs(lon), constants::half_period());
-
-}
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-
-template <typename Units, bool IsEquatorial>
-struct latitude_convert_if_polar
-{
- template <typename T>
- static inline void apply(T & /*lat*/) {}
-};
-
-template <typename Units>
-struct latitude_convert_if_polar<Units, false>
-{
- template <typename T>
- static inline void apply(T & lat)
- {
- lat = latitude_convert_ep<Units>(lat);
- }
-};
-
-
-template <typename Units, typename CoordinateType, bool IsEquatorial = true>
-class normalize_spheroidal_coordinates
-{
- typedef constants_on_spheroid<CoordinateType, Units> constants;
-
-protected:
- static inline CoordinateType normalize_up(CoordinateType const& value)
- {
- return
- math::mod(value + constants::half_period(), constants::period())
- - constants::half_period();
- }
-
- static inline CoordinateType normalize_down(CoordinateType const& value)
- {
- return
- math::mod(value - constants::half_period(), constants::period())
- + constants::half_period();
- }
-
-public:
- static inline void apply(CoordinateType& longitude)
- {
- // normalize longitude
- if (math::equals(math::abs(longitude), constants::half_period()))
- {
- longitude = constants::half_period();
- }
- else if (longitude > constants::half_period())
- {
- longitude = normalize_up(longitude);
- if (math::equals(longitude, -constants::half_period()))
- {
- longitude = constants::half_period();
- }
- }
- else if (longitude < -constants::half_period())
- {
- longitude = normalize_down(longitude);
- }
- }
-
- static inline void apply(CoordinateType& longitude,
- CoordinateType& latitude,
- bool normalize_poles = true)
- {
- latitude_convert_if_polar<Units, IsEquatorial>::apply(latitude);
-
-#ifdef BOOST_GEOMETRY_NORMALIZE_LATITUDE
- // normalize latitude
- if (math::larger(latitude, constants::half_period()))
- {
- latitude = normalize_up(latitude);
- }
- else if (math::smaller(latitude, -constants::half_period()))
- {
- latitude = normalize_down(latitude);
- }
-
- // fix latitude range
- if (latitude < constants::min_latitude())
- {
- latitude = -constants::half_period() - latitude;
- longitude -= constants::half_period();
- }
- else if (latitude > constants::max_latitude())
- {
- latitude = constants::half_period() - latitude;
- longitude -= constants::half_period();
- }
-#endif // BOOST_GEOMETRY_NORMALIZE_LATITUDE
-
- // normalize longitude
- apply(longitude);
-
- // finally normalize poles
- if (normalize_poles)
- {
- if (math::equals(math::abs(latitude), constants::max_latitude()))
- {
- // for the north and south pole we set the longitude to 0
- // (works for both radians and degrees)
- longitude = CoordinateType(0);
- }
- }
-
- latitude_convert_if_polar<Units, IsEquatorial>::apply(latitude);
-
-#ifdef BOOST_GEOMETRY_NORMALIZE_LATITUDE
- BOOST_GEOMETRY_ASSERT(! math::larger(constants::min_latitude(), latitude));
- BOOST_GEOMETRY_ASSERT(! math::larger(latitude, constants::max_latitude()));
-#endif // BOOST_GEOMETRY_NORMALIZE_LATITUDE
-
- BOOST_GEOMETRY_ASSERT(math::smaller(constants::min_longitude(), longitude));
- BOOST_GEOMETRY_ASSERT(! math::larger(longitude, constants::max_longitude()));
- }
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief Short utility to normalize the coordinates on a spheroid
-\tparam Units The units of the coordindate system in the spheroid
-\tparam CoordinateType The type of the coordinates
-\param longitude Longitude
-\param latitude Latitude
-\ingroup utility
-*/
-template <typename Units, typename CoordinateType>
-inline void normalize_spheroidal_coordinates(CoordinateType& longitude,
- CoordinateType& latitude)
-{
- detail::normalize_spheroidal_coordinates
- <
- Units, CoordinateType
- >::apply(longitude, latitude);
-}
-
-template <typename Units, bool IsEquatorial, typename CoordinateType>
-inline void normalize_spheroidal_coordinates(CoordinateType& longitude,
- CoordinateType& latitude)
-{
- detail::normalize_spheroidal_coordinates
- <
- Units, CoordinateType, IsEquatorial
- >::apply(longitude, latitude);
-}
-
-/*!
-\brief Short utility to normalize the longitude on a spheroid.
- Note that in general both coordinates should be normalized at once.
- This utility is suitable e.g. for normalization of the difference of longitudes.
-\tparam Units The units of the coordindate system in the spheroid
-\tparam CoordinateType The type of the coordinates
-\param longitude Longitude
-\ingroup utility
-*/
-template <typename Units, typename CoordinateType>
-inline void normalize_longitude(CoordinateType& longitude)
-{
- detail::normalize_spheroidal_coordinates
- <
- Units, CoordinateType
- >::apply(longitude);
-}
-
-
-/*!
-\brief Short utility to calculate difference between two longitudes
- normalized in range (-180, 180].
-\tparam Units The units of the coordindate system in the spheroid
-\tparam CoordinateType The type of the coordinates
-\param longitude1 Longitude 1
-\param longitude2 Longitude 2
-\ingroup utility
-*/
-template <typename Units, typename CoordinateType>
-inline CoordinateType longitude_distance_signed(CoordinateType const& longitude1,
- CoordinateType const& longitude2)
-{
- CoordinateType diff = longitude2 - longitude1;
- math::normalize_longitude<Units, CoordinateType>(diff);
- return diff;
-}
-
-
-/*!
-\brief Short utility to calculate difference between two longitudes
- normalized in range [0, 360).
-\tparam Units The units of the coordindate system in the spheroid
-\tparam CoordinateType The type of the coordinates
-\param longitude1 Longitude 1
-\param longitude2 Longitude 2
-\ingroup utility
-*/
-template <typename Units, typename CoordinateType>
-inline CoordinateType longitude_distance_unsigned(CoordinateType const& longitude1,
- CoordinateType const& longitude2)
-{
- typedef math::detail::constants_on_spheroid
- <
- CoordinateType, Units
- > constants;
-
- CoordinateType const c0 = 0;
- CoordinateType diff = longitude_distance_signed<Units>(longitude1, longitude2);
- if (diff < c0) // (-180, 180] -> [0, 360)
- {
- diff += constants::period();
- }
- return diff;
-}
-
-/*!
-\brief The abs difference between longitudes in range [0, 180].
-\tparam Units The units of the coordindate system in the spheroid
-\tparam CoordinateType The type of the coordinates
-\param longitude1 Longitude 1
-\param longitude2 Longitude 2
-\ingroup utility
-*/
-template <typename Units, typename CoordinateType>
-inline CoordinateType longitude_difference(CoordinateType const& longitude1,
- CoordinateType const& longitude2)
-{
- return math::abs(math::longitude_distance_signed<Units>(longitude1, longitude2));
-}
-
-template <typename Units, typename CoordinateType>
-inline CoordinateType longitude_interval_distance_signed(CoordinateType const& longitude_a1,
- CoordinateType const& longitude_a2,
- CoordinateType const& longitude_b)
-{
- CoordinateType const c0 = 0;
- CoordinateType dist_a12 = longitude_distance_signed<Units>(longitude_a1, longitude_a2);
- CoordinateType dist_a1b = longitude_distance_signed<Units>(longitude_a1, longitude_b);
- if (dist_a12 < c0)
- {
- dist_a12 = -dist_a12;
- dist_a1b = -dist_a1b;
- }
-
- return dist_a1b < c0 ? dist_a1b
- : dist_a1b > dist_a12 ? dist_a1b - dist_a12
- : c0;
-}
-
-
-} // namespace math
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_UTIL_NORMALIZE_SPHEROIDAL_COORDINATES_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/order_as_direction.hpp b/contrib/restricted/boost/boost/geometry/util/order_as_direction.hpp
deleted file mode 100644
index 6895ebf3f1f..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/order_as_direction.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_ORDER_AS_DIRECTION_HPP
-#define BOOST_GEOMETRY_UTIL_ORDER_AS_DIRECTION_HPP
-
-#include <boost/geometry/core/point_order.hpp>
-#include <boost/geometry/views/reversible_view.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-template<order_selector Order>
-struct order_as_direction
-{};
-
-
-template<>
-struct order_as_direction<clockwise>
-{
- static const iterate_direction value = iterate_forward;
-};
-
-
-template<>
-struct order_as_direction<counterclockwise>
-{
- static const iterate_direction value = iterate_reverse;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_UTIL_ORDER_AS_DIRECTION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/parameter_type_of.hpp b/contrib/restricted/boost/boost/geometry/util/parameter_type_of.hpp
deleted file mode 100644
index 731fb55a560..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/parameter_type_of.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_PARAMETER_TYPE_OF_HPP
-#define BOOST_GEOMETRY_UTIL_PARAMETER_TYPE_OF_HPP
-
-
-#include <boost/function_types/function_arity.hpp>
-#include <boost/function_types/is_member_function_pointer.hpp>
-#include <boost/function_types/parameter_types.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/plus.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
-\brief Meta-function selecting a parameter type of a (member) function, by index
-\ingroup utility
- */
-template <typename Method, std::size_t Index>
-struct parameter_type_of
-{
- typedef typename boost::function_types::parameter_types
- <
- Method
- >::type parameter_types;
-
- typedef typename boost::mpl::if_
- <
- boost::function_types::is_member_function_pointer<Method>,
- boost::mpl::int_<1>,
- boost::mpl::int_<0>
- >::type base_index_type;
-
- typedef typename boost::mpl::if_c
- <
- Index == 0,
- base_index_type,
- typename boost::mpl::plus
- <
- base_index_type,
- boost::mpl::int_<Index>
- >::type
- >::type indexed_type;
-
- typedef typename boost::remove_reference
- <
- typename boost::mpl::at
- <
- parameter_types,
- indexed_type
- >::type
- >::type type;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_UTIL_PARAMETER_TYPE_OF_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/promote_floating_point.hpp b/contrib/restricted/boost/boost/geometry/util/promote_floating_point.hpp
deleted file mode 100644
index b84069db1b6..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/promote_floating_point.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_PROMOTE_FLOATING_POINT_HPP
-#define BOOST_GEOMETRY_UTIL_PROMOTE_FLOATING_POINT_HPP
-
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_integral.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
- \brief Meta-function converting, if necessary, to "a floating point" type
- \details
- - if input type is integer, type is double
- - else type is input type
- \ingroup utility
- */
-
-template <typename T, typename PromoteIntegerTo = double>
-struct promote_floating_point
-{
- typedef typename
- boost::mpl::if_
- <
- boost::is_integral<T>,
- PromoteIntegerTo,
- T
- >::type type;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_UTIL_PROMOTE_FLOATING_POINT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/promote_integral.hpp b/contrib/restricted/boost/boost/geometry/util/promote_integral.hpp
deleted file mode 100644
index 6b23403be35..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/promote_integral.hpp
+++ /dev/null
@@ -1,318 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_UTIL_PROMOTE_INTEGRAL_HPP
-#define BOOST_GEOMETRY_UTIL_PROMOTE_INTEGRAL_HPP
-
-// For now deactivate the use of multiprecision integers
-// TODO: activate it later
-#define BOOST_GEOMETRY_NO_MULTIPRECISION_INTEGER
-
-#include <climits>
-#include <cstddef>
-
-#include <boost/mpl/begin.hpp>
-#include <boost/mpl/deref.hpp>
-#include <boost/mpl/end.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/list.hpp>
-#include <boost/mpl/next.hpp>
-#include <boost/mpl/size_t.hpp>
-
-#if !defined(BOOST_GEOMETRY_NO_MULTIPRECISION_INTEGER)
-#include <boost/multiprecision/cpp_int.hpp>
-#endif
-
-#include <boost/type_traits/integral_constant.hpp>
-#include <boost/type_traits/is_fundamental.hpp>
-#include <boost/type_traits/is_integral.hpp>
-#include <boost/type_traits/is_unsigned.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace promote_integral
-{
-
-// meta-function that returns the bit size of a type
-template
-<
- typename T,
- bool IsFundamental = boost::is_fundamental<T>::type::value
->
-struct bit_size
-{};
-
-
-// for fundamental types, just return CHAR_BIT * sizeof(T)
-template <typename T>
-struct bit_size<T, true>
- : boost::mpl::size_t<(CHAR_BIT * sizeof(T))>
-{};
-
-
-#if !defined(BOOST_GEOMETRY_NO_MULTIPRECISION_INTEGER)
-// partial specialization for cpp_int
-template
-<
- unsigned MinSize,
- unsigned MaxSize,
- boost::multiprecision::cpp_integer_type SignType,
- boost::multiprecision::cpp_int_check_type Checked,
- typename Allocator,
- boost::multiprecision::expression_template_option ExpressionTemplates
->
-struct bit_size
- <
- boost::multiprecision::number
- <
- boost::multiprecision::cpp_int_backend
- <
- MinSize, MaxSize, SignType, Checked, Allocator
- >,
- ExpressionTemplates
- >,
- false
- > : boost::mpl::size_t<MaxSize>
-{};
-#endif // BOOST_GEOMETRY_NO_MULTIPRECISION_INTEGER
-
-
-template
-<
- typename T,
- typename Iterator,
- typename EndIterator,
- std::size_t MinSize
->
-struct promote_to_larger
-{
- typedef typename boost::mpl::deref<Iterator>::type current_type;
-
- typedef typename boost::mpl::if_c
- <
- (bit_size<current_type>::type::value >= MinSize),
- current_type,
- typename promote_to_larger
- <
- T,
- typename boost::mpl::next<Iterator>::type,
- EndIterator,
- MinSize
- >::type
- >::type type;
-};
-
-// The following specialization is required to finish the loop over
-// all list elements
-template <typename T, typename EndIterator, std::size_t MinSize>
-struct promote_to_larger<T, EndIterator, EndIterator, MinSize>
-{
- // if promotion fails, keep the number T
- // (and cross fingers that overflow will not occur)
- typedef T type;
-};
-
-}} // namespace detail::promote_integral
-#endif // DOXYGEN_NO_DETAIL
-
-
-
-/*!
- \brief Meta-function to define an integral type with size
- than is (roughly) twice the bit size of T
- \ingroup utility
- \details
- This meta-function tries to promote the fundamental integral type T
- to a another integral type with size (roughly) twice the bit size of T.
-
- To do this, two times the bit size of T is tested against the bit sizes of:
- short, int, long, boost::long_long_type, boost::int128_t
- and the one that first matches is chosen.
-
- For unsigned types the bit size of T is tested against the bit
- sizes of the types above, if T is promoted to a signed type, or
- the bit sizes of
- unsigned short, unsigned int, unsigned long, std::size_t,
- boost::ulong_long_type, boost::uint128_t
- if T is promoted to an unsigned type.
-
- By default an unsigned type is promoted to a signed type.
- This behavior is controlled by the PromoteUnsignedToUnsigned
- boolean template parameter, whose default value is "false".
- To promote an unsigned type to an unsigned type set the value of
- this template parameter to "true".
-
- If the macro BOOST_GEOMETRY_NO_MULTIPRECISION_INTEGER is not
- defined, boost's multiprecision integer cpp_int<> is used as a
- last resort.
-
- If BOOST_GEOMETRY_NO_MULTIPRECISION_INTEGER is defined and an
- appropriate type cannot be detected, the input type is returned as is.
-
- Finally, if the passed type is either a floating-point type or a
- user-defined type it is returned as is.
-
- \note boost::long_long_type and boost::ulong_long_type are
- considered only if the macro BOOST_HAS_LONG_LONG is defined
-
- \note boost::int128_type and boost::uint128_type are considered
- only if the macros BOOST_HAS_INT128 and BOOST_GEOMETRY_ENABLE_INT128
- are defined
-*/
-template
-<
- typename T,
- bool PromoteUnsignedToUnsigned = false,
- bool UseCheckedInteger = false,
- bool IsIntegral = boost::is_integral<T>::type::value
->
-class promote_integral
-{
-private:
- static bool const is_unsigned = boost::is_unsigned<T>::type::value;
-
- typedef detail::promote_integral::bit_size<T> bit_size_type;
-
-#if !defined(BOOST_GEOMETRY_NO_MULTIPRECISION_INTEGER)
- // Define the proper check policy for the multiprecision integer
- typedef typename boost::mpl::if_c
- <
- UseCheckedInteger,
- boost::integral_constant
- <
- boost::multiprecision::cpp_int_check_type,
- boost::multiprecision::checked
- >,
- boost::integral_constant
- <
- boost::multiprecision::cpp_int_check_type,
- boost::multiprecision::unchecked
- >
- >::type check_policy_type;
-
- // Meta-function to get the multiprecision integer type for the
- // given size and sign type (signed/unsigned)
- template
- <
- unsigned int Size,
- boost::multiprecision::cpp_integer_type SignType
- >
- struct multiprecision_integer_type
- {
- typedef boost::multiprecision::number
- <
- boost::multiprecision::cpp_int_backend
- <
- Size,
- Size,
- SignType,
- check_policy_type::value,
- void
- >
- > type;
- };
-#endif
-
- // Define the minimum size (in bits) needed for the promoted type
- // If T is the input type and P the promoted type, then the
- // minimum number of bits for P are (below b stands for the number
- // of bits of T):
- // * if T is unsigned and P is unsigned: 2 * b
- // * if T is signed and P is signed: 2 * b - 1
- // * if T is unsigned and P is signed: 2 * b + 1
- typedef typename boost::mpl::if_c
- <
- (PromoteUnsignedToUnsigned && is_unsigned),
- boost::mpl::size_t<(2 * bit_size_type::value)>,
- typename boost::mpl::if_c
- <
- is_unsigned,
- boost::mpl::size_t<(2 * bit_size_type::value + 1)>,
- boost::mpl::size_t<(2 * bit_size_type::value - 1)>
- >::type
- >::type min_bit_size_type;
-
- // Define the list of signed integral types we are going to use
- // for promotion
- typedef boost::mpl::list
- <
- short, int, long
-#if defined(BOOST_HAS_LONG_LONG)
- , boost::long_long_type
-#endif
-#if defined(BOOST_HAS_INT128) && defined(BOOST_GEOMETRY_ENABLE_INT128)
- , boost::int128_type
-#endif
-#if !defined(BOOST_GEOMETRY_NO_MULTIPRECISION_INTEGER)
- , typename multiprecision_integer_type
- <
- min_bit_size_type::value,
- boost::multiprecision::signed_magnitude
- >::type
-#endif
- > signed_integral_types;
-
- // Define the list of unsigned integral types we are going to use
- // for promotion
- typedef boost::mpl::list
- <
- unsigned short, unsigned int, unsigned long, std::size_t
-#if defined(BOOST_HAS_LONG_LONG)
- , boost::ulong_long_type
-#endif
-#if defined(BOOST_HAS_INT128) && defined(BOOST_GEOMETRY_ENABLE_INT128)
- , boost::uint128_type
-#endif
-#if !defined(BOOST_GEOMETRY_NO_MULTIPRECISION_INTEGER)
- , typename multiprecision_integer_type
- <
- min_bit_size_type::value,
- boost::multiprecision::unsigned_magnitude
- >::type
-#endif
- > unsigned_integral_types;
-
- // Define the list of integral types that will be used for
- // promotion (depending in whether we was to promote unsigned to
- // unsigned or not)
- typedef typename boost::mpl::if_c
- <
- (is_unsigned && PromoteUnsignedToUnsigned),
- unsigned_integral_types,
- signed_integral_types
- >::type integral_types;
-
-public:
- typedef typename detail::promote_integral::promote_to_larger
- <
- T,
- typename boost::mpl::begin<integral_types>::type,
- typename boost::mpl::end<integral_types>::type,
- min_bit_size_type::value
- >::type type;
-};
-
-
-template <typename T, bool PromoteUnsignedToUnsigned, bool UseCheckedInteger>
-class promote_integral
- <
- T, PromoteUnsignedToUnsigned, UseCheckedInteger, false
- >
-{
-public:
- typedef T type;
-};
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_UTIL_PROMOTE_INTEGRAL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/range.hpp b/contrib/restricted/boost/boost/geometry/util/range.hpp
deleted file mode 100644
index 6d49e45fddd..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/range.hpp
+++ /dev/null
@@ -1,423 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-
-// This file was modified by Oracle on 2013, 2014, 2015, 2016.
-// Modifications copyright (c) 2013-2016 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_UTIL_RANGE_HPP
-#define BOOST_GEOMETRY_UTIL_RANGE_HPP
-
-#include <algorithm>
-#include <iterator>
-
-#include <boost/concept_check.hpp>
-#include <boost/config.hpp>
-#include <boost/core/addressof.hpp>
-#include <boost/range/concepts.hpp>
-#include <boost/range/begin.hpp>
-#include <boost/range/end.hpp>
-#include <boost/range/empty.hpp>
-#include <boost/range/difference_type.hpp>
-#include <boost/range/iterator.hpp>
-#include <boost/range/rbegin.hpp>
-#include <boost/range/reference.hpp>
-#include <boost/range/size.hpp>
-#include <boost/range/value_type.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/mutable_range.hpp>
-
-namespace boost { namespace geometry { namespace range {
-
-namespace detail {
-
-// NOTE: For SinglePassRanges pos could iterate over all elements until the i-th element was met.
-
-template <typename RandomAccessRange>
-struct pos
-{
- typedef typename boost::range_iterator<RandomAccessRange>::type iterator;
- typedef typename boost::range_size<RandomAccessRange>::type size_type;
- typedef typename boost::range_difference<RandomAccessRange>::type difference_type;
-
- static inline iterator apply(RandomAccessRange & rng, size_type i)
- {
- BOOST_RANGE_CONCEPT_ASSERT(( boost::RandomAccessRangeConcept<RandomAccessRange> ));
- return boost::begin(rng) + static_cast<difference_type>(i);
- }
-};
-
-} // namespace detail
-
-/*!
-\brief Short utility to conveniently return an iterator of a RandomAccessRange.
-\ingroup utility
-*/
-template <typename RandomAccessRange>
-inline typename boost::range_iterator<RandomAccessRange const>::type
-pos(RandomAccessRange const& rng,
- typename boost::range_size<RandomAccessRange const>::type i)
-{
- BOOST_GEOMETRY_ASSERT(i <= boost::size(rng));
- return detail::pos<RandomAccessRange const>::apply(rng, i);
-}
-
-/*!
-\brief Short utility to conveniently return an iterator of a RandomAccessRange.
-\ingroup utility
-*/
-template <typename RandomAccessRange>
-inline typename boost::range_iterator<RandomAccessRange>::type
-pos(RandomAccessRange & rng,
- typename boost::range_size<RandomAccessRange>::type i)
-{
- BOOST_GEOMETRY_ASSERT(i <= boost::size(rng));
- return detail::pos<RandomAccessRange>::apply(rng, i);
-}
-
-/*!
-\brief Short utility to conveniently return an element of a RandomAccessRange.
-\ingroup utility
-*/
-template <typename RandomAccessRange>
-inline typename boost::range_reference<RandomAccessRange const>::type
-at(RandomAccessRange const& rng,
- typename boost::range_size<RandomAccessRange const>::type i)
-{
- BOOST_GEOMETRY_ASSERT(i < boost::size(rng));
- return * detail::pos<RandomAccessRange const>::apply(rng, i);
-}
-
-/*!
-\brief Short utility to conveniently return an element of a RandomAccessRange.
-\ingroup utility
-*/
-template <typename RandomAccessRange>
-inline typename boost::range_reference<RandomAccessRange>::type
-at(RandomAccessRange & rng,
- typename boost::range_size<RandomAccessRange>::type i)
-{
- BOOST_GEOMETRY_ASSERT(i < boost::size(rng));
- return * detail::pos<RandomAccessRange>::apply(rng, i);
-}
-
-/*!
-\brief Short utility to conveniently return the front element of a Range.
-\ingroup utility
-*/
-template <typename Range>
-inline typename boost::range_reference<Range const>::type
-front(Range const& rng)
-{
- BOOST_GEOMETRY_ASSERT(!boost::empty(rng));
- return *boost::begin(rng);
-}
-
-/*!
-\brief Short utility to conveniently return the front element of a Range.
-\ingroup utility
-*/
-template <typename Range>
-inline typename boost::range_reference<Range>::type
-front(Range & rng)
-{
- BOOST_GEOMETRY_ASSERT(!boost::empty(rng));
- return *boost::begin(rng);
-}
-
-// NOTE: For SinglePassRanges back() could iterate over all elements until the last element is met.
-
-/*!
-\brief Short utility to conveniently return the back element of a BidirectionalRange.
-\ingroup utility
-*/
-template <typename BidirectionalRange>
-inline typename boost::range_reference<BidirectionalRange const>::type
-back(BidirectionalRange const& rng)
-{
- BOOST_RANGE_CONCEPT_ASSERT(( boost::BidirectionalRangeConcept<BidirectionalRange const> ));
- BOOST_GEOMETRY_ASSERT(!boost::empty(rng));
- return *(boost::rbegin(rng));
-}
-
-/*!
-\brief Short utility to conveniently return the back element of a BidirectionalRange.
-\ingroup utility
-*/
-template <typename BidirectionalRange>
-inline typename boost::range_reference<BidirectionalRange>::type
-back(BidirectionalRange & rng)
-{
- BOOST_RANGE_CONCEPT_ASSERT((boost::BidirectionalRangeConcept<BidirectionalRange>));
- BOOST_GEOMETRY_ASSERT(!boost::empty(rng));
- return *(boost::rbegin(rng));
-}
-
-
-/*!
-\brief Short utility to conveniently clear a mutable range.
- It uses traits::clear<>.
-\ingroup utility
-*/
-template <typename Range>
-inline void clear(Range & rng)
-{
- // NOTE: this trait is probably not needed since it could be implemented using resize()
- geometry::traits::clear<Range>::apply(rng);
-}
-
-/*!
-\brief Short utility to conveniently insert a new element at the end of a mutable range.
- It uses boost::geometry::traits::push_back<>.
-\ingroup utility
-*/
-template <typename Range>
-inline void push_back(Range & rng,
- typename boost::range_value<Range>::type const& value)
-{
- geometry::traits::push_back<Range>::apply(rng, value);
-}
-
-/*!
-\brief Short utility to conveniently resize a mutable range.
- It uses boost::geometry::traits::resize<>.
-\ingroup utility
-*/
-template <typename Range>
-inline void resize(Range & rng,
- typename boost::range_size<Range>::type new_size)
-{
- geometry::traits::resize<Range>::apply(rng, new_size);
-}
-
-
-/*!
-\brief Short utility to conveniently remove an element from the back of a mutable range.
- It uses resize().
-\ingroup utility
-*/
-template <typename Range>
-inline void pop_back(Range & rng)
-{
- BOOST_GEOMETRY_ASSERT(!boost::empty(rng));
- range::resize(rng, boost::size(rng) - 1);
-}
-
-namespace detail {
-
-#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
-
-template <typename It,
- typename OutIt,
- bool UseMove = boost::is_convertible
- <
- typename std::iterator_traits<It>::value_type &&,
- typename std::iterator_traits<OutIt>::value_type
- >::value>
-struct copy_or_move_impl
-{
- static inline OutIt apply(It first, It last, OutIt out)
- {
- return std::move(first, last, out);
- }
-};
-
-template <typename It, typename OutIt>
-struct copy_or_move_impl<It, OutIt, false>
-{
- static inline OutIt apply(It first, It last, OutIt out)
- {
- return std::copy(first, last, out);
- }
-};
-
-template <typename It, typename OutIt>
-inline OutIt copy_or_move(It first, It last, OutIt out)
-{
- return copy_or_move_impl<It, OutIt>::apply(first, last, out);
-}
-
-#else
-
-template <typename It, typename OutIt>
-inline OutIt copy_or_move(It first, It last, OutIt out)
-{
- return std::copy(first, last, out);
-}
-
-#endif
-
-} // namespace detail
-
-/*!
-\brief Short utility to conveniently remove an element from a mutable range.
- It uses std::copy() and resize(). Version taking mutable iterators.
-\ingroup utility
-*/
-template <typename Range>
-inline typename boost::range_iterator<Range>::type
-erase(Range & rng,
- typename boost::range_iterator<Range>::type it)
-{
- BOOST_GEOMETRY_ASSERT(!boost::empty(rng));
- BOOST_GEOMETRY_ASSERT(it != boost::end(rng));
-
- typename boost::range_difference<Range>::type const
- d = std::distance(boost::begin(rng), it);
-
- typename boost::range_iterator<Range>::type
- next = it;
- ++next;
-
- detail::copy_or_move(next, boost::end(rng), it);
- range::resize(rng, boost::size(rng) - 1);
-
- // NOTE: In general this should be sufficient:
- // return it;
- // But in MSVC using the returned iterator causes
- // assertion failures when iterator debugging is enabled
- // Furthermore the code below should work in the case if resize()
- // invalidates iterators when the container is resized down.
- return boost::begin(rng) + d;
-}
-
-/*!
-\brief Short utility to conveniently remove an element from a mutable range.
- It uses std::copy() and resize(). Version taking non-mutable iterators.
-\ingroup utility
-*/
-template <typename Range>
-inline typename boost::range_iterator<Range>::type
-erase(Range & rng,
- typename boost::range_iterator<Range const>::type cit)
-{
- BOOST_RANGE_CONCEPT_ASSERT(( boost::RandomAccessRangeConcept<Range> ));
-
- typename boost::range_iterator<Range>::type
- it = boost::begin(rng)
- + std::distance(boost::const_begin(rng), cit);
-
- return erase(rng, it);
-}
-
-/*!
-\brief Short utility to conveniently remove a range of elements from a mutable range.
- It uses std::copy() and resize(). Version taking mutable iterators.
-\ingroup utility
-*/
-template <typename Range>
-inline typename boost::range_iterator<Range>::type
-erase(Range & rng,
- typename boost::range_iterator<Range>::type first,
- typename boost::range_iterator<Range>::type last)
-{
- typename boost::range_difference<Range>::type const
- diff = std::distance(first, last);
- BOOST_GEOMETRY_ASSERT(diff >= 0);
-
- std::size_t const count = static_cast<std::size_t>(diff);
- BOOST_GEOMETRY_ASSERT(count <= boost::size(rng));
-
- if ( count > 0 )
- {
- typename boost::range_difference<Range>::type const
- d = std::distance(boost::begin(rng), first);
-
- detail::copy_or_move(last, boost::end(rng), first);
- range::resize(rng, boost::size(rng) - count);
-
- // NOTE: In general this should be sufficient:
- // return first;
- // But in MSVC using the returned iterator causes
- // assertion failures when iterator debugging is enabled
- // Furthermore the code below should work in the case if resize()
- // invalidates iterators when the container is resized down.
- return boost::begin(rng) + d;
- }
-
- return first;
-}
-
-/*!
-\brief Short utility to conveniently remove a range of elements from a mutable range.
- It uses std::copy() and resize(). Version taking non-mutable iterators.
-\ingroup utility
-*/
-template <typename Range>
-inline typename boost::range_iterator<Range>::type
-erase(Range & rng,
- typename boost::range_iterator<Range const>::type cfirst,
- typename boost::range_iterator<Range const>::type clast)
-{
- BOOST_RANGE_CONCEPT_ASSERT(( boost::RandomAccessRangeConcept<Range> ));
-
- typename boost::range_iterator<Range>::type
- first = boost::begin(rng)
- + std::distance(boost::const_begin(rng), cfirst);
- typename boost::range_iterator<Range>::type
- last = boost::begin(rng)
- + std::distance(boost::const_begin(rng), clast);
-
- return erase(rng, first, last);
-}
-
-// back_inserter
-
-template <class Container>
-class back_insert_iterator
-{
-public:
- typedef std::output_iterator_tag iterator_category;
- typedef void value_type;
- typedef void difference_type;
- typedef void pointer;
- typedef void reference;
-
- typedef Container container_type;
-
- explicit back_insert_iterator(Container & c)
- : container(boost::addressof(c))
- {}
-
- back_insert_iterator & operator=(typename Container::value_type const& value)
- {
- range::push_back(*container, value);
- return *this;
- }
-
- back_insert_iterator & operator* ()
- {
- return *this;
- }
-
- back_insert_iterator & operator++ ()
- {
- return *this;
- }
-
- back_insert_iterator operator++(int)
- {
- return *this;
- }
-
-private:
- Container * container;
-};
-
-template <typename Range>
-inline back_insert_iterator<Range> back_inserter(Range & rng)
-{
- return back_insert_iterator<Range>(rng);
-}
-
-}}} // namespace boost::geometry::range
-
-#endif // BOOST_GEOMETRY_UTIL_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/rational.hpp b/contrib/restricted/boost/boost/geometry/util/rational.hpp
deleted file mode 100644
index 2e8b751ad90..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/rational.hpp
+++ /dev/null
@@ -1,179 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2011-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2011-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_RATIONAL_HPP
-#define BOOST_GEOMETRY_UTIL_RATIONAL_HPP
-
-#include <boost/rational.hpp>
-#include <boost/numeric/conversion/bounds.hpp>
-
-#include <boost/geometry/util/coordinate_cast.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost{ namespace geometry
-{
-
-
-// Specialize for Boost.Geometry's coordinate cast
-// (from string to coordinate type)
-namespace detail
-{
-
-template <typename T>
-struct coordinate_cast<rational<T> >
-{
- static inline void split_parts(std::string const& source, std::string::size_type p,
- T& before, T& after, bool& negate, std::string::size_type& len)
- {
- std::string before_part = source.substr(0, p);
- std::string const after_part = source.substr(p + 1);
-
- negate = false;
-
- if (before_part.size() > 0 && before_part[0] == '-')
- {
- negate = true;
- before_part.erase(0, 1);
- }
- before = atol(before_part.c_str());
- after = atol(after_part.c_str());
- len = after_part.length();
- }
-
-
- static inline rational<T> apply(std::string const& source)
- {
- T before, after;
- bool negate;
- std::string::size_type len;
-
- // Note: decimal comma is not (yet) supported, it does (and should) not
- // occur in a WKT, where points are comma separated.
- std::string::size_type p = source.find('.');
- if (p == std::string::npos)
- {
- p = source.find('/');
- if (p == std::string::npos)
- {
- return rational<T>(atol(source.c_str()));
- }
- split_parts(source, p, before, after, negate, len);
-
- return negate
- ? -rational<T>(before, after)
- : rational<T>(before, after)
- ;
-
- }
-
- split_parts(source, p, before, after, negate, len);
-
- T den = 1;
- for (std::string::size_type i = 0; i < len; i++)
- {
- den *= 10;
- }
-
- return negate
- ? -rational<T>(before) - rational<T>(after, den)
- : rational<T>(before) + rational<T>(after, den)
- ;
- }
-};
-
-} // namespace detail
-
-// Specialize for Boost.Geometry's select_most_precise
-template <typename T1, typename T2>
-struct select_most_precise<boost::rational<T1>, boost::rational<T2> >
-{
- typedef typename boost::rational
- <
- typename select_most_precise<T1, T2>::type
- > type;
-};
-
-template <typename T>
-struct select_most_precise<boost::rational<T>, double>
-{
- typedef typename boost::rational<T> type;
-};
-
-
-}} // namespace boost::geometry
-
-
-// Specializes boost::rational to boost::numeric::bounds
-namespace boost { namespace numeric
-{
-
-template<class T>
-struct bounds<rational<T> >
-{
- static inline rational<T> lowest()
- {
- return rational<T>(bounds<T>::lowest(), 1);
- }
- static inline rational<T> highest()
- {
- return rational<T>(bounds<T>::highest(), 1);
- }
-};
-
-}} // namespace boost::numeric
-
-
-// Support for boost::numeric_cast to int and to double (necessary for SVG-mapper)
-namespace boost { namespace numeric
-{
-
-template
-<
- typename T,
- typename Traits,
- typename OverflowHandler,
- typename Float2IntRounder,
- typename RawConverter,
- typename UserRangeChecker
->
-struct converter<int, rational<T>, Traits, OverflowHandler, Float2IntRounder, RawConverter, UserRangeChecker>
-{
- static inline int convert(rational<T> const& arg)
- {
- return int(rational_cast<double>(arg));
- }
-};
-
-template
-<
- typename T,
- typename Traits,
- typename OverflowHandler,
- typename Float2IntRounder,
- typename RawConverter,
- typename UserRangeChecker
->
-struct converter<double, rational<T>, Traits, OverflowHandler, Float2IntRounder, RawConverter, UserRangeChecker>
-{
- static inline double convert(rational<T> const& arg)
- {
- return rational_cast<double>(arg);
- }
-};
-
-
-}}
-
-
-#endif // BOOST_GEOMETRY_UTIL_RATIONAL_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/select_calculation_type.hpp b/contrib/restricted/boost/boost/geometry/util/select_calculation_type.hpp
deleted file mode 100644
index b6405831eb6..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/select_calculation_type.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_SELECT_CALCULATION_TYPE_HPP
-#define BOOST_GEOMETRY_UTIL_SELECT_CALCULATION_TYPE_HPP
-
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_void.hpp>
-
-#include <boost/geometry/util/select_coordinate_type.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
- \brief Meta-function selecting the "calculation" type
- \details Based on two input geometry types, and an input calculation type,
- (which defaults to void in the calling function), this meta-function
- selects the most appropriate:
- - if calculation type is specified, that one is used,
- - if it is void, the most precise of the two points is used
- \ingroup utility
- */
-template <typename Geometry1, typename Geometry2, typename CalculationType>
-struct select_calculation_type
-{
- typedef typename
- boost::mpl::if_
- <
- boost::is_void<CalculationType>,
- typename select_coordinate_type
- <
- Geometry1,
- Geometry2
- >::type,
- CalculationType
- >::type type;
-};
-
-// alternative version supporting more than 2 Geometries
-
-template <typename CalculationType,
- typename Geometry1,
- typename Geometry2 = void,
- typename Geometry3 = void>
-struct select_calculation_type_alt
-{
- typedef typename
- boost::mpl::if_
- <
- boost::is_void<CalculationType>,
- typename select_coordinate_type
- <
- Geometry1,
- Geometry2,
- Geometry3
- >::type,
- CalculationType
- >::type type;
-};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_UTIL_SELECT_CALCULATION_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/select_coordinate_type.hpp b/contrib/restricted/boost/boost/geometry/util/select_coordinate_type.hpp
deleted file mode 100644
index 12a6b72a733..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/select_coordinate_type.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_SELECT_COORDINATE_TYPE_HPP
-#define BOOST_GEOMETRY_UTIL_SELECT_COORDINATE_TYPE_HPP
-
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
- \brief Meta-function selecting the most precise coordinate type
- of two geometries
- \ingroup utility
- */
-template <typename T1, typename T2 = void, typename T3 = void>
-struct select_coordinate_type
-{
- typedef typename select_most_precise
- <
- typename coordinate_type<T1>::type,
- typename coordinate_type<T2>::type,
- typename coordinate_type<T3>::type
- >::type type;
-};
-
-template <typename T1, typename T2>
-struct select_coordinate_type<T1, T2, void>
-{
- typedef typename select_most_precise
- <
- typename coordinate_type<T1>::type,
- typename coordinate_type<T2>::type
- >::type type;
-};
-
-template <typename T1>
-struct select_coordinate_type<T1, void, void>
-{
- typedef typename select_most_precise
- <
- typename coordinate_type<T1>::type
- >::type type;
-};
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_UTIL_SELECT_COORDINATE_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/select_most_precise.hpp b/contrib/restricted/boost/boost/geometry/util/select_most_precise.hpp
deleted file mode 100644
index 3169f5fa17e..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/select_most_precise.hpp
+++ /dev/null
@@ -1,182 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014 Oracle and/or its affiliates.
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_SELECT_MOST_PRECISE_HPP
-#define BOOST_GEOMETRY_UTIL_SELECT_MOST_PRECISE_HPP
-
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_floating_point.hpp>
-#include <boost/type_traits/is_fundamental.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-
-namespace detail { namespace select_most_precise
-{
-
-
-// At least one of the types is non-fundamental. Take that one.
-// if both are non-fundamental, the type-to-be-selected
-// is unknown, it should be defined by explicit specialization.
-template <bool Fundamental1, bool Fundamental2, typename T1, typename T2>
-struct select_non_fundamental
-{
- typedef T1 type;
-};
-
-template <typename T1, typename T2>
-struct select_non_fundamental<true, false, T1, T2>
-{
- typedef T2 type;
-};
-
-template <typename T1, typename T2>
-struct select_non_fundamental<false, true, T1, T2>
-{
- typedef T1 type;
-};
-
-
-// Selection of largest type (e.g. int of <short int,int>
-// It defaults takes the first one, if second is larger, take the second one
-template <bool SecondLarger, typename T1, typename T2>
-struct select_largest
-{
- typedef T1 type;
-};
-
-template <typename T1, typename T2>
-struct select_largest<true, T1, T2>
-{
- typedef T2 type;
-};
-
-
-
-// Selection of floating point and specializations:
-// both FP or both !FP does never occur...
-template <bool FP1, bool FP2, typename T1, typename T2>
-struct select_floating_point
-{
- typedef char type;
-};
-
-
-// ... so if ONE but not both of these types is floating point, take that one
-template <typename T1, typename T2>
-struct select_floating_point<true, false, T1, T2>
-{
- typedef T1 type;
-};
-
-
-template <typename T1, typename T2>
-struct select_floating_point<false, true, T1, T2>
-{
- typedef T2 type;
-};
-
-
-}} // namespace detail::select_most_precise
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
- \brief Meta-function to select, of two types, the most accurate type for
- calculations
- \ingroup utility
- \details select_most_precise classes, compares two types on compile time.
- For example, if an addition must be done with a double and an integer, the
- result must be a double.
- If both types are integer, the result can be an integer.
- \note It is different from the "promote" class, already in boost. That
- class promotes e.g. a (one) float to a double. This class selects a
- type from two types. It takes the most accurate, but does not promote
- afterwards.
- \note This traits class is completely independant from GGL and might be a
- separate addition to Boost
- \note If the input is a non-fundamental type, it might be a calculation
- type such as a GMP-value or another high precision value. Therefore,
- if one is non-fundamental, that one is chosen.
- \note If both types are non-fundamental, the result is indeterminate and
- currently the first one is chosen.
-*/
-template <typename T1, typename T2 = void, typename T3 = void>
-struct select_most_precise
-{
- typedef typename select_most_precise
- <
- typename select_most_precise<T1, T2>::type,
- T3
- >::type type;
-};
-
-template <typename T1, typename T2>
-struct select_most_precise<T1, T2, void>
-{
- static const bool second_larger = sizeof(T2) > sizeof(T1);
- static const bool one_not_fundamental = !
- (boost::is_fundamental<T1>::type::value
- && boost::is_fundamental<T2>::type::value);
-
- static const bool both_same =
- boost::is_floating_point<T1>::type::value
- == boost::is_floating_point<T2>::type::value;
-
- typedef typename boost::mpl::if_c
- <
- one_not_fundamental,
- typename detail::select_most_precise::select_non_fundamental
- <
- boost::is_fundamental<T1>::type::value,
- boost::is_fundamental<T2>::type::value,
- T1,
- T2
- >::type,
- typename boost::mpl::if_c
- <
- both_same,
- typename detail::select_most_precise::select_largest
- <
- second_larger,
- T1,
- T2
- >::type,
- typename detail::select_most_precise::select_floating_point
- <
- boost::is_floating_point<T1>::type::value,
- boost::is_floating_point<T2>::type::value,
- T1,
- T2
- >::type
- >::type
- >::type type;
-};
-
-template <typename T1>
-struct select_most_precise<T1, void, void>
-{
- typedef T1 type;
-};
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_UTIL_SELECT_MOST_PRECISE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/util/select_sequence_element.hpp b/contrib/restricted/boost/boost/geometry/util/select_sequence_element.hpp
deleted file mode 100644
index 3f1ff685278..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/select_sequence_element.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-// Boost.Geometry
-
-// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
-
-// 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 BOOST_GEOMETRY_UTIL_SELECT_SEQUENCE_ELEMENT
-#define BOOST_GEOMETRY_UTIL_SELECT_SEQUENCE_ELEMENT
-
-
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/int.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/size.hpp>
-
-#include <boost/type_traits/is_same.hpp>
-
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/util/select_most_precise.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-namespace util
-{
-
-template <typename Curr, typename Next>
-struct pred_more_precise_coordinate_type
-{
- typedef typename geometry::coordinate_type<Curr>::type curr_coord_t;
- typedef typename geometry::coordinate_type<Next>::type next_coord_t;
-
- typedef typename boost::mpl::if_c
- <
- boost::is_same
- <
- curr_coord_t,
- typename select_most_precise
- <
- curr_coord_t,
- next_coord_t
- >::type
- >::value,
- Curr,
- Next
- >::type type;
-};
-
-template
-<
- typename Seq,
- template<typename, typename> class Pred = pred_more_precise_coordinate_type,
- int I = 0,
- int N = boost::mpl::size<Seq>::value
->
-struct select_sequence_element
-{
- typedef typename boost::mpl::at<Seq, boost::mpl::int_<I> >::type curr_t;
- typedef typename select_sequence_element<Seq, Pred, I+1, N>::type next_t;
-
- typedef typename Pred<curr_t, next_t>::type type;
-};
-
-template <typename Seq, template<typename, typename> class Pred, int N>
-struct select_sequence_element<Seq, Pred, N, N>
-{
- typedef typename boost::mpl::at<Seq, boost::mpl::int_<N-1> >::type type;
-};
-
-} // namespace util
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_UTIL_SELECT_SEQUENCE_ELEMENT
diff --git a/contrib/restricted/boost/boost/geometry/util/transform_variant.hpp b/contrib/restricted/boost/boost/geometry/util/transform_variant.hpp
deleted file mode 100644
index f0836bcbf26..00000000000
--- a/contrib/restricted/boost/boost/geometry/util/transform_variant.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_UTIL_TRANSFORM_VARIANT_HPP
-#define BOOST_GEOMETRY_UTIL_TRANSFORM_VARIANT_HPP
-
-
-#include <boost/mpl/transform.hpp>
-#include <boost/variant/variant_fwd.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
- \brief Meta-function that takes a Sequence type, an MPL lambda
- expression and an optional Inserter and returns a variant type over
- the same types as the initial variant type, each transformed using
- the lambda expression.
- \ingroup utility
- \par Example
- \code
- typedef boost::mpl::vector<int, float, long> types;
- typedef transform_variant<types, add_pointer<_> > transformed;
- typedef variant<int*, float*, long*> result;
- BOOST_MPL_ASSERT(( equal<result, transformed> ));
- \endcode
-*/
-template <typename Sequence, typename Op, typename In = boost::mpl::na>
-struct transform_variant:
- make_variant_over<
- typename boost::mpl::transform<
- Sequence,
- Op,
- In
- >::type
- >
-{};
-
-
-/*!
- \brief Meta-function that takes a boost::variant type and an MPL lambda
- expression and returns a variant type over the same types as the
- initial variant type, each transformed using the lambda expression.
- \ingroup utility
- \par Example
- \code
- typedef variant<int, float, long> variant_type;
- typedef transform_variant<variant_type, add_pointer<_> > transformed;
- typedef variant<int*, float*, long*> result;
- BOOST_MPL_ASSERT(( equal<result, transformed> ));
- \endcode
-*/
-template <BOOST_VARIANT_ENUM_PARAMS(typename T), typename Op>
-struct transform_variant<variant<BOOST_VARIANT_ENUM_PARAMS(T)>, Op, boost::mpl::na> :
- make_variant_over<
- typename boost::mpl::transform<
- typename variant<BOOST_VARIANT_ENUM_PARAMS(T)>::types,
- Op
- >::type
- >
-{};
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_UTIL_TRANSFORM_VARIANT_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/box_view.hpp b/contrib/restricted/boost/boost/geometry/views/box_view.hpp
deleted file mode 100644
index 4ecb941ec9f..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/box_view.hpp
+++ /dev/null
@@ -1,118 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_VIEWS_BOX_VIEW_HPP
-#define BOOST_GEOMETRY_VIEWS_BOX_VIEW_HPP
-
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/views/detail/points_view.hpp>
-#include <boost/geometry/algorithms/assign.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
-\brief Makes a box behave like a ring or a range
-\details Adapts a box to the Boost.Range concept, enabling the user to iterating
- box corners. The box_view is registered as a Ring Concept
-\tparam Box \tparam_geometry{Box}
-\tparam Clockwise If true, walks in clockwise direction, otherwise
- it walks in counterclockwise direction
-\ingroup views
-
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_ring Ring Concept]
-}
-
-\qbk{[include reference/views/box_view.qbk]}
-*/
-template <typename Box, bool Clockwise = true>
-struct box_view
- : public detail::points_view
- <
- typename geometry::point_type<Box>::type,
- 5
- >
-{
- typedef typename geometry::point_type<Box>::type point_type;
-
- /// Constructor accepting the box to adapt
- explicit box_view(Box const& box)
- : detail::points_view<point_type, 5>(copy_policy(box))
- {}
-
-private :
-
- class copy_policy
- {
- public :
- inline copy_policy(Box const& box)
- : m_box(box)
- {}
-
- inline void apply(point_type* points) const
- {
- // assign_box_corners_oriented requires a range
- // an alternative for this workaround would be to pass a range here,
- // e.g. use boost::array in points_view instead of c-array
- std::pair<point_type*, point_type*> rng = std::make_pair(points, points + 5);
- detail::assign_box_corners_oriented<!Clockwise>(m_box, rng);
- points[4] = points[0];
- }
- private :
- Box const& m_box;
- };
-
-};
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-// All views on boxes are handled as rings
-namespace traits
-{
-
-template<typename Box, bool Clockwise>
-struct tag<box_view<Box, Clockwise> >
-{
- typedef ring_tag type;
-};
-
-template<typename Box>
-struct point_order<box_view<Box, false> >
-{
- static order_selector const value = counterclockwise;
-};
-
-
-template<typename Box>
-struct point_order<box_view<Box, true> >
-{
- static order_selector const value = clockwise;
-};
-
-}
-
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_VIEWS_BOX_VIEW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/closeable_view.hpp b/contrib/restricted/boost/boost/geometry/views/closeable_view.hpp
deleted file mode 100644
index 1f1eb2720bf..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/closeable_view.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_VIEWS_CLOSEABLE_VIEW_HPP
-#define BOOST_GEOMETRY_VIEWS_CLOSEABLE_VIEW_HPP
-
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/iterators/closing_iterator.hpp>
-
-#include <boost/geometry/views/identity_view.hpp>
-
-namespace boost { namespace geometry
-{
-
-// Silence warning C4512: assignment operator could not be generated
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4512)
-#endif
-
-#ifndef DOXYGEN_NO_DETAIL
-
-namespace detail
-{
-
-template <typename Range>
-struct closing_view
-{
- // Keep this explicit, important for nested views/ranges
- explicit inline closing_view(Range& r)
- : m_range(r)
- {}
-
- typedef closing_iterator<Range> iterator;
- typedef closing_iterator<Range const> const_iterator;
-
- inline const_iterator begin() const { return const_iterator(m_range); }
- inline const_iterator end() const { return const_iterator(m_range, true); }
-
- inline iterator begin() { return iterator(m_range); }
- inline iterator end() { return iterator(m_range, true); }
-private :
- Range& m_range;
-};
-
-}
-
-#endif // DOXYGEN_NO_DETAIL
-
-
-/*!
-\brief View on a range, either closing it or leaving it as it is
-\details The closeable_view is used internally by the library to handle all rings,
- either closed or open, the same way. The default method is closed, all
- algorithms process rings as if they are closed. Therefore, if they are opened,
- a view is created which closes them.
- The closeable_view might be used by library users, but its main purpose is
- internally.
-\tparam Range Original range
-\tparam Close Specifies if it the range is closed, if so, nothing will happen.
- If it is open, it will iterate the first point after the last point.
-\ingroup views
-*/
-template <typename Range, closure_selector Close>
-struct closeable_view {};
-
-
-#ifndef DOXYGEN_NO_SPECIALIZATIONS
-
-template <typename Range>
-struct closeable_view<Range, closed>
-{
- typedef identity_view<Range> type;
-};
-
-
-template <typename Range>
-struct closeable_view<Range, open>
-{
- typedef detail::closing_view<Range> type;
-};
-
-#endif // DOXYGEN_NO_SPECIALIZATIONS
-
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_VIEWS_CLOSEABLE_VIEW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/detail/boundary_view.hpp b/contrib/restricted/boost/boost/geometry/views/detail/boundary_view.hpp
deleted file mode 100644
index 43bd5b202d6..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/detail/boundary_view.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_VIEWS_DETAIL_BOUNDARY_VIEW_HPP
-#define BOOST_GEOMETRY_VIEWS_DETAIL_BOUNDARY_VIEW_HPP
-
-#include <boost/geometry/views/detail/boundary_view/interface.hpp>
-#include <boost/geometry/views/detail/boundary_view/implementation.hpp>
-
-#endif // BOOST_GEOMETRY_VIEWS_DETAIL_BOUNDARY_VIEW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/detail/boundary_view/implementation.hpp b/contrib/restricted/boost/boost/geometry/views/detail/boundary_view/implementation.hpp
deleted file mode 100644
index 971a6fe002a..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/detail/boundary_view/implementation.hpp
+++ /dev/null
@@ -1,465 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_VIEWS_DETAIL_BOUNDARY_VIEW_IMPLEMENTATION_HPP
-#define BOOST_GEOMETRY_VIEWS_DETAIL_BOUNDARY_VIEW_IMPLEMENTATION_HPP
-
-#include <cstddef>
-#include <algorithm>
-#include <iterator>
-#include <memory>
-#include <new>
-#include <utility>
-#include <vector>
-
-#include <boost/core/addressof.hpp>
-#include <boost/iterator/iterator_facade.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/range.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-#include <boost/type_traits/remove_reference.hpp>
-
-#include <boost/geometry/core/assert.hpp>
-#include <boost/geometry/core/closure.hpp>
-#include <boost/geometry/core/exterior_ring.hpp>
-#include <boost/geometry/core/interior_rings.hpp>
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/iterators/flatten_iterator.hpp>
-
-#include <boost/geometry/util/range.hpp>
-
-#include <boost/geometry/views/closeable_view.hpp>
-
-#include <boost/geometry/algorithms/num_interior_rings.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail { namespace boundary_views
-{
-
-
-template
-<
- typename Polygon,
- typename Value = typename ring_type<Polygon>::type,
- typename Reference = typename ring_return_type<Polygon>::type,
- typename Difference = typename boost::range_difference
- <
- typename boost::remove_reference
- <
- typename interior_return_type<Polygon>::type
- >::type
- >::type
->
-class polygon_rings_iterator
- : public boost::iterator_facade
- <
- polygon_rings_iterator<Polygon, Value, Reference, Difference>,
- Value,
- boost::random_access_traversal_tag,
- Reference,
- Difference
- >
-{
- typedef typename boost::range_size
- <
- typename boost::remove_reference
- <
- typename interior_return_type<Polygon>::type
- >::type
- >::type size_type;
-
-public:
- // default constructor
- polygon_rings_iterator()
- : m_polygon(NULL)
- , m_index(0)
- {}
-
- // for begin
- polygon_rings_iterator(Polygon& polygon)
- : m_polygon(boost::addressof(polygon))
- , m_index(0)
- {}
-
- // for end
- polygon_rings_iterator(Polygon& polygon, bool)
- : m_polygon(boost::addressof(polygon))
- , m_index(static_cast<size_type>(num_rings(polygon)))
- {}
-
- template
- <
- typename OtherPolygon,
- typename OtherValue,
- typename OtherReference,
- typename OtherDifference
- >
- polygon_rings_iterator(polygon_rings_iterator
- <
- OtherPolygon,
- OtherValue,
- OtherReference,
- OtherDifference
- > const& other)
- : m_polygon(other.m_polygon)
- , m_index(other.m_index)
- {
- static const bool is_convertible
- = boost::is_convertible<OtherPolygon, Polygon>::value;
-
- BOOST_MPL_ASSERT_MSG((is_convertible),
- NOT_CONVERTIBLE,
- (types<OtherPolygon>));
- }
-
-private:
- friend class boost::iterator_core_access;
-
- template
- <
- typename OtherPolygon,
- typename OtherValue,
- typename OtherReference,
- typename OtherDifference
- >
- friend class polygon_rings_iterator;
-
-
- static inline std::size_t num_rings(Polygon const& polygon)
- {
- return geometry::num_interior_rings(polygon) + 1;
- }
-
- inline Reference dereference() const
- {
- if (m_index == 0)
- {
- return exterior_ring(*m_polygon);
- }
- return range::at(interior_rings(*m_polygon), m_index - 1);
- }
-
- template
- <
- typename OtherPolygon,
- typename OtherValue,
- typename OtherReference,
- typename OtherDifference
- >
- inline bool equal(polygon_rings_iterator
- <
- OtherPolygon,
- OtherValue,
- OtherReference,
- OtherDifference
- > const& other) const
- {
- BOOST_GEOMETRY_ASSERT(m_polygon == other.m_polygon);
- return m_index == other.m_index;
- }
-
- inline void increment()
- {
- ++m_index;
- }
-
- inline void decrement()
- {
- --m_index;
- }
-
- template
- <
- typename OtherPolygon,
- typename OtherValue,
- typename OtherReference,
- typename OtherDifference
- >
- inline Difference distance_to(polygon_rings_iterator
- <
- OtherPolygon,
- OtherValue,
- OtherReference,
- OtherDifference
- > const& other) const
- {
- return static_cast<Difference>(other.m_index)
- - static_cast<Difference>(m_index);
- }
-
- inline void advance(Difference n)
- {
- m_index += n;
- }
-
-private:
- Polygon* m_polygon;
- size_type m_index;
-};
-
-
-template <typename Ring>
-class ring_boundary : closeable_view<Ring, closure<Ring>::value>::type
-{
-private:
- typedef typename closeable_view<Ring, closure<Ring>::value>::type base_type;
-
-public:
- typedef typename base_type::iterator iterator;
- typedef typename base_type::const_iterator const_iterator;
-
- typedef linestring_tag tag_type;
-
- explicit ring_boundary(Ring& ring)
- : base_type(ring) {}
-
- iterator begin() { return base_type::begin(); }
- iterator end() { return base_type::end(); }
- const_iterator begin() const { return base_type::begin(); }
- const_iterator end() const { return base_type::end(); }
-};
-
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct num_rings
-{};
-
-template <typename Polygon>
-struct num_rings<Polygon, polygon_tag>
-{
- static inline std::size_t apply(Polygon const& polygon)
- {
- return geometry::num_interior_rings(polygon) + 1;
- }
-};
-
-template <typename MultiPolygon>
-struct num_rings<MultiPolygon, multi_polygon_tag>
-{
- static inline std::size_t apply(MultiPolygon const& multipolygon)
- {
- return geometry::num_interior_rings(multipolygon)
- + static_cast<std::size_t>(boost::size(multipolygon));
- }
-};
-
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct views_container_initializer
-{};
-
-template <typename Polygon>
-struct views_container_initializer<Polygon, polygon_tag>
-{
- template <typename BoundaryView>
- static inline void apply(Polygon const& polygon, BoundaryView* views)
- {
- typedef polygon_rings_iterator<Polygon> rings_iterator_type;
-
- std::uninitialized_copy(rings_iterator_type(polygon),
- rings_iterator_type(polygon, true),
- views);
- }
-};
-
-template <typename MultiPolygon>
-class views_container_initializer<MultiPolygon, multi_polygon_tag>
-{
- typedef typename boost::mpl::if_
- <
- boost::is_const<MultiPolygon>,
- typename boost::range_value<MultiPolygon>::type const,
- typename boost::range_value<MultiPolygon>::type
- >::type polygon_type;
-
- typedef polygon_rings_iterator<polygon_type> inner_iterator_type;
-
- struct polygon_rings_begin
- {
- static inline inner_iterator_type apply(polygon_type& polygon)
- {
- return inner_iterator_type(polygon);
- }
- };
-
- struct polygon_rings_end
- {
- static inline inner_iterator_type apply(polygon_type& polygon)
- {
- return inner_iterator_type(polygon, true);
- }
- };
-
- typedef flatten_iterator
- <
- typename boost::range_iterator<MultiPolygon>::type,
- inner_iterator_type,
- typename std::iterator_traits<inner_iterator_type>::value_type,
- polygon_rings_begin,
- polygon_rings_end,
- typename std::iterator_traits<inner_iterator_type>::reference
- > rings_iterator_type;
-
-public:
- template <typename BoundaryView>
- static inline void apply(MultiPolygon const& multipolygon,
- BoundaryView* views)
- {
- rings_iterator_type first(boost::begin(multipolygon),
- boost::end(multipolygon));
- rings_iterator_type last(boost::end(multipolygon));
-
- std::uninitialized_copy(first, last, views);
- }
-};
-
-
-template <typename Areal>
-class areal_boundary
-{
- typedef boundary_view<typename ring_type<Areal>::type> boundary_view_type;
- typedef views_container_initializer<Areal> exception_safe_initializer;
-
- template <typename T>
- struct automatic_deallocator
- {
- automatic_deallocator(T* ptr) : m_ptr(ptr) {}
-
- ~automatic_deallocator()
- {
- operator delete(m_ptr);
- }
-
- inline void release() { m_ptr = NULL; }
-
- T* m_ptr;
- };
-
- inline void initialize_views(Areal const& areal)
- {
- // initialize number of rings
- std::size_t n_rings = num_rings<Areal>::apply(areal);
-
- if (n_rings == 0)
- {
- return;
- }
-
- // allocate dynamic memory
- boundary_view_type* views_ptr = static_cast
- <
- boundary_view_type*
- >(operator new(sizeof(boundary_view_type) * n_rings));
-
- // initialize; if exceptions are thrown by constructors
- // they are handled automatically by automatic_deallocator
- automatic_deallocator<boundary_view_type> deallocator(views_ptr);
- exception_safe_initializer::apply(areal, views_ptr);
- deallocator.release();
-
- // now initialize member variables safely
- m_views = views_ptr;
- m_num_rings = n_rings;
- }
-
- // disallow copies and/or assignments
- areal_boundary(areal_boundary const&);
- areal_boundary& operator=(areal_boundary const&);
-
-public:
- typedef boundary_view_type* iterator;
- typedef boundary_view_type const* const_iterator;
-
- typedef multi_linestring_tag tag_type;
-
- explicit areal_boundary(Areal& areal)
- : m_views(NULL)
- , m_num_rings(0)
- {
- initialize_views(areal);
- }
-
- ~areal_boundary()
- {
- boundary_view_type* last = m_views + m_num_rings;
- for (boundary_view_type* it = m_views; it != last; ++it)
- {
- it->~boundary_view_type();
- }
- operator delete(m_views);
- }
-
- inline iterator begin() { return m_views; }
- inline iterator end() { return m_views + m_num_rings; }
- inline const_iterator begin() const { return m_views; }
- inline const_iterator end() const { return m_views + m_num_rings; }
-
-private:
- boundary_view_type* m_views;
- std::size_t m_num_rings;
-};
-
-
-}} // namespace detail::boundary_view
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace detail_dispatch
-{
-
-
-template <typename Ring>
-struct boundary_view<Ring, ring_tag>
- : detail::boundary_views::ring_boundary<Ring>
-{
- explicit boundary_view(Ring& ring)
- : detail::boundary_views::ring_boundary<Ring>(ring)
- {}
-};
-
-template <typename Polygon>
-struct boundary_view<Polygon, polygon_tag>
- : detail::boundary_views::areal_boundary<Polygon>
-{
- explicit boundary_view(Polygon& polygon)
- : detail::boundary_views::areal_boundary<Polygon>(polygon)
- {}
-};
-
-template <typename MultiPolygon>
-struct boundary_view<MultiPolygon, multi_polygon_tag>
- : detail::boundary_views::areal_boundary<MultiPolygon>
-{
- explicit boundary_view(MultiPolygon& multipolygon)
- : detail::boundary_views::areal_boundary
- <
- MultiPolygon
- >(multipolygon)
- {}
-};
-
-
-} // namespace detail_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_VIEWS_DETAIL_BOUNDARY_VIEW_IMPLEMENTATION_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/detail/boundary_view/interface.hpp b/contrib/restricted/boost/boost/geometry/views/detail/boundary_view/interface.hpp
deleted file mode 100644
index 4d0b6d03030..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/detail/boundary_view/interface.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_VIEWS_DETAIL_BOUNDARY_VIEW_INTERFACE_HPP
-#define BOOST_GEOMETRY_VIEWS_DETAIL_BOUNDARY_VIEW_INTERFACE_HPP
-
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace detail_dispatch
-{
-
-template <typename Geometry, typename Tag = typename tag<Geometry>::type>
-struct boundary_view
- : not_implemented<Tag>
-{};
-
-} // namespace detail_dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template <typename Geometry>
-struct boundary_view
- : detail_dispatch::boundary_view<Geometry>
-{
- explicit boundary_view(Geometry& geometry)
- : detail_dispatch::boundary_view<Geometry>(geometry)
- {}
-};
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename Geometry>
-struct tag< geometry::detail::boundary_view<Geometry> >
-{
- typedef typename detail_dispatch::boundary_view
- <
- Geometry
- >::tag_type type;
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-#endif // BOOST_GEOMETRY_VIEWS_DETAIL_BOUNDARY_VIEW_INTERFACE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/detail/indexed_point_view.hpp b/contrib/restricted/boost/boost/geometry/views/detail/indexed_point_view.hpp
deleted file mode 100644
index e5a89c9ae70..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/detail/indexed_point_view.hpp
+++ /dev/null
@@ -1,123 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
-// Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland
-
-// This file was modified by Oracle on 2015.
-// Modifications copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// 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 BOOST_GEOMETRY_VIEWS_DETAIL_INDEXED_POINT_VIEW_HPP
-#define BOOST_GEOMETRY_VIEWS_DETAIL_INDEXED_POINT_VIEW_HPP
-
-#include <cstddef>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/util/math.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace detail
-{
-
-template <typename Geometry, std::size_t Index>
-class indexed_point_view
-{
- indexed_point_view & operator=(indexed_point_view const&);
-
-public:
- typedef typename geometry::point_type<Geometry>::type point_type;
- typedef typename geometry::coordinate_type<Geometry>::type coordinate_type;
-
- indexed_point_view(Geometry & geometry)
- : m_geometry(geometry)
- {}
-
- template <std::size_t Dimension>
- inline coordinate_type get() const
- {
- return geometry::get<Index, Dimension>(m_geometry);
- }
-
- template <std::size_t Dimension>
- inline void set(coordinate_type const& value)
- {
- geometry::set<Index, Dimension>(m_geometry, value);
- }
-
-private:
- Geometry & m_geometry;
-};
-
-}
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-template <typename Geometry, std::size_t Index>
-struct tag< geometry::detail::indexed_point_view<Geometry, Index> >
-{
- typedef point_tag type;
-};
-
-template <typename Geometry, std::size_t Index>
-struct coordinate_type< geometry::detail::indexed_point_view<Geometry, Index> >
-{
- typedef typename geometry::coordinate_type<Geometry>::type type;
-};
-
-template <typename Geometry, std::size_t Index>
-struct coordinate_system
- <
- geometry::detail::indexed_point_view<Geometry, Index>
- >
-{
- typedef typename geometry::coordinate_system<Geometry>::type type;
-};
-
-template <typename Geometry, std::size_t Index>
-struct dimension< geometry::detail::indexed_point_view<Geometry, Index> >
- : geometry::dimension<Geometry>
-{};
-
-template<typename Geometry, std::size_t Index, std::size_t Dimension>
-struct access
- <
- geometry::detail::indexed_point_view<Geometry, Index>, Dimension
- >
-{
- typedef typename geometry::coordinate_type<Geometry>::type coordinate_type;
-
- static inline coordinate_type get(
- geometry::detail::indexed_point_view<Geometry, Index> const& p)
- {
- return p.template get<Dimension>();
- }
-
- static inline void set(
- geometry::detail::indexed_point_view<Geometry, Index> & p,
- coordinate_type const& value)
- {
- p.template set<Dimension>(value);
- }
-};
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_VIEWS_DETAIL_INDEXED_POINT_VIEW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/detail/normalized_view.hpp b/contrib/restricted/boost/boost/geometry/views/detail/normalized_view.hpp
deleted file mode 100644
index 1e9cda9ce2f..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/detail/normalized_view.hpp
+++ /dev/null
@@ -1,117 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// This file was modified by Oracle on 2014.
-// Modifications copyright (c) 2014 Oracle and/or its affiliates.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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)
-
-// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
-
-#ifndef BOOST_GEOMETRY_VIEWS_DETAIL_NORMALIZED_VIEW_HPP
-#define BOOST_GEOMETRY_VIEWS_DETAIL_NORMALIZED_VIEW_HPP
-
-
-#include <boost/range/begin.hpp>
-#include <boost/range/end.hpp>
-#include <boost/range/iterator.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/geometry/views/detail/range_type.hpp>
-#include <boost/geometry/views/reversible_view.hpp>
-#include <boost/geometry/views/closeable_view.hpp>
-#include <boost/geometry/util/order_as_direction.hpp>
-
-namespace boost { namespace geometry {
-
-
-#ifndef DOXYGEN_NO_DETAIL
-
-namespace detail {
-
-template <typename Geometry>
-struct normalized_view
-{
- static const bool is_const = boost::is_const<Geometry>::value;
-
- //typedef typename ring_type<Geometry>::type ring_type;
-
- typedef typename detail::range_type<Geometry>::type range_type;
-
- typedef typename
- boost::mpl::if_c
- <
- is_const,
- range_type const,
- range_type
- >::type range;
-
- typedef typename
- reversible_view
- <
- range,
- order_as_direction
- <
- geometry::point_order<Geometry>::value
- >::value
- >::type reversible_type;
-
- typedef typename
- boost::mpl::if_c
- <
- is_const,
- reversible_type const,
- reversible_type
- >::type reversible;
-
- typedef typename
- closeable_view
- <
- reversible,
- geometry::closure<Geometry>::value
- >::type closeable_type;
-
- typedef typename
- boost::mpl::if_c
- <
- is_const,
- closeable_type const,
- closeable_type
- >::type closeable;
-
- explicit inline normalized_view(range & r)
- : m_reversible(r)
- , m_closeable(m_reversible)
- {}
-
- typedef typename boost::range_iterator<closeable>::type iterator;
- typedef typename boost::range_const_iterator<closeable>::type const_iterator;
-
- inline const_iterator begin() const { return boost::begin(m_closeable); }
- inline const_iterator end() const { return boost::end(m_closeable); }
-
- inline iterator begin() { return boost::begin(m_closeable); }
- inline iterator end() { return boost::end(m_closeable); }
-
-private:
- reversible_type m_reversible;
- closeable_type m_closeable;
-};
-
-} // namespace detail
-
-#endif // DOXYGEN_NO_DETAIL
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_VIEWS_DETAIL_NORMALIZED_VIEW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/detail/points_view.hpp b/contrib/restricted/boost/boost/geometry/views/detail/points_view.hpp
deleted file mode 100644
index c612a387442..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/detail/points_view.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_VIEWS_DETAIL_POINTS_VIEW_HPP
-#define BOOST_GEOMETRY_VIEWS_DETAIL_POINTS_VIEW_HPP
-
-
-#include <boost/range.hpp>
-#include <boost/iterator/iterator_facade.hpp>
-#include <boost/iterator/iterator_categories.hpp>
-
-#include <boost/geometry/core/exception.hpp>
-
-namespace boost { namespace geometry
-{
-
-namespace detail
-{
-
-// Adapts pointer, on points, to a Boost.Range
-template <typename Point, int MaxSize>
-class points_view
-{
- // Iterates over a series of points (indicated by pointer
- // to have it lightweight). Probably there is already an
- // equivalent of this within Boost. If so, TODO: use that one.
- // This used to be "box_iterator" and "segment_iterator".
- // ALTERNATIVE: use boost:array and its iterators
- struct points_iterator
- : public boost::iterator_facade
- <
- points_iterator,
- Point const,
- boost::random_access_traversal_tag
- >
- {
- // Constructor: Begin iterator
- inline points_iterator(Point const* p)
- : m_points(p)
- , m_index(0)
- {}
-
- // Constructor: End iterator
- inline points_iterator(Point const* p, bool)
- : m_points(p)
- , m_index(MaxSize)
- {}
-
- // Constructor: default (for Range Concept checking).
- inline points_iterator()
- : m_points(NULL)
- , m_index(MaxSize)
- {}
-
- typedef std::ptrdiff_t difference_type;
-
- private:
- friend class boost::iterator_core_access;
-
- inline Point const& dereference() const
- {
- if (m_index >= 0 && m_index < MaxSize)
- {
- return m_points[m_index];
- }
-
- // If it index larger (or smaller) return first point
- // (assuming initialized)
- return m_points[0];
- }
-
- inline bool equal(points_iterator const& other) const
- {
- return other.m_index == this->m_index;
- }
-
- inline void increment()
- {
- m_index++;
- }
-
- inline void decrement()
- {
- m_index--;
- }
-
- inline difference_type distance_to(points_iterator const& other) const
- {
- return other.m_index - this->m_index;
- }
-
- inline void advance(difference_type n)
- {
- m_index += n;
- }
-
- Point const* m_points;
- difference_type m_index;
- };
-
-public :
-
- typedef points_iterator const_iterator;
- typedef points_iterator iterator; // must be defined
-
- const_iterator begin() const { return const_iterator(m_points); }
- const_iterator end() const { return const_iterator(m_points, true); }
-
- // It may NOT be used non-const, so commented:
- //iterator begin() { return m_begin; }
- //iterator end() { return m_end; }
-
-protected :
-
- template <typename CopyPolicy>
- explicit points_view(CopyPolicy const& copy)
- {
- copy.apply(m_points);
- }
-
-private :
- // Copy points here - box might define them otherwise
- Point m_points[MaxSize];
-};
-
-}
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_VIEWS_DETAIL_POINTS_VIEW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/detail/range_type.hpp b/contrib/restricted/boost/boost/geometry/views/detail/range_type.hpp
deleted file mode 100644
index fff634c3793..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/detail/range_type.hpp
+++ /dev/null
@@ -1,134 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_VIEWS_DETAIL_RANGE_TYPE_HPP
-#define BOOST_GEOMETRY_VIEWS_DETAIL_RANGE_TYPE_HPP
-
-
-#include <boost/mpl/assert.hpp>
-#include <boost/range/value_type.hpp>
-
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/views/box_view.hpp>
-
-namespace boost { namespace geometry
-{
-
-
-#ifndef DOXYGEN_NO_DISPATCH
-namespace dispatch
-{
-
-
-template <typename Geometry,
- typename Tag = typename tag<Geometry>::type>
-struct range_type
-{
- BOOST_MPL_ASSERT_MSG
- (
- false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE
- , (types<Geometry>)
- );
-};
-
-
-template <typename Geometry>
-struct range_type<Geometry, ring_tag>
-{
- typedef Geometry type;
-};
-
-
-template <typename Geometry>
-struct range_type<Geometry, linestring_tag>
-{
- typedef Geometry type;
-};
-
-
-template <typename Geometry>
-struct range_type<Geometry, polygon_tag>
-{
- typedef typename ring_type<Geometry>::type type;
-};
-
-
-template <typename Geometry>
-struct range_type<Geometry, box_tag>
-{
- typedef box_view<Geometry> type;
-};
-
-
-// multi-point acts itself as a range
-template <typename Geometry>
-struct range_type<Geometry, multi_point_tag>
-{
- typedef Geometry type;
-};
-
-
-template <typename Geometry>
-struct range_type<Geometry, multi_linestring_tag>
-{
- typedef typename boost::range_value<Geometry>::type type;
-};
-
-
-template <typename Geometry>
-struct range_type<Geometry, multi_polygon_tag>
-{
- // Call its single-version
- typedef typename dispatch::range_type
- <
- typename boost::range_value<Geometry>::type
- >::type type;
-};
-
-
-} // namespace dispatch
-#endif // DOXYGEN_NO_DISPATCH
-
-// Will probably be replaced by the more generic "view_as", therefore in detail
-namespace detail
-{
-
-
-/*!
-\brief Meta-function defining a type which is a boost-range.
-\details
-- For linestrings and rings, it defines the type itself.
-- For polygons it defines the ring type.
-- For multi-points, it defines the type itself
-- For multi-polygons and multi-linestrings, it defines the single-version
- (so in the end the linestring and ring-type-of-multi-polygon)
-\ingroup iterators
-*/
-template <typename Geometry>
-struct range_type
-{
- typedef typename dispatch::range_type
- <
- Geometry
- >::type type;
-};
-
-}
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_VIEWS_DETAIL_RANGE_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/detail/two_dimensional_view.hpp b/contrib/restricted/boost/boost/geometry/views/detail/two_dimensional_view.hpp
deleted file mode 100644
index fbd993cafc1..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/detail/two_dimensional_view.hpp
+++ /dev/null
@@ -1,196 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2015, Oracle and/or its affiliates.
-
-// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
-
-// Licensed under the Boost Software License version 1.0.
-// http://www.boost.org/users/license.html
-
-#ifndef BOOST_GEOMETRY_VIEWS_DETAIL_TWO_DIMENSIONAL_VIEW_HPP
-#define BOOST_GEOMETRY_VIEWS_DETAIL_TWO_DIMENSIONAL_VIEW_HPP
-
-#include <cstddef>
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/int.hpp>
-
-#include <boost/geometry/core/access.hpp>
-#include <boost/geometry/core/coordinate_type.hpp>
-#include <boost/geometry/core/coordinate_system.hpp>
-#include <boost/geometry/core/coordinate_dimension.hpp>
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/algorithms/not_implemented.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-#ifndef DOXYGEN_NO_DETAIL
-namespace detail
-{
-
-template
-<
- typename Geometry,
- std::size_t Dimension1 = 0,
- std::size_t Dimension2 = 1,
- typename Tag = typename tag<Geometry>::type
->
-struct two_dimensional_view
- : not_implemented<Tag>
-{};
-
-
-// View that enables to choose two dimensions of a point and see it as
-// a two-dimensional point
-template <typename Point, std::size_t Dimension1, std::size_t Dimension2>
-struct two_dimensional_view<Point, Dimension1, Dimension2, point_tag>
-{
- BOOST_MPL_ASSERT_MSG(
- (Dimension1 < static_cast<std::size_t>(dimension<Point>::value)),
- COORDINATE_DIMENSION1_IS_LARGER_THAN_POINT_DIMENSION,
- (boost::mpl::int_<Dimension1>));
-
- BOOST_MPL_ASSERT_MSG(
- (Dimension2 < static_cast<std::size_t>(dimension<Point>::value)),
- COORDINATE_DIMENSION2_IS_LARGER_THAN_POINT_DIMENSION,
- (boost::mpl::int_<Dimension2>));
-
- two_dimensional_view(Point& point)
- : m_point(point)
- {}
-
- Point& m_point;
-};
-
-
-} // namespace detail
-#endif // DOXYGEN_NO_DETAIL
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-namespace traits
-{
-
-
-template <typename Point, std::size_t Dimension1, std::size_t Dimension2>
-struct tag
- <
- geometry::detail::two_dimensional_view
- <
- Point, Dimension1, Dimension2, point_tag
- >
- >
-{
- typedef point_tag type;
-};
-
-template <typename Point, std::size_t Dimension1, std::size_t Dimension2>
-struct coordinate_system
- <
- geometry::detail::two_dimensional_view
- <
- Point, Dimension1, Dimension2, point_tag
- >
- > : coordinate_system<typename geometry::point_type<Point>::type>
-{};
-
-template <typename Point, std::size_t Dimension1, std::size_t Dimension2>
-struct coordinate_type
- <
- geometry::detail::two_dimensional_view
- <
- Point, Dimension1, Dimension2, point_tag
- >
- > : coordinate_type<typename geometry::point_type<Point>::type>
-{};
-
-template <typename Point, std::size_t Dimension1, std::size_t Dimension2>
-struct dimension
- <
- geometry::detail::two_dimensional_view
- <
- Point, Dimension1, Dimension2, point_tag
- >
- > : boost::mpl::int_<2>
-{};
-
-template <typename Point, std::size_t Dimension1, std::size_t Dimension2>
-struct point_type
- <
- geometry::detail::two_dimensional_view
- <
- Point, Dimension1, Dimension2, point_tag
- >
- >
-{
- typedef typename geometry::point_type<Point>::type type;
-};
-
-
-template <typename Point, std::size_t Dimension1, std::size_t Dimension2>
-struct access
- <
- geometry::detail::two_dimensional_view
- <
- Point, Dimension1, Dimension2, point_tag
- >,
- 0
- >
-{
- typedef typename geometry::coordinate_type<Point>::type coordinate_type;
- typedef geometry::detail::two_dimensional_view
- <
- Point, Dimension1, Dimension2, point_tag
- > view_type;
-
- static inline coordinate_type get(view_type const& view)
- {
- return geometry::get<Dimension1>(view.m_point);
- }
-
- static inline void set(view_type& view, coordinate_type const& value)
- {
- geometry::set<Dimension1>(view.m_point, value);
- }
-};
-
-template <typename Point, std::size_t Dimension1, std::size_t Dimension2>
-struct access
- <
- geometry::detail::two_dimensional_view
- <
- Point, Dimension1, Dimension2, point_tag
- >,
- 1
- >
-{
- typedef typename geometry::coordinate_type<Point>::type coordinate_type;
- typedef geometry::detail::two_dimensional_view
- <
- Point, Dimension1, Dimension2, point_tag
- > view_type;
-
- static inline coordinate_type get(view_type const& view)
- {
- return geometry::get<Dimension2>(view.m_point);
- }
-
- static inline void set(view_type& view, coordinate_type const& value)
- {
- geometry::set<Dimension2>(view.m_point, value);
- }
-};
-
-
-} // namespace traits
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_VIEWS_DETAIL_TWO_DIMENSIONAL_VIEW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/identity_view.hpp b/contrib/restricted/boost/boost/geometry/views/identity_view.hpp
deleted file mode 100644
index 8947ebf6fc0..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/identity_view.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_VIEWS_IDENTITY_VIEW_HPP
-#define BOOST_GEOMETRY_VIEWS_IDENTITY_VIEW_HPP
-
-
-#include <boost/range.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-// Silence warning C4512: assignment operator could not be generated
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4512)
-#endif
-
-/*!
-\brief View on a range, not modifying anything
-\tparam Range original range
-\ingroup views
-*/
-template <typename Range>
-struct identity_view
-{
- typedef typename boost::range_iterator<Range const>::type const_iterator;
- typedef typename boost::range_iterator<Range>::type iterator;
-
- explicit inline identity_view(Range& r)
- : m_range(r)
- {}
-
- inline const_iterator begin() const { return boost::begin(m_range); }
- inline const_iterator end() const { return boost::end(m_range); }
-
- inline iterator begin() { return boost::begin(m_range); }
- inline iterator end() { return boost::end(m_range); }
-private :
- Range& m_range;
-};
-
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_VIEWS_IDENTITY_VIEW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/reversible_view.hpp b/contrib/restricted/boost/boost/geometry/views/reversible_view.hpp
deleted file mode 100644
index ad22136c813..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/reversible_view.hpp
+++ /dev/null
@@ -1,74 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_VIEWS_REVERSIBLE_VIEW_HPP
-#define BOOST_GEOMETRY_VIEWS_REVERSIBLE_VIEW_HPP
-
-
-#include <boost/version.hpp>
-#include <boost/range.hpp>
-#include <boost/range/adaptor/reversed.hpp>
-
-#include <boost/geometry/core/ring_type.hpp>
-#include <boost/geometry/core/tag.hpp>
-#include <boost/geometry/core/tags.hpp>
-
-#include <boost/geometry/views/identity_view.hpp>
-
-namespace boost { namespace geometry
-{
-
-/*!
-\brief Flag for iterating a reversible_view in forward or reverse direction
-\ingroup views
-*/
-enum iterate_direction { iterate_forward, iterate_reverse };
-
-/*!
-\brief View on a range, reversing direction if necessary
-\tparam Range original range
-\tparam Direction direction of iteration
-\ingroup views
-*/
-template <typename Range, iterate_direction Direction>
-struct reversible_view {};
-
-
-
-#ifndef DOXYGEN_NO_SPECIALIZATIONS
-
-template <typename Range>
-struct reversible_view<Range, iterate_forward>
-{
- typedef identity_view<Range> type;
-};
-
-
-template <typename Range>
-struct reversible_view<Range, iterate_reverse>
-{
-#if BOOST_VERSION > 104500
- typedef boost::reversed_range<Range> type;
-#else
- // For older versions of Boost
- typedef boost::range_detail::reverse_range<Range> type;
-#endif
-};
-
-#endif // DOXYGEN_NO_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_VIEWS_REVERSIBLE_VIEW_HPP
diff --git a/contrib/restricted/boost/boost/geometry/views/segment_view.hpp b/contrib/restricted/boost/boost/geometry/views/segment_view.hpp
deleted file mode 100644
index ce676fc4bf2..00000000000
--- a/contrib/restricted/boost/boost/geometry/views/segment_view.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-// Boost.Geometry (aka GGL, Generic Geometry Library)
-
-// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
-// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
-// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
-
-// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
-// (geolib/GGL), copyright (c) 1995-2010 Geodan, 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 BOOST_GEOMETRY_VIEWS_SEGMENT_VIEW_HPP
-#define BOOST_GEOMETRY_VIEWS_SEGMENT_VIEW_HPP
-
-
-#include <boost/range.hpp>
-
-#include <boost/geometry/core/point_type.hpp>
-#include <boost/geometry/views/detail/points_view.hpp>
-#include <boost/geometry/algorithms/assign.hpp>
-
-
-namespace boost { namespace geometry
-{
-
-
-/*!
-\brief Makes a segment behave like a linestring or a range
-\details Adapts a segment to the Boost.Range concept, enabling the user to
- iterate the two segment points. The segment_view is registered as a LineString Concept
-\tparam Segment \tparam_geometry{Segment}
-\ingroup views
-
-\qbk{before.synopsis,
-[heading Model of]
-[link geometry.reference.concepts.concept_linestring LineString Concept]
-}
-
-\qbk{[include reference/views/segment_view.qbk]}
-
-*/
-template <typename Segment>
-struct segment_view
- : public detail::points_view
- <
- typename geometry::point_type<Segment>::type,
- 2
- >
-{
- typedef typename geometry::point_type<Segment>::type point_type;
-
- /// Constructor accepting the segment to adapt
- explicit segment_view(Segment const& segment)
- : detail::points_view<point_type, 2>(copy_policy(segment))
- {}
-
-private :
-
- class copy_policy
- {
- public :
- inline copy_policy(Segment const& segment)
- : m_segment(segment)
- {}
-
- inline void apply(point_type* points) const
- {
- geometry::detail::assign_point_from_index<0>(m_segment, points[0]);
- geometry::detail::assign_point_from_index<1>(m_segment, points[1]);
- }
- private :
- Segment const& m_segment;
- };
-
-};
-
-
-#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-// All segment ranges can be handled as linestrings
-namespace traits
-{
-
-template<typename Segment>
-struct tag<segment_view<Segment> >
-{
- typedef linestring_tag type;
-};
-
-}
-
-#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
-
-
-}} // namespace boost::geometry
-
-
-#endif // BOOST_GEOMETRY_VIEWS_SEGMENT_VIEW_HPP
diff --git a/contrib/restricted/boost/geometry/README.md b/contrib/restricted/boost/geometry/README.md
new file mode 100644
index 00000000000..094a6728309
--- /dev/null
+++ b/contrib/restricted/boost/geometry/README.md
@@ -0,0 +1,26 @@
+# ![Boost.Geometry](doc/other/logo/logo_bkg.png)
+
+Boost.Geometry, part of collection of the [Boost C++ Libraries](http://github.com/boostorg), defines concepts, primitives and algorithms for solving geometry problems.
+
+[![Licence](https://img.shields.io/badge/license-boost-4480cc.png)](http://www.boost.org/LICENSE_1_0.txt)
+[![Documentation](https://img.shields.io/badge/-documentation-4480cc.png)](http://boost.org/libs/geometry)
+[![Wiki](https://img.shields.io/badge/-wiki-4480cc.png)](https://github.com/boostorg/geometry/wiki)
+[![Mailing List](https://img.shields.io/badge/-mailing%20list-4eb899.png)](http://lists.boost.org/geometry/)
+[![Chat](https://badges.gitter.im/boostorg/geometry.png)](https://gitter.im/boostorg/geometry?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+### Test results
+
+@ | Build | Coverage | Regression
+------------|---------------|----------------|------------
+**master** | [![status](https://circleci.com/gh/boostorg/geometry/tree/master.svg?style=shield)](https://circleci.com/gh/boostorg/geometry/tree/master) | [![status](https://coveralls.io/repos/github/boostorg/geometry/badge.svg?branch=master)](https://coveralls.io/github/boostorg/geometry?branch=master) | [![geometry](https://img.shields.io/badge/-geometry-4480cc.png)](http://www.boost.org/development/tests/master/developer/geometry.html) [![index](https://img.shields.io/badge/-index-4480cc.png)](http://www.boost.org/development/tests/master/developer/geometry-index.html)
+**develop** | [![status](https://circleci.com/gh/boostorg/geometry/tree/develop.svg?style=shield)](https://circleci.com/gh/boostorg/geometry/tree/develop) | [![status](https://coveralls.io/repos/github/boostorg/geometry/badge.svg?branch=develop)](https://coveralls.io/github/boostorg/geometry?branch=develop) | [![geometry](https://img.shields.io/badge/-geometry-4480cc.png)](http://www.boost.org/development/tests/develop/developer/geometry.html) [![index](https://img.shields.io/badge/-index-4480cc.png)](http://www.boost.org/development/tests/develop/developer/geometry-index.html) [![extensions](https://img.shields.io/badge/-extensions-4480cc.png)](http://www.boost.org/development/tests/develop/developer/geometry-extensions.html)
+
+### Directories
+
+* **doc** - QuickBook documentation sources
+* **example** - Boost.Geometry examples
+* **_extensions_** - examples and tests for the extensions - _develop branch_
+* **include** - the sourcecode of Boost.Geometry
+* **index** - examples and tests for the Spatial Index
+* **meta** - library metadata
+* **test** - Boost.Geometry unit tests
diff --git a/contrib/restricted/boost/boost/geometry.hpp b/contrib/restricted/boost/geometry/include/boost/geometry/util/readme.txt
index a4756e71463..7a1bf88bebd 100644
--- a/contrib/restricted/boost/boost/geometry.hpp
+++ b/contrib/restricted/boost/geometry/include/boost/geometry/util/readme.txt
@@ -11,9 +11,7 @@
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#ifndef BOOST_GEOMETRY_HPP
-#define BOOST_GEOMETRY_HPP
+This folder contains several headerfiles not fitting in one of the other folders,
+or meta-functions which would fit into boost as a separate trait or utility,
+such as add_const_if_c
-#include <boost/geometry/geometry.hpp>
-
-#endif // BOOST_GEOMETRY_HPP